summaryrefslogtreecommitdiff
path: root/ext/pdo_dblib
diff options
context:
space:
mode:
authorSTANLEY SUFFICOOL <ssufficool@php.net>2014-10-22 23:14:23 -0700
committerSTANLEY SUFFICOOL <ssufficool@php.net>2014-10-22 23:17:28 -0700
commit560649283cdd6b2c48a8fcd9e62f3de4f92d969f (patch)
tree38f6de5d9641bac91df1002e7ab42a012d9070fc /ext/pdo_dblib
parent5ba114e0a6828cb49a46ce79d388c23e4c018b7a (diff)
downloadphp-git-560649283cdd6b2c48a8fcd9e62f3de4f92d969f.tar.gz
Implement Bug #66062 - pdo_dblib enable timeout parameter
Diffstat (limited to 'ext/pdo_dblib')
-rw-r--r--ext/pdo_dblib/dblib_driver.c39
-rw-r--r--ext/pdo_dblib/pdo_dblib.c28
-rw-r--r--ext/pdo_dblib/php_pdo_dblib_int.h6
3 files changed, 39 insertions, 34 deletions
diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c
index 40d4114879..323c805fca 100644
--- a/ext/pdo_dblib/dblib_driver.c
+++ b/ext/pdo_dblib/dblib_driver.c
@@ -61,7 +61,6 @@ static int dblib_fetch_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info TSRMLS
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);
@@ -145,10 +144,12 @@ static zend_long dblib_handle_doer(pdo_dbh_t *dbh, const char *sql, zend_long sq
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++ = '\'';
@@ -174,7 +175,6 @@ static int dblib_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, int unquote
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;
@@ -246,6 +246,23 @@ char *dblib_handle_last_id(pdo_dbh_t *dbh, const char *name, unsigned int *len T
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,
@@ -254,10 +271,10 @@ static struct pdo_dbh_methods dblib_methods = {
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 */
@@ -303,6 +320,12 @@ static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
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;
@@ -311,8 +334,8 @@ static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options TSRMLS_
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++) {
diff --git a/ext/pdo_dblib/pdo_dblib.c b/ext/pdo_dblib/pdo_dblib.c
index 3afd885df5..4cd0749cf8 100644
--- a/ext/pdo_dblib/pdo_dblib.c
+++ b/ext/pdo_dblib/pdo_dblib.c
@@ -86,7 +86,7 @@ ZEND_GET_MODULE(pdo_dblib)
#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;
@@ -103,6 +103,7 @@ int error_handler(DBPROCESS *dbproc, int severity, int dberr,
einfo->severity = severity;
einfo->oserr = oserr;
einfo->dberr = dberr;
+
if (einfo->oserrstr) {
efree(einfo->oserrstr);
}
@@ -128,16 +129,10 @@ int error_handler(DBPROCESS *dbproc, int severity, int dberr,
}
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;
@@ -156,10 +151,6 @@ int msg_handler(DBPROCESS *dbproc, DBINT msgno, int msgstate,
einfo->lastmsg = estrdup(msgtext);
}
-#if 0
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "dblib message: %s (severity %d)", msgtext, severity);
-#endif
-
return 0;
}
@@ -196,18 +187,9 @@ PHP_MINIT_FUNCTION(pdo_dblib)
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;
diff --git a/ext/pdo_dblib/php_pdo_dblib_int.h b/ext/pdo_dblib/php_pdo_dblib_int.h
index e247b5c19e..3b341478d7 100644
--- a/ext/pdo_dblib/php_pdo_dblib_int.h
+++ b/ext/pdo_dblib/php_pdo_dblib_int.h
@@ -37,7 +37,7 @@
# 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
@@ -89,10 +89,10 @@ typedef unsigned char *LPBYTE;
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;