Diff for /sql/pgsql/parser3pgsql.C between versions 1.40 and 1.42

version 1.40, 2012/06/08 14:42:37 version 1.42, 2012/10/19 04:13:28
Line 100  struct Connection { Line 100  struct Connection {
         const char* client_charset;          const char* client_charset;
         bool autocommit;          bool autocommit;
         bool without_default_transactions;          bool without_default_transactions;
           bool standard_conforming_strings;
 };  };
   
 /**  /**
Line 158  public: Line 159  public:
                 connection.client_charset=0;                      connection.client_charset=0;    
                 connection.autocommit=true;                  connection.autocommit=true;
                 connection.without_default_transactions=false;                  connection.without_default_transactions=false;
                   connection.standard_conforming_strings=true;
   
                 connection.conn=PQsetdbLogin(                  connection.conn=PQsetdbLogin(
                         (host&&strcasecmp(host, "local")==0)?NULL/* local Unix domain socket */:host, port,                           (host&&strcasecmp(host, "local")==0)?NULL/* local Unix domain socket */:host, port, 
Line 192  public: Line 194  public:
                                                                 connection.without_default_transactions=true;                                                                  connection.without_default_transactions=true;
                                                                 connection.autocommit=false;                                                                  connection.autocommit=false;
                                                         }                                                          }
                                                   } else if(strcasecmp(key, "standard_conforming_strings")==0){
                                                           if(atoi(value)==0)
                                                                   connection.standard_conforming_strings=false;
                                                 } else                                                  } else
                                                         services._throw("unknown connect option" /*key*/);                                                          services._throw("unknown connect option" /*key*/);
                                         } else                                           } else 
Line 244  public: Line 249  public:
         // thus we can't use the sql server quoting support          // thus we can't use the sql server quoting support
         const char* quote(void *aconnection, const char *str, unsigned int length)           const char* quote(void *aconnection, const char *str, unsigned int length) 
         {          {
                   Connection& connection=*static_cast<Connection*>(aconnection);
   
                 const char* from;                  const char* from;
                 const char* from_end=str+length;                  const char* from_end=str+length;
   
                 size_t quoted=0;                  size_t quoted=0;
   
                 for(from=str; from<from_end; from++){                  if(connection.standard_conforming_strings){
                         switch (*from) {                          for(from=str; from<from_end; from++){
                         case '\'':                                  if(*from=='\'')
                         case '\\':                                          quoted++;
                                 quoted++;                          }
                   } else {
                           for(from=str; from<from_end; from++){
                                   switch (*from) {
                                   case '\'':
                                   case '\\':
                                           quoted++;
                                   }
                         }                          }
                 }                  }
   
                 if(!quoted)                  if(!quoted)
                         return str;                          return str;
   
                 Connection& connection=*static_cast<Connection*>(aconnection);  
                 char *result=(char*)connection.services->malloc_atomic(length + quoted + 1);                  char *result=(char*)connection.services->malloc_atomic(length + quoted + 1);
                 char *to = result;                  char *to = result;
   
                 for(from=str; from<from_end; from++){                  if(connection.standard_conforming_strings){
                         switch (*from) {                          for(from=str; from<from_end; from++){
                         case '\'': // "'" -> "''"                                  if(*from=='\'')
                                 *to++='\'';                                          *to++= '\''; // "'" -> "''"
                                 break;                                  *to++=*from;
                         case '\\': // "\" -> "\\"                          }
                                 *to++='\\';                  } else {
                                 break;                          for(from=str; from<from_end; from++){
                                   switch (*from) {
                                   case '\'': // "'" -> "''"
                                           *to++= '\'';
                                           break;
                                   case '\\': // "\" -> "\\"
                                           *to++='\\';
                                           break;
                                   }
                                   *to++=*from;
                         }                          }
                         *to++=*from;  
                 }                  }
                                   
                 *to=0;                  *to=0;
Line 689  private: // conn client library funcs Line 710  private: // conn client library funcs
 private: // conn client library funcs linking  private: // conn client library funcs linking
   
         const char *dlink(const char *dlopen_file_spec) {          const char *dlink(const char *dlopen_file_spec) {
                 if(lt_dlinit())                  if(lt_dlinit()){
                         return lt_dlerror();                          if(const char* result=lt_dlerror())
                                   return result;
                           return "can not prepare to dynamic loading";
                   }
   
                 lt_dlhandle handle=lt_dlopen(dlopen_file_spec);                  lt_dlhandle handle=lt_dlopen(dlopen_file_spec);
                 if(!handle)  
                   if(!handle){
                           if(const char* result=lt_dlerror())
                                   return result;
                         return "can not open the dynamic link module";                          return "can not open the dynamic link module";
                   }
   
                 #define DSLINK(name, action) \                  #define DSLINK(name, action) \
                         name=(t_##name)lt_dlsym(handle, #name); \                          name=(t_##name)lt_dlsym(handle, #name); \

Removed from v.1.40  
changed lines
  Added in v.1.42


E-mail: