georg           Sun Dec 26 08:16:40 2004 EDT

  Added files:                 
    /php-src/ext/mysqli/tests   062.phpt 063.phpt 

  Modified files:              
    /php-src/ext/mysqli mysqli.c php_mysqli.h 
  Log:
  added constructors for mysqli_stmt and mysqli_result classes
  
  
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli.c?r1=1.56&r2=1.57&ty=u
Index: php-src/ext/mysqli/mysqli.c
diff -u php-src/ext/mysqli/mysqli.c:1.56 php-src/ext/mysqli/mysqli.c:1.57
--- php-src/ext/mysqli/mysqli.c:1.56    Sat Dec 25 11:42:53 2004
+++ php-src/ext/mysqli/mysqli.c Sun Dec 26 08:16:38 2004
@@ -15,7 +15,7 @@
   | Author: Georg Richter <[EMAIL PROTECTED]>                                |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli.c,v 1.56 2004/12/25 16:42:53 georg Exp $ 
+  $Id: mysqli.c,v 1.57 2004/12/26 13:16:38 georg Exp $ 
 */
 
 #ifdef HAVE_CONFIG_H
@@ -281,23 +281,31 @@
 {
        mysqli_object *obj = (mysqli_object *)zend_objects_get_address(object 
TSRMLS_CC);
 
-       if (obj->zo.ce != mysqli_link_class_entry) {
+       if (obj->zo.ce != mysqli_link_class_entry && obj->zo.ce != 
mysqli_stmt_class_entry &&
+               obj->zo.ce != mysqli_result_class_entry) {
                return obj->zo.ce->constructor;
        } else {
                static zend_internal_function f;
 
-               f.function_name = mysqli_link_class_entry->name;
-               f.scope = mysqli_link_class_entry;
+               f.function_name = obj->zo.ce->name;
+               f.scope = obj->zo.ce;
                f.arg_info = NULL;
                f.num_args = 0;
                f.fn_flags = 0;
 
                f.type = ZEND_INTERNAL_FUNCTION;
-               f.handler = ZEND_FN(mysqli_connect);
+               if (obj->zo.ce == mysqli_link_class_entry) {
+                       f.handler = ZEND_FN(mysqli_connect);
+               } else if (obj->zo.ce == mysqli_stmt_class_entry) {
+                       f.handler = ZEND_FN(mysqli_stmt_construct);
+               } else if (obj->zo.ce == mysqli_result_class_entry) {
+                       f.handler = ZEND_FN(mysqli_result_construct);
+               }
        
                return (union _zend_function*)&f;
        }
 }
+
 /* {{{ mysqli_objects_new
  */
 PHP_MYSQLI_EXPORT(zend_object_value) mysqli_objects_new(zend_class_entry 
*class_type TSRMLS_DC)
@@ -578,6 +586,109 @@
 }
 /* }}} */
 
+/* {{{ mixed mysqli_stmt_construct() 
+constructor for statement object.
+Parameters: 
+  object -> mysqli_init
+  object, query -> mysqli_prepare
+*/
+ZEND_FUNCTION(mysqli_stmt_construct)
+{
+       MY_MYSQL                        *mysql;
+       zval                            **mysql_link, **statement;
+       MY_STMT                         *stmt;
+       MYSQLI_RESOURCE         *mysqli_resource;
+
+       switch (ZEND_NUM_ARGS())
+       {
+               case 1:  /* mysql_stmt_init */
+               if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
+                               return;
+                       }
+                       MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, mysql_link, 
"mysqli_link");
+
+                       stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
+
+                       stmt->stmt = mysql_stmt_init(mysql->mysql);
+               break;
+               case 2:
+               if (zend_get_parameters_ex(2, &mysql_link, 
&statement)==FAILURE) {
+                               return;
+                       }
+                       MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, mysql_link, 
"mysqli_link");
+                       convert_to_string_ex(statement);
+
+                       stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
+       
+                       if ((stmt->stmt = mysql_stmt_init(mysql->mysql))) {
+                               mysql_stmt_prepare(stmt->stmt, 
Z_STRVAL_PP(statement), strlen(Z_STRVAL_PP(statement)));
+                       }
+               break;
+               default:
+                       WRONG_PARAM_COUNT;
+               break;
+       }
+
+       if (!stmt->stmt) {
+               efree(stmt);
+               RETURN_FALSE;
+       }
+
+       mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, 
sizeof(MYSQLI_RESOURCE));
+       mysqli_resource->ptr = (void *)stmt;
+       
+       ((mysqli_object *) zend_object_store_get_object(getThis() 
TSRMLS_CC))->ptr = mysqli_resource;
+       ((mysqli_object *) zend_object_store_get_object(getThis() 
TSRMLS_CC))->valid = 1;
+}
+/* }}} */
+
+/* {{{ mixed mysqli_result_construct() 
+constructor for result object.
+Parameters: 
+  object [, mode] -> mysqli_store/use_result
+*/
+ZEND_FUNCTION(mysqli_result_construct)
+{
+       MY_MYSQL                        *mysql;
+       MYSQL_RES                       *result;
+       zval                            **mysql_link, **mode;
+       MYSQLI_RESOURCE         *mysqli_resource;
+       int                                     resmode = MYSQLI_STORE_RESULT;
+
+       switch (ZEND_NUM_ARGS()) {
+               case 1:
+               if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
+                               return;
+                       }
+               break;
+               case 2:
+               if (zend_get_parameters_ex(2, &mysql_link, &mode)==FAILURE) {
+                               return;
+                       }
+                       resmode = Z_LVAL_PP(mode);
+               break;
+               default:
+                       WRONG_PARAM_COUNT;
+       }
+
+       MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, mysql_link, "mysqli_link");
+
+       result = (resmode == MYSQLI_STORE_RESULT) ? 
mysql_store_result(mysql->mysql) :
+                                                                               
                mysql_use_result(mysql->mysql);
