mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Fix class/iterator relationship & handling
This commit is contained in:
parent
15bfbc7619
commit
b0b82541e8
5 changed files with 32 additions and 35 deletions
|
@ -948,9 +948,25 @@ void sqlite_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
|
|||
}
|
||||
}
|
||||
|
||||
zend_class_iterator_funcs sqlite_ub_query_iterator_funcs;
|
||||
zend_object_iterator_funcs sqlite_ub_query_iterator_funcs = {
|
||||
sqlite_iterator_dtor,
|
||||
sqlite_iterator_has_more,
|
||||
sqlite_iterator_get_current_data,
|
||||
sqlite_iterator_get_current_key,
|
||||
sqlite_iterator_move_forward,
|
||||
NULL
|
||||
};
|
||||
|
||||
zend_object_iterator *sqlite_ub_query_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC)
|
||||
zend_object_iterator_funcs sqlite_query_iterator_funcs = {
|
||||
sqlite_iterator_dtor,
|
||||
sqlite_iterator_has_more,
|
||||
sqlite_iterator_get_current_data,
|
||||
sqlite_iterator_get_current_key,
|
||||
sqlite_iterator_move_forward,
|
||||
sqlite_iterator_rewind
|
||||
};
|
||||
|
||||
zend_object_iterator *sqlite_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC)
|
||||
{
|
||||
sqlite_object_iterator *iterator = emalloc(sizeof(sqlite_object_iterator));
|
||||
|
||||
|
@ -958,23 +974,7 @@ zend_object_iterator *sqlite_ub_query_get_iterator(zend_class_entry *ce, zval *o
|
|||
|
||||
object->refcount++;
|
||||
iterator->it.data = (void*)object;
|
||||
iterator->it.funcs = &sqlite_ub_query_iterator_funcs.funcs;
|
||||
iterator->res = obj->u.res;
|
||||
iterator->value = NULL;
|
||||
return (zend_object_iterator*)iterator;
|
||||
}
|
||||
|
||||
zend_class_iterator_funcs sqlite_query_iterator_funcs;
|
||||
|
||||
zend_object_iterator *sqlite_query_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC)
|
||||
{
|
||||
sqlite_object_iterator *iterator = emalloc(sizeof(sqlite_object_iterator));
|
||||
|
||||
sqlite_object *obj = (sqlite_object*) zend_object_store_get_object(object TSRMLS_CC);
|
||||
|
||||
object->refcount++;
|
||||
iterator->it.data = (void*)object;
|
||||
iterator->it.funcs = &sqlite_query_iterator_funcs.funcs;
|
||||
iterator->it.funcs = ce->iterator_funcs.funcs;
|
||||
iterator->res = obj->u.res;
|
||||
iterator->value = NULL;
|
||||
return (zend_object_iterator*)iterator;
|
||||
|
@ -996,20 +996,11 @@ PHP_MINIT_FUNCTION(sqlite)
|
|||
sqlite_object_handlers_query.get_class_entry = sqlite_get_ce_query;
|
||||
sqlite_object_handlers_ub_query.get_class_entry = sqlite_get_ce_ub_query;
|
||||
|
||||
sqlite_ce_ub_query->get_iterator = sqlite_ub_query_get_iterator;
|
||||
sqlite_ce_ub_query->iterator_funcs = &sqlite_ub_query_iterator_funcs;
|
||||
memset(&sqlite_ub_query_iterator_funcs, 0, sizeof(zend_class_iterator_funcs));
|
||||
sqlite_ub_query_iterator_funcs.funcs.dtor = sqlite_iterator_dtor;
|
||||
sqlite_ub_query_iterator_funcs.funcs.rewind = NULL;
|
||||
sqlite_ub_query_iterator_funcs.funcs.has_more = sqlite_iterator_has_more;
|
||||
sqlite_ub_query_iterator_funcs.funcs.get_current_data = sqlite_iterator_get_current_data;
|
||||
sqlite_ub_query_iterator_funcs.funcs.get_current_key = sqlite_iterator_get_current_key;
|
||||
sqlite_ub_query_iterator_funcs.funcs.move_forward = sqlite_iterator_move_forward;
|
||||
sqlite_ce_ub_query->get_iterator = sqlite_get_iterator;
|
||||
sqlite_ce_ub_query->iterator_funcs.funcs = &sqlite_ub_query_iterator_funcs;
|
||||
|
||||
sqlite_ce_query->get_iterator = sqlite_query_get_iterator;
|
||||
sqlite_ce_query->iterator_funcs = &sqlite_query_iterator_funcs;
|
||||
memcpy(&sqlite_query_iterator_funcs, &sqlite_ub_query_iterator_funcs, sizeof(zend_class_iterator_funcs));
|
||||
sqlite_query_iterator_funcs.funcs.rewind = sqlite_iterator_rewind;
|
||||
sqlite_ce_query->get_iterator = sqlite_get_iterator;
|
||||
sqlite_ce_query->iterator_funcs.funcs = &sqlite_query_iterator_funcs;
|
||||
|
||||
ZEND_INIT_MODULE_GLOBALS(sqlite, init_sqlite_globals, NULL);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue