--- sql/pgsql/parser3pgsql.C 2004/03/05 10:16:41 1.18 +++ sql/pgsql/parser3pgsql.C 2004/06/23 07:32:07 1.22 @@ -7,7 +7,7 @@ 2001.07.30 using PgSQL 7.1.2 */ -static const char *RCSId="$Id: parser3pgsql.C,v 1.18 2004/03/05 10:16:41 paf Exp $"; +static const char *RCSId="$Id: parser3pgsql.C,v 1.22 2004/06/23 07:32:07 paf Exp $"; #include "config_includes.h" @@ -58,7 +58,7 @@ static char *lsplit(char **string_ref, c return result; } -static void toupper(char *out, const char *in, size_t size) { +static void toupper_str(char *out, const char *in, size_t size) { while(size--) *out++=(char)toupper(*in++); } @@ -95,15 +95,15 @@ public: #define PQclear_throwPQerror PQclear_throw(PQerrorMessage(connection.conn)) /** connect - @param used_only_in_connect_url + @param url format: @b user:pass@host[:port]|[local]/database */ void connect( - char *used_only_in_connect_url, + char *url, SQL_Driver_services& services, void **connection_ref ///< output: Connection* ) { - char *user=used_only_in_connect_url; + char *user=url; char *host=lsplit(user, '@'); char *db=lsplit(host, '/'); char *pwd=lsplit(user, ':'); @@ -133,7 +133,7 @@ public: if(*key) { if(char *value=lsplit(key, '=')) { if(strcmp(key, "ClientCharset" ) == 0) { - toupper(value, value, strlen(value)); + toupper_str(value, value, strlen(value)); connection.cstrClientCharset=value; } else if(strcasecmp(key, "charset")==0) { // left for backward compatibility, consider using ClientCharset cstrBackwardCompAskServerToTranscode=value; @@ -228,15 +228,21 @@ public: return result; } void query(void *aconnection, - const char *astatement, unsigned long offset, unsigned long limit, + const char *astatement, + size_t placeholders_count, Placeholder* placeholders, + unsigned long offset, unsigned long limit, SQL_Driver_query_event_handlers& handlers) { // _asm int 3; Connection& connection=*static_cast(aconnection); + const char* cstrClientCharset=connection.cstrClientCharset; SQL_Driver_services& services=*connection.services; PGconn *conn=connection.conn; + if(placeholders_count>0) + services._throw("bind variables not supported (yet)"); + // transcode from $request:charset to connect-string?client_charset - if(const char* cstrClientCharset=connection.cstrClientCharset) { + if(cstrClientCharset) { size_t transcoded_statement_size; services.transcode(astatement, strlen(astatement), astatement, transcoded_statement_size, @@ -281,16 +287,16 @@ public: for(int i=0; i