From 2dd29008ce5b82097a4e7cf5a58ab638b6c3911f Mon Sep 17 00:00:00 2001 From: sergey-miryanov Date: Wed, 20 Jan 2010 10:47:04 +0500 Subject: [PATCH] Pass DB name to sqlite3_drv If DB name not passed 'store.db' will be opened. --- priv/sqlite3_drv.c | 19 ++++++++++++++----- src/sqlite3.erl | 2 +- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/priv/sqlite3_drv.c b/priv/sqlite3_drv.c index 98ded79..8f83d90 100644 --- a/priv/sqlite3_drv.c +++ b/priv/sqlite3_drv.c @@ -31,17 +31,26 @@ DRIVER_INIT(basic_driver) { // Driver Start static ErlDrvData start(ErlDrvPort port, char* cmd) { sqlite3_drv_t* retval = (sqlite3_drv_t*) driver_alloc(sizeof(sqlite3_drv_t)); - struct sqlite3 *db; - int status; - + struct sqlite3 *db = 0; + int status = 0; + + const char *db_name = strstr (cmd, " "); + if (!db_name) { + fprintf (stderr, "DB name should be passed at command line (cmd: %s)\n", cmd); + db_name = DB_PATH; + } else { + ++db_name; + } + // Create and open the database - sqlite3_open(DB_PATH, &db); + sqlite3_open(db_name, &db); status = sqlite3_errcode(db); if(status != SQLITE_OK) { fprintf(stderr, "Unabled to open file: %s because %s\n\n", DB_PATH, sqlite3_errmsg(db)); + } else { + fprintf(stderr, "Opened file %s\n", db_name); } - fprintf(stderr, "Opened file %s\n", DB_PATH); // Set the state for the driver retval->port = port; diff --git a/src/sqlite3.erl b/src/sqlite3.erl index 3c50b7e..573cb47 100644 --- a/src/sqlite3.erl +++ b/src/sqlite3.erl @@ -345,7 +345,7 @@ init(Options) -> SearchDir = filename:join([filename:dirname(code:which(?MODULE)), "..", "ebin"]), case erl_ddll:load(SearchDir, atom_to_list(?DRIVER_NAME)) of ok -> - Port = open_port({spawn, ?DRIVER_NAME}, [binary]), + Port = open_port({spawn, string:join ([atom_to_list (?DRIVER_NAME), Dbase], " ")}, [binary]), {ok, #state{port = Port, ops = Options}}; {error, Error} -> io:format("Error loading ~p: ~p", [?DRIVER_NAME, erl_ddll:format_error(Error)]),