REGISTER_LONG_CONSTANT("PDO_CASE_NATURAL", (long)PDO_CASE_NATURAL, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PDO_CASE_LOWER", (long)PDO_CASE_LOWER, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PDO_CASE_UPPER", (long)PDO_CASE_UPPER, CONST_CS|CONST_PERSISTENT);
-
+
+ REGISTER_LONG_CONSTANT("PDO_NULL_NATURAL", (long)PDO_NULL_NATURAL, CONST_CS|CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PDO_NULL_EMPTY_STRING", (long)PDO_NULL_EMPTY_STRING, CONST_CS|CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("PDO_NULL_TO_STRING", (long)PDO_NULL_TO_STRING, CONST_CS|CONST_PERSISTENT);
+
REGISTER_STRING_CONSTANT("PDO_ERR_NONE", PDO_ERR_NONE, CONST_CS|CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("PDO_FETCH_ORI_NEXT", (long)PDO_FETCH_ORI_NEXT, CONST_CS|CONST_PERSISTENT);
case PDO_ATTR_ORACLE_NULLS:
convert_to_long(value);
- dbh->oracle_nulls = Z_LVAL_P(value) ? 1 : 0;
+ dbh->oracle_nulls = Z_LVAL_P(value);
RETURN_TRUE;
case PDO_ATTR_STRINGIFY_FETCHES:
RETURN_LONG(dbh->desired_case);
case PDO_ATTR_ORACLE_NULLS:
- RETURN_BOOL(dbh->oracle_nulls);
+ RETURN_LONG(dbh->oracle_nulls);
case PDO_ATTR_ERRMODE:
RETURN_LONG(dbh->error_mode);
break;
case PDO_PARAM_STR:
- if (value && !(value_len == 0 && stmt->dbh->oracle_nulls)) {
+ if (value && !(value_len == 0 && stmt->dbh->oracle_nulls == PDO_NULL_EMPTY_STRING)) {
ZVAL_STRINGL(dest, value, value_len, !caller_frees);
if (caller_frees) {
caller_frees = 0;
break;
}
}
+
+ if (Z_TYPE_P(dest) == IS_NULL && stmt->dbh->oracle_nulls == PDO_NULL_TO_STRING) {
+ ZVAL_EMPTY_STRING(dest);
+ }
}
/* }}} */
if (stmt->bound_params) {
zend_hash_destroy(stmt->bound_params);
FREE_HASHTABLE(stmt->bound_params);
+ stmt->bound_params = NULL;
}
if (stmt->bound_param_map) {
zend_hash_destroy(stmt->bound_param_map);
FREE_HASHTABLE(stmt->bound_param_map);
+ stmt->bound_param_map = NULL;
}
if (stmt->bound_columns) {
zend_hash_destroy(stmt->bound_columns);
FREE_HASHTABLE(stmt->bound_columns);
+ stmt->bound_columns = NULL;
}
if (stmt->methods && stmt->methods->dtor) {
# define FALSE 0
#endif
-#define PDO_DRIVER_API 20050709
+#define PDO_DRIVER_API 20050711
enum pdo_param_type {
PDO_PARAM_NULL,
PDO_CASE_LOWER
};
+/* oracle interop settings */
+enum pdo_null_handling {
+ PDO_NULL_NATURAL = 0,
+ PDO_NULL_EMPTY_STRING = 1,
+ PDO_NULL_TO_STRING = 2,
+};
+
/* {{{ utils for reading attributes set as driver_options */
static inline long pdo_attr_lval(zval *options, enum pdo_fetch_type option_name, long defval TSRMLS_DC)
{
/* 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;
+ /* oracle compat; see enum pdo_null_handling */
+ unsigned oracle_nulls:2;
/* when set, convert int/floats to strings */
unsigned stringify: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;