summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott MacVicar <scottmac@php.net>2008-12-24 19:21:42 +0000
committerScott MacVicar <scottmac@php.net>2008-12-24 19:21:42 +0000
commitaaa89d7adbae430488293a91931b9bd0944af80d (patch)
tree6277b2fed4f88fcb24c89614670468f4dc4a7765
parent0d860e26caba0c4ff0e3b145d44bac164d5428a6 (diff)
downloadphp-git-aaa89d7adbae430488293a91931b9bd0944af80d.tar.gz
Stop using sqlite3_aggregate_count() as this is now deprecated.
-rw-r--r--ext/sqlite3/php_sqlite3_structs.h6
-rw-r--r--ext/sqlite3/sqlite3.c33
-rw-r--r--ext/sqlite3/tests/sqlite3_25_create_aggregate.phpt2
3 files changed, 27 insertions, 14 deletions
diff --git a/ext/sqlite3/php_sqlite3_structs.h b/ext/sqlite3/php_sqlite3_structs.h
index c307c59ed5..c30f90dd8e 100644
--- a/ext/sqlite3/php_sqlite3_structs.h
+++ b/ext/sqlite3/php_sqlite3_structs.h
@@ -72,6 +72,12 @@ typedef struct _php_sqlite3_db_object {
zend_llist free_list;
} php_sqlite3_db_object;
+/* Structure for SQLite Database object. */
+typedef struct _php_sqlite3_agg_context {
+ zval *zval_context;
+ long row_count;
+} php_sqlite3_agg_context;
+
typedef struct _php_sqlite3_stmt_object php_sqlite3_stmt;
typedef struct _php_sqlite3_result_object php_sqlite3_result;
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index 4519f40248..f719996648 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -619,7 +619,7 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
int i;
int ret;
int fake_argc;
- zval **agg_context = NULL;
+ php_sqlite3_agg_context *agg_context = NULL;
if (is_agg) {
is_agg = 2;
@@ -643,16 +643,17 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
if (is_agg) {
/* summon the aggregation context */
- agg_context = (zval**)sqlite3_aggregate_context(context, sizeof(zval*));
- if (!*agg_context) {
- MAKE_STD_ZVAL(*agg_context);
- ZVAL_NULL(*agg_context);
+ agg_context = (php_sqlite3_agg_context *)sqlite3_aggregate_context(context, sizeof(php_sqlite3_agg_context));
+
+ if (!agg_context->zval_context) {
+ MAKE_STD_ZVAL(agg_context->zval_context);
+ ZVAL_NULL(agg_context->zval_context);
}
- zargs[0] = agg_context;
+ zargs[0] = &agg_context->zval_context;
zargs[1] = emalloc(sizeof(zval*));
MAKE_STD_ZVAL(*zargs[1]);
- ZVAL_LONG(*zargs[1], sqlite3_aggregate_count(context));
+ ZVAL_LONG(*zargs[1], agg_context->row_count);
}
for (i = 0; i < argc; i++) {
@@ -727,20 +728,20 @@ static int sqlite3_do_callback(struct php_sqlite3_fci *fc, zval *cb, int argc, s
sqlite3_result_error(context, "failed to invoke callback", 0);
}
- if (agg_context) {
- zval_ptr_dtor(agg_context);
+ if (agg_context && agg_context->zval_context) {
+ zval_ptr_dtor(&agg_context->zval_context);
}
} else {
/* we're stepping in an aggregate; the return value goes into
* the context */
- if (agg_context) {
- zval_ptr_dtor(agg_context);
+ if (agg_context && agg_context->zval_context) {
+ zval_ptr_dtor(&agg_context->zval_context);
}
if (retval) {
- *agg_context = retval;
+ agg_context->zval_context = retval;
retval = NULL;
} else {
- *agg_context = NULL;
+ agg_context->zval_context = NULL;
}
}
@@ -763,7 +764,10 @@ static void php_sqlite3_callback_func(sqlite3_context *context, int argc, sqlite
static void php_sqlite3_callback_step(sqlite3_context *context, int argc, sqlite3_value **argv) /* {{{ */
{
php_sqlite3_func *func = (php_sqlite3_func *)sqlite3_user_data(context);
+ php_sqlite3_agg_context *agg_context = (php_sqlite3_agg_context *)sqlite3_aggregate_context(context, sizeof(php_sqlite3_agg_context));
+
TSRMLS_FETCH();
+ agg_context->row_count++;
sqlite3_do_callback(&func->astep, func->step, argc, argv, context, 1 TSRMLS_CC);
}
@@ -772,7 +776,10 @@ static void php_sqlite3_callback_step(sqlite3_context *context, int argc, sqlite
static void php_sqlite3_callback_final(sqlite3_context *context) /* {{{ */
{
php_sqlite3_func *func = (php_sqlite3_func *)sqlite3_user_data(context);
+ php_sqlite3_agg_context *agg_context = (php_sqlite3_agg_context *)sqlite3_aggregate_context(context, sizeof(php_sqlite3_agg_context));
+
TSRMLS_FETCH();
+ agg_context->row_count = 0;
sqlite3_do_callback(&func->afini, func->fini, 0, NULL, context, 1 TSRMLS_CC);
}
diff --git a/ext/sqlite3/tests/sqlite3_25_create_aggregate.phpt b/ext/sqlite3/tests/sqlite3_25_create_aggregate.phpt
index 05913f89a9..6626ed687f 100644
--- a/ext/sqlite3/tests/sqlite3_25_create_aggregate.phpt
+++ b/ext/sqlite3/tests/sqlite3_25_create_aggregate.phpt
@@ -7,7 +7,7 @@ SQLite3::createAggregate() test
require_once(dirname(__FILE__) . '/new_db.inc');
-function sum_list_step($context, $num_args, $string) {
+function sum_list_step($context, $rows, $string) {
if (empty($context))
{
$context = array('total' => 0, 'values' => array());