REGISTER_LONG_CONSTANT("PDO_ATTR_CASE", (long)PDO_ATTR_CASE, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PDO_ATTR_CURSOR_NAME", (long)PDO_ATTR_CURSOR_NAME, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PDO_ATTR_CURSOR", (long)PDO_ATTR_CURSOR, CONST_CS|CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PDO_ATTR_ORACLE_NULLS", (long)PDO_ATTR_ORACLE_NULLS, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PDO_ERRMODE_SILENT", (long)PDO_ERRMODE_SILENT, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PDO_ERRMODE_WARNING", (long)PDO_ERRMODE_WARNING, CONST_CS|CONST_PERSISTENT);
zend_throw_exception_ex(php_pdo_get_exception(), PDO_ERR_SYNTAX TSRMLS_CC, "Case folding mode %d is invalid", Z_LVAL_P(value));
}
RETURN_FALSE;
+
+ case PDO_ATTR_ORACLE_NULLS:
+ convert_to_long(value);
+ dbh->oracle_nulls = Z_LVAL_P(value) ? 1 : 0;
+ RETURN_TRUE;
default:
;
switch (col->param_type) {
case PDO_PARAM_STR:
- if (value) {
+ if (value && !(value_len == 0 && stmt->dbh->oracle_nulls)) {
ZVAL_STRINGL(dest, value, value_len, 1);
break;
}
PDO_ATTR_CASE, /* control case folding for portability */
PDO_ATTR_CURSOR_NAME, /* name a cursor for use in "WHERE CURRENT OF <name>" */
PDO_ATTR_CURSOR, /* cursor type */
+ PDO_ATTR_ORACLE_NULLS, /* convert empty strings to NULL */
/* this defines the start of the range for driver specific options.
* Drivers should define their own attribute constants beginning with this
/* max length a single character can become after correct quoting */
unsigned max_escaped_char_length:3;
+ /* when set, convert empty strings to NULL */
+ unsigned oracle_nulls:1;
+
/* the sum of the number of bits here and the bit fields preceeding should
* equal 32 */
- unsigned _reserved_flags:22;
+ unsigned _reserved_flags:21;
/* data source string used to open this handle */
const char *data_source;