1 /* drivers for sql service
3 * MySQL (C) 2004 by Marcin Wiacek
4 * PostgreSQL (C) 2006 by Andrea Riciputi
5 * DBI (C) 2009 by Michal Čihař
13 # include <winsock2.h>
16 #ifdef HAVE_MYSQL_MYSQL_H
18 #include <mysqld_error.h>
21 #ifdef HAVE_POSTGRESQL_LIBPQ_FE_H
22 # include <libpq-fe.h>
30 #include <sys/types.h>
38 /* sql result structures */
43 #ifdef HAVE_MYSQL_MYSQL_H
46 MYSQL_ROW row
; /* keep in memory actual row */
50 #ifdef HAVE_POSTGRESQL_LIBPQ_FE_H
53 int iter
; /* libpq does not have nexrow .. */
57 SQLHSTMT odbc
; /* Statement being executed */
61 #define SMSD_ODBC_MAX_RETURN_STRINGS 30
63 /* sql connection structures */
64 typedef union __sql_conn
{
66 dbi_conn dbi
; /* dbi driver */
68 #ifdef HAVE_MYSQL_MYSQL_H
69 MYSQL
*my
; /* mysql driver */
71 #ifdef HAVE_POSTGRESQL_LIBPQ_FE_H
72 PGconn
*pg
; /* pgsql driver */
76 SQLHENV env
; /* Environment */
77 SQLHDBC dbc
; /* DBC */
78 char * retstr
[SMSD_ODBC_MAX_RETURN_STRINGS
]; /* Retrun strings */
86 SQL_TIMEOUT
, /* query or connection timeout */
87 SQL_FAIL
, /* query failed */
88 SQL_LOCKED
, /* locked table - currently unused */
89 SQL_BUG
/* Internal error */
92 /* types passed to NamedQuery */
94 SQL_TYPE_NONE
, /* used at end of array */
95 SQL_TYPE_INT
, /* argument is type int */
96 SQL_TYPE_STRING
/* argument is pointer to char */
99 /* NamedQuery SQL parameter value as part of SQL_Var */
105 /* NamedQuery SQL parameter passed by caller function */
111 /* configurable queries
112 * NOTE: parameter sequence in select queries are mandatory !!!
115 SQL_QUERY_DELETE_PHONE
, /* after-initialization phone deleting */
116 SQL_QUERY_INSERT_PHONE
, /* insert phone */
117 SQL_QUERY_SAVE_INBOX_SMS_SELECT
,
118 SQL_QUERY_SAVE_INBOX_SMS_UPDATE_DELIVERED
,
119 SQL_QUERY_SAVE_INBOX_SMS_UPDATE
,
120 SQL_QUERY_SAVE_INBOX_SMS_INSERT
,
121 SQL_QUERY_UPDATE_RECEIVED
,
122 SQL_QUERY_REFRESH_SEND_STATUS
,
123 SQL_QUERY_FIND_OUTBOX_SMS_ID
,
124 SQL_QUERY_FIND_OUTBOX_BODY
,
125 SQL_QUERY_FIND_OUTBOX_MULTIPART
,
126 SQL_QUERY_DELETE_OUTBOX
,
127 SQL_QUERY_DELETE_OUTBOX_MULTIPART
,
128 SQL_QUERY_CREATE_OUTBOX
,
129 SQL_QUERY_CREATE_OUTBOX_MULTIPART
,
130 SQL_QUERY_ADD_SENT_INFO
,
131 SQL_QUERY_UPDATE_SENT
,
132 SQL_QUERY_REFRESH_PHONE_STATUS
,
136 /* incomplete declaration - cyclic occurence of GSM_SMSDConfig */
137 struct GSM_SMSDConfig
;
140 struct GSM_SMSDdbobj
{
141 SQL_Error (* Connect
)(GSM_SMSDConfig
*);
142 SQL_Error (* Query
)(GSM_SMSDConfig
*, const char *, SQL_result
*);
143 void (* Free
)(GSM_SMSDConfig
*); /* = close() */
144 void (* FreeResult
)(GSM_SMSDConfig
*, SQL_result
*);
145 int (* NextRow
)(GSM_SMSDConfig
*, SQL_result
*);
146 unsigned long long (* SeqID
)(GSM_SMSDConfig
*, const char *);
147 unsigned long (* AffectedRows
)(GSM_SMSDConfig
*, SQL_result
*);
148 const char * (* GetString
)(GSM_SMSDConfig
*, SQL_result
*, unsigned int);
149 long long (* GetNumber
)(GSM_SMSDConfig
*, SQL_result
*, unsigned int);
150 time_t (* GetDate
)(GSM_SMSDConfig
*, SQL_result
*, unsigned int);
151 gboolean (* GetBool
)(GSM_SMSDConfig
*, SQL_result
*, unsigned int);
152 char * (* QuoteString
)(GSM_SMSDConfig
*, const char *);
155 /* database backends */
156 #ifdef HAVE_POSTGRESQL_LIBPQ_FE_H
157 extern struct GSM_SMSDdbobj SMSDPgSQL
;
160 #ifdef HAVE_MYSQL_MYSQL_H
161 extern struct GSM_SMSDdbobj SMSDMySQL
;
165 extern struct GSM_SMSDdbobj SMSDDBI
;
169 extern struct GSM_SMSDdbobj SMSDODBC
;
173 /* How should editor hadle tabs in this file? Add editor commands here.
174 * vim: noexpandtab sw=8 ts=8 sts=8: