Skip to content

Commit bc74cff

Browse files
committed
Get rid of unnecessary wrapping a statement in a free list object
This simplifies the code and reduces memory usage.
1 parent 43ac692 commit bc74cff

File tree

2 files changed

+13
-35
lines changed

2 files changed

+13
-35
lines changed

ext/sqlite3/php_sqlite3_structs.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,6 @@ typedef struct _php_sqlite3_agg_context {
8989
typedef struct _php_sqlite3_stmt_object php_sqlite3_stmt;
9090
typedef struct _php_sqlite3_result_object php_sqlite3_result;
9191

92-
/* sqlite3 objects to be destroyed */
93-
typedef struct _php_sqlite3_free_list {
94-
zval stmt_obj_zval;
95-
php_sqlite3_stmt *stmt_obj;
96-
} php_sqlite3_free_list;
97-
9892
/* Structure for SQLite Result object. */
9993
struct _php_sqlite3_result_object {
10094
php_sqlite3_db_object *db_obj;

ext/sqlite3/sqlite3.c

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ ZEND_DECLARE_MODULE_GLOBALS(sqlite3)
3535
static PHP_GINIT_FUNCTION(sqlite3);
3636
static int php_sqlite3_authorizer(void *autharg, int action, const char *arg1, const char *arg2, const char *arg3, const char *arg4);
3737
static void sqlite3_param_dtor(zval *data);
38-
static int php_sqlite3_compare_stmt_zval_free(php_sqlite3_free_list **free_list, zval *statement);
38+
static int php_sqlite3_compare_stmt_zval_free(php_sqlite3_stmt **stmt_obj_ptr, zval *statement);
3939

4040
#define SQLITE3_CHECK_INITIALIZED(db_obj, member, class_name) \
4141
if (!(db_obj) || !(member)) { \
@@ -509,7 +509,6 @@ PHP_METHOD(SQLite3, prepare)
509509
zval *object = ZEND_THIS;
510510
zend_string *sql;
511511
int errcode;
512-
php_sqlite3_free_list *free_item;
513512

514513
db_obj = Z_SQLITE3_DB_P(object);
515514

@@ -537,11 +536,7 @@ PHP_METHOD(SQLite3, prepare)
537536

538537
stmt_obj->initialised = 1;
539538

540-
free_item = emalloc(sizeof(php_sqlite3_free_list));
541-
free_item->stmt_obj = stmt_obj;
542-
ZVAL_OBJ(&free_item->stmt_obj_zval, Z_OBJ_P(return_value));
543-
544-
zend_llist_add_element(&(db_obj->free_list), &free_item);
539+
zend_llist_add_element(&(db_obj->free_list), &stmt_obj);
545540
}
546541
/* }}} */
547542

@@ -607,11 +602,7 @@ PHP_METHOD(SQLite3, query)
607602
case SQLITE_ROW: /* Valid Row */
608603
case SQLITE_DONE: /* Valid but no results */
609604
{
610-
php_sqlite3_free_list *free_item;
611-
free_item = emalloc(sizeof(php_sqlite3_free_list));
612-
free_item->stmt_obj = stmt_obj;
613-
free_item->stmt_obj_zval = stmt;
614-
zend_llist_add_element(&(db_obj->free_list), &free_item);
605+
zend_llist_add_element(&(db_obj->free_list), &stmt_obj);
615606
sqlite3_reset(result->stmt_obj->stmt);
616607
break;
617608
}
@@ -1825,7 +1816,6 @@ PHP_METHOD(SQLite3Stmt, __construct)
18251816
zval *db_zval;
18261817
zend_string *sql;
18271818
int errcode;
1828-
php_sqlite3_free_list *free_item;
18291819

18301820
stmt_obj = Z_SQLITE3_STMT_P(object);
18311821

@@ -1852,12 +1842,7 @@ PHP_METHOD(SQLite3Stmt, __construct)
18521842
}
18531843
stmt_obj->initialised = 1;
18541844

1855-
free_item = emalloc(sizeof(php_sqlite3_free_list));
1856-
free_item->stmt_obj = stmt_obj;
1857-
//?? free_item->stmt_obj_zval = ZEND_THIS;
1858-
ZVAL_OBJ(&free_item->stmt_obj_zval, Z_OBJ_P(object));
1859-
1860-
zend_llist_add_element(&(db_obj->free_list), &free_item);
1845+
zend_llist_add_element(&(db_obj->free_list), &stmt_obj);
18611846
}
18621847
/* }}} */
18631848

@@ -2151,25 +2136,24 @@ static int php_sqlite3_authorizer(void *autharg, int action, const char *arg1, c
21512136
/* {{{ php_sqlite3_free_list_dtor */
21522137
static void php_sqlite3_free_list_dtor(void **item)
21532138
{
2154-
php_sqlite3_free_list *free_item = (php_sqlite3_free_list *)*item;
2139+
php_sqlite3_stmt *stmt_obj = *item;
21552140

2156-
if (free_item->stmt_obj && free_item->stmt_obj->initialised) {
2157-
sqlite3_finalize(free_item->stmt_obj->stmt);
2158-
free_item->stmt_obj->initialised = 0;
2141+
if (stmt_obj && stmt_obj->initialised) {
2142+
sqlite3_finalize(stmt_obj->stmt);
2143+
stmt_obj->initialised = 0;
21592144
}
2160-
efree(*item);
21612145
}
21622146
/* }}} */
21632147

2164-
static int php_sqlite3_compare_stmt_zval_free(php_sqlite3_free_list **free_list, zval *statement ) /* {{{ */
2148+
static int php_sqlite3_compare_stmt_zval_free(php_sqlite3_stmt **stmt_obj_ptr, zval *statement ) /* {{{ */
21652149
{
2166-
return ((*free_list)->stmt_obj->initialised && Z_PTR_P(statement) == Z_PTR((*free_list)->stmt_obj_zval));
2150+
return ((*stmt_obj_ptr)->initialised && Z_OBJ_P(statement) == &(*stmt_obj_ptr)->zo);
21672151
}
21682152
/* }}} */
21692153

2170-
static int php_sqlite3_compare_stmt_free( php_sqlite3_free_list **free_list, sqlite3_stmt *statement ) /* {{{ */
2154+
static int php_sqlite3_compare_stmt_free(php_sqlite3_stmt **stmt_obj_ptr, sqlite3_stmt *statement ) /* {{{ */
21712155
{
2172-
return ((*free_list)->stmt_obj->initialised && statement == (*free_list)->stmt_obj->stmt);
2156+
return ((*stmt_obj_ptr)->initialised && statement == (*stmt_obj_ptr)->stmt);
21732157
}
21742158
/* }}} */
21752159

@@ -2331,7 +2315,7 @@ static zend_object *php_sqlite3_object_new(zend_class_entry *class_type) /* {{{
23312315
intern = zend_object_alloc(sizeof(php_sqlite3_db_object), class_type);
23322316

23332317
/* Need to keep track of things to free */
2334-
zend_llist_init(&(intern->free_list), sizeof(php_sqlite3_free_list *), (llist_dtor_func_t)php_sqlite3_free_list_dtor, 0);
2318+
zend_llist_init(&(intern->free_list), sizeof(php_sqlite3_stmt *), (llist_dtor_func_t)php_sqlite3_free_list_dtor, 0);
23352319

23362320
zend_object_std_init(&intern->zo, class_type);
23372321
object_properties_init(&intern->zo, class_type);

0 commit comments

Comments
 (0)