--- sql/oracle/parser3oracle.C 2004/08/03 11:15:27 1.63 +++ sql/oracle/parser3oracle.C 2004/12/23 16:54:52 1.67 @@ -7,20 +7,8 @@ 2001.07.30 using Oracle 8.1.6 [@test tested with Oracle 7.x.x] */ -/* -prob: - kgepop: no error frame to pop to for error 21500 - -> I happy to tell you that I have solved the problem. - -Excellent news. - -> By allocating a separate -> environment handle for every database handle I share -*/ - -static const char *RCSId="$Id: parser3oracle.C,v 1.63 2004/08/03 11:15:27 paf Exp $"; +static const char *RCSId="$Id: parser3oracle.C,v 1.67 2004/12/23 16:54:52 paf Exp $"; #include "config_includes.h" @@ -125,6 +113,17 @@ static char *lsplit(char **string_ref, c return result; } +static char* rsplit(char* string, char delim) { + if(string) { + char* v=strrchr(string, delim); + if(v) { + *v=0; + return v+1; + } + } + return NULL; +} + #ifndef DOXYGEN struct Connection { SQL_Driver_services *services; @@ -287,7 +286,7 @@ public: *connection_ref=&connection; char *user=url; - char *service=lsplit(user, '@'); + char *service=rsplit(user, '@'); char *pwd=lsplit(user, ':'); char *options=lsplit(service, '?'); @@ -481,6 +480,9 @@ public: }; int binds_size=sizeof(Bind_info) * placeholders_count; + // we DO store OCIBind* into ATOMIC gc memory, + // but we do not allocate/free it, that's done automatically from oracle [using environment handles] + // so we don't have to bother with that Bind_info* binds=static_cast(services.malloc_atomic(binds_size)); { for(size_t i=0; i