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 */
91 /* types passed to NamedQuery */
93 SQL_TYPE_NONE
, /* used at end of array */
94 SQL_TYPE_INT
, /* argument is type int */
95 SQL_TYPE_STRING
/* argument is pointer to char */
98 /* NamedQuery SQL parameter value as part of SQL_Var */
104 /* NamedQuery SQL parameter passed by caller function */
110 /* configurable queries
111 * NOTE: parameter sequence in select queries are mandatory !!!
114 SQL_QUERY_DELETE_PHONE
, /* after-initialization phone deleting */
115 SQL_QUERY_INSERT_PHONE
, /* insert phone */
116 SQL_QUERY_SAVE_INBOX_SMS_SELECT
,
117 SQL_QUERY_SAVE_INBOX_SMS_UPDATE_DELIVERED
,
118 SQL_QUERY_SAVE_INBOX_SMS_UPDATE
,
119 SQL_QUERY_SAVE_INBOX_SMS_INSERT
,
120 SQL_QUERY_UPDATE_RECEIVED
,
121 SQL_QUERY_REFRESH_SEND_STATUS
,
122 SQL_QUERY_FIND_OUTBOX_SMS_ID
,
123 SQL_QUERY_FIND_OUTBOX_BODY
,
124 SQL_QUERY_FIND_OUTBOX_MULTIPART
,
125 SQL_QUERY_DELETE_OUTBOX
,
126 SQL_QUERY_DELETE_OUTBOX_MULTIPART
,
127 SQL_QUERY_CREATE_OUTBOX
,
128 SQL_QUERY_CREATE_OUTBOX_MULTIPART
,
129 SQL_QUERY_ADD_SENT_INFO
,
130 SQL_QUERY_UPDATE_SENT
,
131 SQL_QUERY_REFRESH_PHONE_STATUS
,
135 /* incomplete declaration - cyclic occurence of GSM_SMSDConfig */
136 struct GSM_SMSDConfig
;
139 struct GSM_SMSDdbobj
{
140 SQL_Error (* Connect
)(GSM_SMSDConfig
*);
141 SQL_Error (* Query
)(GSM_SMSDConfig
*, const char *, SQL_result
*);
142 void (* Free
)(GSM_SMSDConfig
*); /* = close() */
143 void (* FreeResult
)(GSM_SMSDConfig
*, SQL_result
*);
144 int (* NextRow
)(GSM_SMSDConfig
*, SQL_result
*);
145 unsigned long long (* SeqID
)(GSM_SMSDConfig
*, const char *);
146 unsigned long (* AffectedRows
)(GSM_SMSDConfig
*, SQL_result
*);
147 const char * (* GetString
)(GSM_SMSDConfig
*, SQL_result
*, unsigned int);
148 long long (* GetNumber
)(GSM_SMSDConfig
*, SQL_result
*, unsigned int);
149 time_t (* GetDate
)(GSM_SMSDConfig
*, SQL_result
*, unsigned int);
150 gboolean (* GetBool
)(GSM_SMSDConfig
*, SQL_result
*, unsigned int);
151 char * (* QuoteString
)(GSM_SMSDConfig
*, const char *);
154 /* database backends */
155 #ifdef HAVE_POSTGRESQL_LIBPQ_FE_H
156 extern struct GSM_SMSDdbobj SMSDPgSQL
;
159 #ifdef HAVE_MYSQL_MYSQL_H
160 extern struct GSM_SMSDdbobj SMSDMySQL
;
164 extern struct GSM_SMSDdbobj SMSDDBI
;
168 extern struct GSM_SMSDdbobj SMSDODBC
;
172 /* How should editor hadle tabs in this file? Add editor commands here.
173 * vim: noexpandtab sw=8 ts=8 sts=8: