]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
got oracle parenthesized rules for funcs back, fixed copy_container on function
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 18 Mar 2006 00:32:49 +0000 (00:32 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 18 Mar 2006 00:32:49 +0000 (00:32 +0000)
lib/sqlalchemy/ansisql.py
lib/sqlalchemy/databases/oracle.py
lib/sqlalchemy/sql.py

index b05872182bc6e23f1e298af57ec14272e8848055..c0aebcbaed9c88bbae610f0faf498f946a784d7b 100644 (file)
@@ -220,10 +220,13 @@ class ANSICompiler(sql.Compiled):
         else:
             self.strings[list] = string.join([self.get_str(c) for c in list.clauses], ', ')
 
+    def apply_function_parens(self, func):
+        return func.name.upper() not in ANSI_FUNCS or len(func.clauses) > 0
+        
     def visit_function(self, func):
         if len(self.select_stack):
             self.typemap.setdefault(func.name, func.type)
-        if func.name.upper() in ANSI_FUNCS and not len(func.clauses):
+        if not self.apply_function_parens(func):
             self.strings[func] = ".".join(func.packagenames + [func.name])
         else:
             self.strings[func] = ".".join(func.packagenames + [func.name]) + "(" + string.join([self.get_str(c) for c in func.clauses], ', ') + ")"
index 003f0aadbca96194a0b78a162c79c393ecf739f1..546bd1462ebac693bd1d6f976325581f62df979b 100644 (file)
@@ -221,6 +221,9 @@ class OracleCompiler(ansisql.ANSICompiler):
         gives Oracle a chance to tack on a "FROM DUAL" to the string output. """
         return " FROM DUAL"
 
+    def apply_function_parens(self, func):
+        return len(func.clauses) > 0
+
     def visit_join(self, join):
         if self._use_ansi:
             return ansisql.ANSICompiler.visit_join(self, join)
index 24263184d1cc6017f585594225780451ebece27e..87ce3b96525d82e5ce603ea9fd83fd634c4cd0ed 100644 (file)
@@ -794,7 +794,7 @@ class Function(ClauseList, ColumnElement):
     def __init__(self, name, *clauses, **kwargs):
         self.name = name
         self.type = kwargs.get('type', sqltypes.NULLTYPE)
-        self.packagenames = kwargs.get('packagenames')
+        self.packagenames = kwargs.get('packagenames', None) or []
         self._engine = kwargs.get('engine', None)
         if self._engine is not None:
             self.type = self._engine.type_descriptor(self.type)
@@ -813,7 +813,7 @@ class Function(ClauseList, ColumnElement):
         data.setdefault(self, self)
     def copy_container(self):
         clauses = [clause.copy_container() for clause in self.clauses]
-        return Function(self.name, type=self.type, *clauses)
+        return Function(self.name, type=self.type, packagenames=self.packagenames, *clauses)
     def accept_visitor(self, visitor):
         for c in self.clauses:
             c.accept_visitor(visitor)