example and the patch file

From: Date: Mon, 24 Oct 2005 14:56:11 +0000
Subject: example and the patch file
References: 1  Groups: php.pecl.dev 
Request: Send a blank email to pecl-dev+get-3141@lists.php.net to get a copy of this message
Here is the example: --------------------- <?php $stmt = $x->query("SELECT id, title FROM news"); echo $stmt->fetchAll(PDO_FETCH_XML); ?> Here is the output: ------------------- <resultset queryString="SELECT id, title FROM news"> <row> <id>1</id> <title>hello world</title> </row> <row> <id>2</id> <title> foo bar </title> </row> ...... </resultset> Here is the patch file (against PDO-1.0RC1): --------------------- diff -Nur PDO-1.0RC1/pdo.c pdo/pdo.c --- PDO-1.0RC1/pdo.c Sun Sep 11 13:27:30 2005 +++ pdo/pdo.c Mon Oct 24 19:18:38 2005 @@ -320,6 +320,7 @@ REGISTER_LONG_CONSTANT("PDO_FETCH_SERIALIZE",(long)PDO_FETCH_SERIALIZE, CONST_CS|CONST_PERSISTENT); #endif REGISTER_LONG_CONSTANT("PDO_FETCH_NAMED",(long)PDO_FETCH_NAMED, CONST_CS|CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PDO_FETCH_XML",    (long)PDO_FETCH_XML, 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); diff -Nur PDO-1.0RC1/pdo_stmt.c pdo/pdo_stmt.c --- PDO-1.0RC1/pdo_stmt.c Sun Sep 11 03:32:16 2005 +++ pdo/pdo_stmt.c Mon Oct 24 19:19:39 2005 @@ -36,6 +36,7 @@ #include "zend_exceptions.h" #include "zend_interfaces.h" #include "php_memory_streams.h" +#include "ext/standard/php_smart_str.h" #if COMPILE_DL_PDO /* {{{ content from zend_arg_defs.c: @@ -743,6 +744,7 @@ int flags = how & PDO_FETCH_FLAGS, idx, old_arg_count; zend_class_entry * ce, * old_ce; zval grp_val, *grp, **pgrp, *retval, *old_ctor_args; + smart_str xmlstr = {0}; how = how & ~PDO_FETCH_FLAGS; if (how == PDO_FETCH_USE_DEFAULT) { @@ -846,6 +848,11 @@
     }
    }
    break;
+ + case PDO_FETCH_XML:
+    convert_to_string(return_value);
+    smart_str_appends(&xmlstr, "<row>");
+    break;
default: @@ -969,6 +976,16 @@
     stmt->fetch.func.values[idx] = val;
     stmt->fetch.cls.fci.params[idx] = &stmt->fetch.func.values[idx];
     break;
+
+    case PDO_FETCH_XML:
+     smart_str_appends(&xmlstr, "<");
+     smart_str_appendl(&xmlstr, stmt->columns[i].name, stmt->columns[i].namelen);
+     smart_str_appends(&xmlstr, ">");
+     smart_str_appendl(&xmlstr, Z_STRVAL_P(val), Z_STRLEN_P(val));
+     smart_str_appends(&xmlstr, "</");
+     smart_str_appendl(&xmlstr, stmt->columns[i].name, stmt->columns[i].namelen);
+     smart_str_appends(&xmlstr, ">");
+     break;
    default:
     zval_ptr_dtor(&val);
@@ -1020,6 +1037,13 @@
     zval_ptr_dtor(&stmt->fetch.func.values[idx]);
    }
    break;
+ + case PDO_FETCH_XML:
+    smart_str_appends(&xmlstr, "</row>");
+    smart_str_0(&xmlstr);
+    ZVAL_STRINGL(return_value, xmlstr.c, xmlstr.len, 1);
+    smart_str_free(&xmlstr);
+    break;
default:
    break;
@@ -1231,6 +1255,7 @@ zend_class_entry *old_ce; zval *old_ctor_args, *ctor_args = NULL; int error = 0, old_arg_count; + smart_str xmlstr = {0}; if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lzz", &how, &arg2, &ctor_args)) { RETURN_FALSE; @@ -1318,7 +1343,6 @@ error = 1; } } - if (!error) { PDO_STMT_CLEAR_ERR(); MAKE_STD_ZVAL(data); @@ -1334,7 +1358,21 @@ } } if (!error) { - if ((how & PDO_FETCH_GROUP)) { + if ((how & PDO_FETCH_XML)) { + convert_to_string(return_value); + smart_str_appends(&xmlstr, "<resultset queryString=\""); + smart_str_appendl(&xmlstr, stmt->query_string, stmt->query_stringlen); + smart_str_appends(&xmlstr, "\">"); + do {
+    smart_str_appends(&xmlstr, Z_STRVAL_P(data));
+    MAKE_STD_ZVAL(data);
+   } while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, 0 TSRMLS_CC));
+ + smart_str_appends(&xmlstr, "</resultset>"); + smart_str_0(&xmlstr); + ZVAL_STRINGL(return_value, xmlstr.c, xmlstr.len, 1); + smart_str_free(&xmlstr); + } else if ((how & PDO_FETCH_GROUP)) { do {
    MAKE_STD_ZVAL(data);
   } while (do_fetch(stmt, TRUE, data, how, PDO_FETCH_ORI_NEXT, 0, return_all TSRMLS_CC));
diff -Nur PDO-1.0RC1/php_pdo_driver.h pdo/php_pdo_driver.h --- PDO-1.0RC1/php_pdo_driver.h Wed Jul 20 11:38:34 2005 +++ pdo/php_pdo_driver.h Mon Oct 24 19:18:29 2005 @@ -90,6 +90,7 @@ PDO_FETCH_INTO, /* fetch row into an existing object */ PDO_FETCH_FUNC, /* fetch into function and return its result */
 PDO_FETCH_NAMED,    /* like PDO_FETCH_ASSOC, but can handle duplicate names */
+ PDO_FETCH_XML, /* fetch row into xml format */ PDO_FETCH__MAX /* must be last */ };

« previous php.pecl.dev (#3141) next »