diff options
Diffstat (limited to 'ext/pdo_dblib/dblib_stmt.c')
-rw-r--r-- | ext/pdo_dblib/dblib_stmt.c | 71 |
1 files changed, 13 insertions, 58 deletions
diff --git a/ext/pdo_dblib/dblib_stmt.c b/ext/pdo_dblib/dblib_stmt.c index 94526a4c6e..03e69a4ac0 100644 --- a/ext/pdo_dblib/dblib_stmt.c +++ b/ext/pdo_dblib/dblib_stmt.c @@ -177,7 +177,7 @@ static int pdo_dblib_stmt_execute(pdo_stmt_t *stmt) pdo_dblib_stmt_cursor_closer(stmt); - if (FAIL == dbcmd(H->link, stmt->active_query_string)) { + if (FAIL == dbcmd(H->link, ZSTR_VAL(stmt->active_query_string))) { return 0; } @@ -251,7 +251,6 @@ static int pdo_dblib_stmt_describe(pdo_stmt_t *stmt, int colno) } col->maxlen = dbcollen(H->link, colno+1); - col->param_type = PDO_PARAM_ZVAL; return 1; } @@ -304,14 +303,12 @@ static int pdo_dblib_stmt_should_stringify_col(pdo_stmt_t *stmt, int coltype) return 0; } -static void pdo_dblib_stmt_stringify_col(int coltype, LPBYTE data, DBINT data_len, zval **ptr) +static void pdo_dblib_stmt_stringify_col(int coltype, LPBYTE data, DBINT data_len, zval *zv) { DBCHAR *tmp_data; - DBINT tmp_data_len; - zval *zv; /* FIXME: We allocate more than we need here */ - tmp_data_len = 32 + (2 * (data_len)); + DBINT tmp_data_len = 32 + (2 * (data_len)); switch (coltype) { case SQLDATETIME: @@ -326,7 +323,6 @@ static void pdo_dblib_stmt_stringify_col(int coltype, LPBYTE data, DBINT data_le tmp_data = emalloc(tmp_data_len); data_len = dbconvert(NULL, coltype, data, data_len, SQLCHAR, (LPBYTE) tmp_data, tmp_data_len); - zv = emalloc(sizeof(zval)); if (data_len > 0) { /* to prevent overflows, tmp_data_len is provided as a dest len for dbconvert() * this code previously passed a dest len of -1 @@ -342,12 +338,9 @@ static void pdo_dblib_stmt_stringify_col(int coltype, LPBYTE data, DBINT data_le } efree(tmp_data); - - *ptr = zv; } -static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, - zend_ulong *len, int *caller_frees) +static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, zval *zv, enum pdo_param_type *type) { pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data; @@ -357,7 +350,6 @@ static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, LPBYTE data; DBCHAR *tmp_data; DBINT data_len, tmp_data_len; - zval *zv = NULL; coltype = dbcoltype(H->link, colno+1); data = dbdata(H->link, colno+1); @@ -365,10 +357,8 @@ static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, if (data_len != 0 || data != NULL) { if (pdo_dblib_stmt_should_stringify_col(stmt, coltype) && dbwillconvert(coltype, SQLCHAR)) { - pdo_dblib_stmt_stringify_col(coltype, data, data_len, &zv); - } - - if (!zv) { + pdo_dblib_stmt_stringify_col(coltype, data, data_len, zv); + } else { switch (coltype) { case SQLCHAR: case SQLVARCHAR: @@ -382,7 +372,6 @@ static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, case SQLVARBINARY: case SQLBINARY: case SQLIMAGE: { - zv = emalloc(sizeof(zval)); ZVAL_STRINGL(zv, (DBCHAR *) data, data_len); break; @@ -407,50 +396,31 @@ static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, #endif ); - zv = emalloc(sizeof(zval)); ZVAL_STRINGL(zv, tmp_data, dl); efree(tmp_data); break; } - case SQLFLT4: { - zv = emalloc(sizeof(zval)); + case SQLFLT4: ZVAL_DOUBLE(zv, *(DBFLT4 *) data); - break; - } - case SQLFLT8: { - zv = emalloc(sizeof(zval)); + case SQLFLT8: ZVAL_DOUBLE(zv, *(DBFLT8 *) data); - break; - } - case SQLINT8: { - zv = emalloc(sizeof(zval)); + case SQLINT8: ZVAL_LONG(zv, *(DBBIGINT *) data); - break; - } - case SQLINT4: { - zv = emalloc(sizeof(zval)); + case SQLINT4: ZVAL_LONG(zv, *(DBINT *) data); - break; - } - case SQLINT2: { - zv = emalloc(sizeof(zval)); + case SQLINT2: ZVAL_LONG(zv, *(DBSMALLINT *) data); - break; - } case SQLINT1: - case SQLBIT: { - zv = emalloc(sizeof(zval)); + case SQLBIT: ZVAL_LONG(zv, *(DBTINYINT *) data); - break; - } case SQLDECIMAL: case SQLNUMERIC: case SQLMONEY: @@ -458,10 +428,7 @@ static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, case SQLMONEYN: { DBFLT8 float_value; dbconvert(NULL, coltype, data, 8, SQLFLT8, (LPBYTE) &float_value, -1); - - zv = emalloc(sizeof(zval)); ZVAL_DOUBLE(zv, float_value); - break; } @@ -472,12 +439,10 @@ static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, tmp_data = safe_emalloc(tmp_data_len, sizeof(char), 1); data_len = dbconvert(NULL, SQLUNIQUE, data, data_len, SQLCHAR, (LPBYTE) tmp_data, tmp_data_len); php_strtoupper(tmp_data, data_len); - zv = emalloc(sizeof(zval)); ZVAL_STRINGL(zv, tmp_data, data_len); efree(tmp_data); } else { /* 16-byte binary representation */ - zv = emalloc(sizeof(zval)); ZVAL_STRINGL(zv, (DBCHAR *) data, 16); } break; @@ -485,7 +450,7 @@ static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, default: { if (dbwillconvert(coltype, SQLCHAR)) { - pdo_dblib_stmt_stringify_col(coltype, data, data_len, &zv); + pdo_dblib_stmt_stringify_col(coltype, data, data_len, zv); } break; @@ -494,16 +459,6 @@ static int pdo_dblib_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, } } - if (zv != NULL) { - *ptr = (char*)zv; - *len = sizeof(zval); - } else { - *ptr = NULL; - *len = 0; - } - - *caller_frees = 1; - return 1; } |