diff options
| author | Xinchen Hui <laruence@php.net> | 2014-05-21 15:52:36 +0800 |
|---|---|---|
| committer | Xinchen Hui <laruence@php.net> | 2014-05-21 15:52:36 +0800 |
| commit | ad1ef9b6291bb92518a6f2b959d899cebd2149a5 (patch) | |
| tree | 4b4f3cfd52ce42f47ee7617599dae0921d4c68eb /ext/pdo_firebird/firebird_statement.c | |
| parent | 59d74db108a458d08792c59f8e92677ce8c41423 (diff) | |
| download | php-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.c | 73 |
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(¶m); - - convert_to_string_ex(¶m); + 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 = ¶m->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 = ¶m->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); } |
