mboeren         Mon Oct 28 04:41:15 2002 EDT

  Modified files:              
    /php4/ext/dbx       dbx.c dbx.h dbx_oci8.c 
    /php4/ext/dbx/tests 002.phpt 005.phpt 
  Log:
  Added ini-entry and dbx_query flags to control the returned
  column names (unchanged, lowercase, uppercase).
  
  
Index: php4/ext/dbx/dbx.c
diff -u php4/ext/dbx/dbx.c:1.39 php4/ext/dbx/dbx.c:1.40
--- php4/ext/dbx/dbx.c:1.39     Wed Oct 23 06:50:21 2002
+++ php4/ext/dbx/dbx.c  Mon Oct 28 04:41:15 2002
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dbx.c,v 1.39 2002/10/23 10:50:21 mboeren Exp $ */
+/* $Id: dbx.c,v 1.40 2002/10/28 09:41:15 mboeren Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -30,6 +30,7 @@
 #include "php_ini.h"
 #include "php_dbx.h"
 #include "ext/standard/info.h"
+#include "ext/standard/php_string.h"
 
 /* defines for supported databases */
 #define DBX_UNKNOWN 0
@@ -167,9 +168,15 @@
 #ifdef COMPILE_DL_DBX
 ZEND_GET_MODULE(dbx)
 #endif
