]> granicus.if.org Git - php/commitdiff
- Add fetch mode PDO_FETCH_UNIQUE
authorMarcus Boerger <helly@php.net>
Sat, 19 Feb 2005 23:48:30 +0000 (23:48 +0000)
committerMarcus Boerger <helly@php.net>
Sat, 19 Feb 2005 23:48:30 +0000 (23:48 +0000)
ext/pdo/pdo.c
ext/pdo/pdo_stmt.c
ext/pdo/php_pdo_driver.h

index f010a54fe59363c6c1b581feb74438064aeae18b..0788ff2c6ffea201fcf80cad461d26bd3e242939 100755 (executable)
@@ -238,6 +238,7 @@ PHP_MINIT_FUNCTION(pdo)
        REGISTER_LONG_CONSTANT("PDO_FETCH_CLASS",(long)PDO_FETCH_CLASS, CONST_CS|CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PDO_FETCH_INTO", (long)PDO_FETCH_INTO,  CONST_CS|CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PDO_FETCH_GROUP",(long)PDO_FETCH_GROUP, CONST_CS|CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("PDO_FETCH_UNIQUE",(long)PDO_FETCH_UNIQUE, CONST_CS|CONST_PERSISTENT);
 
        REGISTER_LONG_CONSTANT("PDO_ATTR_AUTOCOMMIT",   (long)PDO_ATTR_AUTOCOMMIT,      CONST_CS|CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("PDO_ATTR_PREFETCH",             (long)PDO_ATTR_PREFETCH,        CONST_CS|CONST_PERSISTENT);
index e109eeafabbf3b4e6bc1efab014e0ae93d45674e..3edec0cd3ea526c34c9b66072670ce5d7e8f7705 100755 (executable)
@@ -529,6 +529,7 @@ static int do_fetch_common(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori,
 static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value,
        enum pdo_fetch_type how, enum pdo_fetch_orientation ori, long offset, zval *return_all TSRMLS_DC)
 {
+       int flags = how & PDO_FETCH_FLAGS;
        zend_class_entry * ce;
 
        how = how & ~PDO_FETCH_FLAGS;
@@ -648,15 +649,19 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value,
                        INIT_PZVAL(&val);
                        fetch_value(stmt, &val, 0 TSRMLS_CC);
                        convert_to_string(&val);
-                       if (zend_symtable_find(Z_ARRVAL_P(return_all), Z_STRVAL(val), Z_STRLEN(val)+1, (void**)&pgrp) == FAILURE) {
-                               MAKE_STD_ZVAL(grp);
-                               array_init(grp);
-                               add_assoc_zval(return_all, Z_STRVAL(val), grp);
+                       if ((flags & PDO_FETCH_UNIQUE) == PDO_FETCH_UNIQUE) {
+                               add_assoc_zval(return_all, Z_STRVAL(val), return_value);
                        } else {
-                               grp = *pgrp;
+                               if (zend_symtable_find(Z_ARRVAL_P(return_all), Z_STRVAL(val), Z_STRLEN(val)+1, (void**)&pgrp) == FAILURE) {
+                                       MAKE_STD_ZVAL(grp);
+                                       array_init(grp);
+                                       add_assoc_zval(return_all, Z_STRVAL(val), grp);
+                               } else {
+                                       grp = *pgrp;
+                               }
+                               add_next_index_zval(grp, return_value);
                        }
                        zval_dtor(&val);
-                       add_next_index_zval(grp, return_value);
                        i = 1;
                } else {
                        i = 0;
index 02d30fdaeff31f9cfabec9e015cf705b69774cce..eaf1f742c4a2222d26ad0c0e23ce7c708521d8cb 100755 (executable)
@@ -83,6 +83,7 @@ enum pdo_fetch_type {
 
 #define PDO_FETCH_FLAGS     0xFFFF0000  /* fetchAll() modes or'd to PDO_FETCH_XYZ */
 #define PDO_FETCH_GROUP     0x00010000  /* fetch into groups */
+#define PDO_FETCH_UNIQUE    0x00030000  /* fetch into groups assuming first col is unique */
 
 /* fetch orientation for scrollable cursors */
 enum pdo_fetch_orientation {