]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
OK nevermind that last commit, rolling the quoting fix back
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 4 Feb 2007 03:19:54 +0000 (03:19 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 4 Feb 2007 03:19:54 +0000 (03:19 +0000)
lib/sqlalchemy/ansisql.py
lib/sqlalchemy/sql.py

index 794c48439449b6ed7ec654e3161d8c0864140c5a..40ea5b00ac109ef6ca53767f96798e9901b25e72 100644 (file)
@@ -850,13 +850,12 @@ class ANSIIdentifierPreparer(object):
         self.initial_quote = initial_quote
         self.final_quote = final_quote or self.initial_quote
         self.omit_schema = omit_schema
-        self._is_quoted_regexp = re.compile(r"""^['"%s].+['"%s]$""" % (self.initial_quote, self.final_quote))
         self.__strings = {}
     def _escape_identifier(self, value):
         """escape an identifier.
         
         subclasses should override this to provide database-dependent escaping behavior."""
-        return value.replace("'", "''")
+        return value.replace('"', '""')
     
     def _quote_identifier(self, value):
         """quote an identifier.
@@ -873,10 +872,6 @@ class ANSIIdentifierPreparer(object):
         # some tests would need to be rewritten if this is done.
         #return value.upper()
     
-    def _is_quoted(self, ident):
-        """return true if the given identifier is already quoted"""
-        return self._is_quoted_regexp.match(ident)
-        
     def _reserved_words(self):
         return RESERVED_WORDS
 
@@ -889,11 +884,10 @@ class ANSIIdentifierPreparer(object):
     def _requires_quotes(self, value, case_sensitive):
         """return true if the given identifier requires quoting."""
         return \
-            not self._is_quoted(value) and \
-            (value in self._reserved_words() \
+            value in self._reserved_words() \
             or (value[0] in self._illegal_initial_characters()) \
             or bool(len([x for x in str(value) if x not in self._legal_characters()])) \
-            or (case_sensitive and not value.islower()))
+            or (case_sensitive and value.lower() != value)
     
     def __generic_obj_format(self, obj, ident):
         if getattr(obj, 'quote', False):
@@ -903,13 +897,13 @@ class ANSIIdentifierPreparer(object):
             try:
                 return self.__strings[(ident, case_sens)]
             except KeyError:
-                if self._requires_quotes(ident, getattr(obj, 'case_sensitive', ident.islower())):
+                if self._requires_quotes(ident, getattr(obj, 'case_sensitive', ident == ident.lower())):
                     self.__strings[(ident, case_sens)] = self._quote_identifier(ident)
                 else:
                     self.__strings[(ident, case_sens)] = ident
                 return self.__strings[(ident, case_sens)]
         else:
-            if self._requires_quotes(ident, getattr(obj, 'case_sensitive', ident.islower())):
+            if self._requires_quotes(ident, getattr(obj, 'case_sensitive', ident == ident.lower())):
                 return self._quote_identifier(ident)
             else:
                 return ident
@@ -940,10 +934,17 @@ class ANSIIdentifierPreparer(object):
         """Prepare a quoted column name """
         # TODO: isinstance alert !  get ColumnClause and Column to better
         # differentiate themselves
-        if use_table:
-            return self.format_table(column.table, use_schema=False) + "." + self.__generic_obj_format(column, column.name)
+        if isinstance(column, schema.SchemaItem):
+            if use_table:
+                return self.format_table(column.table, use_schema=False) + "." + self.__generic_obj_format(column, column.name)
+            else:
+                return self.__generic_obj_format(column, column.name)
         else:
-            return self.__generic_obj_format(column, column.name)
+            # literal textual elements get stuck into ColumnClause alot, which shouldnt get quoted
+            if use_table:
+                return self.format_table(column.table, use_schema=False) + "." + column.name
+            else:
+                return column.name
             
     def format_column_with_table(self, column):
         """Prepare a quoted column name with table name"""
index 823c8afc84bb5b8875acbff754e8869a653feca8..a59b91b4c00bb4103c7f53aa2978ca9978392f55 100644 (file)
@@ -1257,7 +1257,7 @@ class _ColumnClause(ColumnElement):
         self.type = sqltypes.to_instance(type)
         self._is_oid = _is_oid
         self.__label = None
-        self.case_sensitive = case_sensitive
+        self.case_sensitive = False #text.isalpha() and not text.islower()
     def _get_label(self):
         if self.__label is None:
             if self.table is not None and self.table.named_with_column():