summaryrefslogtreecommitdiff
path: root/src/db.h
blob: acdcae75be5965f4deac524c021d273b73118e74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/***************************************************************************
 *            db.h
 *
 *  Copyright  2005  Ian McIntosh
 *  ian_mcintosh@linuxadvocate.org
 ****************************************************************************/

/*
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Library General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef _DB_H_
#define _DB_H_

#include <mysql.h>

typedef struct db_connection {
	MYSQL* pMySQLConnection;
	gchar* pzHost;
	gchar* pzUserName;
	gchar* pzPassword;
	gchar* pzDatabase;
} db_connection_t;

typedef MYSQL_RES db_resultset_t;
typedef MYSQL_ROW db_row_t;

#define DB_ROADS_TABLENAME 		("Road")
#define DB_FEATURES_TABLENAME	("Feature")

#include "map.h"

void db_create_tables(void);

void db_init(void);
void db_deinit(void);

// connect
gboolean db_connect(const gchar* pzHost, const gchar* pzUserName, const gchar* pzPassword, const gchar* pzDatabase);
const gchar* db_get_connection_info(void);

// utility
gboolean db_is_empty(void);

gboolean db_insert_roadname(const gchar* pszName, gint nSuffixID, gint* pnReturnID);

//~ gboolean db_create_points_db(const gchar* name);

//~ // insert
//~ gboolean db_road_insert(db_connection_t* pConnection, gint nLayerType, GPtrArray* pPoints, gint* pReturnID);
//~ gboolean db_point_insert(db_connection_t* pConnection, gint nPointSetID, mappoint_t* pPoint, gint* pReturnID);

//~ // load
//~ gboolean db_load_geometry(db_connection_t* pConnection, maprect_t* pRect, layer_t* pLayer, gint nNumLayers); //, geometryset_t* pGeometrySet);
//~ gboolean db_pointset_get_list(db_connection_t* pConnection, GPtrArray* pPointSet);

gboolean db_query(const gchar* pszSQL, db_resultset_t** ppResultSet);
db_row_t db_fetch_row(db_resultset_t* pResultSet);
void db_free_result(db_resultset_t* pResultSet);
gint db_get_last_insert_id(void);

void db_begin_thread(void);
void db_end_thread(void);

gchar* db_make_escaped_string(const gchar* pszString);
void db_free_escaped_string(gchar* pszString);

//void db_parse_wkb_linestring(const gint8* data, GPtrArray* pPointsArray, gboolean (*callback_alloc_point)(mappoint_t**));
//void db_parse_wkb_linestring(const gint8* data, GArray* pMapPointsArray);
void db_parse_wkb_linestring(const gint8* data, GArray* pMapPointsArray, maprect_t* pBoundingRect);
void db_parse_wkb_point(const gint8* data, mappoint_t* pPoint);

void db_enable_keys(void);
void db_disable_keys(void);

gboolean db_insert_city(const gchar* pszName, gint nStateID, gint* pnReturnCityID);
gboolean db_insert_road(gint nRoadNameID, gint nLayerType,
							gint nAddressLeftStart, gint nAddressLeftEnd,
							gint nAddressRightStart, gint nAddressRightEnd,
							gint nCityLeftID, gint nCityRightID,
							const gchar* pszZIPCodeLeft, const gchar* pszZIPCodeRight,
							GPtrArray* pPointsArray, gint* pReturnID);

gboolean db_city_get_id(const gchar* pszName, gint nStateID, gint* pnReturnID);
gboolean db_state_get_id(const gchar* pszName, gint* pnReturnID);

void db_lock(void);
void db_unlock(void);

#endif