/*
* This file is part of mapper
*
+ * Generic sqlite database helper functions.
+ *
* Copyright (C) 2007 Kaj-Michael Lang
*
* This program is free software; you can redistribute it and/or modify
sqlite3 *_db=NULL;
gchar *_mapper_db=NULL;
+gboolean
+db_exec_sql_array(sqlite3 *db, const gchar **sql)
+{
+gboolean r=TRUE;
+const char **d;
+
+d=sql;
+while (*d!=NULL) {
+ if (db_exec_sql(db, *d)==FALSE)
+ r=FALSE;
+ d++;
+}
+return r;
+}
+
/**
* A simple check to test if a table exists
*
guint nRow, nColumn;
gchar sql[64];
-snprintf(sql, sizeof(sql),"select count(*) from %s", table);
+g_snprintf(sql, sizeof(sql),"select count(*) from %s", table);
if (SQLITE_OK != sqlite3_get_table(db, sql, &pszResult, &nRow, &nColumn, NULL))
return FALSE;
return TRUE;
}
+gboolean
+db_exec_sql(sqlite3 *db, const gchar *sql)
+{
+gint r;
+
+r=sqlite3_exec(db, sql, NULL, NULL, NULL);
+if (r!=SQLITE_OK && r!=SQLITE_DONE)
+ g_printerr("SQL ERROR %d:(%s) %s\n", r, sql, sqlite3_errmsg(db));
+
+return (r==SQLITE_OK || r==SQLITE_DONE) ? TRUE : FALSE;
+}
+
/**
* Helper that execs a given prepared sql statment and resets clears bindings.
* return TRUE or FALSE depending on success of the query.
*
*/
gboolean
-db_exec(sqlite3_stmt *sql)
+db_exec(sqlite3 *db, sqlite3_stmt *sql)
{
gint r;
+g_assert(sql);
r=sqlite3_step(sql);
+if (r!=SQLITE_OK && r!=SQLITE_DONE)
+ g_printerr("SQL ERROR %d: %s\n", r, sqlite3_errmsg(db));
sqlite3_reset(sql);
sqlite3_clear_bindings(sql);
-return (r==SQLITE_OK) ? TRUE : FALSE;
+return (r==SQLITE_OK || r==SQLITE_DONE) ? TRUE : FALSE;
}
/**
db_close(sqlite3 **db)
{
if (db && *db) {
- g_print("Closing database.\n");
sqlite3_close(*db);
*db=NULL;
}
return TRUE;
}
+gboolean
+db_transaction_begin(sqlite3 *db)
+{
+return db_exec_sql(db, "begin;");
+}
+
+gboolean
+db_transaction_commit(sqlite3 *db)
+{
+return db_exec_sql(db, "commit;");
+}
+
/**
* Connect to given sqlite database
*
return FALSE;
if (SQLITE_OK!=(sqlite3_open(mapper_db, db))) {
+ g_printerr("SQL OPEN: %s\n", sqlite3_errmsg(*db));
sqlite3_close(*db);
*db=NULL;
return FALSE;
}
+sqlite3_exec(*db, "PRAGMA page_size=4096;", NULL, NULL, NULL);
+sqlite3_exec(*db, "PRAGMA encoding = \"UTF-8\";", NULL, NULL, NULL);
+
/* Use smaller cache as the IT does not have much memory to spare */
#ifdef WITH_DEVICE_770
-sqlite3_exec(*db, "PRAGMA cache_size = 1000;", NULL, NULL, NULL);
+sqlite3_exec(*db, "PRAGMA cache_size = 2000;", NULL, NULL, NULL);
#else
sqlite3_exec(*db, "PRAGMA cache_size = 8000;", NULL, NULL, NULL);
#endif
return TRUE;
}
+