msg, einfo->dberr, einfo->severity, stmt ? stmt->active_query_string : "");
add_next_index_long(info, einfo->dberr);
- // TODO: avoid reallocation ???
add_next_index_string(info, message);
efree(message);
add_next_index_long(info, einfo->oserr);
static int dblib_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquotedlen, char **quoted, int *quotedlen, enum pdo_param_type paramtype TSRMLS_DC)
{
- pdo_dblib_db_handle *H = (pdo_dblib_db_handle *)dbh->driver_data;
+
+ /* pdo_dblib_db_handle *H = (pdo_dblib_db_handle *)dbh->driver_data; */
+
char *q;
int l = 1;
-
+
*quoted = q = safe_emalloc(2, unquotedlen, 3);
*q++ = '\'';
static int pdo_dblib_transaction_cmd(const char *cmd, pdo_dbh_t *dbh TSRMLS_DC)
{
pdo_dblib_db_handle *H = (pdo_dblib_db_handle *)dbh->driver_data;
- RETCODE ret;
if (FAIL == dbcmd(H->link, cmd)) {
return 0;
return id;
}
+static int dblib_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val TSRMLS_DC)
+{
+ switch(attr) {
+ case PDO_ATTR_TIMEOUT:
+ return 0;
+ default:
+ return 1;
+ }
+
+}
+
+static int dblib_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *return_value TSRMLS_DC)
+{
+ /* dblib_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data; */
+ return 0;
+}
+
static struct pdo_dbh_methods dblib_methods = {
dblib_handle_closer,
dblib_handle_preparer,
dblib_handle_begin, /* begin */
dblib_handle_commit, /* commit */
dblib_handle_rollback, /* rollback */
- NULL, /*set attr */
+ dblib_set_attr, /*set attr */
dblib_handle_last_id, /* last insert id */
dblib_fetch_error, /* fetch error */
- NULL, /* get attr */
+ dblib_get_attribute, /* get attr */
NULL, /* check liveness */
NULL, /* get driver methods */
NULL, /* request shutdown */
php_pdo_parse_data_source(dbh->data_source, dbh->data_source_len, vars, nvars);
+ if (driver_options) {
+ int timeout = pdo_attr_lval(driver_options, PDO_ATTR_TIMEOUT, 30 TSRMLS_CC);
+ dbsetlogintime(timeout); /* Connection/Login Timeout */
+ dbsettime(timeout); /* Statement Timeout */
+ }
+
H = pecalloc(1, sizeof(*H), dbh->is_persistent);
H->login = dblogin();
H->err.sqlstate = dbh->error_code;
goto cleanup;
}
- DBERRHANDLE(H->login, (EHANDLEFUNC) error_handler);
- DBMSGHANDLE(H->login, (MHANDLEFUNC) msg_handler);
+ DBERRHANDLE(H->login, (EHANDLEFUNC) pdo_dblib_error_handler);
+ DBMSGHANDLE(H->login, (MHANDLEFUNC) pdo_dblib_msg_handler);
if(vars[5].optval) {
for(i=0;i<nvers;i++) {
#endif
#endif
-int error_handler(DBPROCESS *dbproc, int severity, int dberr,
+int pdo_dblib_error_handler(DBPROCESS *dbproc, int severity, int dberr,
int oserr, char *dberrstr, char *oserrstr)
{
pdo_dblib_err *einfo;
einfo->severity = severity;
einfo->oserr = oserr;
einfo->dberr = dberr;
+
if (einfo->oserrstr) {
efree(einfo->oserrstr);
}
}
strcpy(einfo->sqlstate, state);
-#if 0
- php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "dblib error: %d %s (severity %d)",
- dberr, dberrstr, severity);
-#endif
-
return INT_CANCEL;
}
-int msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate,
+int pdo_dblib_msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate,
int severity, char *msgtext, char *srvname, char *procname, DBUSMALLINT line)
{
pdo_dblib_err *einfo;
einfo->lastmsg = estrdup(msgtext);
}
-#if 0
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "dblib message: %s (severity %d)", msgtext, severity);
-#endif
-
return 0;
}
return FAILURE;
}
- /* TODO:
-
- dbsetifile()
- dbsetmaxprocs()
- dbsetlogintime()
- dbsettime()
-
- */
-
#if !PHP_DBLIB_IS_MSSQL
- dberrhandle(error_handler);
- dbmsghandle(msg_handler);
+ dberrhandle((EHANDLEFUNC) pdo_dblib_error_handler);
+ dbmsghandle((MHANDLEFUNC) pdo_dblib_msg_handler);
#endif
return SUCCESS;
# define DBSETOPT(a, b, c) dbsetopt(a, b, c)
# define SYBESMSG SQLESMSG
# define SYBESEOF SQLESEOF
-# define SYBEFCON SQLECONN // SQLEFCON does not exist in MS SQL Server.
+# define SYBEFCON SQLECONN /* SQLEFCON does not exist in MS SQL Server. */
# define SYBEMEM SQLEMEM
# define SYBEPWD SQLEPWD
typedef float DBFLT4;
#endif
-int error_handler(DBPROCESS *dbproc, int severity, int dberr,
+int pdo_dblib_error_handler(DBPROCESS *dbproc, int severity, int dberr,
int oserr, char *dberrstr, char *oserrstr);
-int msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate,
+int pdo_dblib_msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate,
int severity, char *msgtext, char *srvname, char *procname, DBUSMALLINT line);
extern pdo_driver_t pdo_dblib_driver;