Skip to content

Commit 93fea3e

Browse files
committed
add Target enum and allow Runner to a Target migration
closes #60
1 parent 38c0290 commit 93fea3e

File tree

13 files changed

+355
-36
lines changed

13 files changed

+355
-36
lines changed

.circleci/config.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ orbs:
2424
parameters:
2525
stable:
2626
type: string
27-
default: "1.41"
27+
default: "1.42"
2828
previous:
2929
type: string
30-
default: "1.40"
30+
default: "1.41"
3131
nightly:
3232
type: string
3333
default: "rustlang/rust:nightly"

refinery/src/lib.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,7 @@ for more examples refer to the [examples](https://github.com/rust-db/refinery/tr
3333
*/
3434

3535
pub use refinery_core::config;
36-
pub use refinery_core::{AppliedMigration, AsyncMigrate, Error, Migrate, Migration, Runner};
36+
#[doc(hidden)]
37+
pub use refinery_core::{AppliedMigration, AsyncMigrate, Migrate};
38+
pub use refinery_core::{Error, Migration, Runner, Target};
3739
pub use refinery_macros::{embed_migrations, include_migration_mods};

refinery/tests/mysql.rs

+55-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ mod mysql {
99
use predicates::str::contains;
1010
use refinery::{
1111
config::{migrate_from_config, Config, ConfigDbType},
12-
Error, Migrate, Migration,
12+
Error, Migrate, Migration, Target,
1313
};
1414
use refinery_core::mysql;
1515
use std::process::Command;
@@ -365,7 +365,8 @@ mod mysql {
365365
let migrations = get_migrations();
366366

367367
let mchecksum = migrations[4].checksum();
368-
conn.migrate(&migrations, true, true, false).unwrap();
368+
conn.migrate(&migrations, true, true, false, Target::Latest)
369+
.unwrap();
369370

370371
for _row in conn
371372
.query("SELECT version, checksum FROM refinery_schema_history where version = (SELECT MAX(version) from refinery_schema_history)")
@@ -380,6 +381,53 @@ mod mysql {
380381
});
381382
}
382383

384+
#[test]
385+
fn migrates_to_target_migration() {
386+
run_test(|| {
387+
let pool =
388+
mysql::Pool::new("mysql://refinery:root@localhost:3306/refinery_test").unwrap();
389+
let mut conn = pool.get_conn().unwrap();
390+
391+
embedded::migrations::runner()
392+
.set_target(Target::Version(3))
393+
.run(&mut conn)
394+
.unwrap();
395+
396+
for _row in conn
397+
.query("SELECT version, checksum FROM refinery_schema_history where version = (SELECT MAX(version) from refinery_schema_history)")
398+
.unwrap()
399+
{
400+
let row = _row.unwrap();
401+
let current: i32 = row.get(0).unwrap();
402+
assert_eq!(3, current);
403+
}
404+
});
405+
}
406+
407+
#[test]
408+
fn migrates_to_target_migration_grouped() {
409+
run_test(|| {
410+
let pool =
411+
mysql::Pool::new("mysql://refinery:root@localhost:3306/refinery_test").unwrap();
412+
let mut conn = pool.get_conn().unwrap();
413+
414+
embedded::migrations::runner()
415+
.set_target(Target::Version(3))
416+
.set_grouped(true)
417+
.run(&mut conn)
418+
.unwrap();
419+
420+
for _row in conn
421+
.query("SELECT version, checksum FROM refinery_schema_history where version = (SELECT MAX(version) from refinery_schema_history)")
422+
.unwrap()
423+
{
424+
let row = _row.unwrap();
425+
let current: i32 = row.get(0).unwrap();
426+
assert_eq!(3, current);
427+
}
428+
});
429+
}
430+
383431
#[test]
384432
fn aborts_on_missing_migration_on_filesystem() {
385433
run_test(|| {
@@ -394,7 +442,9 @@ mod mysql {
394442
&"ALTER TABLE cars ADD year INTEGER;",
395443
)
396444
.unwrap();
397-
let err = conn.migrate(&[migration], true, true, false).unwrap_err();
445+
let err = conn
446+
.migrate(&[migration], true, true, false, Target::Latest)
447+
.unwrap_err();
398448

399449
match err {
400450
Error::MissingVersion(missing) => {
@@ -421,7 +471,7 @@ mod mysql {
421471
)
422472
.unwrap();
423473
let err = conn
424-
.migrate(&[migration.clone()], true, false, false)
474+
.migrate(&[migration.clone()], true, false, false, Target::Latest)
425475
.unwrap_err();
426476

427477
match err {
@@ -462,7 +512,7 @@ mod mysql {
462512
)
463513
.unwrap();
464514
let err = conn
465-
.migrate(&[migration1, migration2], true, true, false)
515+
.migrate(&[migration1, migration2], true, true, false, Target::Latest)
466516
.unwrap_err();
467517
match err {
468518
Error::MissingVersion(missing) => {

refinery/tests/mysql_async.rs

+58-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ mod mysql_async {
88
use futures::FutureExt;
99
use refinery::{
1010
config::{migrate_from_config_async, Config, ConfigDbType},
11-
AsyncMigrate, Error, Migration,
11+
AsyncMigrate, Error, Migration, Target,
1212
};
1313
use refinery_core::mysql_async::prelude::Queryable;
1414
use refinery_core::{mysql_async, tokio};
@@ -449,7 +449,7 @@ mod mysql_async {
449449
let migrations = get_migrations();
450450

451451
let mchecksum = migrations[4].checksum();
452-
pool.migrate(&migrations, true, true, false).await.unwrap();
452+
pool.migrate(&migrations, true, true, false, Target::Latest).await.unwrap();
453453

454454
conn
455455
.query("SELECT version, checksum FROM refinery_schema_history where version = (SELECT MAX(version) from refinery_schema_history)")
@@ -468,6 +468,59 @@ mod mysql_async {
468468
}).await;
469469
}
470470

471+
#[tokio::test]
472+
async fn migrates_to_target_migration() {
473+
run_test(async {
474+
let mut pool = mysql_async::Pool::new("mysql://refinery:root@localhost:3306/refinery_test");
475+
let conn = pool.get_conn().await.unwrap();
476+
477+
embedded::migrations::runner()
478+
.set_grouped(true)
479+
.set_target(Target::Version(3))
480+
.run_async(&mut pool)
481+
.await
482+
.unwrap();
483+
484+
conn
485+
.query("SELECT version, checksum FROM refinery_schema_history where version = (SELECT MAX(version) from refinery_schema_history)")
486+
.await
487+
.unwrap()
488+
.for_each(|row| {
489+
let current: i32 = row.get(0).unwrap();
490+
assert_eq!(3, current);
491+
})
492+
.await
493+
.unwrap();
494+
495+
}).await;
496+
}
497+
498+
#[tokio::test]
499+
async fn migrates_to_target_migration_grouped() {
500+
run_test(async {
501+
let mut pool = mysql_async::Pool::new("mysql://refinery:root@localhost:3306/refinery_test");
502+
let conn = pool.get_conn().await.unwrap();
503+
504+
embedded::migrations::runner()
505+
.set_target(Target::Version(3))
506+
.run_async(&mut pool)
507+
.await
508+
.unwrap();
509+
510+
conn
511+
.query("SELECT version, checksum FROM refinery_schema_history where version = (SELECT MAX(version) from refinery_schema_history)")
512+
.await
513+
.unwrap()
514+
.for_each(|row| {
515+
let current: i32 = row.get(0).unwrap();
516+
assert_eq!(3, current);
517+
})
518+
.await
519+
.unwrap();
520+
521+
}).await;
522+
}
523+
471524
#[tokio::test]
472525
async fn aborts_on_missing_migration_on_filesystem() {
473526
run_test(async {
@@ -486,7 +539,7 @@ mod mysql_async {
486539
.unwrap();
487540

488541
let err = pool
489-
.migrate(&[migration.clone()], true, true, false)
542+
.migrate(&[migration.clone()], true, true, false, Target::Latest)
490543
.await
491544
.unwrap_err();
492545

@@ -524,7 +577,7 @@ mod mysql_async {
524577
.unwrap();
525578

526579
let err = pool
527-
.migrate(&[migration.clone()], true, false, false)
580+
.migrate(&[migration.clone()], true, false, false, Target::Latest)
528581
.await
529582
.unwrap_err();
530583

@@ -569,7 +622,7 @@ mod mysql_async {
569622
)
570623
.unwrap();
571624
let err = pool
572-
.migrate(&[migration1, migration2], true, true, false)
625+
.migrate(&[migration1, migration2], true, true, false, Target::Latest)
573626
.await
574627
.unwrap_err();
575628

refinery/tests/postgres.rs

+52-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ mod postgres {
99
use predicates::str::contains;
1010
use refinery::{
1111
config::{migrate_from_config, Config, ConfigDbType},
12-
Error, Migrate, Migration,
12+
Error, Migrate, Migration, Target,
1313
};
1414
use refinery_core::postgres::{Client, NoTls};
1515
use std::process::Command;
@@ -354,7 +354,9 @@ mod postgres {
354354
let migrations = get_migrations();
355355

356356
let mchecksum = migrations[4].checksum();
357-
client.migrate(&migrations, true, true, false).unwrap();
357+
client
358+
.migrate(&migrations, true, true, false, Target::Latest)
359+
.unwrap();
358360

359361
for row in &client
360362
.query("SELECT version, checksum FROM refinery_schema_history where version = (SELECT MAX(version) from refinery_schema_history)", &[])
@@ -368,6 +370,49 @@ mod postgres {
368370
});
369371
}
370372

373+
#[test]
374+
fn migrates_to_target_migration() {
375+
run_test(|| {
376+
let mut client =
377+
Client::connect("postgres://postgres@localhost:5432/postgres", NoTls).unwrap();
378+
379+
embedded::migrations::runner()
380+
.set_target(Target::Version(3))
381+
.run(&mut client)
382+
.unwrap();
383+
384+
for row in &client
385+
.query("SELECT version, checksum FROM refinery_schema_history where version = (SELECT MAX(version) from refinery_schema_history)", &[])
386+
.unwrap()
387+
{
388+
let current: i32 = row.get(0);
389+
assert_eq!(3, current);
390+
}
391+
});
392+
}
393+
394+
#[test]
395+
fn migrates_to_target_migration_grouped() {
396+
run_test(|| {
397+
let mut client =
398+
Client::connect("postgres://postgres@localhost:5432/postgres", NoTls).unwrap();
399+
400+
embedded::migrations::runner()
401+
.set_target(Target::Version(3))
402+
.set_grouped(true)
403+
.run(&mut client)
404+
.unwrap();
405+
406+
for row in &client
407+
.query("SELECT version, checksum FROM refinery_schema_history where version = (SELECT MAX(version) from refinery_schema_history)", &[])
408+
.unwrap()
409+
{
410+
let current: i32 = row.get(0);
411+
assert_eq!(3, current);
412+
}
413+
});
414+
}
415+
371416
#[test]
372417
fn aborts_on_missing_migration_on_filesystem() {
373418
run_test(|| {
@@ -383,7 +428,9 @@ mod postgres {
383428
&"ALTER TABLE cars ADD year INTEGER;",
384429
)
385430
.unwrap();
386-
let err = client.migrate(&[migration], true, true, false).unwrap_err();
431+
let err = client
432+
.migrate(&[migration], true, true, false, Target::Latest)
433+
.unwrap_err();
387434

388435
match err {
389436
Error::MissingVersion(missing) => {
@@ -411,7 +458,7 @@ mod postgres {
411458
)
412459
.unwrap();
413460
let err = client
414-
.migrate(&[migration.clone()], true, false, false)
461+
.migrate(&[migration.clone()], true, false, false, Target::Latest)
415462
.unwrap_err();
416463

417464
match err {
@@ -451,7 +498,7 @@ mod postgres {
451498
)
452499
.unwrap();
453500
let err = client
454-
.migrate(&[migration1, migration2], true, true, false)
501+
.migrate(&[migration1, migration2], true, true, false, Target::Latest)
455502
.unwrap_err();
456503
match err {
457504
Error::MissingVersion(missing) => {

0 commit comments

Comments
 (0)