summaryrefslogtreecommitdiff
path: root/ext/pdo_firebird/firebird_statement.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-05-21 15:52:36 +0800
committerXinchen Hui <laruence@php.net>2014-05-21 15:52:36 +0800
commitad1ef9b6291bb92518a6f2b959d899cebd2149a5 (patch)
tree4b4f3cfd52ce42f47ee7617599dae0921d4c68eb /ext/pdo_firebird/firebird_statement.c
parent59d74db108a458d08792c59f8e92677ce8c41423 (diff)
downloadphp-git-ad1ef9b6291bb92518a6f2b959d899cebd2149a5.tar.gz
Refactored ext/pdo_firebird (didn't do test)
Diffstat (limited to 'ext/pdo_firebird/firebird_statement.c')
-rw-r--r--ext/pdo_firebird/firebird_statement.c73
1 files changed, 41 insertions, 32 deletions
diff --git a/ext/pdo_firebird/firebird_statement.c b/ext/pdo_firebird/firebird_statement.c
index 5eb2e977e7..586960cbf7 100644
--- a/ext/pdo_firebird/firebird_statement.c
+++ b/ext/pdo_firebird/firebird_statement.c
@@ -422,9 +422,8 @@ static int firebird_bind_blob(pdo_stmt_t *stmt, ISC_QUAD *blob_id, zval *param T
return 0;
}
- SEPARATE_ZVAL(&param);
-
- convert_to_string_ex(&param);
+ SEPARATE_ZVAL(param);
+ convert_to_string_ex(param);
for (rem_cnt = Z_STRLEN_P(param); rem_cnt > 0; rem_cnt -= chunk_size) {
@@ -438,7 +437,7 @@ static int firebird_bind_blob(pdo_stmt_t *stmt, ISC_QUAD *blob_id, zval *param T
put_cnt += chunk_size;
}
- zval_dtor(param);
+ zval_ptr_dtor(param);
if (isc_close_blob(H->isc_status, &h)) {
RECORD_ERROR(stmt);
@@ -464,11 +463,11 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
return 0;
}
if (param->is_param && param->paramno == -1) {
- long *index;
+ zval *index;
/* try to determine the index by looking in the named_params hash */
- if (SUCCESS == zend_hash_find(S->named_params, param->name, param->namelen+1, (void*)&index)) {
- param->paramno = *index;
+ if ((index = zend_hash_find(S->named_params, param->name)) != NULL) {
+ param->paramno = Z_LVAL_P(index);
} else {
/* ... or by looking in the input descriptor */
int i;
@@ -476,10 +475,10 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
for (i = 0; i < sqlda->sqld; ++i) {
XSQLVAR *var = &sqlda->sqlvar[i];
- if ((var->aliasname_length && !strncasecmp(param->name, var->aliasname,
- min(param->namelen, var->aliasname_length)))
- || (var->sqlname_length && !strncasecmp(param->name, var->sqlname,
- min(param->namelen, var->sqlname_length)))) {
+ if ((var->aliasname_length && !strncasecmp(param->name->val, var->aliasname,
+ min(param->name->len, var->aliasname_length)))
+ || (var->sqlname_length && !strncasecmp(param->name->val, var->sqlname,
+ min(param->name->len, var->sqlname_length)))) {
param->paramno = i;
break;
}
@@ -498,6 +497,7 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
char *value;
unsigned long value_len;
int caller_frees;
+ zval *parameter;
case PDO_PARAM_EVT_ALLOC:
if (param->is_param) {
@@ -516,6 +516,11 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
}
*var->sqlind = 0;
+ if (Z_ISREF(param->parameter)) {
+ parameter = Z_REFVAL(param->parameter);
+ } else {
+ parameter = &param->parameter;
+ }
switch (var->sqltype & ~1) {
case SQL_ARRAY:
@@ -524,24 +529,23 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
return 0;
case SQL_BLOB:
- return firebird_bind_blob(stmt, (ISC_QUAD*)var->sqldata,
- param->parameter TSRMLS_CC);
+ return firebird_bind_blob(stmt, (ISC_QUAD*)var->sqldata, parameter TSRMLS_CC);
}
/* check if a NULL should be inserted */
- switch (Z_TYPE_P(param->parameter)) {
+ switch (Z_TYPE_P(parameter)) {
int force_null;
case IS_LONG:
/* keep the allow-NULL flag */
var->sqltype = (sizeof(long) == 8 ? SQL_INT64 : SQL_LONG) | (var->sqltype & 1);
- var->sqldata = (void*)&Z_LVAL_P(param->parameter);
+ var->sqldata = (void*)&Z_LVAL_P(parameter);
var->sqllen = sizeof(long);
break;
case IS_DOUBLE:
/* keep the allow-NULL flag */
var->sqltype = SQL_DOUBLE | (var->sqltype & 1);
- var->sqldata = (void*)&Z_DVAL_P(param->parameter);
+ var->sqldata = (void*)&Z_DVAL_P(parameter);
var->sqllen = sizeof(double);
break;
case IS_STRING:
@@ -557,13 +561,13 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
case SQL_TIMESTAMP:
case SQL_TYPE_DATE:
case SQL_TYPE_TIME:
- force_null = (Z_STRLEN_P(param->parameter) == 0);
+ force_null = (Z_STRLEN_P(parameter) == 0);
}
if (!force_null) {
/* keep the allow-NULL flag */
var->sqltype = SQL_TEXT | (var->sqltype & 1);
- var->sqldata = Z_STRVAL_P(param->parameter);
- var->sqllen = Z_STRLEN_P(param->parameter);
+ var->sqldata = Z_STRVAL_P(parameter);
+ var->sqllen = Z_STRLEN_P(parameter);
break;
}
case IS_NULL:
@@ -592,30 +596,35 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
value = NULL;
value_len = 0;
caller_frees = 0;
+ if (Z_ISREF(param->parameter)) {
+ parameter = Z_REFVAL(param->parameter);
+ } else {
+ parameter = &param->parameter;
+ }
if (firebird_stmt_get_col(stmt, param->paramno, &value, &value_len, &caller_frees TSRMLS_CC)) {
switch (PDO_PARAM_TYPE(param->param_type)) {
case PDO_PARAM_STR:
if (value) {
- ZVAL_STRINGL(param->parameter, value, value_len, 1);
+ ZVAL_STRINGL(parameter, value, value_len);
break;
}
case PDO_PARAM_INT:
if (value) {
- ZVAL_LONG(param->parameter, *(long*)value);
+ ZVAL_LONG(parameter, *(long*)value);
break;
}
- case PDO_PARAM_EVT_NORMALIZE:
- if (!param->is_param) {
- char *s = param->name;
- while (*s != '\0') {
- *s = toupper(*s);
- s++;
- }
- }
- break;
+ case PDO_PARAM_EVT_NORMALIZE:
+ if (!param->is_param) {
+ char *s = param->name->val;
+ while (*s != '\0') {
+ *s = toupper(*s);
+ s++;
+ }
+ }
+ break;
default:
- ZVAL_NULL(param->parameter);
+ ZVAL_NULL(parameter);
}
if (value && caller_frees) {
efree(value);
@@ -660,7 +669,7 @@ static int firebird_stmt_get_attribute(pdo_stmt_t *stmt, long attr, zval *val TS
return 0;
case PDO_ATTR_CURSOR_NAME:
if (*S->name) {
- ZVAL_STRING(val,S->name,1);
+ ZVAL_STRING(val, S->name);
} else {
ZVAL_NULL(val);
}