sixd Fri Aug 31 21:11:03 2007 UTC
Modified files:
/php-src/ext/pdo_oci config.m4 oci_driver.c oci_statement.c
php_pdo_oci_int.h
Log:
MFB Add $dbh->getAttribute() support for ATTR_SERVER_VERSION,
ATTR_SERVER_INFO, ATTR_CLIENT_VERSION, ATTR_AUTOCOMMIT. Sync WS between PHP 5 &
6 and add a couple of casts.
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_oci/config.m4?r1=1.22&r2=1.23&diff_format=u
Index: php-src/ext/pdo_oci/config.m4
diff -u php-src/ext/pdo_oci/config.m4:1.22 php-src/ext/pdo_oci/config.m4:1.23
--- php-src/ext/pdo_oci/config.m4:1.22 Fri Aug 17 13:33:07 2007
+++ php-src/ext/pdo_oci/config.m4 Fri Aug 31 21:11:03 2007
@@ -1,4 +1,4 @@
-dnl $Id: config.m4,v 1.22 2007/08/17 13:33:07 sixd Exp $
+dnl $Id: config.m4,v 1.23 2007/08/31 21:11:03 sixd Exp $
if test "$PHP_PDO" != "no"; then
@@ -24,7 +24,7 @@
PDO_OCI_VERSION=8.1
fi
else
- AC_MSG_ERROR(Oracle-OCI needed libraries not found under $PDO_OCI_DIR)
+ AC_MSG_ERROR(Oracle OCI libraries not found under $PDO_OCI_DIR)
fi
AC_MSG_RESULT($PDO_OCI_VERSION)
])
@@ -54,7 +54,7 @@
])
PHP_ARG_WITH(pdo-oci, Oracle OCI support for PDO,
-[ --with-pdo-oci[=DIR] PDO: Oracle-OCI support. DIR defaults to
\$ORACLE_HOME.
+[ --with-pdo-oci[=DIR] PDO: Oracle OCI support. DIR defaults to
\$ORACLE_HOME.
Use --with-pdo-oci=instantclient,prefix,version
for an Oracle Instant Client SDK.
For Linux with 10.2.0.3 RPMs (for example) use:
@@ -67,12 +67,12 @@
else
PDO_OCI_DIR=$PHP_PDO_OCI
fi
- AC_MSG_RESULT($PDO_OCI_DIR :$PHP_PDO_OCI:)
+ AC_MSG_RESULT($PHP_PDO_OCI)
AC_MSG_CHECKING([if that is sane])
if test -z "$PDO_OCI_DIR"; then
AC_MSG_ERROR([
-You need to tell me where to find your oracle SDK, or set ORACLE_HOME.
+You need to tell me where to find your Oracle Instant Client SDK, or set
ORACLE_HOME.
])
else
AC_MSG_RESULT([yes])
@@ -251,6 +251,8 @@
[
PHP_ADD_EXTENSION_DEP(pdo_oci, pdo)
])
+
+ AC_DEFINE_UNQUOTED(PHP_PDO_OCI_CLIENT_VERSION, "$PDO_OCI_VERSION", [ ])
fi
fi
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_oci/oci_driver.c?r1=1.33&r2=1.34&diff_format=u
Index: php-src/ext/pdo_oci/oci_driver.c
diff -u php-src/ext/pdo_oci/oci_driver.c:1.33
php-src/ext/pdo_oci/oci_driver.c:1.34
--- php-src/ext/pdo_oci/oci_driver.c:1.33 Tue Jul 3 05:47:53 2007
+++ php-src/ext/pdo_oci/oci_driver.c Fri Aug 31 21:11:03 2007
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci_driver.c,v 1.33 2007/07/03 05:47:53 sixd Exp $ */
+/* $Id: oci_driver.c,v 1.34 2007/08/31 21:11:03 sixd Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -31,6 +31,8 @@
#include "php_pdo_oci_int.h"
#include "Zend/zend_exceptions.h"
+static inline ub4 pdo_oci_sanitize_prefetch(long prefetch);
+
static int pdo_oci_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval
*info TSRMLS_DC) /* {{{ */
{
pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
@@ -282,14 +284,14 @@
}
- prefetch = 1024 * pdo_attr_lval(driver_options, PDO_ATTR_PREFETCH, 100
TSRMLS_CC);
+ prefetch = pdo_oci_sanitize_prefetch(pdo_attr_lval(driver_options,
PDO_ATTR_PREFETCH, PDO_OCI_PREFETCH_DEFAULT TSRMLS_CC));
if (prefetch) {
H->last_err = OCIAttrSet(S->stmt, OCI_HTYPE_STMT, &prefetch, 0,
- OCI_ATTR_PREFETCH_MEMORY, H->err);
+
OCI_ATTR_PREFETCH_ROWS, H->err);
if (!H->last_err) {
- prefetch /= 1024;
+ prefetch *= PDO_OCI_PREFETCH_ROWSIZE;
H->last_err = OCIAttrSet(S->stmt, OCI_HTYPE_STMT,
&prefetch, 0,
- OCI_ATTR_PREFETCH_ROWS, H->err);
+
OCI_ATTR_PREFETCH_MEMORY, H->err);
}
}
@@ -448,6 +450,69 @@
}
/* }}} */
+static int oci_handle_get_attribute(pdo_dbh_t *dbh, long attr, zval
*return_value TSRMLS_DC) /* {{{ */
+{
+ pdo_oci_db_handle *H = (pdo_oci_db_handle *)dbh->driver_data;
+
+ switch (attr) {
+ case PDO_ATTR_SERVER_VERSION:
+ case PDO_ATTR_SERVER_INFO:
+ {
+ text infostr[512];
+ char verstr[15];
+ ub4 vernum;
+
+ if (OCIServerRelease(H->svc, H->err, infostr,
(ub4)sizeof(infostr), (ub1)OCI_HTYPE_SVCCTX, &vernum))
+ {
+ ZVAL_STRING(return_value, "<<Unknown>>", 1);
+ } else {
+ if (attr == PDO_ATTR_SERVER_INFO) {
+ ZVAL_STRING(return_value, (char
*)infostr, 1);
+ } else {
+ slprintf(verstr, sizeof(verstr),
"%d.%d.%d.%d.%d",
+ (int)((vernum>>24) &
0xFF), /* version number */
+ (int)((vernum>>20) &
0x0F), /* release number*/
+ (int)((vernum>>12) &
0xFF), /* update number */
+ (int)((vernum>>8) &
0x0F), /* port release number */
+ (int)((vernum>>0) &
0xFF)); /* port update number */
+
+ ZVAL_STRING(return_value, verstr, 1);
+ }
+ }
+ return TRUE;
+ }
+
+ case PDO_ATTR_CLIENT_VERSION:
+ {
+#if OCI_MAJOR_VERSION > 10 || (OCI_MAJOR_VERSION == 10 && OCI_MINOR_VERSION >=
2)
+ /* Run time client version */
+ sword major, minor, update, patch, port_update;
+ char verstr[15];
+
+ OCIClientVersion(&major, &minor, &update, &patch,
&port_update);
+ slprintf(verstr, sizeof(verstr), "%d.%d.%d.%d.%d",
major, minor, update, patch, port_update);
+ ZVAL_STRING(return_value, verstr, 1);
+#else
+ /* Compile time client version */
+ ZVAL_STRING(return_value, PHP_PDO_OCI_CLIENT_VERSION,
1);
+#endif /* Check for OCIClientVersion() support */
+
+ return TRUE;
+ }
+
+ case PDO_ATTR_AUTOCOMMIT:
+ ZVAL_BOOL(return_value, dbh->auto_commit);
+ return TRUE;
+
+ default:
+ return FALSE;
+
+ }
+ return FALSE;
+
+}
+/* }}} */
+
static struct pdo_dbh_methods oci_methods = {
oci_handle_closer,
oci_handle_preparer,
@@ -459,7 +524,7 @@
oci_handle_set_attribute,
NULL,
pdo_oci_fetch_error_func,
- NULL, /* get_attr */
+ oci_handle_get_attribute,
NULL, /* check_liveness */
NULL /* get_driver_methods */
};
@@ -481,7 +546,7 @@
/* allocate an environment */
#if HAVE_OCIENVNLSCREATE
if (vars[0].optval) {
- H->charset = OCINlsCharSetNameToId(pdo_oci_Env, vars[0].optval);
+ H->charset = OCINlsCharSetNameToId(pdo_oci_Env, (const oratext
*)vars[0].optval);
if (!H->charset) {
oci_init_error("OCINlsCharSetNameToId: unknown
character set name");
goto cleanup;
@@ -596,6 +661,17 @@
pdo_oci_handle_factory
};
+static inline ub4 pdo_oci_sanitize_prefetch(long prefetch) /* {{{ */
+{
+ if (prefetch < 0) {
+ prefetch = 0;
+ } else if (prefetch > UB4MAXVAL / PDO_OCI_PREFETCH_ROWSIZE) {
+ prefetch = PDO_OCI_PREFETCH_DEFAULT;
+ }
+ return ((ub4)prefetch);
+}
+/* }}} */
+
/*
* Local variables:
* tab-width: 4
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_oci/oci_statement.c?r1=1.23&r2=1.24&diff_format=u
Index: php-src/ext/pdo_oci/oci_statement.c
diff -u php-src/ext/pdo_oci/oci_statement.c:1.23
php-src/ext/pdo_oci/oci_statement.c:1.24
--- php-src/ext/pdo_oci/oci_statement.c:1.23 Sat Jun 30 03:02:10 2007
+++ php-src/ext/pdo_oci/oci_statement.c Fri Aug 31 21:11:03 2007
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: oci_statement.c,v 1.23 2007/06/30 03:02:10 sixd Exp $ */
+/* $Id: oci_statement.c,v 1.24 2007/08/31 21:11:03 sixd Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -395,7 +395,7 @@
col->precision = scale;
col->maxlen = data_size;
col->namelen = namelen;
- col->name = estrndup(colname, namelen);
+ col->name = estrndup((char *)colname, namelen);
/* how much room do we need to store the field */
switch (dtype) {
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_oci/php_pdo_oci_int.h?r1=1.8&r2=1.9&diff_format=u
Index: php-src/ext/pdo_oci/php_pdo_oci_int.h
diff -u php-src/ext/pdo_oci/php_pdo_oci_int.h:1.8
php-src/ext/pdo_oci/php_pdo_oci_int.h:1.9
--- php-src/ext/pdo_oci/php_pdo_oci_int.h:1.8 Sat Jun 30 03:02:10 2007
+++ php-src/ext/pdo_oci/php_pdo_oci_int.h Fri Aug 31 21:11:03 2007
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pdo_oci_int.h,v 1.8 2007/06/30 03:02:10 sixd Exp $ */
+/* $Id: php_pdo_oci_int.h,v 1.9 2007/08/31 21:11:03 sixd Exp $ */
#include <oci.h>
@@ -31,9 +31,9 @@
typedef struct {
OCIServer *server;
OCISession *session;
- OCIEnv *env;
+ OCIEnv *env;
OCIError *err;
- OCISvcCtx *svc;
+ OCISvcCtx *svc;
/* OCI9; 0 == use NLS_LANG */
ub2 charset;
sword last_err;
@@ -67,7 +67,7 @@
} pdo_oci_stmt;
typedef struct {
- OCIBind *bind; /* allocated by OCI */
+ OCIBind *bind; /* allocated by OCI */
sb2 oci_type;
sb2 indicator;
ub2 retcode;
@@ -90,3 +90,8 @@
extern struct pdo_stmt_methods oci_stmt_methods;
+/* Default prefetch size in number of rows */
+#define PDO_OCI_PREFETCH_DEFAULT 100
+
+/* Arbitrary assumed row length for prefetch memory limit calcuation */
+#define PDO_OCI_PREFETCH_ROWSIZE 1024
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php