Imported Upstream version 3.05
[sven/mysqltcl.git] / patch-generic-mysqltcl.c
1 --- generic/mysqltcl.c.orig     2008-04-02 16:46:38.000000000 +0200
2 +++ generic/mysqltcl.c  2008-04-02 16:52:11.000000000 +0200
3 @@ -42,11 +42,6 @@
4  #include <tcl.h>
5  #include <mysql.h>
6  
7 -#if (MYSQL_VERSION_ID<40100)
8 -  #error You need Mysql version 4.1 or higher to compile mysqltcl
9 -#endif
10 -
11 -
12  #include <errno.h>
13  #include <string.h>
14  #include <ctype.h>
15 @@ -97,6 +92,8 @@
16  #define MYSQL_STATUS_MSG  "message"
17  #define MYSQL_STATUS_NULLV  "nullvalue"
18  
19 +#define FUNCTION_NOT_AVAILABLE "function not available"
20 +
21  /* C variable corresponding to mysqlstatus(nullvalue) */
22  #define MYSQL_NULLV_INIT ""
23  
24 @@ -714,7 +711,10 @@
25  static CONST char* MysqlConnectOpt[] =
26      {
27        "-host", "-user", "-password", "-db", "-port", "-socket","-encoding",
28 -      "-ssl", "-compress", "-noschema","-odbc","-multistatement","-multiresult",
29 +      "-ssl", "-compress", "-noschema","-odbc",
30 +#if (MYSQL_VERSION_ID >= 40107)
31 +      "-multistatement","-multiresult",
32 +#endif
33        "-localfiles","-ignorespace","-foundrows","-interactive","-sslkey","-sslcert",
34        "-sslca","-sslcapath","-sslciphers",NULL
35      };
36 @@ -731,7 +731,9 @@
37    char *socket = NULL;
38    char *encodingname = NULL;
39  
40 +#if (MYSQL_VERSION_ID >= 40107)
41    int isSSL = 0;
42 +#endif
43    char *sslkey = NULL;
44    char *sslcert = NULL;
45    char *sslca = NULL;
46 @@ -746,7 +748,10 @@
47      MYSQL_CONNHOST_OPT, MYSQL_CONNUSER_OPT, MYSQL_CONNPASSWORD_OPT,
48      MYSQL_CONNDB_OPT, MYSQL_CONNPORT_OPT, MYSQL_CONNSOCKET_OPT, MYSQL_CONNENCODING_OPT,
49      MYSQL_CONNSSL_OPT, MYSQL_CONNCOMPRESS_OPT, MYSQL_CONNNOSCHEMA_OPT, MYSQL_CONNODBC_OPT,
50 -    MYSQL_MULTISTATEMENT_OPT,MYSQL_MULTIRESULT_OPT,MYSQL_LOCALFILES_OPT,MYSQL_IGNORESPACE_OPT,
51 +#if (MYSQL_VERSION_ID >= 40107)
52 +    MYSQL_MULTISTATEMENT_OPT,MYSQL_MULTIRESULT_OPT,
53 +#endif
54 +    MYSQL_LOCALFILES_OPT,MYSQL_IGNORESPACE_OPT,
55      MYSQL_FOUNDROWS_OPT,MYSQL_INTERACTIVE_OPT,MYSQL_SSLKEY_OPT,MYSQL_SSLCERT_OPT,
56      MYSQL_SSLCA_OPT,MYSQL_SSLCAPATH_OPT,MYSQL_SSLCIPHERS_OPT
57    };
58 @@ -787,8 +792,15 @@
59        encodingname = Tcl_GetStringFromObj(objv[++i],NULL);
60        break;
61      case MYSQL_CONNSSL_OPT:
62 +#if (MYSQL_VERSION_ID >= 40107)
63        if (Tcl_GetBooleanFromObj(interp,objv[++i],&isSSL) != TCL_OK )
64         return TCL_ERROR;
65 +#else
66 +      if (Tcl_GetBooleanFromObj(interp,objv[++i],&booleanflag) != TCL_OK )
67 +       return TCL_ERROR;
68 +      if (booleanflag)
69 +        flags |= CLIENT_SSL;
70 +#endif
71        break;
72      case MYSQL_CONNCOMPRESS_OPT:
73        if (Tcl_GetBooleanFromObj(interp,objv[++i],&booleanflag) != TCL_OK )
74 @@ -808,6 +820,7 @@
75        if (booleanflag)
76         flags |= CLIENT_ODBC;
77        break;
78 +#if (MYSQL_VERSION_ID >= 40107)
79      case MYSQL_MULTISTATEMENT_OPT:
80        if (Tcl_GetBooleanFromObj(interp,objv[++i],&booleanflag) != TCL_OK )
81         return TCL_ERROR;
82 @@ -822,7 +835,7 @@
83        if (booleanflag)
84         flags |= CLIENT_MULTI_RESULTS;
85        break;
86 -
87 +#endif
88      case MYSQL_LOCALFILES_OPT:
89        if (Tcl_GetBooleanFromObj(interp,objv[++i],&booleanflag) != TCL_OK )
90         return TCL_ERROR;
91 @@ -881,9 +894,11 @@
92  #if (MYSQL_VERSION_ID>=32350)
93    mysql_options(handle->connection,MYSQL_READ_DEFAULT_GROUP,groupname);
94  #endif
95 +#if (MYSQL_VERSION_ID >= 40107)
96    if (isSSL) {
97        mysql_ssl_set(handle->connection,sslkey,sslcert, sslca, sslcapath, sslcipher);
98    }
99 +#endif
100  
101    if (!mysql_real_connect(handle->connection, hostname, user,
102                                  password, db, port, socket, flags)) {
103 @@ -1514,7 +1529,11 @@
104    static CONST char* MysqlDbOpt[] =
105      {
106        "dbname", "dbname?", "tables", "host", "host?", "databases",
107 -      "info","serverversion","serverversionid","sqlstate","state",NULL
108 +      "info","serverversion",
109 +#if (MYSQL_VERSION_ID >= 40107)
110 +      "serverversionid","sqlstate",
111 +#endif
112 +      "state",NULL
113      };
114    enum dboption {
115      MYSQL_INFNAME_OPT, MYSQL_INFNAMEQ_OPT, MYSQL_INFTABLES_OPT,
116 @@ -1548,8 +1567,10 @@
117      break;
118    case MYSQL_INFO:
119    case MYSQL_INF_SERVERVERSION:
120 +#if (MYSQL_VERSION_ID >= 40107)
121    case MYSQL_INFO_SERVERVERSION_ID:
122    case MYSQL_INFO_SQLSTATE:
123 +#endif
124    case MYSQL_INFO_STATE:
125      break;
126  
127 @@ -1606,12 +1627,14 @@
128    case MYSQL_INF_SERVERVERSION:
129       Tcl_SetObjResult(interp, Tcl_NewStringObj(mysql_get_server_info(handle->connection),-1));
130       break;
131 +#if (MYSQL_VERSION_ID >= 40107)
132    case MYSQL_INFO_SERVERVERSION_ID:
133          Tcl_SetObjResult(interp, Tcl_NewIntObj(mysql_get_server_version(handle->connection)));
134          break;
135    case MYSQL_INFO_SQLSTATE:
136       Tcl_SetObjResult(interp, Tcl_NewStringObj(mysql_sqlstate(handle->connection),-1));
137       break;
138 +#endif
139    case MYSQL_INFO_STATE:
140       Tcl_SetObjResult(interp, Tcl_NewStringObj(mysql_stat(handle->connection),-1));
141       break;
142 @@ -1638,7 +1661,11 @@
143    char **option;
144    static CONST char* MysqlInfoOpt[] =
145      {
146 -      "connectparameters", "clientversion","clientversionid", NULL
147 +      "connectparameters", "clientversion",
148 +#if (MYSQL_VERSION_ID >= 40107)
149 +      "clientversionid",
150 +#endif
151 +      NULL
152      };
153    enum baseoption {
154      MYSQL_BINFO_CONNECT, MYSQL_BINFO_CLIENTVERSION,MYSQL_BINFO_CLIENTVERSIONID
155 @@ -1668,9 +1695,11 @@
156    case MYSQL_BINFO_CLIENTVERSION:
157      Tcl_SetObjResult(interp, Tcl_NewStringObj(mysql_get_client_info(),-1));
158      break;
159 +#if (MYSQL_VERSION_ID >= 40107)
160    case MYSQL_BINFO_CLIENTVERSIONID:
161      Tcl_SetObjResult(interp, Tcl_NewIntObj(mysql_get_client_version()));
162      break;
163 +#endif
164    }
165    return TCL_OK ;
166  }
167 @@ -1987,6 +2016,10 @@
168  
169  static int Mysqltcl_AutoCommit(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
170  {
171 +#if (MYSQL_VERSION_ID < 40107)
172 +  Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
173 +  return TCL_ERROR;
174 +#else
175    MysqlTclHandle *handle;
176    int isAutocommit = 0;
177  
178 @@ -1999,6 +2032,7 @@
179         mysql_server_confl(interp,objc,objv,handle->connection);
180    }
181    return TCL_OK;
182 +#endif
183  }
184  /*
185   *----------------------------------------------------------------------
186 @@ -2010,6 +2044,10 @@
187  
188  static int Mysqltcl_Commit(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
189  {
190 +#if (MYSQL_VERSION_ID < 40107)
191 +  Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
192 +  return TCL_ERROR;
193 +#else
194    MysqlTclHandle *handle;
195  
196    if ((handle = mysql_prologue(interp, objc, objv, 2, 2, CL_CONN,
197 @@ -2019,6 +2057,7 @@
198         mysql_server_confl(interp,objc,objv,handle->connection);
199    }
200    return TCL_OK;
201 +#endif
202  }
203  /*
204   *----------------------------------------------------------------------
205 @@ -2030,6 +2069,10 @@
206  
207  static int Mysqltcl_Rollback(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
208  {
209 +#if (MYSQL_VERSION_ID < 40107)
210 +  Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
211 +  return TCL_ERROR;
212 +#else
213    MysqlTclHandle *handle;
214  
215    if ((handle = mysql_prologue(interp, objc, objv, 2, 2, CL_CONN,
216 @@ -2039,6 +2082,7 @@
217        mysql_server_confl(interp,objc,objv,handle->connection);
218    }
219    return TCL_OK;
220 +#endif
221  }
222  /*
223   *----------------------------------------------------------------------
224 @@ -2050,6 +2094,10 @@
225  
226  static int Mysqltcl_MoreResult(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
227  {
228 +#if (MYSQL_VERSION_ID < 40107)
229 +  Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
230 +  return TCL_ERROR;
231 +#else
232    MysqlTclHandle *handle;
233    int boolResult = 0;
234  
235 @@ -2059,6 +2107,7 @@
236    boolResult =  mysql_more_results(handle->connection);
237    Tcl_SetObjResult(interp,Tcl_NewBooleanObj(boolResult));
238    return TCL_OK;
239 +#endif
240  }
241  /*
242  
243 @@ -2072,6 +2121,10 @@
244  
245  static int Mysqltcl_NextResult(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
246  {
247 +#if (MYSQL_VERSION_ID < 40107)
248 +  Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
249 +  return TCL_ERROR;
250 +#else
251    MysqlTclHandle *handle;
252    int result = 0;
253  
254 @@ -2098,6 +2151,7 @@
255        Tcl_SetObjResult(interp, Tcl_NewIntObj(handle->res_count));
256    }
257    return TCL_OK;
258 +#endif
259  }
260  /*
261   *----------------------------------------------------------------------
262 @@ -2109,6 +2163,10 @@
263  
264  static int Mysqltcl_WarningCount(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
265  {
266 +#if (MYSQL_VERSION_ID < 40107)
267 +  Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
268 +  return TCL_ERROR;
269 +#else
270    MysqlTclHandle *handle;
271    int count = 0;
272  
273 @@ -2118,6 +2176,7 @@
274    count = mysql_warning_count(handle->connection);
275    Tcl_SetObjResult(interp,Tcl_NewIntObj(count));
276    return TCL_OK;
277 +#endif
278  }
279  /*
280   *----------------------------------------------------------------------
281 @@ -2176,13 +2235,19 @@
282   *    usage: mysql::setserveroption (-
283   *
284   */
285 +#if (MYSQL_VERSION_ID >= 40107)
286  static CONST char* MysqlServerOpt[] =
287      {
288        "-multi_statment_on", "-multi_statment_off",NULL
289      };
290 +#endif
291  
292  static int Mysqltcl_SetServerOption(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
293  {
294 +#if (MYSQL_VERSION_ID < 40107)
295 +  Tcl_AddErrorInfo(interp, FUNCTION_NOT_AVAILABLE);
296 +  return TCL_ERROR;
297 +#else
298    MysqlTclHandle *handle;
299    int idx;
300    enum enum_mysql_set_option mysqlServerOption;
301 @@ -2213,6 +2278,7 @@
302         mysql_server_confl(interp,objc,objv,handle->connection);
303    }
304    return TCL_OK;
305 +#endif
306  }
307  /*
308   *----------------------------------------------------------------------
309 @@ -2228,7 +2294,11 @@
310    if ((handle = mysql_prologue(interp, objc, objv, 2, 2, CL_CONN,
311                             "handle")) == 0)
312      return TCL_ERROR;
313 +#if (MYSQL_VERSION_ID >= 40107)
314    if (mysql_shutdown(handle->connection,SHUTDOWN_DEFAULT)!=0) {
315 +#else
316 +  if (mysql_shutdown(handle->connection)!=0) {
317 +#endif
318         mysql_server_confl(interp,objc,objv,handle->connection);
319    }
320    return TCL_OK;