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