Pass DB name to sqlite3_drv

If DB name not passed 'store.db' will be opened.
This commit is contained in:
sergey-miryanov
2010-01-20 10:47:04 +05:00
parent 345746e9d7
commit 2dd29008ce
2 changed files with 15 additions and 6 deletions

View File

@@ -31,17 +31,26 @@ DRIVER_INIT(basic_driver) {
// Driver Start // Driver Start
static ErlDrvData start(ErlDrvPort port, char* cmd) { static ErlDrvData start(ErlDrvPort port, char* cmd) {
sqlite3_drv_t* retval = (sqlite3_drv_t*) driver_alloc(sizeof(sqlite3_drv_t)); sqlite3_drv_t* retval = (sqlite3_drv_t*) driver_alloc(sizeof(sqlite3_drv_t));
struct sqlite3 *db; struct sqlite3 *db = 0;
int status; 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 // Create and open the database
sqlite3_open(DB_PATH, &db); sqlite3_open(db_name, &db);
status = sqlite3_errcode(db); status = sqlite3_errcode(db);
if(status != SQLITE_OK) { if(status != SQLITE_OK) {
fprintf(stderr, "Unabled to open file: %s because %s\n\n", DB_PATH, sqlite3_errmsg(db)); 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 // Set the state for the driver
retval->port = port; retval->port = port;

View File

@@ -345,7 +345,7 @@ init(Options) ->
SearchDir = filename:join([filename:dirname(code:which(?MODULE)), "..", "ebin"]), SearchDir = filename:join([filename:dirname(code:which(?MODULE)), "..", "ebin"]),
case erl_ddll:load(SearchDir, atom_to_list(?DRIVER_NAME)) of case erl_ddll:load(SearchDir, atom_to_list(?DRIVER_NAME)) of
ok -> 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}}; {ok, #state{port = Port, ops = Options}};
{error, Error} -> {error, Error} ->
io:format("Error loading ~p: ~p", [?DRIVER_NAME, erl_ddll:format_error(Error)]), io:format("Error loading ~p: ~p", [?DRIVER_NAME, erl_ddll:format_error(Error)]),