helly           Thu Aug 28 19:19:53 2003 EDT

  Added files:                 
    /php-src/ext/sqlite/tests   sqlite_024.phpt sqlite_oo_024.phpt 

  Modified files:              
    /php-src/ext/sqlite php_sqlite.h sqlite.c 
  Log:
  Add sqlite_fetch_object()
  
Index: php-src/ext/sqlite/php_sqlite.h
diff -u php-src/ext/sqlite/php_sqlite.h:1.25 php-src/ext/sqlite/php_sqlite.h:1.26
--- php-src/ext/sqlite/php_sqlite.h:1.25        Sun Jul 13 05:38:33 2003
+++ php-src/ext/sqlite/php_sqlite.h     Thu Aug 28 19:19:51 2003
@@ -17,7 +17,7 @@
    |          Marcus Boerger <[EMAIL PROTECTED]>                              |
    +----------------------------------------------------------------------+
 
-   $Id: php_sqlite.h,v 1.25 2003/07/13 09:38:33 wez Exp $ 
+   $Id: php_sqlite.h,v 1.26 2003/08/28 23:19:51 helly Exp $ 
 */
 
 #ifndef PHP_SQLITE_H
@@ -51,6 +51,7 @@
 PHP_FUNCTION(sqlite_single_query);
 
 PHP_FUNCTION(sqlite_fetch_array);
+PHP_FUNCTION(sqlite_fetch_object);
 PHP_FUNCTION(sqlite_fetch_single);
 PHP_FUNCTION(sqlite_fetch_all);
 PHP_FUNCTION(sqlite_current);
Index: php-src/ext/sqlite/sqlite.c
diff -u php-src/ext/sqlite/sqlite.c:1.84 php-src/ext/sqlite/sqlite.c:1.85
--- php-src/ext/sqlite/sqlite.c:1.84    Mon Aug 25 16:55:14 2003
+++ php-src/ext/sqlite/sqlite.c Thu Aug 28 19:19:51 2003
@@ -17,7 +17,7 @@
    |          Marcus Boerger <[EMAIL PROTECTED]>                              |
    +----------------------------------------------------------------------+
 
-   $Id: sqlite.c,v 1.84 2003/08/25 20:55:14 helly Exp $ 
+   $Id: sqlite.c,v 1.85 2003/08/28 23:19:51 helly Exp $ 
 */
 
 #ifdef HAVE_CONFIG_H
@@ -161,6 +161,7 @@
        PHP_FE(sqlite_array_query, NULL)
        PHP_FE(sqlite_single_query, NULL)
        PHP_FE(sqlite_fetch_array, NULL)
+       PHP_FE(sqlite_fetch_object, NULL)
        PHP_FE(sqlite_fetch_single, NULL)
        PHP_FALIAS(sqlite_fetch_string, sqlite_fetch_single, NULL)
        PHP_FE(sqlite_fetch_all, NULL)