+
+       if (!result) {
+               RETURN_FALSE;
+       }
+
+       mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, 
sizeof(MYSQLI_RESOURCE));
+       mysqli_resource->ptr = (void *)result;
+       
+       ((mysqli_object *) zend_object_store_get_object(getThis() 
TSRMLS_CC))->ptr = mysqli_resource;
+       ((mysqli_object *) zend_object_store_get_object(getThis() 
TSRMLS_CC))->valid = 1;
+
+}
+/* }}} */
+
 /* {{{ php_mysqli_fetch_into_hash
  */
 void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int 
override_flags, int into_object)
http://cvs.php.net/diff.php/php-src/ext/mysqli/php_mysqli.h?r1=1.40&r2=1.41&ty=u
Index: php-src/ext/mysqli/php_mysqli.h
diff -u php-src/ext/mysqli/php_mysqli.h:1.40 
php-src/ext/mysqli/php_mysqli.h:1.41
--- php-src/ext/mysqli/php_mysqli.h:1.40        Thu Sep  2 00:53:01 2004
+++ php-src/ext/mysqli/php_mysqli.h     Sun Dec 26 08:16:38 2004
@@ -15,7 +15,7 @@
   | Author: Georg Richter <[EMAIL PROTECTED]>                                |
   +----------------------------------------------------------------------+
 
-  $Id: php_mysqli.h,v 1.40 2004/09/02 04:53:01 georg Exp $ 
+  $Id: php_mysqli.h,v 1.41 2004/12/26 13:16:38 georg Exp $ 
 */
 
 /* A little hack to prevent build break, when mysql is used together with
@@ -372,6 +372,9 @@
 PHP_FUNCTION(mysqli_use_result);
 PHP_FUNCTION(mysqli_warning_count);
 
+ZEND_FUNCTION(mysqli_stmt_construct);
+ZEND_FUNCTION(mysqli_result_construct);
+
 ZEND_BEGIN_MODULE_GLOBALS(mysqli)
        long                    default_link;
        long                    num_links;

http://cvs.php.net/co.php/php-src/ext/mysqli/tests/062.phpt?r=1.1&p=1
Index: php-src/ext/mysqli/tests/062.phpt
+++ php-src/ext/mysqli/tests/062.phpt
--TEST--
resultset constructor 
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
        include "connect.inc";

        $mysql = new mysqli($host, $user, $passwd);

        $mysql->real_query("SELECT 'foo' FROM DUAL");

        $myresult = new mysqli_result($mysql);

        $row = $myresult->fetch_row();
        $myresult->close();
        $mysql->close();

        var_dump($row);
?>
--EXPECT--
array(1) {
  [0]=>
  string(3) "foo"
}

http://cvs.php.net/co.php/php-src/ext/mysqli/tests/063.phpt?r=1.1&p=1
Index: php-src/ext/mysqli/tests/063.phpt
+++ php-src/ext/mysqli/tests/063.phpt
--TEST--
resultset constructor 
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
        include "connect.inc";

        $mysql = new mysqli($host, $user, $passwd);

        $stmt = new mysqli_stmt($mysql, "SELECT 'foo' FROM DUAL");
        $stmt->execute();
        $stmt->bind_result($foo);
        $stmt->fetch();
        $stmt->close();
        $mysql->close();

        var_dump($foo);
?>
--EXPECT--
string(3) "foo"

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

Reply via email to