/* if we are applying case conversions on column names, do so now */
if (stmt->dbh->native_case != stmt->dbh->desired_case && stmt->dbh->desired_case != PDO_CASE_NATURAL) {
- char *s = stmt->columns[col].name;
+ char *s = stmt->columns[col].name->val;
switch (stmt->dbh->desired_case) {
case PDO_CASE_UPPER:
if (stmt->bound_columns) {
struct pdo_bound_param_data *param;
- if ((param = zend_hash_str_find_ptr(stmt->bound_columns,
- stmt->columns[col].name, stmt->columns[col].namelen)) != NULL) {
+ if ((param = zend_hash_find_ptr(stmt->bound_columns,
+ stmt->columns[col].name)) != NULL) {
param->paramno = col;
}
}
int i;
for (i = 0; i < stmt->column_count; i++) {
- if (strncmp(stmt->columns[i].name, param->name->val, param->name->len + 1) == 0) {
+ if (stmt->columns[i].name->len == param->name->len &&
+ strncmp(stmt->columns[i].name->val, param->name->val, param->name->len + 1) == 0) {
param->paramno = i;
break;
}
switch (how) {
case PDO_FETCH_ASSOC:
- add_assoc_zval(return_value, stmt->columns[i].name, &val);
+ zend_symtable_update(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val);
break;
case PDO_FETCH_KEY_PAIR:
case PDO_FETCH_USE_DEFAULT:
case PDO_FETCH_BOTH:
- add_assoc_zval(return_value, stmt->columns[i].name, &val);
+ zend_symtable_update(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val);
if (Z_REFCOUNTED(val)) {
Z_ADDREF(val);
}
- add_next_index_zval(return_value, &val);
+ zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &val);
break;
case PDO_FETCH_NAMED:
/* already have an item with this name? */
{
zval *curr_val;
- if ((curr_val = zend_hash_str_find(Z_ARRVAL_P(return_value), stmt->columns[i].name,
- strlen(stmt->columns[i].name)))) {
+ if ((curr_val = zend_hash_find(Z_ARRVAL_P(return_value), stmt->columns[i].name))) {
zval arr;
if (Z_TYPE_P(curr_val) != IS_ARRAY) {
/* a little bit of black magic here:
ZVAL_COPY_VALUE(&cur, curr_val);
ZVAL_COPY_VALUE(curr_val, &arr);
- add_next_index_zval(&arr, &cur);
+ zend_hash_next_index_insert_new(Z_ARRVAL(arr), &cur);
} else {
ZVAL_COPY_VALUE(&arr, curr_val);
}
- add_next_index_zval(&arr, &val);
+ zend_hash_next_index_insert_new(Z_ARRVAL(arr), &val);
} else {
- add_assoc_zval(return_value, stmt->columns[i].name, &val);
+ zend_hash_update(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val);
}
}
break;
case PDO_FETCH_NUM:
- add_next_index_zval(return_value, &val);
+ zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &val);
break;
case PDO_FETCH_OBJ:
case PDO_FETCH_INTO:
- zend_update_property(NULL, return_value,
- stmt->columns[i].name, stmt->columns[i].namelen,
+ zend_update_property_ex(NULL, return_value,
+ stmt->columns[i].name,
&val);
zval_ptr_dtor(&val);
break;
case PDO_FETCH_CLASS:
if ((flags & PDO_FETCH_SERIALIZE) == 0 || idx) {
- zend_update_property(ce, return_value,
- stmt->columns[i].name, stmt->columns[i].namelen,
+ zend_update_property_ex(ce, return_value,
+ stmt->columns[i].name,
&val);
zval_ptr_dtor(&val);
} else {
if (return_all) {
if ((flags & PDO_FETCH_UNIQUE) == PDO_FETCH_UNIQUE) {
- add_assoc_zval(return_all, Z_STRVAL(grp_val), return_value);
+ zend_symtable_update(Z_ARRVAL_P(return_all), Z_STR(grp_val), return_value);
} else {
zval grp;
if ((pgrp = zend_symtable_find(Z_ARRVAL_P(return_all), Z_STR(grp_val))) == NULL) {
array_init(&grp);
- add_assoc_zval(return_all, Z_STRVAL(grp_val), &grp);
+ zend_symtable_update(Z_ARRVAL_P(return_all), Z_STR(grp_val), &grp);
} else {
ZVAL_COPY_VALUE(&grp, pgrp);
}
- add_next_index_zval(&grp, return_value);
+ zend_hash_next_index_insert(Z_ARRVAL(grp), return_value);
}
zval_dtor(&grp_val);
}
} else {
array_init(return_value);
do {
- add_next_index_zval(return_value, &data);
+ zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &data);
} while (do_fetch(stmt, 1, &data, how | flags, PDO_FETCH_ORI_NEXT, 0, 0));
}
}
/* add stock items */
col = &stmt->columns[colno];
- add_assoc_string(return_value, "name", col->name);
+ add_assoc_str(return_value, "name", zend_string_copy(col->name));
add_assoc_long(return_value, "len", col->maxlen); /* FIXME: unsigned ? */
add_assoc_long(return_value, "precision", col->precision);
if (col->param_type != PDO_PARAM_ZVAL) {
struct pdo_column_data *cols = stmt->columns;
for (i = 0; i < stmt->column_count; i++) {
- efree(cols[i].name);
+ zend_string_release(cols[i].name);
}
efree(stmt->columns);
stmt->columns = NULL;
for (i = 0; i < stmt->column_count; i++) {
if (cols[i].name) {
- efree(cols[i].name);
+ zend_string_release(cols[i].name);
cols[i].name = NULL;
}
}
/* TODO: replace this with a hash of available column names to column
* numbers */
for (colno = 0; colno < stmt->column_count; colno++) {
- if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
+ if (stmt->columns[colno].name->len == Z_STRLEN_P(member) &&
+ strncmp(stmt->columns[colno].name->val, Z_STRVAL_P(member), Z_STRLEN_P(member)) == 0) {
fetch_value(stmt, rv, colno, NULL);
//???
//Z_SET_REFCOUNT_P(rv, 0);
/* TODO: replace this with a hash of available column names to column
* numbers */
for (colno = 0; colno < stmt->column_count; colno++) {
- if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
+ if (stmt->columns[colno].name->len == Z_STRLEN_P(member) &&
+ strncmp(stmt->columns[colno].name->val, Z_STRVAL_P(member), Z_STRLEN_P(member)) == 0) {
return 1;
}
}
zval val;
fetch_value(stmt, &val, i, NULL);
- zend_hash_str_update(stmt->std.properties, stmt->columns[i].name, stmt->columns[i].namelen, &val);
+ zend_hash_update(stmt->std.properties, stmt->columns[i].name, &val);
}
return stmt->std.properties;