Skip to content

Commit 2700ac0

Browse files
committed
Tidy up
1 parent be0a1bd commit 2700ac0

File tree

1 file changed

+85
-89
lines changed

1 file changed

+85
-89
lines changed

ibase_query.c

Lines changed: 85 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1514,18 +1514,18 @@ void _php_ibase_insert_alias(HashTable *ht, const char *alias, size_t alias_len)
15141514

15151515
static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) /* {{{ */
15161516
{
1517-
zval *result_arg;
1517+
zval *res_arg, *result;
15181518
zend_long flag = 0;
15191519
zend_long i, array_cnt = 0;
15201520
ibase_query *ib_query;
15211521

15221522
RESET_ERRMSG;
15231523

1524-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|l", &result_arg, &flag)) {
1524+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|l", &res_arg, &flag)) {
15251525
RETURN_FALSE;
15261526
}
15271527

1528-
if(_php_ibase_fetch_query_res(result_arg, &ib_query)) {
1528+
if(_php_ibase_fetch_query_res(res_arg, &ib_query)) {
15291529
RETURN_FALSE;
15301530
}
15311531

@@ -1573,113 +1573,109 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type)
15731573

15741574
for(i = 0; i < ib_query->out_fields_count; ++i) {
15751575
XSQLVAR *var = &ib_query->out_sqlda->sqlvar[i];
1576+
result = zend_hash_get_current_data(ht_ret);
15761577

1577-
// TODO: just continue and unnest. All fields are set to NULL already
1578-
if (((var->sqltype & 1) == 0) || *var->sqlind != -1) {
1579-
zval *result = zend_hash_get_current_data(ht_ret);
1580-
1581-
switch (var->sqltype & ~1) {
1582-
1583-
default:
1584-
_php_ibase_var_zval(result, var->sqldata, var->sqltype, var->sqllen,
1585-
var->sqlscale, flag);
1586-
break;
1587-
case SQL_BLOB:
1588-
if (flag & PHP_IBASE_FETCH_BLOBS) { /* fetch blob contents into hash */
1589-
1590-
ibase_blob blob_handle;
1591-
zend_ulong max_len = 0;
1592-
static char bl_items[] = {isc_info_blob_total_length};
1593-
char bl_info[20];
1594-
unsigned short i;
1595-
1596-
blob_handle.bl_handle = 0;
1597-
blob_handle.bl_qd = *(ISC_QUAD *) var->sqldata;
1578+
switch (var->sqltype & ~1) {
15981579

1599-
if (isc_open_blob(IB_STATUS, &ib_query->link->handle, &ib_query->trans->handle,
1600-
&blob_handle.bl_handle, &blob_handle.bl_qd)) {
1601-
_php_ibase_error();
1602-
goto _php_ibase_fetch_error;
1603-
}
1580+
default:
1581+
_php_ibase_var_zval(result, var->sqldata, var->sqltype, var->sqllen,
1582+
var->sqlscale, flag);
1583+
break;
1584+
case SQL_BLOB:
1585+
if (flag & PHP_IBASE_FETCH_BLOBS) { /* fetch blob contents into hash */
16041586

1605-
if (isc_blob_info(IB_STATUS, &blob_handle.bl_handle, sizeof(bl_items),
1606-
bl_items, sizeof(bl_info), bl_info)) {
1607-
_php_ibase_error();
1608-
goto _php_ibase_fetch_error;
1609-
}
1587+
ibase_blob blob_handle;
1588+
zend_ulong max_len = 0;
1589+
static char bl_items[] = {isc_info_blob_total_length};
1590+
char bl_info[20];
1591+
unsigned short i;
16101592

1611-
/* find total length of blob's data */
1612-
for (i = 0; i < sizeof(bl_info); ) {
1613-
unsigned short item_len;
1614-
char item = bl_info[i++];
1593+
blob_handle.bl_handle = 0;
1594+
blob_handle.bl_qd = *(ISC_QUAD *) var->sqldata;
16151595

1616-
if (item == isc_info_end || item == isc_info_truncated ||
1617-
item == isc_info_error || i >= sizeof(bl_info)) {
1596+
if (isc_open_blob(IB_STATUS, &ib_query->link->handle, &ib_query->trans->handle,
1597+
&blob_handle.bl_handle, &blob_handle.bl_qd)) {
1598+
_php_ibase_error();
1599+
goto _php_ibase_fetch_error;
1600+
}
16181601

1619-
_php_ibase_module_error("Could not determine BLOB size (internal error)"
1620-
);
1621-
goto _php_ibase_fetch_error;
1622-
}
1602+
if (isc_blob_info(IB_STATUS, &blob_handle.bl_handle, sizeof(bl_items),
1603+
bl_items, sizeof(bl_info), bl_info)) {
1604+
_php_ibase_error();
1605+
goto _php_ibase_fetch_error;
1606+
}
16231607

1624-
item_len = (unsigned short) isc_vax_integer(&bl_info[i], 2);
1608+
/* find total length of blob's data */
1609+
for (i = 0; i < sizeof(bl_info); ) {
1610+
unsigned short item_len;
1611+
char item = bl_info[i++];
16251612

1626-
if (item == isc_info_blob_total_length) {
1627-
max_len = isc_vax_integer(&bl_info[i+2], item_len);
1628-
break;
1629-
}
1630-
i += item_len+2;
1631-
}
1613+
if (item == isc_info_end || item == isc_info_truncated ||
1614+
item == isc_info_error || i >= sizeof(bl_info)) {
16321615

1633-
if (max_len == 0) {
1634-
ZVAL_STRING(result, "");
1635-
} else if (SUCCESS != _php_ibase_blob_get(result, &blob_handle,
1636-
max_len)) {
1616+
_php_ibase_module_error("Could not determine BLOB size (internal error)"
1617+
);
16371618
goto _php_ibase_fetch_error;
16381619
}
16391620

1640-
if (isc_close_blob(IB_STATUS, &blob_handle.bl_handle)) {
1641-
_php_ibase_error();
1642-
goto _php_ibase_fetch_error;
1621+
item_len = (unsigned short) isc_vax_integer(&bl_info[i], 2);
1622+
1623+
if (item == isc_info_blob_total_length) {
1624+
max_len = isc_vax_integer(&bl_info[i+2], item_len);
1625+
break;
16431626
}
1627+
i += item_len+2;
1628+
}
16441629

1645-
} else { /* blob id only */
1646-
ISC_QUAD bl_qd = *(ISC_QUAD *) var->sqldata;
1647-
ZVAL_NEW_STR(result, _php_ibase_quad_to_string(bl_qd));
1630+
if (max_len == 0) {
1631+
ZVAL_STRING(result, "");
1632+
} else if (SUCCESS != _php_ibase_blob_get(result, &blob_handle,
1633+
max_len)) {
1634+
goto _php_ibase_fetch_error;
16481635
}
1649-
break;
1650-
case SQL_ARRAY:
1651-
if (flag & PHP_IBASE_FETCH_ARRAYS) { /* array can be *huge* so only fetch if asked */
1652-
ISC_QUAD ar_qd = *(ISC_QUAD *) var->sqldata;
1653-
ibase_array *ib_array = &ib_query->out_array[array_cnt++];
1654-
void *ar_data = emalloc(ib_array->ar_size);
1655-
1656-
if (isc_array_get_slice(IB_STATUS, &ib_query->link->handle,
1657-
&ib_query->trans->handle, &ar_qd, &ib_array->ar_desc,
1658-
ar_data, &ib_array->ar_size)) {
1659-
_php_ibase_error();
1660-
efree(ar_data);
1661-
goto _php_ibase_fetch_error;
1662-
}
16631636

1664-
if (FAILURE == _php_ibase_arr_zval(result, ar_data, ib_array->ar_size, ib_array,
1665-
0, flag)) {
1666-
efree(ar_data);
1667-
goto _php_ibase_fetch_error;
1668-
}
1637+
if (isc_close_blob(IB_STATUS, &blob_handle.bl_handle)) {
1638+
_php_ibase_error();
1639+
goto _php_ibase_fetch_error;
1640+
}
1641+
1642+
} else { /* blob id only */
1643+
ISC_QUAD bl_qd = *(ISC_QUAD *) var->sqldata;
1644+
ZVAL_NEW_STR(result, _php_ibase_quad_to_string(bl_qd));
1645+
}
1646+
break;
1647+
case SQL_ARRAY:
1648+
if (flag & PHP_IBASE_FETCH_ARRAYS) { /* array can be *huge* so only fetch if asked */
1649+
ISC_QUAD ar_qd = *(ISC_QUAD *) var->sqldata;
1650+
ibase_array *ib_array = &ib_query->out_array[array_cnt++];
1651+
void *ar_data = emalloc(ib_array->ar_size);
1652+
1653+
if (isc_array_get_slice(IB_STATUS, &ib_query->link->handle,
1654+
&ib_query->trans->handle, &ar_qd, &ib_array->ar_desc,
1655+
ar_data, &ib_array->ar_size)) {
1656+
_php_ibase_error();
16691657
efree(ar_data);
1658+
goto _php_ibase_fetch_error;
1659+
}
16701660

1671-
} else { /* blob id only */
1672-
ISC_QUAD ar_qd = *(ISC_QUAD *) var->sqldata;
1673-
ZVAL_NEW_STR(result, _php_ibase_quad_to_string(ar_qd));
1661+
if (FAILURE == _php_ibase_arr_zval(result, ar_data, ib_array->ar_size, ib_array,
1662+
0, flag)) {
1663+
efree(ar_data);
1664+
goto _php_ibase_fetch_error;
16741665
}
1675-
break;
1676-
_php_ibase_fetch_error:
1677-
RETURN_FALSE;
1678-
} /* switch */
1679-
}
1666+
efree(ar_data);
1667+
1668+
} else { /* blob id only */
1669+
ISC_QUAD ar_qd = *(ISC_QUAD *) var->sqldata;
1670+
ZVAL_NEW_STR(result, _php_ibase_quad_to_string(ar_qd));
1671+
}
1672+
break;
1673+
_php_ibase_fetch_error:
1674+
RETURN_FALSE;
1675+
} /* switch */
16801676

16811677
zend_hash_move_forward(ht_ret);
1682-
} /* for field */
1678+
}
16831679

16841680
RETVAL_ARR(ht_ret);
16851681
}

0 commit comments

Comments
 (0)