@@ -1987,6 +1987,16 @@ PHP_METHOD(SQLite3Result, columnType)
1987
1987
}
1988
1988
/* }}} */
1989
1989
1990
+ static void sqlite3result_fill_column_names_cache (php_sqlite3_result * result_obj , int nb_cols )
1991
+ {
1992
+ result_obj -> column_names = safe_emalloc (nb_cols , sizeof (zend_string * ), 0 );
1993
+
1994
+ for (int i = 0 ; i < nb_cols ; i ++ ) {
1995
+ const char * column = sqlite3_column_name (result_obj -> stmt_obj -> stmt , i );
1996
+ result_obj -> column_names [i ] = zend_string_init (column , strlen (column ), 0 );
1997
+ }
1998
+ }
1999
+
1990
2000
/* {{{ Fetch a result row as both an associative or numerically indexed array or both. */
1991
2001
PHP_METHOD (SQLite3Result , fetchArray )
1992
2002
{
@@ -2019,12 +2029,7 @@ PHP_METHOD(SQLite3Result, fetchArray)
2019
2029
2020
2030
/* Cache column names to speed up repeated fetchArray calls. */
2021
2031
if (mode & PHP_SQLITE3_ASSOC && !result_obj -> column_names ) {
2022
- result_obj -> column_names = emalloc (n_cols * sizeof (zend_string * ));
2023
-
2024
- for (int i = 0 ; i < n_cols ; i ++ ) {
2025
- const char * column = sqlite3_column_name (result_obj -> stmt_obj -> stmt , i );
2026
- result_obj -> column_names [i ] = zend_string_init (column , strlen (column ), 0 );
2027
- }
2032
+ sqlite3result_fill_column_names_cache (result_obj , n_cols );
2028
2033
}
2029
2034
2030
2035
array_init (return_value );
@@ -2056,7 +2061,7 @@ static void sqlite3result_clear_column_names_cache(php_sqlite3_result *result) {
2056
2061
2057
2062
PHP_METHOD (SQLite3Result , fetchAll )
2058
2063
{
2059
- int i , nb_cols ;
2064
+ int nb_cols ;
2060
2065
bool done = false;
2061
2066
php_sqlite3_result * result_obj ;
2062
2067
zval * object = ZEND_THIS ;
@@ -2071,14 +2076,8 @@ PHP_METHOD(SQLite3Result, fetchAll)
2071
2076
SQLITE3_CHECK_INITIALIZED (result_obj -> db_obj , result_obj -> stmt_obj -> initialised , SQLite3Result )
2072
2077
2073
2078
nb_cols = sqlite3_column_count (result_obj -> stmt_obj -> stmt );
2074
- if (mode & PHP_SQLITE3_ASSOC ) {
2075
- sqlite3result_clear_column_names_cache (result_obj );
2076
- result_obj -> column_names = emalloc (nb_cols * sizeof (zend_string * ));
2077
-
2078
- for (i = 0 ; i < nb_cols ; i ++ ) {
2079
- const char * column = sqlite3_column_name (result_obj -> stmt_obj -> stmt , i );
2080
- result_obj -> column_names [i ] = zend_string_init (column , strlen (column ), 0 );
2081
- }
2079
+ if (mode & PHP_SQLITE3_ASSOC && !result_obj -> column_names ) {
2080
+ sqlite3result_fill_column_names_cache (result_obj , nb_cols );
2082
2081
}
2083
2082
result_obj -> column_count = nb_cols ;
2084
2083
array_init (return_value );
0 commit comments