Skip to content

Commit 6eb3e7b

Browse files
committed
Merge pull request diesel-rs#214 from mcasper/fix_sqlite_output
Fix create_database_if_needed output
2 parents 9f0142c + 5ff0f52 commit 6eb3e7b

2 files changed

Lines changed: 39 additions & 22 deletions

File tree

diesel_cli/src/database.rs

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ use database_error::DatabaseResult;
1212
use std::error::Error;
1313
use std::{env, fs};
1414

15+
use std::path::Path;
16+
1517
// FIXME: Remove the duplicates of this macro once expression level attributes
1618
// are stable (I believe this is in 1.7)
1719
#[cfg(all(feature = "sqlite", feature = "postgres"))]
@@ -78,13 +80,17 @@ fn create_database_if_needed(database_url: &String) -> DatabaseResult<()> {
7880
match backend(database_url) {
7981
"postgres" => {
8082
if PgConnection::establish(database_url).is_err() {
81-
let(database, postgres_url) = split_pg_connection_string(database_url);
82-
try!(create_postgres_database(&postgres_url, &database));
83+
let (database, postgres_url) = split_pg_connection_string(database_url);
84+
println!("Creating database: {}", database);
85+
let conn = try!(PgConnection::establish(&postgres_url));
86+
try!(conn.execute(&format!("CREATE DATABASE {}", database)));
8387
}
8488
},
8589
"sqlite" => {
86-
println!("Creating database: {}", database_url);
87-
try!(SqliteConnection::establish(database_url));
90+
if !Path::new(database_url).exists() {
91+
println!("Creating database: {}", database_url);
92+
try!(SqliteConnection::establish(database_url));
93+
}
8894
},
8995
_ => unreachable!("The backend function should ensure we never get here."),
9096
}
@@ -94,32 +100,24 @@ fn create_database_if_needed(database_url: &String) -> DatabaseResult<()> {
94100

95101
#[cfg(all(feature = "sqlite", not(feature = "postgres")))]
96102
fn create_database_if_needed(database_url: &String) -> DatabaseResult<()> {
97-
println!("Creating database: {}", database_url);
98-
try!(SqliteConnection::establish(database_url));
103+
if !Path::new(database_url).exists() {
104+
println!("Creating database: {}", database_url);
105+
try!(SqliteConnection::establish(database_url));
106+
}
99107
Ok(())
100108
}
101109

102110
#[cfg(all(not(feature = "sqlite"), feature = "postgres"))]
103111
fn create_database_if_needed(database_url: &String) -> DatabaseResult<()> {
104-
println!("Creating database: {}", database_url);
105112
if PgConnection::establish(database_url).is_err() {
106-
let(database, postgres_url) = split_pg_connection_string(database_url);
107-
try!(create_postgres_database(&postgres_url, &database));
113+
let (database, postgres_url) = split_pg_connection_string(database_url);
114+
println!("Creating database: {}", database);
115+
let conn = try!(PgConnection::establish(&postgres_url));
116+
try!(conn.execute(&format!("CREATE DATABASE {}", database)));
108117
}
109118
Ok(())
110119
}
111120

112-
#[cfg(feature = "postgres")]
113-
fn create_postgres_database(database_url: &String, database: &String)
114-
-> DatabaseResult<()>
115-
{
116-
let conn = try!(PgConnection::establish(database_url));
117-
println!("Creating database: {}", database);
118-
try!(conn.execute(&format!("CREATE DATABASE {}", database)));
119-
Ok(())
120-
}
121-
122-
123121
/// Creates the __diesel_schema_migrations table if it doesn't exist. If the
124122
/// table didn't exist, it also runs any pending migrations. Returns a
125123
/// `DatabaseError::ConnectionError` if it can't create the table, and exits

diesel_cli/tests/setup.rs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ fn setup_creates_database() {
1111
let result = p.command("setup").run();
1212

1313
assert!(result.is_success(), "Result was unsuccessful {:?}", result);
14-
assert!(result.stdout().contains("Creating database:"),
15-
"Unexpected stdout {}", result.stdout());
1614
assert!(db.exists());
1715
}
1816

@@ -60,3 +58,24 @@ fn setup_runs_migrations_if_no_schema_table() {
6058
"Unexpected stdout {}", result.stdout());
6159
assert!(db.table_exists("users"));
6260
}
61+
62+
#[test]
63+
fn setup_notifies_when_creating_a_database() {
64+
let p = project("setup_notifies").build();
65+
66+
let result = p.command("setup").run();
67+
68+
assert!(result.stdout().contains("Creating database:"),
69+
"Unexpected stdout {}", result.stdout());
70+
}
71+
72+
#[test]
73+
fn setup_doesnt_notify_when_not_creating_a_database() {
74+
let p = project("setup_doesnt_notify").build();
75+
let db = database(&p.database_url()).create();
76+
77+
let result = p.command("setup").run();
78+
79+
assert!(!result.stdout().contains("Creating database:"),
80+
"Unexpected stdout {}", result.stdout());
81+
}

0 commit comments

Comments
 (0)