@@ -12,6 +12,8 @@ use database_error::DatabaseResult;
1212use std:: error:: Error ;
1313use 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" ) ) ) ]
96102fn 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" ) ) ]
103111fn 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
0 commit comments