generated from alecodes/base-template
feat: allow to infer database from url connection
This commit is contained in:
parent
a4fe3808de
commit
48a582eb7e
5 changed files with 29 additions and 3 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -1393,6 +1393,7 @@ dependencies = [
|
||||||
"sqlx",
|
"sqlx",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
||||||
|
|
@ -16,3 +16,4 @@ sqlx = { version = "0.8", features = [
|
||||||
] }
|
] }
|
||||||
thiserror = "2.0.11"
|
thiserror = "2.0.11"
|
||||||
tokio = { version = "1.43.0", features = ["full"] }
|
tokio = { version = "1.43.0", features = ["full"] }
|
||||||
|
url = "2.5.4"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
#![allow(dead_code, unused)]
|
#![allow(unused)]
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
use simple_crud::error::Error;
|
use simple_crud::error::Error;
|
||||||
use simple_crud::error::Result;
|
use simple_crud::error::Result;
|
||||||
use simple_crud::sql;
|
use simple_crud::sql;
|
||||||
|
use simple_crud::sql::Database;
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
#[command(version, about, long_about = None)]
|
#[command(version, about, long_about = None)]
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,9 @@ pub enum Error {
|
||||||
#[error("Error in runtime execution: {0}")]
|
#[error("Error in runtime execution: {0}")]
|
||||||
Runtime(&'static str),
|
Runtime(&'static str),
|
||||||
|
|
||||||
|
#[error(transparent)]
|
||||||
|
ParseError(#[from] url::ParseError),
|
||||||
|
|
||||||
#[error("Error parsing database column type: {0}")]
|
#[error("Error parsing database column type: {0}")]
|
||||||
ColumnParse(String),
|
ColumnParse(String),
|
||||||
|
|
||||||
|
|
|
||||||
23
src/sql.rs
23
src/sql.rs
|
|
@ -1,9 +1,28 @@
|
||||||
use crate::error::Result;
|
use clap::ValueEnum;
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
|
use crate::error::{Error, Result};
|
||||||
|
|
||||||
mod postgres;
|
mod postgres;
|
||||||
|
|
||||||
|
#[derive(ValueEnum, Clone)]
|
||||||
|
pub enum Database {
|
||||||
|
Postgres,
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn handle_query(url: String, query: &String) -> Result<()> {
|
pub async fn handle_query(url: String, query: &String) -> Result<()> {
|
||||||
let connector = postgres::PgConnector::new(url).await?;
|
let parse = Url::parse(&url)?;
|
||||||
|
let scheme = parse.scheme();
|
||||||
|
|
||||||
|
let connector = match scheme {
|
||||||
|
"postgresql" => postgres::PgConnector::new(url).await?,
|
||||||
|
&_ => {
|
||||||
|
return Err(Error::Generic(format!(
|
||||||
|
"Database `{}` is not supported",
|
||||||
|
scheme
|
||||||
|
)))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
let rows = connector.query(query).await?;
|
let rows = connector.query(query).await?;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue