--- sql/oracle/parser3oracle.C 2002/12/09 12:19:20 1.27 +++ sql/oracle/parser3oracle.C 2003/03/26 14:09:06 1.29.6.1 @@ -1,13 +1,13 @@ /** @file Parser Oracle driver. - Copyright(c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) + Copyright(c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) 2001.07.30 using Oracle 8.1.6 [@test tested with Oracle 7.x.x] */ -static const char *RCSId="$Id: parser3oracle.C,v 1.27 2002/12/09 12:19:20 paf Exp $"; +static const char *RCSId="$Id: parser3oracle.C,v 1.29.6.1 2003/03/26 14:09:06 paf Exp $"; #include "config_includes.h" @@ -38,7 +38,7 @@ inline int max(int a, int b) { return a> inline int min(int a, int b){ return a "''" - *to++='\''; result++; - break; - } - *to++=*from++; + const char* quote( + SQL_Driver_services& services, void *connection, + const char *from, unsigned int length) { + char *result=(char*)services.malloc_atomic(length*2+1); + char *to=result; + while(length--) { + switch(*from) { + case '\'': // "'" -> "''" + *to++='\''; result++; + break; } - return result; - } else // estimate mode - return length*2; + *to++=*from++; + } + *to=0; + return result; } void query( SQL_Driver_services& services, void *connection, @@ -455,7 +454,7 @@ private: // private funcs const char *astatement, OracleSQL_query_lobs &lobs) { size_t statement_size=strlen(astatement); - char *result=(char *)services.malloc(statement_size + char *result=(char *)services.malloc_atomic(statement_size +MAX_STRING // in case of short 'strings' +11/* returning */+6/* into */+(MAX_LOB_NAME_LENGTH+2/*:, */)*2/*ret into*/*MAX_IN_LOBS +1); @@ -480,7 +479,7 @@ private: // private funcs o+=4; OracleSQL_query_lobs::Item &item=lobs.items[lobs.count++]; item.name_ptr=name_begin; item.name_size=name_end-name_begin; - item.data_ptr=(char *)services.malloc(statement_size/*max*/); item.data_size=0; + item.data_ptr=(char *)services.malloc_atomic(statement_size/*max*/); item.data_size=0; const char *start=o; bool escaped=false; @@ -658,7 +657,7 @@ private: // private funcs { size_t size=(size_t)col_name_len; - char *ptr=(char *)services.malloc(size); + char *ptr=(char *)services.malloc_atomic(size); tolower(ptr, (char *)col_name, size); check(cs, handlers.add_column(cs.sql_error, ptr, size)); } @@ -680,7 +679,7 @@ private: // private funcs } default: coerce_type=SQLT_STR; - ptr=cols[column_count-1].str=(char *)services.malloc(MAX_OUT_STRING_LENGTH+1); + ptr=cols[column_count-1].str=(char *)services.malloc_atomic(MAX_OUT_STRING_LENGTH+1); size=MAX_OUT_STRING_LENGTH; break; } @@ -719,7 +718,7 @@ private: // private funcs OCILobGetLength(cs.svchp, cs.errhp, var, &loblen); if(loblen) { size=(size_t)loblen; - ptr=services.malloc(size); + ptr=services.malloc_atomic(size); check(cs, "lobread", OCILobRead(cs.svchp, cs.errhp, var, &amtp, offset, (dvoid *) ptr, loblen, (dvoid *)0, @@ -731,7 +730,7 @@ private: // private funcs default: if(const char *str=cols[i].str) { size=strlen(str); - ptr=services.malloc(size); + ptr=services.malloc_atomic(size); memcpy(ptr, str, size); } else { size=0; @@ -873,15 +872,8 @@ private: // conn client library funcs li const char *dlink(const char *dlopen_file_spec) { if(lt_dlinit()) - return lt_dlerror(); - - - lt_dlhandle handle=lt_dlopen(dlopen_file_spec); - - //return "hren31"; - if(!handle) return lt_dlerror(); //"can not open the dynamic link module"; @@ -1000,7 +992,7 @@ static sb4 cbf_get_data(dvoid *ctxp, (ub4 *)sizeof(ub2), OCI_ATTR_ROWS_RETURNED, context.cs->errhp)) ; context.rows->count=(ub2)rows; context.rows->row=(OracleSQL_query_lobs::return_rows::return_row *) - context.services->malloc(sizeof(OracleSQL_query_lobs::return_rows::return_row)*rows); + context.services->malloc_atomic(sizeof(OracleSQL_query_lobs::return_rows::return_row)*rows); } OracleSQL_query_lobs::return_rows::return_row &var=context.rows->row[index];