Fix class/iterator relationship & handling

This commit is contained in:
Marcus Boerger 2003-10-18 18:43:31 +00:00
parent 15bfbc7619
commit b0b82541e8
5 changed files with 32 additions and 35 deletions

View file

@ -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);