tony2001                Thu Nov 23 14:20:59 2006 UTC

  Modified files:              
    /php-src/ext/oci8   oci8_statement.c 
    /php-src/ext/oci8/tests     array_bind_006.phpt array_bind_str1.phpt 
                                array_bind_str.phpt 
  Log:
  fix oci_bind_array_by_name() in Unicode mode
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/oci8_statement.c?r1=1.35&r2=1.36&diff_format=u
Index: php-src/ext/oci8/oci8_statement.c
diff -u php-src/ext/oci8/oci8_statement.c:1.35 
php-src/ext/oci8/oci8_statement.c:1.36
--- php-src/ext/oci8/oci8_statement.c:1.35      Fri Nov 10 21:55:05 2006
+++ php-src/ext/oci8/oci8_statement.c   Thu Nov 23 14:20:59 2006
@@ -25,7 +25,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: oci8_statement.c,v 1.35 2006/11/10 21:55:05 tony2001 Exp $ */
+/* $Id: oci8_statement.c,v 1.36 2006/11/23 14:20:59 tony2001 Exp $ */
 
 
 #ifdef HAVE_CONFIG_H
@@ -829,14 +829,19 @@
                                        zstr tmp;
                                        for (i = 0; i < 
bind->array.current_length; i++) {
                                                /* int curr_element_length = 
strlen(((text *)bind->array.elements)+i*bind->array.max_length); */
-                                               int curr_element_length = 
bind->array.element_lengths[i];
+                                               ub2 curr_element_length = 
TEXT_CHARS(bind->array.element_lengths[i]);
                                                if ((i < 
bind->array.old_length) && (zend_hash_get_current_data(hash, (void **) &entry) 
!= FAILURE)) {
                                                        zval_dtor(*entry);
-                                                       tmp.s = ((text 
*)bind->array.elements)+i*bind->array.max_length;
+                                                       if (UG(unicode)) {
+                                                               tmp.u = ((UChar 
*)bind->array.elements)+TEXT_CHARS(i*bind->array.max_length);
+                                                       } else {
+                                                               tmp.s = ((text 
*)bind->array.elements)+(i*bind->array.max_length);
+                                                       }
+
                                                        ZVAL_TEXTL(*entry, tmp, 
curr_element_length, 1);
                                                        
zend_hash_move_forward(hash);
                                                } else {
-                                                       tmp.s = ((text 
*)bind->array.elements)+i*bind->array.max_length;
+                                                       tmp.s = ((text 
*)bind->array.elements)+(i*bind->array.max_length);
                                                        
add_next_index_textl(bind->zval, tmp, curr_element_length, 1);
                                                }
                                        }
@@ -1328,7 +1333,7 @@
                                                                (text *)name.s,
                                                                
USTR_BYTES(uni_type, name_len),
                                                                (dvoid *) 
bindp->array.elements, 
-                                                               (sb4) 
USTR_BYTES(uni_type, bind->array.max_length),
+                                                               (sb4) 
bind->array.max_length,
                                                                type,
                                                                (dvoid *)0, /* 
bindp->array.indicators, */
                                                                (ub2 
*)bind->array.element_lengths,
@@ -1373,10 +1378,14 @@
        }
        
        bind = emalloc(sizeof(php_oci_bind));
-       bind->array.elements            = (text *)ecalloc(1, max_table_length * 
sizeof(text) * (maxlength + 1));
+       if (UG(unicode)) {
+               bind->array.elements            = (UChar *)ecalloc(1, 
max_table_length * sizeof(UChar) * (maxlength + 1));
+       } else {
+               bind->array.elements            = (text *)ecalloc(1, 
max_table_length * sizeof(text) * (maxlength + 1));
+       }
        bind->array.current_length      = 
zend_hash_num_elements(Z_ARRVAL_P(var));
        bind->array.old_length          = bind->array.current_length;
-       bind->array.max_length          = maxlength;
+       bind->array.max_length          = TEXT_BYTES(maxlength);
        bind->array.element_lengths     = ecalloc(1, max_table_length * 
sizeof(ub2));
        
        zend_hash_internal_pointer_reset(hash);
