Author: byterock
Date: Fri Jul 10 11:42:39 2009
New Revision: 13036
Modified:
dbd-oracle/branches/rs_array/Oracle.pm
dbd-oracle/branches/rs_array/dbdimp.c
dbd-oracle/branches/rs_array/oci8.c
Log:
working version before long debug
Modified: dbd-oracle/branches/rs_array/Oracle.pm
==============================================================================
--- dbd-oracle/branches/rs_array/Oracle.pm (original)
+++ dbd-oracle/branches/rs_array/Oracle.pm Fri Jul 10 11:42:39 2009
@@ -832,9 +832,10 @@
my $refresh = shift;
if ($refresh || !$dbh->{ora_nls_parameters}) {
- my $nls_parameters = $dbh->selectall_arrayref(q{
+ my $nls_parameters = $dbh->selectall_arrayref(q{
SELECT parameter, value FROM v$nls_parameters
}) or return;
+
$dbh->{ora_nls_parameters} = { map { $_->[0] => $_->[1] }
@$nls_parameters };
}
Modified: dbd-oracle/branches/rs_array/dbdimp.c
==============================================================================
--- dbd-oracle/branches/rs_array/dbdimp.c (original)
+++ dbd-oracle/branches/rs_array/dbdimp.c Fri Jul 10 11:42:39 2009
@@ -379,8 +379,8 @@
DBD_ATTRIB_GET_IV( attr, "dbd_verbose", 11, svp, dbd_verbose);
if (DBD_ATTRIB_TRUE(attr,"ora_verbose",11,svp))
DBD_ATTRIB_GET_IV( attr, "ora_verbose", 11, svp, dbd_verbose);
-
-
+
+
if (DBD_ATTRIB_TRUE(attr,"ora_oci_success_warn",20,svp))
DBD_ATTRIB_GET_IV( attr, "ora_oci_success_warn", 20, svp,
oci_warn);
if (DBD_ATTRIB_TRUE(attr,"ora_objects",11,svp))
@@ -3044,9 +3044,8 @@
if (debug >= 2 || dbd_verbose >= 3 )
PerlIO_printf(DBILOGFP,"Statement Execute Mode is %d
(%s)\n",imp_sth->exe_mode,oci_exe_mode(imp_sth->exe_mode));
-
OCIStmtExecute_log_stat(imp_sth->svchp, imp_sth->stmhp,
imp_sth->errhp,
- (ub4)(is_select ? 0 : 1),
+ (ub4)(is_select ? 0: 1),
0, 0, 0,(ub4)imp_sth->exe_mode,status);
Modified: dbd-oracle/branches/rs_array/oci8.c
==============================================================================
--- dbd-oracle/branches/rs_array/oci8.c (original)
+++ dbd-oracle/branches/rs_array/oci8.c Fri Jul 10 11:42:39 2009
@@ -356,17 +356,17 @@
SV *sv;
switch (attr) {
/*=============================Attribute
Types===============================*/
- /*
+ /*
Note: All attributes are global. New attibutes should be added to
the end
- of the list. Before you add an attribute see if an existing one can
be
- used for your handle.
-
- If you see any holes please use the holes first.
-
+ of the list. Before you add an attribute see if an existing one can
be
+ used for your handle.
+
+ If you see any holes please use the holes first.
+
*/
/*===========================================================================*/
-
-
+
+
case OCI_ATTR_FNCODE: return
"OCI_ATTR_FNCODE"; /* the OCI function code */
case OCI_ATTR_OBJECT: return
"OCI_ATTR_OBJECT"; /* is the environment initialized in object mode */
case OCI_ATTR_NONBLOCKING_MODE: return
"OCI_ATTR_NONBLOCKING_MODE"; /* non blocking mode */
@@ -381,12 +381,12 @@
case OCI_ATTR_NESTED_PREFETCH_ROWS: return
"OCI_ATTR_NESTED_PREFETCH_ROWS"; /* the prefetch rows of nested table*/
case OCI_ATTR_PREFETCH_MEMORY: return
"OCI_ATTR_PREFETCH_MEMORY"; /* memory limit for rows fetched */
case OCI_ATTR_NESTED_PREFETCH_MEMORY:return
"OCI_ATTR_NESTED_PREFETCH_MEMORY"; /* memory limit for nested rows */
- case OCI_ATTR_CHAR_COUNT: return
"OCI_ATTR_CHAR_COUNT";
+ case OCI_ATTR_CHAR_COUNT: return
"OCI_ATTR_CHAR_COUNT";
/* this specifies the bind and define size in
characters */
- case OCI_ATTR_PDSCL: return
"OCI_ATTR_PDSCL"; /* packed decimal scale
+ case OCI_ATTR_PDSCL: return
"OCI_ATTR_PDSCL"; /* packed decimal scale
case OCI_ATTR_FSPRECISION OCI_ATTR_PDSCL:return "";*/
/* fs prec for datetime data
types */
- case OCI_ATTR_PDPRC: return
"OCI_ATTR_PDPRC"; /* packed decimal format
+ case OCI_ATTR_PDPRC: return
"OCI_ATTR_PDPRC"; /* packed decimal format
case OCI_ATTR_LFPRECISION OCI_ATTR_PDPRC: return "";
/* fs prec for datetime data
types */
case OCI_ATTR_PARAM_COUNT: return
"OCI_ATTR_PARAM_COUNT"; /* number of column in the select list */
@@ -422,237 +422,237 @@
case OCI_ATTR_IN_V8_MODE: return
"OCI_ATTR_IN_V8_MODE"; /* is the server/service context in V8 mode */
case OCI_ATTR_LOBEMPTY: return
"OCI_ATTR_LOBEMPTY"; /* empty lob ? */
case OCI_ATTR_SESSLANG: return
"OCI_ATTR_SESSLANG"; /* session language handle */
-
+
case OCI_ATTR_VISIBILITY: return
"OCI_ATTR_VISIBILITY"; /* visibility */
case OCI_ATTR_RELATIVE_MSGID: return
"OCI_ATTR_RELATIVE_MSGID"; /* relative message id */
case OCI_ATTR_SEQUENCE_DEVIATION: return
"OCI_ATTR_SEQUENCE_DEVIATION"; /* sequence deviation */
-
+
case OCI_ATTR_CONSUMER_NAME: return
"OCI_ATTR_CONSUMER_NAME"; /* consumer name */
case OCI_ATTR_DEQ_MODE: return
"OCI_ATTR_DEQ_MODE"; /* dequeue mode */
case OCI_ATTR_NAVIGATION: return
"OCI_ATTR_NAVIGATION"; /* navigation */
case OCI_ATTR_WAIT: return
"OCI_ATTR_WAIT"; /* wait */
case OCI_ATTR_DEQ_MSGID: return
"OCI_ATTR_DEQ_MSGID"; /* dequeue message id */
-
+
case OCI_ATTR_PRIORITY: return
"OCI_ATTR_PRIORITY"; /* priority */
case OCI_ATTR_DELAY: return
"OCI_ATTR_DELAY"; /* delay */
case OCI_ATTR_EXPIRATION: return
"OCI_ATTR_EXPIRATION"; /* expiration */
case OCI_ATTR_CORRELATION: return
"OCI_ATTR_CORRELATION"; /* correlation id */
case OCI_ATTR_ATTEMPTS: return
"OCI_ATTR_ATTEMPTS"; /* # of attempts */
- case OCI_ATTR_RECIPIENT_LIST: return
"OCI_ATTR_RECIPIENT_LIST"; /* recipient list */
- case OCI_ATTR_EXCEPTION_QUEUE: return
"OCI_ATTR_EXCEPTION_QUEUE"; /* exception queue name */
+ case OCI_ATTR_RECIPIENT_LIST: return
"OCI_ATTR_RECIPIENT_LIST"; /* recipient list */
+ case OCI_ATTR_EXCEPTION_QUEUE: return
"OCI_ATTR_EXCEPTION_QUEUE"; /* exception queue name */
case OCI_ATTR_ENQ_TIME: return
"OCI_ATTR_ENQ_TIME";/* enqueue time (only OCIAttrGet) */
- case OCI_ATTR_MSG_STATE: return
"OCI_ATTR_MSG_STATE";/* message state (only OCIAttrGet) */
+ case OCI_ATTR_MSG_STATE: return
"OCI_ATTR_MSG_STATE";/* message state (only OCIAttrGet) */
/* NOTE: 64-66 used
below */
- case OCI_ATTR_AGENT_NAME: return
"OCI_ATTR_AGENT_NAME"; /* agent name */
- case OCI_ATTR_AGENT_ADDRESS: return
"OCI_ATTR_AGENT_ADDRESS"; /* agent address */
- case OCI_ATTR_AGENT_PROTOCOL: return
"OCI_ATTR_AGENT_PROTOCOL"; /* agent protocol */
-
- case OCI_ATTR_SENDER_ID: return
"OCI_ATTR_SENDER_ID"; /* sender id */
- case OCI_ATTR_ORIGINAL_MSGID: return
"OCI_ATTR_ORIGINAL_MSGID"; /* original message id */
-
- case OCI_ATTR_QUEUE_NAME: return
"OCI_ATTR_QUEUE_NAME"; /* queue name */
- case OCI_ATTR_NFY_MSGID: return
"OCI_ATTR_NFY_MSGID"; /* message id */
+ case OCI_ATTR_AGENT_NAME: return
"OCI_ATTR_AGENT_NAME"; /* agent name */
+ case OCI_ATTR_AGENT_ADDRESS: return
"OCI_ATTR_AGENT_ADDRESS"; /* agent address */
+ case OCI_ATTR_AGENT_PROTOCOL: return
"OCI_ATTR_AGENT_PROTOCOL"; /* agent protocol */
+
+ case OCI_ATTR_SENDER_ID: return
"OCI_ATTR_SENDER_ID"; /* sender id */
+ case OCI_ATTR_ORIGINAL_MSGID: return
"OCI_ATTR_ORIGINAL_MSGID"; /* original message id */
+
+ case OCI_ATTR_QUEUE_NAME: return
"OCI_ATTR_QUEUE_NAME"; /* queue name */
+ case OCI_ATTR_NFY_MSGID: return
"OCI_ATTR_NFY_MSGID"; /* message id */
case OCI_ATTR_MSG_PROP: return
"OCI_ATTR_MSG_PROP"; /* message properties */
-
- case OCI_ATTR_NUM_DML_ERRORS: return
"OCI_ATTR_NUM_DML_ERRORS"; /* num of errs in array DML */
- case OCI_ATTR_DML_ROW_OFFSET: return
"OCI_ATTR_DML_ROW_OFFSET"; /* row offset in the array */
-
- case OCI_ATTR_DATEFORMAT: return
"OCI_ATTR_DATEFORMAT"; /* default date format string */
+
+ case OCI_ATTR_NUM_DML_ERRORS: return
"OCI_ATTR_NUM_DML_ERRORS"; /* num of errs in array DML */
+ case OCI_ATTR_DML_ROW_OFFSET: return
"OCI_ATTR_DML_ROW_OFFSET"; /* row offset in the array */
+
+ case OCI_ATTR_DATEFORMAT: return
"OCI_ATTR_DATEFORMAT"; /* default date format string */
case OCI_ATTR_BUF_ADDR: return
"OCI_ATTR_BUF_ADDR"; /* buffer address */
case OCI_ATTR_BUF_SIZE: return
"OCI_ATTR_BUF_SIZE"; /* buffer size */
- case OCI_ATTR_DIRPATH_MODE: return
"OCI_ATTR_DIRPATH_MODE"; /* mode of direct path operation */
- case OCI_ATTR_DIRPATH_NOLOG: return
"OCI_ATTR_DIRPATH_NOLOG"; /* nologging option */
- case OCI_ATTR_DIRPATH_PARALLEL: return
"OCI_ATTR_DIRPATH_PARALLEL"; /* parallel (temp seg) option */
+ case OCI_ATTR_DIRPATH_MODE: return
"OCI_ATTR_DIRPATH_MODE"; /* mode of direct path operation */
+ case OCI_ATTR_DIRPATH_NOLOG: return
"OCI_ATTR_DIRPATH_NOLOG"; /* nologging option */
+ case OCI_ATTR_DIRPATH_PARALLEL: return
"OCI_ATTR_DIRPATH_PARALLEL"; /* parallel (temp seg) option */
case OCI_ATTR_NUM_ROWS: return
"OCI_ATTR_NUM_ROWS"; /* number of rows in column array */
/* NOTE that OCI_ATTR_NUM_COLS is a
column
* array attribute too.
*/
- case OCI_ATTR_COL_COUNT: return
"OCI_ATTR_COL_COUNT"; /* columns of column array
+ case OCI_ATTR_COL_COUNT: return
"OCI_ATTR_COL_COUNT"; /* columns of column array
processed so far.
*/
- case OCI_ATTR_STREAM_OFFSET: return
"OCI_ATTR_STREAM_OFFSET"; /* str off of last row processed
+ case OCI_ATTR_STREAM_OFFSET: return
"OCI_ATTR_STREAM_OFFSET"; /* str off of last row processed
case OCI_ATTR_SHARED_HEAPALLO: return "";
/* Shared Heap Allocation Size */
-
- case OCI_ATTR_SERVER_GROUP: return
"OCI_ATTR_SERVER_GROUP"; /* server group name */
-
- case OCI_ATTR_MIGSESSION: return
"OCI_ATTR_MIGSESSION"; /* migratable session attribute */
-
+
+ case OCI_ATTR_SERVER_GROUP: return
"OCI_ATTR_SERVER_GROUP"; /* server group name */
+
+ case OCI_ATTR_MIGSESSION: return
"OCI_ATTR_MIGSESSION"; /* migratable session attribute */
+
case OCI_ATTR_NOCACHE: return
"OCI_ATTR_NOCACHE"; /* Temporary LOBs */
-
- case OCI_ATTR_MEMPOOL_SIZE: return
"OCI_ATTR_MEMPOOL_SIZE"; /* Pool Size */
- case OCI_ATTR_MEMPOOL_INSTNAME: return
"OCI_ATTR_MEMPOOL_INSTNAME"; /* Instance name */
- case OCI_ATTR_MEMPOOL_APPNAME: return
"OCI_ATTR_MEMPOOL_APPNAME"; /* Application name */
- case OCI_ATTR_MEMPOOL_HOMENAME: return
"OCI_ATTR_MEMPOOL_HOMENAME"; /* Home Directory name */
- case OCI_ATTR_MEMPOOL_MODEL: return
"OCI_ATTR_MEMPOOL_MODEL"; /* Pool Model (proc,thrd,both)*/
+
+ case OCI_ATTR_MEMPOOL_SIZE: return
"OCI_ATTR_MEMPOOL_SIZE"; /* Pool Size */
+ case OCI_ATTR_MEMPOOL_INSTNAME: return
"OCI_ATTR_MEMPOOL_INSTNAME"; /* Instance name */
+ case OCI_ATTR_MEMPOOL_APPNAME: return
"OCI_ATTR_MEMPOOL_APPNAME"; /* Application name */
+ case OCI_ATTR_MEMPOOL_HOMENAME: return
"OCI_ATTR_MEMPOOL_HOMENAME"; /* Home Directory name */
+ case OCI_ATTR_MEMPOOL_MODEL: return
"OCI_ATTR_MEMPOOL_MODEL"; /* Pool Model (proc,thrd,both)*/
case OCI_ATTR_MODES: return
"OCI_ATTR_MODES"; /* Modes */
-
- case OCI_ATTR_SUBSCR_NAME: return
"OCI_ATTR_SUBSCR_NAME"; /* name of subscription */
- case OCI_ATTR_SUBSCR_CALLBACK: return
"OCI_ATTR_SUBSCR_CALLBACK"; /* associated callback */
- case OCI_ATTR_SUBSCR_CTX: return
"OCI_ATTR_SUBSCR_CTX"; /* associated callback context */
- case OCI_ATTR_SUBSCR_PAYLOAD: return
"OCI_ATTR_SUBSCR_PAYLOAD"; /* associated payload */
- case OCI_ATTR_SUBSCR_NAMESPACE: return
"OCI_ATTR_SUBSCR_NAMESPACE"; /* associated namespace */
-
- case OCI_ATTR_PROXY_CREDENTIALS: return
"OCI_ATTR_PROXY_CREDENTIALS"; /* Proxy user credentials */
- case OCI_ATTR_INITIAL_CLIENT_ROLES: return
"OCI_ATTR_INITIAL_CLIENT_ROLES"; /* Initial client role list */
-
- case OCI_ATTR_UNK: return "OCI_ATTR_UNK";
/* unknown attribute */
+
+ case OCI_ATTR_SUBSCR_NAME: return
"OCI_ATTR_SUBSCR_NAME"; /* name of subscription */
+ case OCI_ATTR_SUBSCR_CALLBACK: return
"OCI_ATTR_SUBSCR_CALLBACK"; /* associated callback */
+ case OCI_ATTR_SUBSCR_CTX: return
"OCI_ATTR_SUBSCR_CTX"; /* associated callback context */
+ case OCI_ATTR_SUBSCR_PAYLOAD: return
"OCI_ATTR_SUBSCR_PAYLOAD"; /* associated payload */
+ case OCI_ATTR_SUBSCR_NAMESPACE: return
"OCI_ATTR_SUBSCR_NAMESPACE"; /* associated namespace */
+
+ case OCI_ATTR_PROXY_CREDENTIALS: return
"OCI_ATTR_PROXY_CREDENTIALS"; /* Proxy user credentials */
+ case OCI_ATTR_INITIAL_CLIENT_ROLES: return
"OCI_ATTR_INITIAL_CLIENT_ROLES"; /* Initial client role list */
+
+ case OCI_ATTR_UNK: return
"OCI_ATTR_UNK"; /* unknown attribute */
case OCI_ATTR_NUM_COLS: return
"OCI_ATTR_NUM_COLS"; /* number of columns */
- case OCI_ATTR_LIST_COLUMNS: return
"OCI_ATTR_LIST_COLUMNS"; /* parameter of the column list */
- case OCI_ATTR_RDBA: return "OCI_ATTR_RDBA";
/* DBA of the segment header */
- case OCI_ATTR_CLUSTERED: return
"OCI_ATTR_CLUSTERED"; /* whether the table is clustered */
- case OCI_ATTR_PARTITIONED: return
"OCI_ATTR_PARTITIONED"; /* whether the table is partitioned */
- case OCI_ATTR_INDEX_ONLY: return
"OCI_ATTR_INDEX_ONLY"; /* whether the table is index only */
- case OCI_ATTR_LIST_ARGUMENTS: return
"OCI_ATTR_LIST_ARGUMENTS"; /* parameter of the argument list */
- case OCI_ATTR_LIST_SUBPROGRAMS: return
"OCI_ATTR_LIST_SUBPROGRAMS"; /* parameter of the subprogram list */
+ case OCI_ATTR_LIST_COLUMNS: return
"OCI_ATTR_LIST_COLUMNS"; /* parameter of the column list */
+ case OCI_ATTR_RDBA: return
"OCI_ATTR_RDBA"; /* DBA of the segment header */
+ case OCI_ATTR_CLUSTERED: return
"OCI_ATTR_CLUSTERED"; /* whether the table is clustered */
+ case OCI_ATTR_PARTITIONED: return
"OCI_ATTR_PARTITIONED"; /* whether the table is partitioned */
+ case OCI_ATTR_INDEX_ONLY: return
"OCI_ATTR_INDEX_ONLY"; /* whether the table is index only */
+ case OCI_ATTR_LIST_ARGUMENTS: return
"OCI_ATTR_LIST_ARGUMENTS"; /* parameter of the argument list */
+ case OCI_ATTR_LIST_SUBPROGRAMS: return
"OCI_ATTR_LIST_SUBPROGRAMS"; /* parameter of the subprogram list */
case OCI_ATTR_REF_TDO: return
"OCI_ATTR_REF_TDO"; /* REF to the type descriptor */
- case OCI_ATTR_LINK: return "OCI_ATTR_LINK";
/* the database link name */
- case OCI_ATTR_MIN: return "OCI_ATTR_MIN";
/* minimum value */
- case OCI_ATTR_MAX: return "OCI_ATTR_MAX";
/* maximum value */
- case OCI_ATTR_INCR: return "OCI_ATTR_INCR";
/* increment value */
+ case OCI_ATTR_LINK: return
"OCI_ATTR_LINK"; /* the database link name */
+ case OCI_ATTR_MIN: return
"OCI_ATTR_MIN"; /* minimum value */
+ case OCI_ATTR_MAX: return
"OCI_ATTR_MAX"; /* maximum value */
+ case OCI_ATTR_INCR: return
"OCI_ATTR_INCR"; /* increment value */
case OCI_ATTR_CACHE: return
"OCI_ATTR_CACHE"; /* number of sequence numbers cached */
case OCI_ATTR_ORDER: return
"OCI_ATTR_ORDER"; /* whether the sequence is ordered */
case OCI_ATTR_HW_MARK: return
"OCI_ATTR_HW_MARK"; /* high-water mark */
- case OCI_ATTR_TYPE_SCHEMA: return
"OCI_ATTR_TYPE_SCHEMA"; /* type's schema name */
- case OCI_ATTR_TIMESTAMP: return
"OCI_ATTR_TIMESTAMP"; /* timestamp of the object */
- case OCI_ATTR_NUM_ATTRS: return
"OCI_ATTR_NUM_ATTRS"; /* number of sttributes */
- case OCI_ATTR_NUM_PARAMS: return
"OCI_ATTR_NUM_PARAMS"; /* number of parameters */
+ case OCI_ATTR_TYPE_SCHEMA: return
"OCI_ATTR_TYPE_SCHEMA"; /* type's schema name */
+ case OCI_ATTR_TIMESTAMP: return
"OCI_ATTR_TIMESTAMP"; /* timestamp of the object */
+ case OCI_ATTR_NUM_ATTRS: return
"OCI_ATTR_NUM_ATTRS"; /* number of sttributes */
+ case OCI_ATTR_NUM_PARAMS: return
"OCI_ATTR_NUM_PARAMS"; /* number of parameters */
case OCI_ATTR_OBJID: return
"OCI_ATTR_OBJID"; /* object id for a table or view */
case OCI_ATTR_PTYPE: return
"OCI_ATTR_PTYPE"; /* type of info described by */
case OCI_ATTR_PARAM: return
"OCI_ATTR_PARAM"; /* parameter descriptor */
- case OCI_ATTR_OVERLOAD_ID: return
"OCI_ATTR_OVERLOAD_ID"; /* overload ID for funcs and procs */
- case OCI_ATTR_TABLESPACE: return
"OCI_ATTR_TABLESPACE"; /* table name space */
- case OCI_ATTR_TDO: return "OCI_ATTR_TDO";
/* TDO of a type */
+ case OCI_ATTR_OVERLOAD_ID: return
"OCI_ATTR_OVERLOAD_ID"; /* overload ID for funcs and procs */
+ case OCI_ATTR_TABLESPACE: return
"OCI_ATTR_TABLESPACE"; /* table name space */
+ case OCI_ATTR_TDO: return
"OCI_ATTR_TDO"; /* TDO of a type */
case OCI_ATTR_LTYPE: return
"OCI_ATTR_LTYPE"; /* list type */
- case OCI_ATTR_PARSE_ERROR_OFFSET: return
"OCI_ATTR_PARSE_ERROR_OFFSET"; /* Parse Error offset */
- case OCI_ATTR_IS_TEMPORARY: return
"OCI_ATTR_IS_TEMPORARY"; /* whether table is temporary */
+ case OCI_ATTR_PARSE_ERROR_OFFSET: return
"OCI_ATTR_PARSE_ERROR_OFFSET"; /* Parse Error offset */
+ case OCI_ATTR_IS_TEMPORARY: return
"OCI_ATTR_IS_TEMPORARY"; /* whether table is temporary */
case OCI_ATTR_IS_TYPED: return
"OCI_ATTR_IS_TYPED"; /* whether table is typed */
case OCI_ATTR_DURATION: return
"OCI_ATTR_DURATION"; /* duration of temporary table */
- case OCI_ATTR_IS_INVOKER_RIGHTS: return
"OCI_ATTR_IS_INVOKER_RIGHTS"; /* is invoker rights */
+ case OCI_ATTR_IS_INVOKER_RIGHTS: return
"OCI_ATTR_IS_INVOKER_RIGHTS"; /* is invoker rights */
case OCI_ATTR_OBJ_NAME: return
"OCI_ATTR_OBJ_NAME"; /* top level schema obj name */
- case OCI_ATTR_OBJ_SCHEMA: return
"OCI_ATTR_OBJ_SCHEMA"; /* schema name */
+ case OCI_ATTR_OBJ_SCHEMA: return
"OCI_ATTR_OBJ_SCHEMA"; /* schema name */
case OCI_ATTR_OBJ_ID: return
"OCI_ATTR_OBJ_ID"; /* top level schema object id */
-
- case OCI_ATTR_DIRPATH_SORTED_INDEX: return
"OCI_ATTR_DIRPATH_SORTED_INDEX";/* index that data is sorted on */
-
+
+ case OCI_ATTR_DIRPATH_SORTED_INDEX: return
"OCI_ATTR_DIRPATH_SORTED_INDEX";/* index that data is sorted on */
+
/* direct path index maint method (see oci8dp.h) */
- case OCI_ATTR_DIRPATH_INDEX_MAINT_METHOD:
return "OCI_ATTR_DIRPATH_INDEX_MAINT_METHOD";
-
+ case OCI_ATTR_DIRPATH_INDEX_MAINT_METHOD: return
"OCI_ATTR_DIRPATH_INDEX_MAINT_METHOD";
+
/* parallel load: db file, initial and next extent sizes */
-
- case OCI_ATTR_DIRPATH_FILE: return "";
/* DB file to load into */
- case OCI_ATTR_DIRPATH_STORAGE_INITIAL: return
""; /* initial extent size */
- case OCI_ATTR_DIRPATH_STORAGE_NEXT: return
""; /* next extent size */
-
-
- case OCI_ATTR_TRANS_TIMEOUT: return "";
/* transaction timeout */
- case OCI_ATTR_SERVER_STATUS: return "";/*
state of the server handle */
- case OCI_ATTR_STATEMENT: return ""; /*
statement txt in stmt hdl */
- /* statement should not be executed in
cache
+
+ case OCI_ATTR_DIRPATH_FILE: return
"OCI_ATTR_DIRPATH_FILE"; /* DB file to load into */
+ case OCI_ATTR_DIRPATH_STORAGE_INITIAL: return
"OCI_ATTR_DIRPATH_STORAGE_INITIAL"; /* initial extent size */
+ case OCI_ATTR_DIRPATH_STORAGE_NEXT: return
"OCI_ATTR_DIRPATH_STORAGE_NEXT"; /* next extent size */
+
+
+ case OCI_ATTR_TRANS_TIMEOUT: return
"OCI_ATTR_TRANS_TIMEOUT"; /* transaction timeout */
+ case OCI_ATTR_SERVER_STATUS: return
"OCI_ATTR_SERVER_STATUS";/* state of the server handle */
+ case OCI_ATTR_STATEMENT: return
"OCI_ATTR_STATEMENT"; /* statement txt in stmt hdl */
+ /* statement should not be executed in
cache
case OCI_ATTR_NO_CACHE: return "";*/
- case OCI_ATTR_DEQCOND: return ""; /*
dequeue condition */
- case OCI_ATTR_RESERVED_2: return "";
/* reserved */
-
-
- case OCI_ATTR_SUBSCR_RECPT: return "";/*
recepient of subscription */
- case OCI_ATTR_SUBSCR_RECPTPROTO: return
""; /* protocol for recepient */
-
+ case OCI_ATTR_DEQCOND: return
"OCI_ATTR_DEQCOND"; /* dequeue condition */
+ case OCI_ATTR_RESERVED_2: return
"OCI_ATTR_RESERVED_2"; /* reserved */
+
+
+ case OCI_ATTR_SUBSCR_RECPT: return
"OCI_ATTR_SUBSCR_RECPT";/* recepient of subscription */
+ case OCI_ATTR_SUBSCR_RECPTPROTO: return
"OCI_ATTR_SUBSCR_RECPTPROTO"; /* protocol for recepient */
+
/* 8.2 dpapi support of ADTs */
- case OCI_ATTR_DIRPATH_EXPR_TYPE: return
""; /* expr type of OCI_ATTR_NAME */
-
- case OCI_ATTR_DIRPATH_INPUT: return "";
/* input in text or stream format
+ case OCI_ATTR_DIRPATH_EXPR_TYPE: return
"OCI_ATTR_DIRPATH_EXPR_TYPE"; /* expr type of OCI_ATTR_NAME */
+
+ case OCI_ATTR_DIRPATH_INPUT: return
"OCI_ATTR_DIRPATH_INPUT"; /* input in text or stream format
case OCI_DIRPATH_INPUT_TEXT: return "";
case OCI_DIRPATH_INPUT_STREAM: return "";
case OCI_DIRPATH_INPUT_UNKNOWN: return "";
*/
- case OCI_ATTR_LDAP_HOST: return "";
/* LDAP host to connect to */
- case OCI_ATTR_LDAP_PORT: return "";
/* LDAP port to connect to */
- case OCI_ATTR_BIND_DN: return "";
/* bind DN */
- case OCI_ATTR_LDAP_CRED: return "";
/* credentials to connect to LDAP */
- case OCI_ATTR_WALL_LOC: return "";
/* client wallet location */
- case OCI_ATTR_LDAP_AUTH: return "";
/* LDAP authentication method */
- case OCI_ATTR_LDAP_CTX: return ""; /*
LDAP adminstration context DN */
- case OCI_ATTR_SERVER_DNS: return "";
/* list of registration server DNs */
-
- case OCI_ATTR_DN_COUNT: return "";
/* the number of server DNs */
- case OCI_ATTR_SERVER_DN: return "";
/* server DN attribute */
-
- case OCI_ATTR_MAXCHAR_SIZE: return "";
/* max char size of data */
-
- case OCI_ATTR_CURRENT_POSITION: return ""; /*
for scrollable result sets*/
-
+ case OCI_ATTR_LDAP_HOST: return
"OCI_ATTR_LDAP_HOST"; /* LDAP host to connect to */
+ case OCI_ATTR_LDAP_PORT: return
"OCI_ATTR_LDAP_PORT"; /* LDAP port to connect to */
+ case OCI_ATTR_BIND_DN: return
"OCI_ATTR_BIND_DN"; /* bind DN */
+ case OCI_ATTR_LDAP_CRED: return
"OCI_ATTR_LDAP_CRED"; /* credentials to connect to LDAP */
+ case OCI_ATTR_WALL_LOC: return
"OCI_ATTR_WALL_LOC"; /* client wallet location */
+ case OCI_ATTR_LDAP_AUTH: return
"OCI_ATTR_LDAP_AUTH"; /* LDAP authentication method */
+ case OCI_ATTR_LDAP_CTX: return
"OCI_ATTR_LDAP_CTX"; /* LDAP adminstration context DN */
+ case OCI_ATTR_SERVER_DNS: return
"OCI_ATTR_SERVER_DNS"; /* list of registration server DNs */
+
+ case OCI_ATTR_DN_COUNT: return
"OCI_ATTR_DN_COUNT"; /* the number of server DNs */
+ case OCI_ATTR_SERVER_DN: return
"OCI_ATTR_SERVER_DN"; /* server DN attribute */
+
+ case OCI_ATTR_MAXCHAR_SIZE: return
"OCI_ATTR_MAXCHAR_SIZE"; /* max char size of data */
+
+ case OCI_ATTR_CURRENT_POSITION: return
"OCI_ATTR_CURRENT_POSITION"; /* for scrollable result sets*/
+
/* Added to get attributes for ref cursor to statement handle */
- case OCI_ATTR_RESERVED_3: return "";
/* reserved */
- case OCI_ATTR_RESERVED_4: return "";
/* reserved */
- case OCI_ATTR_DIRPATH_FN_CTX: return ""; /*
fn ctx ADT attrs or args */
- case OCI_ATTR_DIGEST_ALGO: return "";
/* digest algorithm */
- case OCI_ATTR_CERTIFICATE: return "";
/* certificate */
- case OCI_ATTR_SIGNATURE_ALGO: return "";
/* signature algorithm */
- case OCI_ATTR_CANONICAL_ALGO: return "";
/* canonicalization algo. */
- case OCI_ATTR_PRIVATE_KEY: return "";
/* private key */
- case OCI_ATTR_DIGEST_VALUE: return "";
/* digest value */
- case OCI_ATTR_SIGNATURE_VAL: return "";
/* signature value */
- case OCI_ATTR_SIGNATURE: return "";
/* signature */
-
+ case OCI_ATTR_RESERVED_3: return
"OCI_ATTR_RESERVED_3"; /* reserved */
+ case OCI_ATTR_RESERVED_4: return
"OCI_ATTR_RESERVED_4"; /* reserved */
+ case OCI_ATTR_DIRPATH_FN_CTX: return ""; /* fn ctx ADT attrs
or args */
+ case OCI_ATTR_DIGEST_ALGO: return
"OCI_ATTR_DIRPATH_FN_CTX"; /* digest algorithm */
+ case OCI_ATTR_CERTIFICATE: return
"OCI_ATTR_CERTIFICATE"; /* certificate */
+ case OCI_ATTR_SIGNATURE_ALGO: return
"OCI_ATTR_SIGNATURE_ALGO"; /* signature algorithm */
+ case OCI_ATTR_CANONICAL_ALGO: return
"OCI_ATTR_CANONICAL_ALGO"; /* canonicalization algo. */
+ case OCI_ATTR_PRIVATE_KEY: return
"OCI_ATTR_PRIVATE_KEY"; /* private key */
+ case OCI_ATTR_DIGEST_VALUE: return
"OCI_ATTR_DIGEST_VALUE"; /* digest value */
+ case OCI_ATTR_SIGNATURE_VAL: return
"OCI_ATTR_SIGNATURE_VAL"; /* signature value */
+ case OCI_ATTR_SIGNATURE: return
"OCI_ATTR_SIGNATURE"; /* signature */
+
/* attributes for setting OCI stmt caching specifics in svchp */
- case OCI_ATTR_STMTCACHESIZE : return "";
/* size of the stm cache */
-
+ case OCI_ATTR_STMTCACHESIZE : return
"OCI_ATTR_STMTCACHESIZE"; /* size of the stm cache */
+
/* --------------------------- Connection Pool Attributes
------------------ */
- case OCI_ATTR_CONN_NOWAIT: return "";
- case OCI_ATTR_CONN_BUSY_COUNT: return "";
- case OCI_ATTR_CONN_OPEN_COUNT: return "";
- case OCI_ATTR_CONN_TIMEOUT: return "";
- case OCI_ATTR_STMT_STATE: return "";
- case OCI_ATTR_CONN_MIN: return "";
- case OCI_ATTR_CONN_MAX: return "";
- case OCI_ATTR_CONN_INCR: return "";
-
- case OCI_ATTR_DIRPATH_OID: return ""; /*
loading into an OID col */
-
- case OCI_ATTR_NUM_OPEN_STMTS: return "";
/* open stmts in session */
- case OCI_ATTR_DESCRIBE_NATIVE: return ""; /*
get native info via desc */
-
- case OCI_ATTR_BIND_COUNT: return ""; /*
number of bind postions */
- case OCI_ATTR_HANDLE_POSITION: return "";/*
pos of bind/define handle */
- case OCI_ATTR_RESERVED_5: return "";
/* reserverd */
- case OCI_ATTR_SERVER_BUSY: return ""; /*
call in progress on server*/
-
- case OCI_ATTR_DIRPATH_SID: return ""; /*
loading into an SID col */
+ case OCI_ATTR_CONN_NOWAIT: return
"OCI_ATTR_CONN_NOWAIT";
+ case OCI_ATTR_CONN_BUSY_COUNT: return
"OCI_ATTR_CONN_BUSY_COUNT";
+ case OCI_ATTR_CONN_OPEN_COUNT: return
"OCI_ATTR_CONN_OPEN_COUNT";
+ case OCI_ATTR_CONN_TIMEOUT: return
"OCI_ATTR_CONN_TIMEOUT";
+ case OCI_ATTR_STMT_STATE: return
"OCI_ATTR_STMT_STATE";
+ case OCI_ATTR_CONN_MIN: return
"OCI_ATTR_CONN_MIN";
+ case OCI_ATTR_CONN_MAX: return
"OCI_ATTR_CONN_MAX";
+ case OCI_ATTR_CONN_INCR: return
"OCI_ATTR_CONN_INCR";
+
+ case OCI_ATTR_DIRPATH_OID: return
"OCI_ATTR_DIRPATH_OID"; /* loading into an OID col */
+
+ case OCI_ATTR_NUM_OPEN_STMTS: return
"OCI_ATTR_NUM_OPEN_STMTS"; /* open stmts in session */
+ case OCI_ATTR_DESCRIBE_NATIVE: return
"OCI_ATTR_DESCRIBE_NATIVE"; /* get native info via desc */
+
+ case OCI_ATTR_BIND_COUNT: return
"OCI_ATTR_BIND_COUNT"; /* number of bind postions */
+ case OCI_ATTR_HANDLE_POSITION: return
"OCI_ATTR_HANDLE_POSITION";/* pos of bind/define handle */
+ case OCI_ATTR_RESERVED_5: return
"OCI_ATTR_RESERVED_5"; /* reserverd */
+ case OCI_ATTR_SERVER_BUSY: return
"OCI_ATTR_SERVER_BUSY"; /* call in progress on server*/
+
+ case OCI_ATTR_DIRPATH_SID: return
"OCI_ATTR_DIRPATH_SID"; /* loading into an SID col */
/* notification presentation for recipient */
- case OCI_ATTR_SUBSCR_RECPTPRES: return "";
- case OCI_ATTR_TRANSFORMATION: return ""; /*
AQ message transformation */
-
- case OCI_ATTR_ROWS_FETCHED: return ""; /*
rows fetched in last call */
-
+ case OCI_ATTR_SUBSCR_RECPTPRES: return
"OCI_ATTR_SUBSCR_RECPTPRES";
+ case OCI_ATTR_TRANSFORMATION: return
"OCI_ATTR_TRANSFORMATION"; /* AQ message transformation */
+
+ case OCI_ATTR_ROWS_FETCHED: return
"OCI_ATTR_ROWS_FETCHED"; /* rows fetched in last call */
+
/* --------------------------- Snapshot attributes
------------------------- */
case OCI_ATTR_SCN_BASE: return
"OCI_ATTR_SCN_BASE"; /* snapshot base */
case OCI_ATTR_SCN_WRAP: return
"OCI_ATTR_SCN_WRAP"; /* snapshot wrap */
-
+
/* --------------------------- Miscellanous attributes
--------------------- */
- case OCI_ATTR_RESERVED_6: return
"OCI_ATTR_RESERVED_6"; /* reserved */
- case OCI_ATTR_READONLY_TXN: return
"OCI_ATTR_READONLY_TXN"; /* txn is readonly */
- case OCI_ATTR_RESERVED_7: return
"OCI_ATTR_RESERVED_7"; /* reserved */
- case OCI_ATTR_ERRONEOUS_COLUMN: return
"OCI_ATTR_ERRONEOUS_COLUMN"; /* position of erroneous col */
- case OCI_ATTR_RESERVED_8: return
"OCI_ATTR_RESERVED_8"; /* reserved */
-
+ case OCI_ATTR_RESERVED_6: return
"OCI_ATTR_RESERVED_6"; /* reserved */
+ case OCI_ATTR_READONLY_TXN: return
"OCI_ATTR_READONLY_TXN"; /* txn is readonly */
+ case OCI_ATTR_RESERVED_7: return
"OCI_ATTR_RESERVED_7"; /* reserved */
+ case OCI_ATTR_ERRONEOUS_COLUMN: return
"OCI_ATTR_ERRONEOUS_COLUMN"; /* position of erroneous col */
+ case OCI_ATTR_RESERVED_8: return
"OCI_ATTR_RESERVED_8"; /* reserved */
+
/* -------------------- 8.2 dpapi support of ADTs continued
---------------- */
- case OCI_ATTR_DIRPATH_OBJ_CONSTR: return
"OCI_ATTR_DIRPATH_OBJ_CONSTR"; /* obj type of subst obj tbl */
-
+ case OCI_ATTR_DIRPATH_OBJ_CONSTR: return
"OCI_ATTR_DIRPATH_OBJ_CONSTR"; /* obj type of subst obj tbl */
+
/************************FREE attribute 207
*************************/
/************************FREE attribute 208
*************************/
- case OCI_ATTR_ENV_UTF16: return
"OCI_ATTR_ENV_UTF16"; /* is env in utf16 mode? */
- case OCI_ATTR_RESERVED_9: return
"OCI_ATTR_RESERVED_9"; /* reserved for TMZ */
- case OCI_ATTR_RESERVED_10: return
"OCI_ATTR_RESERVED_10"; /* reserved */
-
+ case OCI_ATTR_ENV_UTF16: return
"OCI_ATTR_ENV_UTF16"; /* is env in utf16 mode? */
+ case OCI_ATTR_RESERVED_9: return
"OCI_ATTR_RESERVED_9"; /* reserved for TMZ */
+ case OCI_ATTR_RESERVED_10: return
"OCI_ATTR_RESERVED_10"; /* reserved */
+
/* Attr to allow setting of the stream version PRIOR to calling Prepare
*/
- case OCI_ATTR_DIRPATH_STREAM_VERSION: return
"OCI_ATTR_DIRPATH_STREAM_VERSION"; /* version of the stream
+ case OCI_ATTR_DIRPATH_STREAM_VERSION: return
"OCI_ATTR_DIRPATH_STREAM_VERSION"; /* version of the stream
case OCI_ATTR_RESERVED_11: return
"OCI_ATTR_RESERVED_11"; /* reserved */
-
- case OCI_ATTR_RESERVED_12: return
"OCI_ATTR_RESERVED_12"; /* reserved */
- case OCI_ATTR_RESERVED_13: return
"OCI_ATTR_RESERVED_13"; /* reserved */
-
+
+ case OCI_ATTR_RESERVED_12: return
"OCI_ATTR_RESERVED_12"; /* reserved */
+ case OCI_ATTR_RESERVED_13: return
"OCI_ATTR_RESERVED_13"; /* reserved */
+
/* OCI_ATTR_RESERVED_14 */
-
- case OCI_ATTR_RESERVED_15: return
"OCI_ATTR_RESERVED_15"; /* reserved */
- case OCI_ATTR_RESERVED_16: return
"OCI_ATTR_RESERVED_16"; /* reserved */
-
+
+ case OCI_ATTR_RESERVED_15: return
"OCI_ATTR_RESERVED_15"; /* reserved */
+ case OCI_ATTR_RESERVED_16: return
"OCI_ATTR_RESERVED_16"; /* reserved */
+
}
sv = sv_2mortal(newSViv((IV)attr));
return SvPV(sv,na);
@@ -848,8 +848,8 @@
/* row cache. Change later to set up row cache using just a */
/* a memory size, perhaps also default $RowCacheSize to a */
/* negative value. OCI_ATTR_PREFETCH_MEMORY */
-
-
+
+
if (!DBIc_ACTIVE(imp_dbh)) {
oci_error(sth, NULL, OCI_ERROR, "Database disconnected");
@@ -874,7 +874,7 @@
imp_sth->auto_lob = 1;
imp_sth->exe_mode = OCI_DEFAULT;
- if (attribs) {
+ if (attribs) {
SV **svp;
IV ora_auto_lob = 1;
DBD_ATTRIB_GET_IV( attribs, "ora_parse_lang", 14, svp,
oparse_lng);
@@ -885,11 +885,13 @@
DBD_ATTRIB_GET_IV( attribs, "ora_piece_lob", 13, svp,
ora_piece_lob);
DBD_ATTRIB_GET_IV( attribs, "ora_piece_size", 14, svp,
ora_piece_size);
- imp_sth->auto_lob = (ora_auto_lob) ? 1 : 0;
- imp_sth->pers_lob = (ora_pers_lob) ? 1 : 0;
- imp_sth->clbk_lob = (ora_clbk_lob) ? 1 : 0;
- imp_sth->piece_lob = (ora_piece_lob) ? 1 : 0;
- imp_sth->piece_size = (ora_piece_size) ? ora_piece_size : 0;
+ imp_sth->auto_lob = (ora_auto_lob) ? 1 : 0;
+ imp_sth->pers_lob = (ora_pers_lob) ? 1 : 0;
+ imp_sth->clbk_lob = (ora_clbk_lob) ? 1 : 0;
+ imp_sth->piece_lob = (ora_piece_lob) ? 1 : 0;
+ imp_sth->piece_size = (ora_piece_size) ? ora_piece_size : 0;
+ imp_sth->prefetch_rows = 0;
+ imp_sth->prefetch_memory= 0;
/* ora_check_sql only works for selects owing to Oracle
behaviour */
DBD_ATTRIB_GET_IV( attribs, "ora_check_sql", 13, svp,
ora_check_sql);
DBD_ATTRIB_GET_IV( attribs, "ora_exe_mode", 12, svp,
imp_sth->exe_mode);
@@ -902,7 +904,7 @@
if (!dbd_verbose)
DBD_ATTRIB_GET_IV( attribs, "dbd_verbose", 11, svp,
dbd_verbose);
- }
+ }
/* scan statement for '?', ':1' and/or ':foo' style placeholders
*/
@@ -1906,12 +1908,24 @@
static int
-calc_cache_rows(int cache_rows, int num_fields, int est_width, int has_longs)
+calc_cache_rows(int cache_rows, int num_fields, int est_width, int
has_longs,ub4 prefetch_memory)
{
dTHX;
- if (has_longs) /* override/disable caching */
+ /* Use guessed average on-the-wire row width calculated above & */
+ /* add in overhead of 5 bytes per field plus 8 bytes per row. */
+ /* The n*5+8 was determined by studying SQL*Net v2 packets. */
+ /* It could probably benefit from a more detailed analysis. */
+
+ est_width += num_fields*5 + 8;
+
+ if (has_longs) { /* override/disable caching
*/
cache_rows = 1; /* else read_blob can't work */
- else
+ }
+ else if (prefetch_memory) { /*set rows by memory*/
+
+ cache_rows=prefetch_memory/est_width;
+ }
+ else{
if (cache_rows == 0) { /* automatically size the cache
*/
/* automatically size the cache */
@@ -1920,20 +1934,14 @@
/* Using 10 means any 'runt' packets will have less impact.
*/
int txfr_size = 10 * 1460; /* desired transfer/cache size
*/
- /* Use guessed average on-the-wire row width calculated above &
*/
- /* add in overhead of 5 bytes per field plus 8 bytes per row.
*/
- /* The n*5+8 was determined by studying SQL*Net v2 packets.
*/
- /* It could probably benefit from a more detailed analysis.
*/
- est_width += num_fields*5 + 8;
-
cache_rows = txfr_size / est_width; /* (maybe 1
or 0) */
/* To ensure good performance with large rows (near or larger
*/
/* than our target transfer size) we set a minimum cache size.
*/
if (cache_rows < 6) /* is cache a 'useful' size? */
cache_rows = (cache_rows > 0) ? 6 : 4;
+ }
}
-
if (cache_rows > 10000000) /* keep within Oracle's limits */
cache_rows = 10000000; /* seems it was ub2 at one time now ub4
this number is arbitary on my part*/
@@ -2591,15 +2599,28 @@
imp_sth->rs_array_num_rows =0;
imp_sth->rs_array_idx =0;
imp_sth->rs_fetch_count =0;
- imp_sth->prefetch_rows =0;
- imp_sth->prefetch_memory =0;
+ /*imp_sth->prefetch_rows =0;
+ imp_sth->prefetch_memory =0;*/
imp_sth->rs_array_status =OCI_SUCCESS;
-
+
if (DBIS->debug >= 3 || dbd_verbose >= 3 )
PerlIO_printf(DBILOGFP, "
rs_array_init:imp_sth->rs_array_size=%d, rs_array_idx=%d, prefetch_rows=%d,
rs_array_status=%s\n",imp_sth->rs_array_size,imp_sth->rs_array_idx,imp_sth->prefetch_rows,oci_status_name(imp_sth->rs_array_status));
}
+
+
+
+
+
+
+
+
+
+
+
+
+
/*static int /* --- Setup the row cache for this sth --- */
sth_set_row_cache(SV *h, imp_sth_t *imp_sth, int max_cache_rows, int
num_fields, int has_longs)
{
@@ -2611,33 +2632,33 @@
ub4 prefetch_rows = 0; /*Oracle prefetch Row Buffer*/
sb4 cache_rows = 0;/* set high so memory is the limit */
sword status;
-
+
if (imp_dbh->RowCacheSize){
cache_rows=imp_dbh->RowCacheSize;
}
-
+
/* seems that RowCacheSize was incorrectly used in the past
in the DBI Spect RowCacheSize is to be used for a local row cache
-
+
From DBI POD
- A hint to the driver indicating the size of the local
- row cache that the application would like the driver to
- use for future SELECT statements.
+ A hint to the driver indicating the size of the local
+ row cache that the application would like the driver to
+ use for future SELECT statements.
so RowCacheSize is for a local cache to cut down on round trips
-
+
The OCI doc state that both OCI_ATTR_PREFETCH_ROWS
OCI_ATTR_PREFETCH_MEMORY
- sets up a cleint side cache but as we use to select one 1 record at
a time from
- the fetch this means the records are never really cached locally.as
each fecth did
- a round trim
-
+ sets up a cleint side cache but in earluer version that 1.24 we only
selected
+ one record at a time from the fetch this means a round trip (at
least to the local cache)
+ at each fetch.
+
With the new array fetch we truly have a local cache so I will use it
RowCacheSize to set the value of that cache or the array fetch*/
-
-
+
+
/* number of rows to cache if using oraperl will leave this in
for now*/
-
+
if (SvOK(imp_drh->ora_cache_o)){
imp_sth->cache_rows = SvIV(imp_drh->ora_cache_o);
@@ -2646,43 +2667,47 @@
imp_sth->cache_rows = SvIV(imp_drh->ora_cache);
}
- if (imp_dbh->RowCacheSize){
+ if (imp_dbh->RowCacheSize){ /* defalut value*/
cache_rows=imp_dbh->RowCacheSize;
- }
+ }
prefetch_rows =imp_sth->prefetch_rows;
prefetch_mem =imp_sth->prefetch_memory;
-
-
- if (!cache_rows) { /*start with this value if not set then set default*/
-
- cache_rows=calc_cache_rows(imp_sth->cache_rows,(int)num_fields,
imp_sth->est_width, has_longs);
-
- if(!prefetch_rows && !prefetch_mem){
+
+
+ if (!cache_rows) { /*start with this value if not set then set default
cache */
+
+ cache_rows=calc_cache_rows(imp_sth->cache_rows,(int)num_fields,
imp_sth->est_width, has_longs,0);
+
+ if(!prefetch_rows && !prefetch_mem){ /*if there are not
prefetch rows make sure I set it here to the default*/
prefetch_rows=cache_rows;
}
}
else if (imp_dbh->RowCacheSize < 0) {/* for compaibility with DBI doc
negitive value here means use the value as memory*/
prefetch_mem =-imp_dbh->RowCacheSize; /* cache_mem always
+ve here */
prefetch_rows =0;
- cache_rows=calc_cache_rows(imp_sth->cache_rows,(int)num_fields,
imp_sth->est_width, has_longs);
- /*Sill use local cache but it is calulated nothing in the doc
for this so I will use it like this*/
- }
+ cache_rows=calc_cache_rows(imp_sth->cache_rows,(int)num_fields,
imp_sth->est_width, has_longs,prefetch_mem);
+ /*The above fucntion will set the cache_rows using memory as
the limit*/
+ }
else {
+
if (!prefetch_mem){
- prefetch_rows = cache_rows;
+ prefetch_rows = cache_rows; /*use the RowCacheSize*/
}
}
-
-
-
+
+ if (cache_rows <= prefetch_rows){
+ cache_rows=prefetch_rows;
+ /* is prefetch_rows are greater than the RowCahceSize then use
prefetch_rows*/
+ }
+
OCIAttrSet_log_stat(imp_sth->stmhp, OCI_HTYPE_STMT,
&prefetch_mem,
sizeof(prefetch_mem), OCI_ATTR_PREFETCH_MEMORY,
imp_sth->errhp, status);
if (status != OCI_SUCCESS) {
oci_error(h, imp_sth->errhp, status,
- "OCIAttrSet
OCI_ATTR_PREFETCH_ROWS/OCI_ATTR_PREFETCH_MEMORY");
+ "OCIAttrSet OCI_ATTR_PREFETCH_MEMORY");
++num_errors;
}
@@ -2696,26 +2721,27 @@
}
imp_sth->rs_array_size=cache_rows;
-
- if (max_cache_rows){
+ /*set the size of the array buffer*/
+
+ if (max_cache_rows){/* limited by a cursor or something else*/
imp_sth->rs_array_size=max_cache_rows;
- }
-
-
- if (imp_sth->row_cache_off){
+ }
+
+
+ if (imp_sth->row_cache_off){/*set the size of the Rows in Cache value*/
imp_dbh->RowsInCache =1;
- }
+ }
else {
imp_dbh->RowsInCache=imp_sth->rs_array_size;
}
-
- if (DBIS->debug >= 3 || dbd_verbose >= 3 || oci_warn)
+
+ if (DBIS->debug >= 3 || dbd_verbose >= 3 || oci_warn) /*will also
display if oci_want is on*/
PerlIO_printf(DBILOGFP,
- " cache settings RowCacheSize=%d,
OCI_ATTR_PREFETCH_ROWS %lu, OCI_ATTR_PREFETCH_MEMORY %lu Rows per Fetch=%d,
Multiple Row Fetch off=%d\n",
- imp_dbh->RowCacheSize,(unsigned long) (prefetch_rows),
(unsigned long) (prefetch_mem),cache_rows,imp_sth->row_cache_off);
+ " cache settings RowCacheSize=%d,
OCI_ATTR_PREFETCH_ROWS=%lu, OCI_ATTR_PREFETCH_MEMORY=%lu, Rows per Fetch=%d,
Multiple Row Fetch=%s\n",
+ imp_dbh->RowCacheSize,(unsigned long) (prefetch_rows),
(unsigned long) (prefetch_mem),cache_rows,(imp_sth->row_cache_off)?"Off":"On");
+
-
return num_errors;
}
@@ -3358,6 +3384,7 @@
}/* end define of filed struct[i] fbh*/
imp_sth->est_width = est_width;
+
sth_set_row_cache(h, imp_sth,
(imp_dbh->max_nested_cursors) ? 0 :nested_cursors ,
(int)num_fields, has_longs );
@@ -3366,6 +3393,8 @@
imp_sth->eod_errno = 0;
rs_array_init(imp_sth);
+
+
/* now set up the oci call with define by pos*/
for(i=1; i <= num_fields; ++i) {
imp_fbh_t *fbh = &imp_sth->fbh[i-1];
@@ -3373,7 +3402,6 @@
/* add space for STRING null term, or VAR len prefix */
sb4 define_len = (ftype==94||ftype==95) ? fbh->disize+4 :
fbh->disize;
fb_ary_t *fb_ary;
-
if (fbh->clbk_lob || fbh->piece_lob ){/*init the cb_abuf with
this call*/
fbh->fb_ary =
fb_ary_cb_alloc(imp_sth->piece_size,define_len, imp_sth->rs_array_size);
@@ -3506,11 +3534,11 @@
if (imp_sth->fetch_orient != OCI_DEFAULT) {
if (imp_sth->exe_mode!=OCI_STMT_SCROLLABLE_READONLY)
croak ("attempt to use a scrollable cursor
without first setting ora_exe_mode to OCI_STMT_SCROLLABLE_READONLY\n") ;
-
+
if (DBIS->debug >= 4 || dbd_verbose >= 4 )
PerlIO_printf(DBILOGFP," Scrolling
Fetch, postion before fetch=%d, Orientation = %s , Fetchoffset =%d\n",
imp_sth->fetch_position,oci_fetch_options(imp_sth->fetch_orient),imp_sth->fetch_offset);
-
+
OCIStmtFetch_log_stat(imp_sth->stmhp, imp_sth->errhp,1,
imp_sth->fetch_orient,imp_sth->fetch_offset, status);
/*this will work without a round trip so might
as well open it up for all statments handles*/
/* defualt and OCI_FETCH_NEXT are the same so
this avoids miscaluation on the next value*/
@@ -3519,20 +3547,21 @@
if (DBIS->debug >= 4 || dbd_verbose >= 4 )
PerlIO_printf(DBILOGFP," Scrolling
Fetch, postion after fetch=%d\n",imp_sth->fetch_position);
- }
+ }
else {
-
+
if (imp_sth->row_cache_off){ /*Do not use array fetch
or local cache */
OCIStmtFetch_log_stat(imp_sth->stmhp,
imp_sth->errhp,1,(ub2)OCI_FETCH_NEXT, OCI_DEFAULT, status);
imp_sth->rs_fetch_count++;
imp_sth->rs_array_idx=0;
-
+
}
else { /*Array Fetch the New Noraml Super speedy and
very nice*/
-
+
imp_dbh->RowsInCache--;
imp_sth->rs_array_idx++;
-
+/* PerlIO_printf(DBILOGFP," /n/n
rs_array_num_rows=%d,imp_sth->rs_array_idx=%d\n",imp_sth->rs_array_idx,imp_sth->rs_array_num_rows);*/
+
if
(imp_sth->rs_array_num_rows<=imp_sth->rs_array_idx &&
(imp_sth->rs_array_status==OCI_SUCCESS ||
imp_sth->rs_array_status==OCI_SUCCESS_WITH_INFO)) {
OCIStmtFetch_log_stat(imp_sth->stmhp,imp_sth->errhp,imp_sth->rs_array_size,(ub2)OCI_FETCH_NEXT,OCI_DEFAULT,status);
imp_sth->rs_array_status=status;
@@ -3542,12 +3571,12 @@
}
OCIAttrGet_stmhp_stat(imp_sth,
&imp_sth->rs_array_num_rows,0,OCI_ATTR_ROWS_FETCHED, status);
imp_sth->rs_array_idx=0;
- imp_dbh->RowsInCache
=imp_sth->rs_array_size;
- /* if (DBIS->debug >= 4 || dbd_verbose >=
4 || oci_warn)
-
PerlIO_printf(DBILOGFP," fetch count=%d\n",imp_sth->rs_fetch_count);*/
-
- }
-
+ imp_dbh->RowsInCache
=imp_sth->rs_array_size;
+ if (DBIS->debug >= 4 || dbd_verbose >=
4 || oci_warn)
+
PerlIO_printf(DBILOGFP,"...Fetched %d rows\n",imp_sth->rs_array_num_rows);
+
+ }
+
if
(imp_sth->rs_array_num_rows>imp_sth->rs_array_idx) /* set status to success
if rows in cache */
status=OCI_SUCCESS;
else
@@ -3597,6 +3626,7 @@
ub1* row_data =
&fb_ary->abuf[0]+(fb_ary->bufl*imp_sth->rs_array_idx);
SV *sv = AvARRAY(av)[i]; /* Note: we
(re)use the SV in the AV */;
+
if (DBIS->debug >= 4 || dbd_verbose >= 4 ) {
PerlIO_printf(DBILOGFP, " field #%d with
rc=%d(%s)\n",i+1,rc,oci_col_return_codes(rc));
}