feat: allow to infer database from url connection

This commit is contained in:
Alexander Navarro 2025-01-22 16:46:32 -03:00
parent a4fe3808de
commit 48a582eb7e
5 changed files with 29 additions and 3 deletions

1
Cargo.lock generated
View file

@ -1393,6 +1393,7 @@ dependencies = [
"sqlx", "sqlx",
"thiserror", "thiserror",
"tokio", "tokio",
"url",
] ]
[[package]] [[package]]

View file

@ -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"

View file

@ -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)]

View file

@ -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),

View file

@ -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?;