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 <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $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 <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
- $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!====
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php