diff options
Diffstat (limited to 'utils/nfsdcltrack/sqlite.c')
-rw-r--r-- | utils/nfsdcltrack/sqlite.c | 49 |
1 files changed, 34 insertions, 15 deletions
diff --git a/utils/nfsdcltrack/sqlite.c b/utils/nfsdcltrack/sqlite.c index c19af7e..bac6789 100644 --- a/utils/nfsdcltrack/sqlite.c +++ b/utils/nfsdcltrack/sqlite.c @@ -90,24 +90,15 @@ mkdir_if_not_exist(const char *dirname) return ret; } -/* - * Open the "main" database, and attempt to initialize it by creating the - * parameters table and inserting the schema version into it. Ignore any errors - * from that, and then attempt to select the version out of it again. If the - * version appears wrong, then assume that the DB is corrupt or has been - * upgraded, and return an error. If all of that works, then attempt to create - * the "clients" table. - */ +/* Open the database and set up the database handle for it */ int -sqlite_maindb_init(const char *topdir) +sqlite_prepare_dbh(const char *topdir) { int ret; - char *err = NULL; - sqlite3_stmt *stmt = NULL; - ret = mkdir_if_not_exist(topdir); - if (ret) - return ret; + /* Do nothing if the database handle is already set up */ + if (dbh) + return 0; ret = snprintf(buf, PATH_MAX - 1, "%s/main.sqlite", topdir); if (ret < 0) @@ -118,15 +109,43 @@ sqlite_maindb_init(const char *topdir) ret = sqlite3_open(buf, &dbh); if (ret != SQLITE_OK) { xlog(L_ERROR, "Unable to open main database: %d", ret); + dbh = NULL; return ret; } ret = sqlite3_busy_timeout(dbh, CLD_SQLITE_BUSY_TIMEOUT); if (ret != SQLITE_OK) { xlog(L_ERROR, "Unable to set sqlite busy timeout: %d", ret); - goto out_err; + sqlite3_close(dbh); + dbh = NULL; } + return ret; +} + +/* + * Open the "main" database, and attempt to initialize it by creating the + * parameters table and inserting the schema version into it. Ignore any errors + * from that, and then attempt to select the version out of it again. If the + * version appears wrong, then assume that the DB is corrupt or has been + * upgraded, and return an error. If all of that works, then attempt to create + * the "clients" table. + */ +int +sqlite_maindb_init(const char *topdir) +{ + int ret; + char *err = NULL; + sqlite3_stmt *stmt = NULL; + + ret = mkdir_if_not_exist(topdir); + if (ret) + return ret; + + ret = sqlite_prepare_dbh(topdir); + if (ret) + return ret; + /* Try to create table */ ret = sqlite3_exec(dbh, "CREATE TABLE IF NOT EXISTS parameters " "(key TEXT PRIMARY KEY, value TEXT);", |