iliaa Thu Sep 8 17:07:27 2005 EDT Modified files: /php-src/ext/sqlite sqlite.c Log: Allow retrieval of query parse errors from SQLite. # Patch by Nuno Lopes http://cvs.php.net/diff.php/php-src/ext/sqlite/sqlite.c?r1=1.171&r2=1.172&ty=u Index: php-src/ext/sqlite/sqlite.c diff -u php-src/ext/sqlite/sqlite.c:1.171 php-src/ext/sqlite/sqlite.c:1.172 --- php-src/ext/sqlite/sqlite.c:1.171 Tue Aug 23 05:33:45 2005 +++ php-src/ext/sqlite/sqlite.c Thu Sep 8 17:07:26 2005 @@ -17,7 +17,7 @@ | Marcus Boerger <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: sqlite.c,v 1.171 2005/08/23 09:33:45 dmitry Exp $ + $Id: sqlite.c,v 1.172 2005/09/08 21:07:26 iliaa Exp $ */ #ifdef HAVE_CONFIG_H @@ -165,8 +165,8 @@ PHP_FE(sqlite_open, third_arg_force_ref) PHP_FE(sqlite_popen, third_arg_force_ref) PHP_FE(sqlite_close, NULL) - PHP_FE(sqlite_query, NULL) - PHP_FE(sqlite_exec, NULL) + PHP_FE(sqlite_query, fourth_arg_force_ref) + PHP_FE(sqlite_exec, third_arg_force_ref) PHP_FE(sqlite_array_query, NULL) PHP_FE(sqlite_single_query, NULL) PHP_FE(sqlite_fetch_array, NULL) @@ -194,7 +194,7 @@ PHP_FE(sqlite_busy_timeout, NULL) PHP_FE(sqlite_last_error, NULL) PHP_FE(sqlite_error_string, NULL) - PHP_FE(sqlite_unbuffered_query, NULL) + PHP_FE(sqlite_unbuffered_query, fourth_arg_force_ref) PHP_FE(sqlite_create_aggregate, NULL) PHP_FE(sqlite_create_function, NULL) PHP_FE(sqlite_factory, third_arg_force_ref) @@ -205,13 +205,13 @@ }; function_entry sqlite_funcs_db[] = { - PHP_ME_MAPPING(__construct, sqlite_open, NULL) + PHP_ME_MAPPING(__construct, sqlite_open, third_arg_force_ref) /* PHP_ME_MAPPING(close, sqlite_close, NULL)*/ - PHP_ME_MAPPING(query, sqlite_query, NULL) - PHP_ME_MAPPING(queryExec, sqlite_exec, NULL) + PHP_ME_MAPPING(query, sqlite_query, third_arg_force_ref) + PHP_ME_MAPPING(queryExec, sqlite_exec, second_arg_force_ref) PHP_ME_MAPPING(arrayQuery, sqlite_array_query, NULL) PHP_ME_MAPPING(singleQuery, sqlite_single_query, NULL) - PHP_ME_MAPPING(unbufferedQuery, sqlite_unbuffered_query, NULL) + PHP_ME_MAPPING(unbufferedQuery, sqlite_unbuffered_query, third_arg_force_ref) PHP_ME_MAPPING(lastInsertRowid, sqlite_last_insert_rowid, NULL) PHP_ME_MAPPING(changes, sqlite_changes, NULL) PHP_ME_MAPPING(createAggregate, sqlite_create_aggregate, NULL) @@ -1126,7 +1126,7 @@ { php_info_print_table_start(); php_info_print_table_header(2, "SQLite support", "enabled"); - php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c,v 1.171 2005/08/23 09:33:45 dmitry Exp $"); + php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c,v 1.172 2005/09/08 21:07:26 iliaa Exp $"); php_info_print_table_row(2, "SQLite Library", sqlite_libversion()); php_info_print_table_row(2, "SQLite Encoding", sqlite_libencoding()); php_info_print_table_end(); @@ -1584,7 +1584,7 @@ } /* }}} */ -/* {{{ proto resource sqlite_unbuffered_query(string query, resource db [ , int result_type ]) +/* {{{ proto resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]]) Executes a query that does not prefetch and buffer all data. */ PHP_FUNCTION(sqlite_unbuffered_query) { @@ -1594,22 +1594,28 @@ int sql_len; long mode = PHPSQLITE_BOTH; char *errtext = NULL; + zval *errmsg = NULL; zval *object = getThis(); if (object) { - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &sql, &sql_len, &mode)) { + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lz/", &sql, &sql_len, &mode, &errmsg)) { return; } DB_FROM_OBJECT(db, object); } else { if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "sr|l", &sql, &sql_len, &zdb, &mode) && - FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &zdb, &sql, &sql_len, &mode)) { + ZEND_NUM_ARGS() TSRMLS_CC, "sr|lz/", &sql, &sql_len, &zdb, &mode, &errmsg) && + FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|lz/", &zdb, &sql, &sql_len, &mode, &errmsg)) { return; } DB_FROM_ZVAL(db, &zdb); } + if (errmsg) { + zval_dtor(errmsg); + ZVAL_NULL(errmsg); + } + PHP_SQLITE_EMPTY_QUERY; /* avoid doing work if we can */ @@ -1618,6 +1624,9 @@ if (db->last_err_code != SQLITE_OK) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext); + if (errmsg) { + ZVAL_STRING(errmsg, errtext, 1); + } sqlite_freemem(errtext); } return; @@ -1715,7 +1724,7 @@ } /* }}} */ -/* {{{ proto resource sqlite_query(string query, resource db [, int result_type ]) +/* {{{ proto resource sqlite_query(string query, resource db [, int result_type [, string &error_message]]) Executes a query against a given database and returns a result handle. */ PHP_FUNCTION(sqlite_query) { @@ -1725,22 +1734,28 @@ int sql_len; long mode = PHPSQLITE_BOTH; char *errtext = NULL; + zval *errmsg = NULL; zval *object = getThis(); if (object) { - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &sql, &sql_len, &mode)) { + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lz/", &sql, &sql_len, &mode, &errmsg)) { return; } DB_FROM_OBJECT(db, object); } else { if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, - ZEND_NUM_ARGS() TSRMLS_CC, "sr|l", &sql, &sql_len, &zdb, &mode) && - FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|l", &zdb, &sql, &sql_len, &mode)) { + ZEND_NUM_ARGS() TSRMLS_CC, "sr|lz/", &sql, &sql_len, &zdb, &mode, &errmsg) && + FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|lz/", &zdb, &sql, &sql_len, &mode, &errmsg)) { return; } DB_FROM_ZVAL(db, &zdb); } + if (errmsg) { + zval_dtor(errmsg); + ZVAL_NULL(errmsg); + } + PHP_SQLITE_EMPTY_QUERY; /* avoid doing work if we can */ @@ -1749,6 +1764,9 @@ if (db->last_err_code != SQLITE_OK) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext); + if (errmsg) { + ZVAL_STRING(errmsg, errtext, 1); + } sqlite_freemem(errtext); } return; @@ -1758,7 +1776,7 @@ } /* }}} */ -/* {{{ proto boolean sqlite_exec(string query, resource db) +/* {{{ proto boolean sqlite_exec(string query, resource db[, string &error_message]) Executes a result-less query against a given database */ PHP_FUNCTION(sqlite_exec) { @@ -1767,28 +1785,37 @@ char *sql; int sql_len; char *errtext = NULL; + zval *errmsg = NULL; zval *object = getThis(); if (object) { - if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &sql, &sql_len)) { + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z/", &sql, &sql_len, &errmsg)) { return; } DB_FROM_OBJECT(db, object); } else { if(FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "sr", &sql, &sql_len, &zdb) && - FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &zdb, &sql, &sql_len)) { + FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|z/", &zdb, &sql, &sql_len, &errmsg)) { return; } DB_FROM_ZVAL(db, &zdb); } - + + if (errmsg) { + zval_dtor(errmsg); + ZVAL_NULL(errmsg); + } + PHP_SQLITE_EMPTY_QUERY; db->last_err_code = sqlite_exec(db->db, sql, NULL, NULL, &errtext); if (db->last_err_code != SQLITE_OK) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", errtext); + if (errmsg) { + ZVAL_STRING(errmsg, errtext, 1); + } sqlite_freemem(errtext); RETURN_FALSE; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php