cvs: php-src /ext/sqlite php_sqlite.h sqlite.c /ext/sqlite/tests sqlite_023.phpt

From: Date: Sun, 13 Jul 2003 09:38:33 +0000
Subject: cvs: php-src /ext/sqlite php_sqlite.h sqlite.c /ext/sqlite/tests sqlite_023.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-22533@lists.php.net to get a copy of this message
wez Sun Jul 13 05:38:33 2003 EDT Added files: /php-src/ext/sqlite/tests sqlite_023.phpt Modified files: /php-src/ext/sqlite php_sqlite.h sqlite.c Log: Add sqlite_has_prev, and sqlite_prev. Patch by Jan Lehnardt <jan@php.net> Index: php-src/ext/sqlite/php_sqlite.h diff -u php-src/ext/sqlite/php_sqlite.h:1.24 php-src/ext/sqlite/php_sqlite.h:1.25 --- php-src/ext/sqlite/php_sqlite.h:1.24 Thu Jun 26 15:26:26 2003 +++ php-src/ext/sqlite/php_sqlite.h Sun Jul 13 05:38:33 2003 @@ -17,7 +17,7 @@ | Marcus Boerger <helly@php.net> | +----------------------------------------------------------------------+ - $Id: php_sqlite.h,v 1.24 2003/06/26 19:26:26 helly Exp $ + $Id: php_sqlite.h,v 1.25 2003/07/13 09:38:33 wez Exp $ */ #ifndef PHP_SQLITE_H @@ -62,7 +62,10 @@ PHP_FUNCTION(sqlite_seek); PHP_FUNCTION(sqlite_rewind); PHP_FUNCTION(sqlite_next); +PHP_FUNCTION(sqlite_prev); + PHP_FUNCTION(sqlite_has_more); +PHP_FUNCTION(sqlite_has_prev); PHP_FUNCTION(sqlite_libversion); PHP_FUNCTION(sqlite_libencoding); Index: php-src/ext/sqlite/sqlite.c diff -u php-src/ext/sqlite/sqlite.c:1.74 php-src/ext/sqlite/sqlite.c:1.75 --- php-src/ext/sqlite/sqlite.c:1.74 Sun Jul 13 05:20:40 2003 +++ php-src/ext/sqlite/sqlite.c Sun Jul 13 05:38:33 2003 @@ -17,7 +17,7 @@ | Marcus Boerger <helly@php.net> | +----------------------------------------------------------------------+ - $Id: sqlite.c,v 1.74 2003/07/13 09:20:40 wez Exp $ + $Id: sqlite.c,v 1.75 2003/07/13 09:38:33 wez Exp $ */ #ifdef HAVE_CONFIG_H @@ -187,7 +187,9 @@ PHP_FE(sqlite_seek, NULL) PHP_FE(sqlite_rewind, NULL) PHP_FE(sqlite_next, NULL) + PHP_FE(sqlite_prev, NULL) PHP_FE(sqlite_has_more, NULL) + PHP_FE(sqlite_has_prev, NULL) PHP_FE(sqlite_escape_string, NULL) PHP_FE(sqlite_busy_timeout, NULL) PHP_FE(sqlite_last_error, NULL) @@ -232,7 +234,9 @@ /* spl_forward */ PHP_ME_MAPPING(current, sqlite_current, NULL) PHP_ME_MAPPING(next, sqlite_next, NULL) + PHP_ME_MAPPING(prev, sqlite_prev, NULL) PHP_ME_MAPPING(has_more, sqlite_has_more, NULL) + PHP_ME_MAPPING(has_prev, sqlite_has_prev, NULL) /* spl_sequence */ PHP_ME_MAPPING(rewind, sqlite_rewind, NULL) /* additional */ @@ -949,7 +953,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.74 2003/07/13 09:20:40 wez Exp $"); + php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " $Id: sqlite.c,v 1.75 2003/07/13 09:38:33 wez 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(); @@ -2056,6 +2060,35 @@ } /* }}} */ +/* {{{ proto bool sqlite_has_prev(resource result) + * Returns whether a previous row is available. */ +PHP_FUNCTION(sqlite_has_prev) +{ + zval *zres; + struct php_sqlite_result *res; + zval *object = getThis(); + + if (object) { + if (ZEND_NUM_ARGS() != 0) { + WRONG_PARAM_COUNT + } + RES_FROM_OBJECT(res, object); + } else { + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres)) { + return; + } + ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result); + } + + if(!res->buffered) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "you cannot use sqlite_has_prev on unbuffered querys"); + RETURN_FALSE; + } + + RETURN_BOOL(res->curr_row); +} +/* }}} */ + /* {{{ proto int sqlite_num_fields(resource result) Returns the number of fields in a result set. */ PHP_FUNCTION(sqlite_num_fields) @@ -2167,7 +2200,7 @@ } if (!res->buffered) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot seek an unbuffered result set"); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot rewind an unbuffered result set"); RETURN_FALSE; } @@ -2211,6 +2244,42 @@ } res->curr_row++; + + RETURN_TRUE; +} +/* }}} */ + +/* {{{ proto bool sqlite_prev(resource result) + * Seek to the previous row number of a result set. */ +PHP_FUNCTION(sqlite_prev) +{ + zval *zres; + struct php_sqlite_result *res; + zval *object = getThis(); + + if (object) { + if (ZEND_NUM_ARGS() != 0) { + WRONG_PARAM_COUNT + } + RES_FROM_OBJECT(res, object); + } else { + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres)) { + return; + } + ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, "sqlite result", le_sqlite_result); + } + + if (!res->buffered) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "you cannot use sqlite_prev on unbuffered querys"); + RETURN_FALSE; + } + + if (res->curr_row <= 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "no previous row available"); + RETURN_FALSE; + } + + res->curr_row--; RETURN_TRUE; } Index: php-src/ext/sqlite/tests/sqlite_023.phpt +++ php-src/ext/sqlite/tests/sqlite_023.phpt --TEST-- sqlite: sqlite_[has_]prev --INI-- sqlite.assoc_case=0 --SKIPIF-- <?php # vim:ft=php if (!extension_loaded("sqlite")) print "skip"; ?> --FILE-- <?php include "blankdb.inc"; $data = array( "one", "two", "three" ); sqlite_query("CREATE TABLE strings(a)", $db); foreach ($data as $str) { sqlite_query("INSERT INTO strings VALUES('$str')", $db); } $r = sqlite_query("SELECT a FROM strings", $db, SQLITE_NUM); echo "====TRAVERSE====\n"; for(sqlite_rewind($r); sqlite_has_more($r); sqlite_next($r)) { var_dump(sqlite_current($r)); } echo "====REVERSE====\n"; do { sqlite_prev($r); var_dump(sqlite_current($r)); } while(sqlite_has_prev($r)); echo "====UNBUFFERED====\n"; $r = sqlite_unbuffered_query("SELECT a FROM strings", $db, SQLITE_NUM); echo "====TRAVERSE====\n"; for(sqlite_rewind($r); sqlite_has_more($r); sqlite_next($r)) { var_dump(sqlite_current($r)); } echo "====REVERSE====\n"; do { sqlite_prev($r); var_dump(sqlite_current($r)); } while(sqlite_has_prev($r)); echo "====DONE!====\n"; ?> --EXPECTF-- ====TRAVERSE==== array(1) { [0]=> string(3) "one" } array(1) { [0]=> string(3) "two" } array(1) { [0]=> string(5) "three" } ====REVERSE==== array(1) { [0]=> string(5) "three" } array(1) { [0]=> string(3) "two" } array(1) { [0]=> string(3) "one" } ====UNBUFFERED==== ====TRAVERSE==== Warning: sqlite_rewind(): Cannot rewind an unbuffered result set in %ssqlite_023.php on line %d array(1) { [0]=> string(3) "one" } array(1) { [0]=> string(3) "two" } array(1) { [0]=> string(5) "three" } ====REVERSE==== Warning: sqlite_prev(): you cannot use sqlite_prev on unbuffered querys in %ssqlite_023.php on line %d bool(false) Warning: sqlite_has_prev(): you cannot use sqlite_has_prev on unbuffered querys in %ssqlite_023.php on line %d ====DONE!====

« previous php.cvs (#22533) next »