Skip to content

Commit

Permalink
connect simple methods
Browse files Browse the repository at this point in the history
  • Loading branch information
MikhailNazarov committed Oct 4, 2024
1 parent fba9580 commit 4743588
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 25 deletions.
8 changes: 3 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ This crate provides Sqlx integration for [ydb-rs-sdk](https://github.com/ydb-pla
```rust
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let connection_string = env::var("YDB_CONNECTION_STRING")?;

let pool = YdbPoolOptions::new().connect(&connection_string).await?;
let pool = Ydb::connect_env().await?;
let row: (i32,) = sqlx::query_as("SELECT 1+1").fetch_one(&pool).await?;
assert_eq!(row.0, 2);

Expand All @@ -30,10 +29,9 @@ struct UserInfo {

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let connection_string = env::var("YDB_CONNECTION_STRING")?;
let pool = YdbPoolOptions::new().connect(&connection_string).await?;
let pool = Ydb::connect_env().await?;

let users: Vec<UserInfo> =
let users: Vec<UserInfo> =
sqlx::query_as("SELECT * FROM test2 WHERE age >= $min_age AND age <= $max_age")
.bind(("min_age", 30))
.bind(("max_age", 40))
Expand Down
2 changes: 1 addition & 1 deletion example/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ edition = "2021"
[dependencies]
tokio = { version = "1.22", features = ["full"] }
sqlx = { version = "0.8", features = ["runtime-tokio-rustls"] }
tracing-subscriber = "0.3"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tracing = "0.1"
tracing-log = "0.2"
ydb-sqlx = { path = "../ydb-sqlx" }
Expand Down
28 changes: 11 additions & 17 deletions example/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,17 @@
use std::{env, str::FromStr};
use tracing::info;
use tracing_log::log::LevelFilter;
use tracing_subscriber::{fmt, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
use ydb_sqlx::database::Ydb;

use tracing::{info, Level};

use ydb_sqlx::{connection::YdbConnectOptions, YdbPoolOptions};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenvy::dotenv().ok();
init_logs();
let connection_string = env::var("YDB_CONNECTION_STRING").unwrap_or_else(|_| "grpc://localhost:2136?database=/local".to_string());

let options = YdbConnectOptions::from_str(&connection_string)?
;
//.log_statements(LevelFilter::Info);

let pool = Ydb::connect_env_opts(
|opt|opt.log_statements(LevelFilter::Info)
).await?;

let pool = YdbPoolOptions::new()
.connect_with(options).await?;
let row: (i32,) = sqlx::query_as("SELECT 1+1").fetch_one(&pool).await?;
assert_eq!(row.0, 2);

Expand Down Expand Up @@ -68,10 +64,8 @@ struct UserInfo {
}

fn init_logs() {
let level = env::var("RUST_LOG").unwrap_or("INFO".to_string());
let log_level = Level::from_str(&level).unwrap();
let subscriber = tracing_subscriber::FmtSubscriber::builder()
.with_max_level(log_level)
.finish();
tracing::subscriber::set_global_default(subscriber).expect("Error setting subscriber");
tracing_subscriber::registry()
.with(fmt::layer())
.with(EnvFilter::from_default_env())
.init();
}
17 changes: 17 additions & 0 deletions ydb-sqlx/src/connection/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,22 @@ impl From<&StatsMode> for ydb::QueryStatsMode {

impl YdbConnectOptions{

pub fn from_env() -> Result<Self, sqlx_core::Error> {

let ydb_conn_str = std::env::var("YDB_CONNECTION_STRING").ok();

if let Some(ydb_conn_str) = ydb_conn_str {
return Self::from_url(&url::Url::parse(&ydb_conn_str)
.map_err(|e| sqlx_core::Error::Configuration(e.into()))?);
}

let db_url = std::env::var("DATABASE_URL").map_err(|e| sqlx_core::Error::Configuration(e.into()))?;


Self::from_url(&url::Url::parse(&db_url)
.map_err(|e| sqlx_core::Error::Configuration(e.into()))?)
}

pub fn log_statements(mut self, level: tracing::log::LevelFilter) -> Self {
self.log_settings.log_statements(level);
self
Expand All @@ -148,6 +164,7 @@ impl YdbConnectOptions{
impl ConnectOptions for YdbConnectOptions {
type Connection = YdbConnection;


fn from_url(url: &url::Url) -> Result<Self, sqlx_core::Error> {
Self::from_str(url.as_str())
}
Expand Down
37 changes: 35 additions & 2 deletions ydb-sqlx/src/database.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use sqlx_core::database::{Database, HasStatementCache};
use sqlx_core::{connection::ConnectOptions, database::{Database, HasStatementCache}};

use crate::value::YdbValueRef;
use crate::{connection::YdbConnectOptions, value::YdbValueRef, YdbPool, YdbPoolOptions};

use super::{
arguments::{YdbArgumentBuffer, YdbArguments},
Expand Down Expand Up @@ -46,3 +46,36 @@ impl Database for Ydb {
}

impl HasStatementCache for Ydb {}

impl Ydb {
pub async fn connect_env() -> Result<YdbPool, sqlx_core::Error> {
let options = YdbConnectOptions::from_env()?;
let pool = YdbPoolOptions::new().connect_with(options).await?;
Ok(pool)
}

pub async fn connect_env_opts(opts: impl Fn(YdbConnectOptions)->YdbConnectOptions) -> Result<YdbPool, sqlx_core::Error> {
let options = YdbConnectOptions::from_env()?;
let options = opts(options);
let pool = YdbPoolOptions::new().connect_with(options).await?;
Ok(pool)
}


pub async fn connect(db_url: &str)->Result<YdbPool,sqlx_core::Error>{
let url = url::Url::parse(&db_url)
.map_err(|e| sqlx_core::Error::Configuration(e.into()))?;
let options = YdbConnectOptions::from_url(&url)?;
let pool = YdbPoolOptions::new().connect_with(options).await?;
Ok(pool)
}

pub async fn connect_opts(db_url: &str, opts: impl Fn(YdbConnectOptions)->YdbConnectOptions)->Result<YdbPool,sqlx_core::Error>{
let url = url::Url::parse(&db_url)
.map_err(|e| sqlx_core::Error::Configuration(e.into()))?;
let options = YdbConnectOptions::from_url(&url)?;
let options = opts(options);
let pool = YdbPoolOptions::new().connect_with(options).await?;
Ok(pool)
}
}

0 comments on commit 4743588

Please sign in to comment.