+
+ZEND_INI_BEGIN()
+    ZEND_INI_ENTRY("dbx.colnames_case", "unchanged", ZEND_INI_SYSTEM, NULL)
+ZEND_INI_END()
 
 ZEND_MINIT_FUNCTION(dbx)
 {
+    REGISTER_INI_ENTRIES();
+
        REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("DBX_PGSQL", DBX_PGSQL, CONST_CS | CONST_PERSISTENT);
@@ -183,6 +190,10 @@
        REGISTER_LONG_CONSTANT("DBX_RESULT_INFO", DBX_RESULT_INFO, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("DBX_RESULT_INDEX", DBX_RESULT_INDEX, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("DBX_RESULT_ASSOC", DBX_RESULT_ASSOC, CONST_CS | 
CONST_PERSISTENT);
+
+       REGISTER_LONG_CONSTANT("DBX_COLNAMES_UNCHANGED", DBX_COLNAMES_UNCHANGED, 
+CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("DBX_COLNAMES_UPPERCASE", DBX_COLNAMES_UPPERCASE, 
+CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("DBX_COLNAMES_LOWERCASE", DBX_COLNAMES_LOWERCASE, 
+CONST_CS | CONST_PERSISTENT);
 
        REGISTER_LONG_CONSTANT("DBX_CMP_NATIVE", DBX_CMP_NATIVE, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("DBX_CMP_TEXT", DBX_CMP_TEXT, CONST_CS | 
CONST_PERSISTENT);
@@ -195,6 +206,7 @@
 
 ZEND_MSHUTDOWN_FUNCTION(dbx)
 {
+    UNREGISTER_INI_ENTRIES();
        return SUCCESS;
 }
 
@@ -215,6 +227,7 @@
        php_info_print_table_row(2, "dbx version", "1.0.0");
        php_info_print_table_row(2, "supported databases", 
"MySQL\nODBC\nPostgreSQL\nMicrosoft SQL Server\nFrontBase\nOracle 8 
(oci8)\nSybase-CT");
        php_info_print_table_end();
+    DISPLAY_INI_ENTRIES();
 }
 
 /*
@@ -353,10 +366,20 @@
        long col_index;
        long row_count;
        zval *info;
-       long info_flags;
+       long query_flags;
+       long result_flags;
        zval *data;
        zval **row_ptr;
-       zval **inforow_ptr;
+       zval **inforow_ptr;
+       /* default values for colname-case */
+       char * colnames_case = INI_STR("dbx.colnames_case");
+       long colcase = DBX_COLNAMES_UNCHANGED;
+       if (!strcmp(colnames_case, "uppercase")) {
+               colcase = DBX_COLNAMES_UPPERCASE;
+       }
+       if (!strcmp(colnames_case, "lowercase")) {
+               colcase = DBX_COLNAMES_LOWERCASE;
+       }
 
        if (ZEND_NUM_ARGS()<min_number_of_arguments || 
ZEND_NUM_ARGS()>number_of_arguments || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), 
arguments) == FAILURE) {
                WRONG_PARAM_COUNT;
@@ -366,15 +389,27 @@
                RETURN_LONG(0);
        }
        /* default values */
-       info_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC;
+       result_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC;
        /* parameter overrides */
        if (ZEND_NUM_ARGS()>2) {
                convert_to_long_ex(arguments[2]);
-               info_flags = Z_LVAL_PP(arguments[2]);
-               /* fieldnames are needed for association! */
-               if (info_flags & DBX_RESULT_ASSOC) {
-                       info_flags |= DBX_RESULT_INFO;
-               }
+               query_flags = Z_LVAL_PP(arguments[2]);
+               /* fieldnames are needed for association! */
+               result_flags = (query_flags & DBX_RESULT_INFO) | (query_flags & 
+DBX_RESULT_INDEX) | (query_flags & DBX_RESULT_ASSOC);
+               if (result_flags & DBX_RESULT_ASSOC) {
+                       result_flags |= DBX_RESULT_INFO;
+               }
+               if (!result_flags) result_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | 
+DBX_RESULT_ASSOC;
+               /* override ini-setting for colcase */
+               if (query_flags & DBX_COLNAMES_UNCHANGED) {
+                       colcase = DBX_COLNAMES_UNCHANGED;
+               }
+               if (query_flags & DBX_COLNAMES_UPPERCASE) {
+                       colcase = DBX_COLNAMES_UPPERCASE;
+               }
+               if (query_flags & DBX_COLNAMES_LOWERCASE) {
+                       colcase = DBX_COLNAMES_LOWERCASE;
+               }
        }
        MAKE_STD_ZVAL(rv_result_handle); 
        ZVAL_LONG(rv_result_handle, 0);
@@ -398,7 +433,7 @@
        /* add result_handle property to return_value */
        zend_hash_update(Z_OBJPROP_P(return_value), "handle", 7, (void 
*)&(rv_result_handle), sizeof(zval *), NULL);
        /* init info property as array and add to return_value as a property */
-       if (info_flags & DBX_RESULT_INFO) {
+       if (result_flags & DBX_RESULT_INFO) {
                MAKE_STD_ZVAL(info); 
                if (array_init(info) != SUCCESS) {
                        zend_error(E_ERROR, "dbx_query: unable to create info-array 
for results...");
@@ -426,7 +461,7 @@
        }
        zend_hash_update(Z_OBJPROP_P(return_value), "cols", 5, (void 
*)&(rv_column_count), sizeof(zval *), NULL);
        /* fill the info array with columnnames and types (indexed and assoc) */
-       if (info_flags & DBX_RESULT_INFO) {
+       if (result_flags & DBX_RESULT_INFO) {
                zval *info_row_name;
                zval *info_row_type;
                MAKE_STD_ZVAL(info_row_name);
@@ -449,7 +484,14 @@
                        /* get name */
                        MAKE_STD_ZVAL(rv_column_name);
                        ZVAL_LONG(rv_column_name, 0);
-                       result = switch_dbx_getcolumnname(&rv_column_name, 
&rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
+                       result = switch_dbx_getcolumnname(&rv_column_name, 
+&rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module);
+                       /* modify case if requested */
+                       if (colcase==DBX_COLNAMES_UPPERCASE) {
+                               php_strtoupper(Z_STRVAL_P(rv_column_name), 
+Z_STRLEN_P(rv_column_name));
+                               }
+                       if (colcase==DBX_COLNAMES_LOWERCASE) {
+                               php_strtolower(Z_STRVAL_P(rv_column_name), 
+Z_STRLEN_P(rv_column_name));
+                               }
                        if (result) { 
                                zend_hash_index_update(Z_ARRVAL_P(info_row_name), 
col_index, (void *)&(rv_column_name), sizeof(zval *), NULL);
                        } else {
@@ -479,7 +521,7 @@
                if (result) {
                        zend_hash_index_update(Z_ARRVAL_P(data), row_count, (void 
*)&(rv_row), sizeof(zval *), (void **) &row_ptr);
                        /* associate results with fieldnames */
-                       if (info_flags & DBX_RESULT_ASSOC) {
+                       if (result_flags & DBX_RESULT_ASSOC) {
                                zval **columnname_ptr, **actual_ptr;
                                for (col_index=0; col_index<Z_LVAL_P(rv_column_count); 
++col_index) {
                                        zend_hash_index_find(Z_ARRVAL_PP(inforow_ptr), 
col_index, (void **) &columnname_ptr);
Index: php4/ext/dbx/dbx.h
diff -u php4/ext/dbx/dbx.h:1.9 php4/ext/dbx/dbx.h:1.10
--- php4/ext/dbx/dbx.h:1.9      Tue Dec 11 10:29:05 2001
+++ php4/ext/dbx/dbx.h  Mon Oct 28 04:41:15 2002
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dbx.h,v 1.9 2001/12/11 15:29:05 sebastian Exp $ */
+/* $Id: dbx.h,v 1.10 2002/10/28 09:41:15 mboeren Exp $ */
 
 #ifndef ZEND_DBX_H
 #define ZEND_DBX_H
@@ -31,17 +31,20 @@
 
 #include "php.h"
 
-#define DBX_PERSISTENT        (1<<0)
+#define DBX_PERSISTENT         (1<<0)
 
-#define DBX_RESULT_INFO       (1<<0)
-#define DBX_RESULT_INDEX      (1<<1)
-#define DBX_RESULT_ASSOC      (1<<2)
-
-#define DBX_CMP_NATIVE        (1<<0)
-#define DBX_CMP_TEXT          (1<<1)
-#define DBX_CMP_NUMBER        (1<<2)
-#define DBX_CMP_ASC           (1<<3)
-#define DBX_CMP_DESC          (1<<4)
+#define DBX_RESULT_INFO        (1<<0)
+#define DBX_RESULT_INDEX       (1<<1)
+#define DBX_RESULT_ASSOC       (1<<2)
+#define DBX_COLNAMES_UNCHANGED (1<<3)
+#define DBX_COLNAMES_UPPERCASE (1<<4)
+#define DBX_COLNAMES_LOWERCASE (1<<5)
+
+#define DBX_CMP_NATIVE         (1<<0)
+#define DBX_CMP_TEXT           (1<<1)
+#define DBX_CMP_NUMBER         (1<<2)
+#define DBX_CMP_ASC            (1<<3)
+#define DBX_CMP_DESC           (1<<4)
 
 #define MOVE_RETURNED_TO_RV(rv, returned_zval) { **rv = *returned_zval; 
zval_copy_ctor(*rv); zval_ptr_dtor(&returned_zval); }
 
Index: php4/ext/dbx/dbx_oci8.c
diff -u php4/ext/dbx/dbx_oci8.c:1.8 php4/ext/dbx/dbx_oci8.c:1.9
--- php4/ext/dbx/dbx_oci8.c:1.8 Thu Oct 24 10:26:14 2002
+++ php4/ext/dbx/dbx_oci8.c     Mon Oct 28 04:41:15 2002
@@ -20,11 +20,10 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: dbx_oci8.c,v 1.8 2002/10/24 14:26:14 mboeren Exp $ */
+/* $Id: dbx_oci8.c,v 1.9 2002/10/28 09:41:15 mboeren Exp $ */
 
 #include "dbx.h"
 #include "dbx_oci8.h"
-#include "ext/standard/php_string.h" /* for auto-change column names to lowercase*/
 
 #define OCI_ASSOC        1<<0
 #define OCI_NUM          1<<1
@@ -179,7 +178,6 @@
                return 0;
        }
        FREE_ZVAL(zval_column_index);
-       php_strtolower(Z_STRVAL_P(returned_zval), Z_STRLEN_P(returned_zval));
        MOVE_RETURNED_TO_RV(rv, returned_zval);
        return 1;
 }
Index: php4/ext/dbx/tests/002.phpt
diff -u php4/ext/dbx/tests/002.phpt:1.6 php4/ext/dbx/tests/002.phpt:1.7
--- php4/ext/dbx/tests/002.phpt:1.6     Thu Oct 24 15:34:18 2002
+++ php4/ext/dbx/tests/002.phpt Mon Oct 28 04:41:15 2002
@@ -15,6 +15,9 @@
 if (DBX_RESULT_INFO=="DBX_RESULT_INFO")   print('!DBX_RESULT_INFO');
 if (DBX_RESULT_INDEX=="DBX_RESULT_INDEX") print('!DBX_RESULT_INDEX');
 if (DBX_RESULT_ASSOC=="DBX_RESULT_ASSOC") print('!DBX_RESULT_ASSOC');
+if (DBX_COLNAMES_UNCHANGED=="DBX_COLNAMES_UNCHANGED") 
+print('!DBX_COLNAMES_UNCHANGED');
+if (DBX_COLNAMES_UPPERCASE=="DBX_COLNAMES_UPPERCASE") 
+print('!DBX_COLNAMES_UPPERCASE');
+if (DBX_COLNAMES_LOWERCASE=="DBX_COLNAMES_LOWERCASE") 
+print('!DBX_COLNAMES_LOWERCASE');
 if (DBX_CMP_NATIVE=="DBX_CMP_NATIVE")     print('!DBX_CMP_NATIVE');
 if (DBX_CMP_TEXT=="DBX_CMP_TEXT")         print('!DBX_CMP_TEXT');
 if (DBX_CMP_NUMBER=="DBX_CMP_NUMBER")     print('!DBX_CMP_NUMBER');
Index: php4/ext/dbx/tests/005.phpt
diff -u php4/ext/dbx/tests/005.phpt:1.7 php4/ext/dbx/tests/005.phpt:1.8
--- php4/ext/dbx/tests/005.phpt:1.7     Thu Oct 24 15:34:18 2002
+++ php4/ext/dbx/tests/005.phpt Mon Oct 28 04:41:15 2002
@@ -56,6 +56,15 @@
                 }
             }
         }
+    // colnames_case flags
+    if ($dro=dbx_query($dlo, $sql_statement, DBX_COLNAMES_LOWERCASE)) {
+        print('column name lowercased: ');
+        
+print($dro->info["name"][0].".".$dro->data[0]['id'].".".$dro->data[0]['description']."\n");
+        }
+    if ($dro=dbx_query($dlo, $sql_statement, DBX_COLNAMES_UPPERCASE)) {
+        print('column name uppercased: ');
+        
+print($dro->info["name"][0].".".$dro->data[0]['ID'].".".$dro->data[0]['DESCRIPTION']."\n");
+        }
 
     // generate errors
     if (!@dbx_query(0, $sql_statement)) {
@@ -87,6 +96,8 @@
 update-query: dbx_query works ok
 999999.temporary_record.11
 delete-query: dbx_query works ok
+column name lowercased: id.1.root
+column name uppercased: ID.1.root
 wrong dbx_link_object: query failure works ok
 wrong sql-statement: query failure works ok
 too many parameters: query failure works ok

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

Reply via email to