6 #define _(String) gettext(String)
12 #include "ui-common.h"
15 sqlite3_stmt *_stmt_select_poi = NULL;
16 sqlite3_stmt *_stmt_select_nearest_poi = NULL;
17 sqlite3_stmt *_stmt_insert_poi = NULL;
18 sqlite3_stmt *_stmt_update_poi = NULL;
19 sqlite3_stmt *_stmt_delete_poi = NULL;
20 sqlite3_stmt *_stmt_delete_poi_by_catid = NULL;
21 sqlite3_stmt *_stmt_nextlabel_poi = NULL;
23 sqlite3_stmt *_stmt_select_cat = NULL;
24 sqlite3_stmt *_stmt_insert_cat = NULL;
25 sqlite3_stmt *_stmt_update_cat = NULL;
26 sqlite3_stmt *_stmt_delete_cat = NULL;
27 sqlite3_stmt *_stmt_toggle_cat = NULL;
28 sqlite3_stmt *_stmt_selall_cat = NULL;
30 gboolean db_prepare(sqlite3 *db)
36 gboolean db_close(sqlite3 *db)
45 gboolean db_connect(sqlite3 **ndb, const gchar *poi_db)
53 printf("%s()\n", __PRETTY_FUNCTION__);
68 if (SQLITE_OK != (sqlite3_open(poi_db, &db))) {
71 snprintf(buffer2, sizeof(buffer2),
72 "%s: %s", _("Problem with POI database"),
76 popup_error(_window, buffer2);
82 if (SQLITE_OK != sqlite3_get_table(db, "select label from poi limit 1",
83 &pszResult, &nRow, &nColumn, NULL)) {
86 g_printf("Creating initial tables\n");
90 ("create table poi (poi_id integer PRIMARY KEY, lat real, "
91 "lon real, label text, desc text, cat_id integer);"
92 "create table category (cat_id integer PRIMARY KEY,"
93 "label text, desc text, enabled integer);"
94 /* Add some default categories... */
95 "insert into category (label, desc, enabled) "
96 "values ('%q', '%q', 1); "
97 "insert into category (label, desc, enabled) "
98 "values ('%q', '%q', 1); "
99 "insert into category (label, desc, enabled) "
100 "values ('%q', '%q', 1); "
101 "insert into category (label, desc, enabled) "
102 "values ('%q', '%q', 1); "
103 "insert into category (label, desc, enabled) "
104 "values ('%q', '%q', 1); "
105 "insert into category (label, desc, enabled) "
106 "values ('%q', '%q', 1); "
107 "insert into category (label, desc, enabled) "
108 "values ('%q', '%q', 1); "
109 "insert into category (label, desc, enabled) "
110 "values ('%q', '%q', 1); "
111 "insert into category (label, desc, enabled) "
112 "values ('%q', '%q', 1); "
113 "insert into category (label, desc, enabled) "
114 "values ('%q', '%q', 1); "
115 "insert into category (label, desc, enabled) "
116 "values ('%q', '%q', 1); ",
118 _("Stations for purchasing fuel for vehicles."),
120 _("Houses, apartments, or other residences of import."),
122 _("Places to eat or drink."),
123 _("Shopping/Services"),
124 _("Places to shop or acquire services."),
126 _("Indoor or Outdoor places to have fun."),
128 _("Bus stops, airports, train stations, etc."),
130 _("Places to stay temporarily or for the night."),
132 _("Elementary schools, college campuses, etc."),
134 _("General places of business."),
136 _("General landmarks."),
138 _("Miscellaneous category for everything else."));
141 sqlite3_exec(db, create_sql, NULL, NULL, &perror)
143 sqlite3_get_table(db, "select label from poi limit 1",
144 &pszResult, &nRow, &nColumn, NULL))) {
145 snprintf(buffer, sizeof(buffer), "%s:\n%s",
146 _("Failed to open or create database"),
150 popup_error(_window, buffer);
154 sqlite3_free_table(pszResult);
156 /* Prepare our SQL statements. */
157 /* select from poi */
159 "select p.lat, p.lon, p.poi_id, p.label, p.desc,"
160 " p.cat_id, c.label, c.desc"
161 " from poi p, category c "
162 " where p.lat between ? and ? "
163 " and p.lon between ? and ? "
164 " and c.enabled = 1 and p.cat_id = c.cat_id",
165 -1, &_stmt_select_poi, NULL);
167 /* select nearest pois */
169 "select p.lat, p.lon, p.label, c.label"
170 " from poi p, category c "
171 " where c.enabled = 1 and p.cat_id = c.cat_id"
172 " order by (($LAT - p.lat) * ($LAT - p.lat) "
173 "+ ($LON - p.lon) * ($LON - p.lon)) limit 1",
174 -1, &_stmt_select_nearest_poi, NULL);
178 "insert into poi (lat, lon, label, desc, cat_id)"
179 " values (?, ?, ?, ?, ?)", -1, &_stmt_insert_poi, NULL);
182 "update poi set label = ?, desc = ?, "
183 "cat_id = ? where poi_id = ?",
184 -1, &_stmt_update_poi, NULL);
185 /* delete from poi */
187 " delete from poi where poi_id = ?",
188 -1, &_stmt_delete_poi, NULL);
189 /* delete from poi by cat_id */
191 "delete from poi where cat_id = ?",
192 -1, &_stmt_delete_poi_by_catid, NULL);
193 /* get next poilabel */
195 "select ifnull(max(poi_id) + 1,1) from poi",
196 -1, &_stmt_nextlabel_poi, NULL);
198 /* select from category */
200 "select c.label, c.desc, c.enabled"
201 " from category c where c.cat_id = ?",
202 -1, &_stmt_select_cat, NULL);
203 /* insert into category */
205 "insert into category (label, desc, enabled)"
206 " values (?, ?, ?)", -1, &_stmt_insert_cat, NULL);
207 /* update category */
209 "update category set label = ?, desc = ?,"
210 " enabled = ? where poi_id = ?",
211 -1, &_stmt_update_cat, NULL);
212 /* delete from category */
214 "delete from category where cat_id = ?",
215 -1, &_stmt_delete_cat, NULL);
216 /* enable category */
218 "update category set enabled = ?"
219 " where cat_id = ?", -1, &_stmt_toggle_cat, NULL);
220 /* select all category */
222 "select c.cat_id, c.label, c.desc, c.enabled,"
225 " left outer join poi p on c.cat_id = p.cat_id"
226 " group by c.cat_id, c.label, c.desc, c.enabled "
227 " order by c.label", -1, &_stmt_selall_cat, NULL);
229 printf("%s(): return\n", __PRETTY_FUNCTION__);