Diff for /sql/pgsql/parser3pgsql.C between versions 1.48 and 1.50

version 1.48, 2021/11/03 15:14:05 version 1.50, 2021/11/07 22:16:54
Line 140  public: Line 140  public:
                 char* host=rsplit(user, '@');                  char* host=rsplit(user, '@');
                 char* db=lsplit(host, '/');                  char* db=lsplit(host, '/');
                 char* pwd=lsplit(user, ':');                  char* pwd=lsplit(user, ':');
                 char* port=lsplit(host, ':');  
   
                 char *options=lsplit(db, '?');                  char *options=lsplit(db, '?');
   
                 char* charset=0;                  char* charset=0;
                 char* datestyle=0;                  char* datestyle=0;
   
                   char* pq_options=0;
                   size_t  pq_options_len=options ? strlen(options) : 0;
   
                 Connection& connection=*(Connection *)services.malloc(sizeof(Connection));                  Connection& connection=*(Connection *)services.malloc(sizeof(Connection));
   
                 *connection_ref=&connection;                  *connection_ref=&connection;
Line 155  public: Line 157  public:
                 connection.autocommit=true;                  connection.autocommit=true;
                 connection.standard_conforming_strings=true;                  connection.standard_conforming_strings=true;
   
                 connection.conn=PQsetdbLogin( (host && strcasecmp(host, "local") == 0) ? NULL /* local Unix domain socket */ : host, port, NULL, NULL, db, user, pwd);  
   
                 if(!connection.conn)  
                         services._throw("PQsetdbLogin failed");  
   
                 if(PQstatus(connection.conn)!=CONNECTION_OK)  
                         throwPQerror;  
   
                 while(options){                  while(options){
                         if(char *key=lsplit(&options, '&')){                          if(char *key=lsplit(&options, '&')){
                                 if(*key){                                  if(*key){
Line 180  public: Line 174  public:
                                                 } else if(strcasecmp(key, "standard_conforming_strings")==0){                                                  } else if(strcasecmp(key, "standard_conforming_strings")==0){
                                                         if(atoi(value)==0)                                                          if(atoi(value)==0)
                                                                 connection.standard_conforming_strings=false;                                                                  connection.standard_conforming_strings=false;
                                                 } else                                                  } else {
                                                         services._throw("unknown connect option" /*key*/);                                                          if(!pq_options) {
                                                                   pq_options=(char*)services.malloc_atomic(pq_options_len+2);
                                                                   strcpy(pq_options, "?");
                                                           } else {
                                                                   strcat(pq_options, "&");
                                                           }
                                                           strcat(pq_options, key);
                                                           strcat(pq_options, "=");
                                                           strcat(pq_options, value);
                                                   }
                                         } else                                           } else 
                                                 services._throw("connect option without =value" /*key*/);                                                  services._throw("connect option without =value" /*key*/);
                                 }                                  }
                         }                          }
                 }                  }
   
                   if(host && (strchr(host, ',') || pq_options)){ // pq_options can exist only if host and db are not null
                           char pq_url[MAX_STRING+1];
                           snprintf(pq_url, MAX_STRING, "postgresql://%s/%s%s", host, db ? db : "", pq_options ? pq_options : "");
                           connection.conn=PQsetdbLogin(NULL, NULL, NULL, NULL, pq_url, user, pwd);
                   } else {
                           char* port=lsplit(host, ':');
                           connection.conn=PQsetdbLogin( (host && strcasecmp(host, "local") == 0) ? NULL /* local Unix domain socket */ : host, port, NULL, NULL, db, user, pwd);
                   }
   
                   if(!connection.conn)
                           services._throw("PQsetdbLogin failed");
   
                   if(PQstatus(connection.conn)!=CONNECTION_OK)
                           throwPQerror;
   
                 if(charset){                  if(charset){
                         char statement[MAX_STRING+1]="SET CLIENT_ENCODING=";                          char statement[MAX_STRING+1]="SET CLIENT_ENCODING=";
                         strncat(statement, charset, MAX_STRING);                          strncat(statement, charset, MAX_STRING);
Line 203  public: Line 221  public:
                 }                  }
   
                 if(!connection.autocommit)                  if(!connection.autocommit)
                         _execute_cmd(connection, "set AUTOCOMMIT off");                          _execute_cmd(connection, "BEGIN");
         }          }
   
         void disconnect(void *aconnection){          void disconnect(void *aconnection){

Removed from v.1.48  
changed lines
  Added in v.1.50


E-mail: