Skip to content

Commit 40cfa95

Browse files
authored
Add distinct to maria and mysql queries (#141)
* Add distinct to maria and mysql queries - Update test to use specific schema.sql name file per database - Bump version * Some fixes for schema dump
1 parent 61b07ee commit 40cfa95

File tree

8 files changed

+54
-19
lines changed

8 files changed

+54
-19
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "geni"
3-
version = "1.0.11"
3+
version = "1.0.12"
44
edition = "2021"
55
resolver = "2"
66
description = "A standalone database CLI migration tool"

src/lib/database_drivers/libsql.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,18 @@ impl DatabaseDriver for LibSQLDriver {
181181
&mut self,
182182
) -> Pin<Box<dyn Future<Output = Result<(), anyhow::Error>> + '_>> {
183183
let fut = async move {
184+
let schema = r#"
185+
--
186+
-- LibSQL SQL Schema dump automatic generated by geni
187+
--
188+
189+
"#;
190+
let mut schema = schema
191+
.lines()
192+
.map(str::trim_start)
193+
.collect::<Vec<&str>>()
194+
.join("\n");
195+
184196
let mut result = self
185197
.db
186198
.query("SELECT sql FROM sqlite_master", params![])
@@ -199,10 +211,10 @@ impl DatabaseDriver for LibSQLDriver {
199211
}
200212
}
201213

202-
let final_schema = schemas.join("\n");
214+
schema.push_str(schemas.join("\n").as_str());
203215

204216
utils::write_to_schema_file(
205-
final_schema,
217+
schema,
206218
self.migrations_folder.clone(),
207219
self.schema_file.clone(),
208220
)

src/lib/database_drivers/maria.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ impl DatabaseDriver for MariaDBDriver {
193193
let fut = async move {
194194
let schema = r#"
195195
--
196-
-- SQL Schema dump automatic generated by geni
196+
-- Maria SQL Schema dump automatic generated by geni
197197
--
198198
199199
@@ -276,7 +276,7 @@ impl DatabaseDriver for MariaDBDriver {
276276

277277
let constraints: Vec<String> = sqlx::query(
278278
r#"
279-
SELECT
279+
SELECT DISTINCT
280280
CONCAT(
281281
'ALTER TABLE ',
282282
TABLE_NAME,

src/lib/database_drivers/mysql.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ impl DatabaseDriver for MySQLDriver {
193193
let fut = async move {
194194
let schema = r#"
195195
--
196-
-- SQL Schema dump automatic generated by geni
196+
-- MySQL SQL Schema dump automatic generated by geni
197197
--
198198
199199
@@ -276,7 +276,7 @@ impl DatabaseDriver for MySQLDriver {
276276

277277
let constraints: Vec<String> = sqlx::query(
278278
r#"
279-
SELECT
279+
SELECT DISTINCT
280280
CONCAT(
281281
'ALTER TABLE ',
282282
TABLE_NAME,
@@ -294,7 +294,8 @@ impl DatabaseDriver for MySQLDriver {
294294
ELSE ')'
295295
END,
296296
';'
297-
) AS create_constraint_stmt
297+
) AS create_constraint_stmt,
298+
TABLE_NAME
298299
FROM
299300
(
300301
SELECT

src/lib/database_drivers/postgres.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ impl DatabaseDriver for PostgresDriver {
190190
let fut = async move {
191191
let schema = r#"
192192
--
193-
-- SQL Schema dump automatic generated by geni
193+
-- Postgres SQL Schema dump automatic generated by geni
194194
--
195195
196196

src/lib/database_drivers/sqlite.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,18 @@ impl DatabaseDriver for SqliteDriver {
161161
&mut self,
162162
) -> Pin<Box<dyn Future<Output = Result<(), anyhow::Error>> + '_>> {
163163
let fut = async move {
164+
let schema = r#"
165+
--
166+
-- Sqlite SQL Schema dump automatic generated by geni
167+
--
168+
169+
"#;
170+
let mut schema = schema
171+
.lines()
172+
.map(str::trim_start)
173+
.collect::<Vec<&str>>()
174+
.join("\n");
175+
164176
let mut result = self
165177
.db
166178
.query("SELECT sql FROM sqlite_master", params![])
@@ -179,10 +191,10 @@ impl DatabaseDriver for SqliteDriver {
179191
}
180192
}
181193

182-
let final_schema = schemas.join("\n");
194+
schema.push_str(schemas.join("\n").as_str());
183195

184196
utils::write_to_schema_file(
185-
final_schema,
197+
schema,
186198
self.migrations_folder.clone(),
187199
self.schema_file.clone(),
188200
)

src/lib/integration_test.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ mod tests {
99
use anyhow::Ok;
1010
use anyhow::Result;
1111
use chrono::Utc;
12+
use std::env;
1213
use std::fs;
1314
use std::io::Write;
1415
use std::path::Path;
@@ -86,14 +87,17 @@ mod tests {
8687

8788
let database_wait_timeout = 30;
8889

90+
let database_schema_file =
91+
env::var("DATABASE_SCHEMA_FILE").unwrap_or("schema.sql".to_string());
92+
8993
generate_test_migrations(migration_folder_string.to_string()).unwrap();
9094

9195
let mut create_client = database_drivers::new(
9296
url.clone(),
9397
None,
9498
"schema_migrations".to_string(),
9599
migration_folder_string.clone(),
96-
"schema.sql".to_string(),
100+
database_schema_file.clone(),
97101
Some(database_wait_timeout),
98102
false,
99103
)
@@ -112,7 +116,7 @@ mod tests {
112116
None,
113117
"schema_migrations".to_string(),
114118
migration_folder_string.clone(),
115-
"schema.sql".to_string(),
119+
database_schema_file.clone(),
116120
Some(database_wait_timeout),
117121
true,
118122
)
@@ -124,7 +128,7 @@ mod tests {
124128
None,
125129
"schema_migrations".to_string(),
126130
migration_folder_string.clone(),
127-
"schema.sql".to_string(),
131+
database_schema_file.clone(),
128132
Some(database_wait_timeout),
129133
true,
130134
)
@@ -145,7 +149,7 @@ mod tests {
145149
None,
146150
"schema_migrations".to_string(),
147151
migration_folder_string.clone(),
148-
"schema.sql".to_string(),
152+
database_schema_file.clone(),
149153
Some(database_wait_timeout),
150154
false,
151155
&1,
@@ -167,7 +171,7 @@ mod tests {
167171
None,
168172
"schema_migrations".to_string(),
169173
migration_folder_string.clone(),
170-
"schema.sql".to_string(),
174+
database_schema_file.clone(),
171175
Some(database_wait_timeout),
172176
false,
173177
&3,
@@ -184,43 +188,49 @@ mod tests {
184188
2
185189
);
186190

187-
let schema_dump_file = format!("{}/schema.sql", migration_folder_string);
188-
assert!(Path::new(&schema_dump_file).exists());
191+
let schema_dump_file = format!("{}/{}", migration_folder_string, database_schema_file);
192+
let file = Path::new(&schema_dump_file);
193+
assert!(file.exists());
189194

190195
Ok(())
191196
}
192197

193198
#[test]
194199
#[serial]
195200
async fn test_migrate_libsql() -> Result<()> {
201+
env::set_var("DATABASE_SCHEMA_FILE", "libsql_schema.sql");
196202
let url = "http://localhost:6000";
197203
test_migrate(Database::LibSQL, url).await
198204
}
199205

200206
#[test]
201207
#[serial]
202208
async fn test_migrate_postgres() -> Result<()> {
209+
env::set_var("DATABASE_SCHEMA_FILE", "postgres_schema.sql");
203210
let url = "psql://postgres:mysecretpassword@localhost:6437/app?sslmode=disable";
204211
test_migrate(Database::Postgres, url).await
205212
}
206213

207214
#[test]
208215
#[serial]
209216
async fn test_migrate_mysql() -> Result<()> {
217+
env::set_var("DATABASE_SCHEMA_FILE", "mysql_schema.sql");
210218
let url = "mysql://root:password@localhost:3306/app";
211219
test_migrate(Database::MySQL, url).await
212220
}
213221

214222
#[test]
215223
#[serial]
216224
async fn test_migrate_maria() -> Result<()> {
225+
env::set_var("DATABASE_SCHEMA_FILE", "maria_schema.sql");
217226
let url = "mariadb://root:password@localhost:3307/app";
218227
test_migrate(Database::MariaDB, url).await
219228
}
220229

221230
#[test]
222231
#[serial]
223232
async fn test_migrate_sqlite() -> Result<()> {
233+
env::set_var("DATABASE_SCHEMA_FILE", "sqlite_schema.sql");
224234
let tmp_dir = tempdir::TempDir::new("temp_migrate_sqlite_db").unwrap();
225235
let migration_folder = tmp_dir.path();
226236
let migration_folder_string = migration_folder.to_str().unwrap();

0 commit comments

Comments
 (0)