Skip to content

Commit 1830d74

Browse files
committed
Prepare sea-schema-sync
1 parent cb99f4b commit 1830d74

11 files changed

Lines changed: 70 additions & 61 deletions

File tree

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ parser = ["query"]
5656
query = ["def"]
5757
writer = ["def"]
5858
planetscale = []
59+
sync = []
5960
probe = ["query"]
6061
sqlx-dep = ["sqlx"]
6162
sqlx-all = ["sqlx-mysql", "sqlx-postgres", "sqlx-sqlite"]
@@ -113,6 +114,7 @@ runtime-tokio-rustls = [
113114
"sqlx?/runtime-tokio-rustls",
114115
"sea-query-sqlx?/runtime-tokio-rustls",
115116
]
117+
rusqlite = []
116118
with-serde = ["serde"]
117119

118120
# This allows us to develop using a local version of sea-query

src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ pub mod sqlite;
1515
pub use sea_query;
1616

1717
pub(crate) mod parser;
18+
19+
#[cfg(not(feature = "sync"))]
1820
pub mod sqlx_types;
1921
pub(crate) mod util;
2022

src/sqlite/def/column.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ impl ColumnInfo {
2525
let row = row.sqlite();
2626
let col_not_null: i8 = row.get(3);
2727
let is_pk: i8 = row.get(5);
28-
let default_value: &str = row.get(4);
28+
let default_value: Option<String> = row.get(4);
29+
let default_value = default_value.unwrap_or_default();
2930
Ok(ColumnInfo {
3031
cid: row.get(0),
3132
name: row.get(1),
@@ -219,16 +220,16 @@ impl From<SqlxRow> for ForeignKeysInfo {
219220
from: vec![row.get(3)],
220221
to: vec![row.get(4)],
221222
on_update: {
222-
let op: &str = row.get(5);
223-
op.into()
223+
let op: String = row.get(5);
224+
op.as_str().into()
224225
},
225226
on_delete: {
226-
let op: &str = row.get(6);
227-
op.into()
227+
let op: String = row.get(6);
228+
op.as_str().into()
228229
},
229230
r#match: {
230-
let op: &str = row.get(7);
231-
op.into()
231+
let op: String = row.get(7);
232+
op.as_str().into()
232233
},
233234
}
234235
}

src/sqlite/def/types.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use sea_query::{ColumnType, StringLen};
22
use std::num::ParseIntError;
33

4-
pub fn parse_type(data_type: &str) -> Result<ColumnType, ParseIntError> {
4+
pub fn parse_type(data_type: String) -> Result<ColumnType, ParseIntError> {
5+
let data_type = data_type.as_str();
56
let mut type_name = data_type;
67
let mut parts: Vec<u32> = Vec::new();
78
if let Some((prefix, suffix)) = data_type.split_once('(') {

src/sqlite/executor/mod.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1-
#[cfg(feature = "sqlx-sqlite")]
1+
#[cfg(feature = "rusqlite")]
2+
mod rusqlite;
3+
#[cfg(feature = "rusqlite")]
4+
pub use rusqlite::*;
5+
6+
#[cfg(all(feature = "sqlx-sqlite"))]
27
mod real;
3-
#[cfg(feature = "sqlx-sqlite")]
8+
#[cfg(all(feature = "sqlx-sqlite"))]
49
pub use real::*;
510

6-
#[cfg(not(feature = "sqlx-sqlite"))]
11+
#[cfg(all(not(feature = "rusqlite"), not(feature = "sqlx-sqlite")))]
712
mod mock;
8-
#[cfg(not(feature = "sqlx-sqlite"))]
13+
#[cfg(all(not(feature = "rusqlite"), not(feature = "sqlx-sqlite")))]
914
pub use mock::*;

src/sqlite/executor/rusqlite.rs

Whitespace-only changes.

src/sqlx_types/real.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,14 @@ impl SqlxRow {
4646
}
4747
}
4848
}
49+
50+
#[cfg(feature = "sqlx-sqlite")]
51+
pub async fn connect_sqlite(s: &str) -> Result<SqlitePool, SqlxError> {
52+
SqlitePool::connect(s).await
53+
}
54+
55+
#[cfg(feature = "sqlx-sqlite")]
56+
pub async fn execute_sqlite(pool: &SqlitePool, sql: &str) -> Result<(), SqlxError> {
57+
sqlx::query(sql).execute(pool).await?;
58+
Ok(())
59+
}

tests/live/sqlite/Cargo.toml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,7 @@ sea-schema = { path = "../../../", default-features = false, features = [
1818
"sqlite",
1919
] }
2020
serde_json = { version = "1" }
21-
sqlx = { version = "0.8", features = [
22-
"sqlite",
23-
"runtime-async-std-native-tls",
24-
] }
21+
sqlx = { version = "0.8", features = ["sqlite", "runtime-async-std-native-tls"] }
2522
pretty_assertions = { version = "0.7" }
2623
env_logger = { version = "0" }
2724
log = { version = "0" }

tests/live/sqlite/src/main.rs

Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
use pretty_assertions::assert_eq;
2-
use sqlx::SqlitePool;
3-
use sqlx::sqlite::SqlitePoolOptions;
42
use std::collections::HashMap;
53

64
use sea_schema::sea_query::{
75
ColumnDef, Expr, ForeignKey, ForeignKeyAction, ForeignKeyCreateStatement, Index, Query,
86
SqliteQueryBuilder, Table, TableCreateStatement, TableName, TableRef,
97
};
10-
use sea_schema::sqlite::{
11-
def::TableDef,
12-
discovery::{DiscoveryResult, SchemaDiscovery},
8+
use sea_schema::{
9+
sqlite::{
10+
def::TableDef,
11+
discovery::{DiscoveryResult, SchemaDiscovery},
12+
},
13+
sqlx_types::{connect_sqlite, execute_sqlite},
1314
};
1415

1516
#[cfg_attr(test, async_std::test)]
@@ -29,21 +30,18 @@ async fn main() -> DiscoveryResult<()> {
2930
async fn test_001() -> DiscoveryResult<()> {
3031
let url = std::env::var("DATABASE_URL_LIVE").unwrap_or_else(|_| "sqlite::memory:".to_owned());
3132

32-
let sqlite_pool = SqlitePoolOptions::new().connect(&url).await.unwrap();
33+
let pool = connect_sqlite(&url).await.unwrap();
3334

3435
//DROP TABLES to ensure all tests pass
35-
sqlx::query("DROP TABLE IF EXISTS Programming_Langs")
36-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
36+
execute_sqlite(&pool, "DROP TABLE IF EXISTS Programming_Langs")
3737
.await
3838
.unwrap();
3939

40-
sqlx::query("DROP TABLE IF EXISTS suppliers")
41-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
40+
execute_sqlite(&pool, "DROP TABLE IF EXISTS suppliers")
4241
.await
4342
.unwrap();
4443

45-
sqlx::query("DROP TABLE IF EXISTS supplier_groups")
46-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
44+
execute_sqlite(&pool, "DROP TABLE IF EXISTS supplier_groups")
4745
.await
4846
.unwrap();
4947

@@ -99,18 +97,15 @@ async fn test_001() -> DiscoveryResult<()> {
9997
.to_owned();
10098

10199
//DROP TABLES to ensure all tests pass
102-
sqlx::query("DROP TABLE IF EXISTS Programming_Langs")
103-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
100+
execute_sqlite(&pool, "DROP TABLE IF EXISTS Programming_Langs")
104101
.await
105102
.unwrap();
106103

107-
sqlx::query("DROP TABLE IF EXISTS suppliers")
108-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
104+
execute_sqlite(&pool, "DROP TABLE IF EXISTS suppliers")
109105
.await
110106
.unwrap();
111107

112-
sqlx::query("DROP TABLE IF EXISTS supplier_groups")
113-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
108+
execute_sqlite(&pool, "DROP TABLE IF EXISTS supplier_groups")
114109
.await
115110
.unwrap();
116111

@@ -159,47 +154,45 @@ async fn test_001() -> DiscoveryResult<()> {
159154
.unwrap()
160155
.to_owned();
161156

162-
sqlx::query(&create_table.to_string(SqliteQueryBuilder))
163-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
157+
execute_sqlite(&pool, &create_table.to_string(SqliteQueryBuilder))
164158
.await
165159
.unwrap();
166160

167-
sqlx::query(&create_table_inventors.to_string(SqliteQueryBuilder))
168-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
161+
execute_sqlite(&pool, &create_table_inventors.to_string(SqliteQueryBuilder))
169162
.await
170163
.unwrap();
171164

172-
sqlx::query(&insert_into_table.to_string(SqliteQueryBuilder))
173-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
165+
execute_sqlite(&pool, &insert_into_table.to_string(SqliteQueryBuilder))
174166
.await
175167
.unwrap();
176168

177-
sqlx::query(&table_create_supplier_groups.to_string(SqliteQueryBuilder))
178-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
179-
.await
180-
.unwrap();
169+
execute_sqlite(
170+
&pool,
171+
&table_create_supplier_groups.to_string(SqliteQueryBuilder),
172+
)
173+
.await
174+
.unwrap();
181175

182-
sqlx::query(&table_create_suppliers.to_string(SqliteQueryBuilder))
183-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
176+
execute_sqlite(&pool, &table_create_suppliers.to_string(SqliteQueryBuilder))
184177
.await
185178
.unwrap();
186179

187-
sqlx::query(&insert_into_supplier_groups.to_string(SqliteQueryBuilder))
188-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
189-
.await
190-
.unwrap();
180+
execute_sqlite(
181+
&pool,
182+
&insert_into_supplier_groups.to_string(SqliteQueryBuilder),
183+
)
184+
.await
185+
.unwrap();
191186

192-
sqlx::query(&insert_into_suppliers.to_string(SqliteQueryBuilder))
193-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
187+
execute_sqlite(&pool, &insert_into_suppliers.to_string(SqliteQueryBuilder))
194188
.await
195189
.unwrap();
196190

197-
sqlx::query(&create_index.to_string(SqliteQueryBuilder))
198-
.fetch_all(&mut *sqlite_pool.acquire().await.unwrap())
191+
execute_sqlite(&pool, &create_index.to_string(SqliteQueryBuilder))
199192
.await
200193
.unwrap();
201194

202-
let schema = SchemaDiscovery::new(sqlite_pool.clone()).discover().await?;
195+
let schema = SchemaDiscovery::new(pool).discover().await?;
203196

204197
let expected_sql = [
205198
create_table.to_string(SqliteQueryBuilder),
@@ -238,8 +231,7 @@ async fn test_001() -> DiscoveryResult<()> {
238231
async fn test_002() -> DiscoveryResult<()> {
239232
let url = std::env::var("DATABASE_URL_LIVE").unwrap_or_else(|_| "sqlite::memory:".to_owned());
240233

241-
let connection = SqlitePool::connect(&url).await.unwrap();
242-
let mut executor = connection.acquire().await.unwrap();
234+
let connection = connect_sqlite(&url).await.unwrap();
243235

244236
let tbl_create_stmts = vec![
245237
create_bakery_table(),
@@ -256,7 +248,7 @@ async fn test_002() -> DiscoveryResult<()> {
256248

257249
for tbl_create_stmt in tbl_create_stmts.iter() {
258250
let sql = tbl_create_stmt.to_string(SqliteQueryBuilder);
259-
sqlx::query(&sql).execute(&mut *executor).await.unwrap();
251+
execute_sqlite(&connection, &sql).await.unwrap();
260252
}
261253

262254
let schema_discovery = SchemaDiscovery::new(connection);

tests/writer/sqlite/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,3 @@ publish = false
99
async-std = { version = "1.8", features = [ "attributes", "tokio1" ] }
1010
sea-schema = { path = "../../../", default-features = false, features = [ "sqlx-sqlite", "runtime-async-std-native-tls", "discovery", "writer", "debug-print" ] }
1111
serde_json = { version = "1" }
12-
sqlx = { version = "0.8" }

0 commit comments

Comments
 (0)