@@ -214,6 +215,7 @@
 
 function_entry sqlite_funcs_query[] = {
        PHP_ME_MAPPING(fetch_array, sqlite_fetch_array, NULL)
+       PHP_ME_MAPPING(fetch_object, sqlite_fetch_object, NULL)
        PHP_ME_MAPPING(fetch_single, sqlite_fetch_single, NULL)
        PHP_ME_MAPPING(fetch_all, sqlite_fetch_all, NULL)
        PHP_ME_MAPPING(column, sqlite_column, NULL)
@@ -236,6 +238,7 @@
 
 function_entry sqlite_funcs_ub_query[] = {
        PHP_ME_MAPPING(fetch_array, sqlite_fetch_array, NULL)
+       PHP_ME_MAPPING(fetch_object, sqlite_fetch_object, NULL)
        PHP_ME_MAPPING(fetch_single, sqlite_fetch_single, NULL)
        PHP_ME_MAPPING(fetch_all, sqlite_fetch_all, NULL)
        PHP_ME_MAPPING(column, sqlite_column, NULL)
@@ -938,7 +941,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.84 2003/08/25 20:55:14 helly Exp $");
+       php_info_print_table_row(2, "PECL Module version", PHP_SQLITE_MODULE_VERSION " 
$Id: sqlite.c,v 1.85 2003/08/28 23:19:51 helly 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();
@@ -1159,7 +1162,7 @@
        php_set_error_handling(EH_THROW, sqlite_ce_exception TSRMLS_CC);
        if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lz/",
                                &filename, &filename_len, &mode, &errmsg)) {
-               php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
+               php_std_error_handling();
                RETURN_NULL();
        }
        if (errmsg) {
@@ -1167,18 +1170,18 @@
        }
 
        if (PG(safe_mode) && (!php_checkuid(filename, NULL, 
CHECKUID_CHECK_FILE_AND_DIR))) {
-               php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
+               php_std_error_handling();
                RETURN_NULL();
        }
 
        if (php_check_open_basedir(filename TSRMLS_CC)) {
-               php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
+               php_std_error_handling();
                RETURN_NULL();
        }
 
        php_sqlite_open(filename, mode, NULL, return_value, errmsg, return_value 
TSRMLS_CC);
 
-       php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
+       php_std_error_handling();
 }
 /* }}} */
 
@@ -1657,6 +1660,84 @@
        }
 
        php_sqlite_fetch_array(res, mode, decode_binary, 1, return_value TSRMLS_CC);
+}
+/* }}} */
+
+/* {{{ proto object sqlite_fetch_object(resource result [, string class_name [, bool 
decode_binary]])
+   Fetches the next row from a result set as an object. */
+PHP_FUNCTION(sqlite_fetch_object)
+{
+       zval *zres;
+       zend_bool decode_binary = 1;
+       struct php_sqlite_result *res;
+       zval *object = getThis();
+       char *class_name;
+       int class_name_len;
+       zend_class_entry *ce;
+       zval dataset;
+       zend_fcall_info fci;
+       zend_fcall_info_cache fcc;
+       zval *retval_ptr;
+
+       php_set_error_handling(object ? EH_THROW : EH_NORMAL, sqlite_ce_exception 
TSRMLS_CC);
+       if (object) {
+               if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sb", 
&class_name, &class_name_len, &decode_binary)) {
+                       php_std_error_handling();
+                       return;
+               }
+               RES_FROM_OBJECT(res, object);
+               if (!ZEND_NUM_ARGS()) {
+                       ce = zend_standard_class_def;
+               } else {
+                       ce = zend_fetch_class(class_name, class_name_len, 
ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
+               }
+       } else {
+               if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, 
"r|sb", &zres, &class_name, &class_name_len, &decode_binary)) {
+                       php_std_error_handling();
+                       return;
+               }
+               ZEND_FETCH_RESOURCE(res, struct php_sqlite_result *, &zres, -1, 
"sqlite result", le_sqlite_result);
+               if (ZEND_NUM_ARGS() < 2) {
+                       ce = zend_standard_class_def;
+               } else {
+                       ce = zend_fetch_class(class_name, class_name_len, 
ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
+               }
+       }
+
+       if (!ce) {
+               zend_throw_exception_ex(sqlite_ce_exception, 0 TSRMLS_CC, "Could not 
find class '%s'", class_name);
+               php_std_error_handling();
+               return;
+       }
+
+       php_sqlite_fetch_array(res, PHPSQLITE_ASSOC, decode_binary, 1, &dataset 
TSRMLS_CC);
+
+       object_and_properties_init(return_value, ce, Z_ARRVAL(dataset));
+
+       php_std_error_handling(); /* before calling the ctor */
+
+       if (ce->constructor) {
+               fci.size = sizeof(fci);
+               fci.function_table = &ce->function_table;
+               fci.function_name = NULL;
+               fci.symbol_table = NULL;
+               fci.object_pp = &return_value;
+               fci.retval_ptr_ptr = &retval_ptr;
+               fci.param_count = 0;
+               fci.params = NULL;
+               fci.no_separation = 1;
+       
+               fcc.initialized = 1;
+               fcc.function_handler = ce->constructor;
+               fcc.calling_scope = EG(scope);
+               fcc.object_pp = &return_value;
+       
+               if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) {
+                       zend_throw_exception_ex(sqlite_ce_exception, 0 TSRMLS_CC, 
"Could not execute %s::%s()", class_name, ce->constructor->common.function_name);
+               } else {
+                       zval_ptr_dtor(&retval_ptr);
+               }
+       }
 }
 /* }}} */
 

