summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2005-01-12 03:26:46 +0000
committerWez Furlong <wez@php.net>2005-01-12 03:26:46 +0000
commit076bc75c01dd436814ae30960251c23caaa8136f (patch)
treea936985837e313ab3ac5bf197176d971a89d3e7b
parentf9d3469e4f5d8c31519d0829eb39f39dab58a29a (diff)
downloadphp-git-076bc75c01dd436814ae30960251c23caaa8136f.tar.gz
add theoretical support for returning ints as ints and bools as bools.
individual drivers need to support returning data in these formats.
-rwxr-xr-xext/pdo/pdo_stmt.c16
-rwxr-xr-xext/pdo/php_pdo_driver.h10
2 files changed, 23 insertions, 3 deletions
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c
index 1e5db6d84f..825b91b55b 100755
--- a/ext/pdo/pdo_stmt.c
+++ b/ext/pdo/pdo_stmt.c
@@ -377,6 +377,22 @@ static inline void fetch_value(pdo_stmt_t *stmt, zval *dest, int colno TSRMLS_DC
stmt->methods->get_col(stmt, colno, &value, &value_len TSRMLS_CC);
switch (col->param_type) {
+ case PDO_PARAM_INT:
+ if (value && value_len == sizeof(long)) {
+ ZVAL_LONG(dest, *(long*)value);
+ break;
+ }
+ ZVAL_NULL(dest);
+ break;
+
+ case PDO_PARAM_BOOL:
+ if (value && value_len == sizeof(zend_bool)) {
+ ZVAL_BOOL(dest, *(zend_bool*)value);
+ break;
+ }
+ ZVAL_NULL(dest);
+ break;
+
case PDO_PARAM_STR:
if (value && !(value_len == 0 && stmt->dbh->oracle_nulls)) {
ZVAL_STRINGL(dest, value, value_len, 1);
diff --git a/ext/pdo/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h
index bbfa7d36bf..87c2b0f187 100755
--- a/ext/pdo/php_pdo_driver.h
+++ b/ext/pdo/php_pdo_driver.h
@@ -39,10 +39,11 @@ struct pdo_bound_param_data;
enum pdo_param_type {
PDO_PARAM_NULL,
- PDO_PARAM_INT,
+ PDO_PARAM_INT, /* int as in long, the php native int type */
PDO_PARAM_STR,
PDO_PARAM_LOB,
PDO_PARAM_STMT, /* hierarchical result set */
+ PDO_PARAM_BOOL
};
enum pdo_fetch_type {
@@ -260,7 +261,10 @@ typedef int (*pdo_stmt_fetch_func)(pdo_stmt_t *stmt TSRMLS_DC);
* Driver should populate stmt->columns[colno] with appropriate info */
typedef int (*pdo_stmt_describe_col_func)(pdo_stmt_t *stmt, int colno TSRMLS_DC);
-/* retrieves pointer and size of the value for a column */
+/* retrieves pointer and size of the value for a column.
+ * Note that PDO expects the driver to manage the lifetime of this data;
+ * it will copy the value into a zval on behalf of the script.
+ */
typedef int (*pdo_stmt_get_col_data_func)(pdo_stmt_t *stmt, int colno, char **ptr, unsigned long *len TSRMLS_DC);
/* hook for bound params */
@@ -336,7 +340,7 @@ struct _pdo_dbh_t {
/* these items mst appear in this order at the beginning of the
struct so that this can be cast as a zend_object. we need this
to allow the extending class to escape all the custom handlers
- that PDO decalres.
+ that PDO declares.
*/
zend_class_entry *ce;
HashTable *properties;