@@ -1384,7 +1393,7 @@
        for (i = 0; i < bind->array.current_length; i++) {
                if (zend_hash_get_current_data(hash, (void **) &entry) != 
FAILURE) {
                        convert_to_text_ex(entry);
-                       bind->array.element_lengths[i] = Z_UNILEN_PP(entry); 
+                       bind->array.element_lengths[i] = 
TEXT_BYTES(Z_UNILEN_PP(entry)); 
                        zend_hash_move_forward(hash);
                } else {
                        break;
@@ -1399,12 +1408,16 @@
                        convert_to_text_ex(entry);
                        element_length = (maxlength > Z_UNILEN_PP(entry)) ? 
Z_UNILEN_PP(entry) : maxlength;
                        
-                       memcpy((text *)bind->array.elements + i*maxlength, 
Z_UNIVAL_PP(entry).s, element_length);
-                       ((text *)bind->array.elements)[i*maxlength + 
element_length] = '\0';
-                       
+                       if (UG(unicode)) {
+                               memcpy((UChar *)bind->array.elements + 
i*maxlength, Z_UNIVAL_PP(entry).u, TEXT_BYTES(element_length));
+                               ((UChar *)bind->array.elements)[i*maxlength + 
element_length] = '\0';
+                       } else {
+                               memcpy((text *)bind->array.elements + 
i*maxlength, Z_UNIVAL_PP(entry).s, element_length);
+                               ((text *)bind->array.elements)[i*maxlength + 
element_length] = '\0';
+                       }
                        zend_hash_move_forward(hash);
                } else {
-                       ((text *)bind->array.elements)[i*maxlength] = '\0';
+                       break;
                }
        }
        zend_hash_internal_pointer_reset(hash);
http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/array_bind_006.phpt?r1=1.2&r2=1.3&diff_format=u
Index: php-src/ext/oci8/tests/array_bind_006.phpt
diff -u php-src/ext/oci8/tests/array_bind_006.phpt:1.2 
php-src/ext/oci8/tests/array_bind_006.phpt:1.3
--- php-src/ext/oci8/tests/array_bind_006.phpt:1.2      Thu Dec  8 22:31:55 2005
+++ php-src/ext/oci8/tests/array_bind_006.phpt  Thu Nov 23 14:20:59 2006
@@ -72,3 +72,17 @@
   string(3) "one"
 }
 Done
+--UEXPECT--
+array(5) {
+  [0]=>
+  unicode(4) "five"
+  [1]=>
+  unicode(4) "four"
+  [2]=>
+  unicode(5) "three"
+  [3]=>
+  unicode(3) "two"
+  [4]=>
+  unicode(3) "one"
+}
+Done
http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/array_bind_str1.phpt?r1=1.2&r2=1.3&diff_format=u
Index: php-src/ext/oci8/tests/array_bind_str1.phpt
diff -u php-src/ext/oci8/tests/array_bind_str1.phpt:1.2 
php-src/ext/oci8/tests/array_bind_str1.phpt:1.3
--- php-src/ext/oci8/tests/array_bind_str1.phpt:1.2     Thu Dec  8 22:31:55 2005
+++ php-src/ext/oci8/tests/array_bind_str1.phpt Thu Nov 23 14:20:59 2006
@@ -72,3 +72,17 @@
   string(3) "one"
 }
 Done
+--UEXPECT--
+array(5) {
+  [0]=>
+  unicode(4) "five"
+  [1]=>
+  unicode(4) "four"
+  [2]=>
+  unicode(5) "three"
+  [3]=>
+  unicode(3) "two"
+  [4]=>
+  unicode(3) "one"
+}
+Done
http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/array_bind_str.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/oci8/tests/array_bind_str.phpt
diff -u php-src/ext/oci8/tests/array_bind_str.phpt:1.1 
php-src/ext/oci8/tests/array_bind_str.phpt:1.2
--- php-src/ext/oci8/tests/array_bind_str.phpt:1.1      Tue Dec  6 19:15:02 2005
+++ php-src/ext/oci8/tests/array_bind_str.phpt  Thu Nov 23 14:20:59 2006
@@ -72,3 +72,17 @@
   string(3) "one"
 }
 Done
+--UEXPECT--
+array(5) {
+  [0]=>
+  unicode(4) "five"
+  [1]=>
+  unicode(4) "four"
+  [2]=>
+  unicode(5) "three"
+  [3]=>
+  unicode(3) "two"
+  [4]=>
+  unicode(3) "one"
+}
+Done



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

Reply via email to