Skip to content

Commit

Permalink
✨ Rewrite database proxy that supports cloudflare D1.
Browse files Browse the repository at this point in the history
  • Loading branch information
langyo committed Jul 8, 2024
1 parent f343d97 commit b9b3619
Show file tree
Hide file tree
Showing 38 changed files with 224 additions and 942 deletions.
2 changes: 1 addition & 1 deletion examples/guest-side/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ anyhow = "^1"
tokio = { version = "^1", features = ["macros", "rt", "time"] }

sqlparser = "^0.45"
sea-orm = { version = "1.0.0-rc.4", features = ["proxy"] }
sea-orm = { version = "1.0.0-rc.7", features = ["proxy"] }
yew = { version = "^0.21", features = ["ssr"] }
yew-router = "^0.18"

Expand Down
2 changes: 1 addition & 1 deletion examples/host-side/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ serde_json = "^1"
async-std = { version = "^1", features = ["attributes", "tokio1"] }
uuid = "^1"

sea-orm = { version = "1.0.0-rc.4", features = ["proxy"] }
sea-orm = { version = "1.0.0-rc.7", features = ["proxy"] }
gluesql = { version = "^0.15" }
26 changes: 18 additions & 8 deletions packages/database/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,27 @@ uuid = { version = "^1", features = [
'serde',
] }

sea-orm-migration = "1.0.0-rc.4"
sea-orm-migration = "1.0.0-rc.7"
serde = { version = "^1", features = ["derive"] }
serde_json = "^1"
async-std = { version = "^1", features = ["attributes", "tokio1"] }


[dependencies.sea-orm]
features = [
"sqlx-mysql",
"runtime-async-std-rustls",
"with-uuid",
"with-chrono",
"with-json",
features = ["with-uuid", "with-chrono", "with-json"]
version = "1.0.0-rc.7"

[target.'cfg(all(target_arch = "wasm32", not(target_os = "wasi")))'.dependencies]
wasm-bindgen = { version = "0.2.87", optional = true }
wasm-bindgen-futures = { version = "^0.4", optional = true }
worker = { version = "0.3.0", features = ["d1"], optional = true }

[features]
default = ["cloudflare"]
cloudflare = [
"dep:wasm-bindgen",
"dep:wasm-bindgen-futures",
"dep:worker",
"sea-orm/proxy",
"sea-orm/sqlx-sqlite",
]
version = "1.0.0-rc.4"
1 change: 0 additions & 1 deletion packages/database/src/functions/mod.rs

This file was deleted.

9 changes: 0 additions & 9 deletions packages/database/src/functions/user/count.rs

This file was deleted.

15 changes: 0 additions & 15 deletions packages/database/src/functions/user/delete.rs

This file was deleted.

16 changes: 0 additions & 16 deletions packages/database/src/functions/user/filter_by_name.rs

This file was deleted.

21 changes: 0 additions & 21 deletions packages/database/src/functions/user/insert.rs

This file was deleted.

18 changes: 0 additions & 18 deletions packages/database/src/functions/user/list.rs

This file was deleted.

15 changes: 0 additions & 15 deletions packages/database/src/functions/user/mod.rs

This file was deleted.

16 changes: 0 additions & 16 deletions packages/database/src/functions/user/query.rs

This file was deleted.

17 changes: 0 additions & 17 deletions packages/database/src/functions/user/update.rs

This file was deleted.

102 changes: 1 addition & 101 deletions packages/database/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,101 +1 @@
pub mod functions;
pub mod models;

use anyhow::Result;
use async_std::sync::Mutex;
use lazy_static::lazy_static;
use log::info;
use std::{cell::Cell, time::Duration};

use sea_orm::{ConnectOptions, ConnectionTrait, Database, DatabaseConnection, Schema, Statement};

pub struct DatabaseNetworkConfig {
pub host: String,
pub port: u16,
pub username: String,
pub password: String,
pub database: String,
}

pub async fn init(config: DatabaseNetworkConfig) -> Result<()> {
// Connect to the database
let mut opt = ConnectOptions::new(format!(
"mysql://{}:{}@{}:{}/mysql",
config.username, config.password, config.host, config.port
));
opt.max_connections(100)
.min_connections(5)
.connect_timeout(Duration::from_secs(8))
.acquire_timeout(Duration::from_secs(8))
.idle_timeout(Duration::from_secs(8))
.max_lifetime(Duration::from_secs(8))
.sqlx_logging(true)
.sqlx_logging_level(log::LevelFilter::Trace);
let db = Database::connect(opt).await?;
let builder = db.get_database_backend();

// Initialize the database
db.execute(Statement::from_string(
db.get_database_backend(),
format!(
"CREATE DATABASE IF NOT EXISTS {} DEFAULT CHARACTER SET utf8mb4;",
config.database
),
))
.await?;
db.execute(Statement::from_string(
db.get_database_backend(),
format!("USE {}", config.database),
))
.await?;

db.execute(
builder.build(
Schema::new(builder)
.create_table_from_entity(models::channel::Entity)
.if_not_exists(),
),
)
.await?;
db.execute(
builder.build(
Schema::new(builder)
.create_table_from_entity(models::user::Entity)
.if_not_exists(),
),
)
.await?;
db.execute(
builder.build(
Schema::new(builder)
.create_table_from_entity(models::tag::Entity)
.if_not_exists(),
),
)
.await?;
db.execute(
builder.build(
Schema::new(builder)
.create_table_from_entity(models::thread::Entity)
.if_not_exists(),
),
)
.await?;
db.execute(
builder.build(
Schema::new(builder)
.create_table_from_entity(models::post::Entity)
.if_not_exists(),
),
)
.await?;

info!("Database is ready");
DB_CONN.lock().await.replace(db);

Ok(())
}

lazy_static! {
static ref DB_CONN: Mutex<Cell<DatabaseConnection>> = Default::default();
}
pub mod providers;
16 changes: 0 additions & 16 deletions packages/database/src/models/channel.rs

This file was deleted.

5 changes: 0 additions & 5 deletions packages/database/src/models/mod.rs

This file was deleted.

39 changes: 0 additions & 39 deletions packages/database/src/models/post.rs

This file was deleted.

37 changes: 0 additions & 37 deletions packages/database/src/models/tag.rs

This file was deleted.

Loading

0 comments on commit b9b3619

Please sign in to comment.