/*
* 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
#include <sqlite3.h>
#include "db.h"
-#include "osm-sql-tables.h"
sqlite3 *_db=NULL;
gchar *_mapper_db=NULL;
-void
-db_create_tables(sqlite3 *db)
+gboolean
+db_exec_sql_array(sqlite3 *db, const gchar **sql)
{
-db_exec_sql(db, OSM_TABLE_NODES);
-db_exec_sql(db, OSM_TABLE_NODE_TAGS);
-db_exec_sql(db, OSM_TABLE_WAY);
-db_exec_sql(db, OSM_TABLE_WAY_TAGS);
-db_exec_sql(db, OSM_TABLE_WAY_UPDATES);
-db_exec_sql(db, OSM_TABLE_WAY_N2N);
-db_exec_sql(db, OSM_TABLE_WAY_NAMES);
-db_exec_sql(db, OSM_TABLE_WAY_PC);
-db_exec_sql(db, OSM_TABLE_WAY_NAMES_NLS);
-db_exec_sql(db, OSM_TABLE_WAY_REF);
-db_exec_sql(db, OSM_TABLE_PLACES);
-db_exec_sql(db, OSM_TABLE_POI);
-db_exec_sql(db, OSM_TABLE_POI_CATEGORY);
+gboolean r=TRUE;
+const char **d;
+
+d=sql;
+while (*d!=NULL) {
+ if (db_exec_sql(db, *d)==FALSE)
+ r=FALSE;
+ d++;
}
-
-void
-db_create_indexes(sqlite3 *db)
-{
-db_exec_sql(db, OSM_INDEX_1);
-db_exec_sql(db, OSM_INDEX_2);
-db_exec_sql(db, OSM_INDEX_3);
-db_exec_sql(db, OSM_INDEX_4);
-db_exec_sql(db, OSM_INDEX_5);
-db_exec_sql(db, OSM_INDEX_6);
-db_exec_sql(db, OSM_INDEX_7);
-db_exec_sql(db, OSM_INDEX_8);
-db_exec_sql(db, OSM_INDEX_9);
-db_exec_sql(db, OSM_INDEX_10);
-db_exec_sql(db, OSM_INDEX_11);
-db_exec_sql(db, OSM_INDEX_12);
-db_exec_sql(db, OSM_INDEX_13);
-db_exec_sql(db, OSM_INDEX_14);
-db_exec_sql(db, OSM_INDEX_15);
+return r;
}
/**
gint r;
r=sqlite3_exec(db, sql, NULL, NULL, NULL);
-if (r!=SQLITE_OK)
- g_printerr("SQL ERROR:(%s) %s\n", sql, sqlite3_errmsg(db));
+if (r!=SQLITE_OK && r!=SQLITE_DONE)
+ g_printerr("SQL ERROR %d:(%s) %s\n", r, sql, sqlite3_errmsg(db));
-return (r==SQLITE_OK) ? TRUE : FALSE;
+return (r==SQLITE_OK || r==SQLITE_DONE) ? TRUE : FALSE;
}
/**
g_assert(sql);
r=sqlite3_step(sql);
-if (r!=SQLITE_OK)
- g_printerr("SQL ERROR: %s\n", sqlite3_errmsg(db));
+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;
}
/**
return FALSE;
if (SQLITE_OK!=(sqlite3_open(mapper_db, db))) {
- g_printerr("SQL OPEN: %s\n", sqlite3_errmsg(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 = 2000;", NULL, NULL, NULL);