Index: php-src/ext/sqlite/tests/sqlite_024.phpt
+++ php-src/ext/sqlite/tests/sqlite_024.phpt
--TEST--
sqlite: sqlite_fetch_object
--INI--
sqlite.assoc_case=0
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded("sqlite")) print "skip"; ?>
--FILE--
<?php 
include "blankdb.inc";

class class24 {
        function __construct() {
                echo __METHOD__ . "\n";
        }
}

$data = array(
        "one",
        "two",
        "three"
        );

sqlite_query($db, "CREATE TABLE strings(a)");

foreach ($data as $str) {
        sqlite_query($db, "INSERT INTO strings VALUES('$str')");
}

echo "====stdclass====\n";
$res = sqlite_query($db, "SELECT a FROM strings", SQLITE_ASSOC);
while (sqlite_has_more($res)) {
        var_dump(sqlite_fetch_object($res, 'class24'));
}

echo "====class24!====\n";
$res = sqlite_query($db, "SELECT a FROM strings", SQLITE_ASSOC);
while (sqlite_has_more($res)) {
        var_dump(sqlite_fetch_object($res));
}

echo "====DONE!====\n";
?>
--EXPECTF--
====stdclass====
class24::__construct
object(class24)#%d (1) {
  ["a"]=>
  string(3) "one"
}
class24::__construct
object(class24)#%d (1) {
  ["a"]=>
  string(3) "two"
}
class24::__construct
object(class24)#%d (1) {
  ["a"]=>
  string(5) "three"
}
====class24!====
object(stdClass)#%d (1) {
  ["a"]=>
  string(3) "one"
}
object(stdClass)#%d (1) {
  ["a"]=>
  string(3) "two"
}
object(stdClass)#%d (1) {
  ["a"]=>
  string(5) "three"
}
====DONE!====

Index: php-src/ext/sqlite/tests/sqlite_oo_024.phpt
+++ php-src/ext/sqlite/tests/sqlite_oo_024.phpt
--TEST--
sqlite-oo: sqlite::fetch_object
--INI--
sqlite.assoc_case=0
--SKIPIF--
<?php # vim:ft=php
if (!extension_loaded("sqlite")) print "skip"; ?>
--FILE--
<?php 
include "blankdb_oo.inc";

class class24 {
        function __construct() {
                echo __METHOD__ . "\n";
        }
}

$data = array(
        "one",
        "two",
        "three"
        );

$db->query("CREATE TABLE strings(a)");

foreach ($data as $str) {
        $db->query("INSERT INTO strings VALUES('$str')");
}

echo "====stdclass====\n";
$res = $db->query("SELECT a FROM strings", SQLITE_ASSOC);
while ($res->has_more()) {
        var_dump($res->fetch_object('class24'));
}

echo "====class24!====\n";
$res = $db->query("SELECT a FROM strings", SQLITE_ASSOC);
while ($res->has_more()) {
        var_dump($res->fetch_object());
}

echo "====DONE!====\n";
?>
--EXPECTF--
====stdclass====
class24::__construct
object(class24)#%d (1) {
  ["a"]=>
  string(3) "one"
}
class24::__construct
object(class24)#%d (1) {
  ["a"]=>
  string(3) "two"
}
class24::__construct
object(class24)#%d (1) {
  ["a"]=>
  string(5) "three"
}
====class24!====
object(stdClass)#%d (1) {
  ["a"]=>
  string(3) "one"
}
object(stdClass)#%d (1) {
  ["a"]=>
  string(3) "two"
}
object(stdClass)#%d (1) {
  ["a"]=>
  string(5) "three"
}
====DONE!====

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to