]> granicus.if.org Git - php/commitdiff
* Get the mSQL module up to date
authorZeev Suraski <zeev@php.net>
Fri, 16 Jul 1999 17:06:48 +0000 (17:06 +0000)
committerZeev Suraski <zeev@php.net>
Fri, 16 Jul 1999 17:06:48 +0000 (17:06 +0000)
ext/msql/msql.c
ext/standard/string.c

index 5e20edde948c2abc459c882b13afe647bc230109..6e3d67f68d2409ce96ab189ad49870c5a6a71a25 100644 (file)
@@ -55,6 +55,12 @@ typedef struct msql_global_struct{
 msql_module php3_msql_module;
 #endif
 
+
+#define MSQL_ASSOC             1<<0
+#define MSQL_NUM               1<<1
+#define MSQL_BOTH              (MYSQL_ASSOC|MYSQL_NUM)
+
+
 function_entry msql_functions[] = {
        {"msql_connect",                php3_msql_connect,                      NULL},
        {"msql_pconnect",               php3_msql_pconnect,                     NULL},
@@ -232,6 +238,10 @@ DLEXPORT int php3_minit_msql(INIT_FUNC_ARGS)
        
        msql_module_entry.type = type;
 
+       REGISTER_LONG_CONSTANT("MSQL_ASSOC", MSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("MSQL_NUM", MSQL_NUM, CONST_CS | CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("MSQL_BOTH", MSQL_BOTH, CONST_CS | CONST_PERSISTENT);
+
        return SUCCESS;
 }
 
@@ -1007,44 +1017,10 @@ DLEXPORT PHP_FUNCTION(msql_num_fields)
 }
 /* }}} */
 
-/* {{{ proto array msql_fetch_row(int query)
-   Get a result row as an enumerated array */
-DLEXPORT PHP_FUNCTION(msql_fetch_row)
-{
-       pval *result;
-       m_result *msql_result;
-       m_row msql_row;
-       m_query *msql_query;
-       int type;
-       int num_fields;
-       int i;
-       MSQL_TLS_VARS;
-       
-       if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result)==FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       
-       MSQL_GET_QUERY(result);
-       if (!msql_result ||
-                       ((msql_row = msqlFetchRow(msql_result)) == NULL) ||
-                       (array_init(return_value)==FAILURE)) {
-               RETURN_FALSE;
-       }
-       num_fields = msqlNumFields(msql_result);
-       
-       for (i=0; i<num_fields; i++) {
-               if (msql_row[i]) {
-                       add_index_string(return_value, i, msql_row[i], 1);
-               } else {
-                       add_index_stringl(return_value, i, empty_string, 0, 1);
-               }
-       }
-}
-/* }}} */
 
-static PHP_FUNCTION(msql_fetch_hash)
+static void php3_msql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type)
 {
-       pval *result;
+       pval *result, *arg2;
        m_result *msql_result;
        m_row msql_row;
        m_field *msql_field;
@@ -1056,8 +1032,25 @@ static PHP_FUNCTION(msql_fetch_hash)
        PLS_FETCH();
        MSQL_TLS_VARS;
        
-       if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result)==FAILURE) {
-               WRONG_PARAM_COUNT;
+       switch (ARG_COUNT(ht)) {
+               case 1:
+                       if (getParameters(ht, 1, &result)==FAILURE) {
+                               RETURN_FALSE;
+                       }
+                       if (!result_type) {
+                               result_type = MYSQL_BOTH;
+                       }
+                       break;
+               case 2:
+                       if (getParameters(ht, 2, &result, &arg2)==FAILURE) {
+                               RETURN_FALSE;
+                       }
+                       convert_to_long(arg2);
+                       result_type = arg2->value.lval;
+                       break;
+               default:
+                       WRONG_PARAM_COUNT;
+                       break;
        }
        
        MSQL_GET_QUERY(result);
@@ -1074,23 +1067,48 @@ static PHP_FUNCTION(msql_fetch_hash)
        msqlFieldSeek(msql_result,0);
        for (msql_field=msqlFetchField(msql_result),i=0; msql_field; msql_field=msqlFetchField(msql_result),i++) {
                if (msql_row[i]) {
+                       char *data;
+                       int data_len;
+                       int should_copy;
+
                        if (PG(magic_quotes_runtime)) {
-                               add_get_index_string(return_value, i, _php3_addslashes(msql_row[i],0,NULL,0), (void **) &pval_ptr, 0);
+                               data = _php3_addslashes(msql_row[i], 0, &data_len, 0);
+                               should_copy = 0;
                        } else {
-                               add_get_index_string(return_value, i, msql_row[i], (void **) &pval_ptr, 1);
+                               data = msql_row[i];
+                               data_len = strlen(data);
+                               should_copy = 1;
+                       }
+                       
+                       if (result_type & MSQL_NUM) {
+                               add_index_stringl(return_value, i, data, data_len, should_copy);
+                               should_copy = 1;
+                       }
+                       
+                       if (result_type & MSQL_ASSOC) {
+                               add_assoc_stringl(return_value, msql_field->name, data, data_len, should_copy);
                        }
                } else {
-                       add_get_index_stringl(return_value, i, empty_string, 0, (void **) &pval_ptr, 1);
+                       //add_get_index_stringl(return_value, i, empty_string, 0, (void **) &pval_ptr, 1);
                }
-               _php3_hash_pointer_update(return_value->value.ht, msql_field->name, strlen(msql_field->name)+1, pval_ptr);
        }
 }
 
+
+/* {{{ proto array msql_fetch_row(int query)
+   Get a result row as an enumerated array */
+DLEXPORT PHP_FUNCTION(msql_fetch_row)
+{
+       php3_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSQL_NUM);
+}
+/* }}} */
+
+
 /* {{{ proto object msql_fetch_object(int query)
    Fetch a result row as an object */
 DLEXPORT PHP_FUNCTION(msql_fetch_object)
 {
-       php3_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+       php3_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
        if (return_value->type==IS_ARRAY) {
                return_value->type=IS_OBJECT;
                return_value->value.obj.properties = return_value->value.ht;
index 19ee22acdde53e098344198008ee239e1f1f32ab..e645cda6f60006cc93d314de6e414dbdf44435bf 100644 (file)
@@ -1261,7 +1261,7 @@ char *strerror(int errnum)
 PHPAPI char *_php3_addslashes(char *str, int length, int *new_length, int should_free)
 {
        /* maximum string length, worst case situation */
-       char *new_str = (char *) emalloc((length?length:strlen(str))*2+1); 
+       char *new_str = (char *) emalloc((length?length:(length=strlen(str)))*2+1); 
        char *source,*target;
        char *end;
        char c;