--- sql/oracle/parser3oracle.C 2001/11/10 16:11:24 1.4 +++ sql/oracle/parser3oracle.C 2001/11/16 12:39:06 1.15 @@ -7,7 +7,7 @@ 2001.07.30 using Oracle 8.1.6 [@test tested with Oracle 7.x.x] */ -static const char *RCSId="$Id: parser3oracle.C,v 1.4 2001/11/10 16:11:24 paf Exp $"; +static const char *RCSId="$Id: parser3oracle.C,v 1.15 2001/11/16 12:39:06 paf Exp $"; #include "config_includes.h" @@ -38,20 +38,49 @@ inline int max(int a, int b) { return a> inline int min(int a, int b){ return a "''" - *to++='\''; - break; - case '\\': // "\" -> "\\" - *to++='\''; - break; + if(to) { // store mode + unsigned int result=length; + while(length--) { + switch(*from) { + case '\'': // "'" -> "''" + *to++='\''; result++; + break; + } + *to++=*from++; } - *to++=*from++; - } - return result; + return result; + } else // estimate mode + return length*2; } void query( SQL_Driver_services& services, void *connection, @@ -449,7 +484,7 @@ private: // private funcs const char *start=o; bool escaped=false; while(*o && !(o[0]=='\'' && o[1]!='\'' && !escaped)) { - escaped=*o=='\\' || (o[0]=='\'' && o[1]=='\''); + escaped=o[0]=='\'' && o[1]=='\''; if(escaped) { // write pending, skip "\" or "'" if(size_t size=o-start) { @@ -564,6 +599,18 @@ private: // private funcs OCIStmt *stmthp, unsigned long offset, unsigned long limit, SQL_Driver_query_event_handlers& handlers) { + ub4 prefetch_rows=100; + check(services, cs, "AttrSet prefetch-rows", OCIAttrSet( + (dvoid *)stmthp, (ub4)OCI_HTYPE_STMT, + (dvoid *)&prefetch_rows, (ub4)0, + (ub4)OCI_ATTR_PREFETCH_ROWS, (OCIError *)cs.errhp)); + + ub4 prefetch_mem_size=100*1024; + check(services, cs, "AttrSet prefetch-memory", OCIAttrSet( + (dvoid *)stmthp, (ub4)OCI_HTYPE_STMT, + (dvoid *)&prefetch_mem_size, (ub4)0, + (ub4)OCI_ATTR_PREFETCH_MEMORY, (OCIError *)cs.errhp)); + OCIParam *mypard; ub2 dtype; text *col_name; @@ -655,12 +702,9 @@ private: // private funcs if(row>=offset) { handlers.add_row(); for(int i=0; i