[CalendarServer-changes] [15335] twext/trunk/twext/enterprise/dal

source_changes at macosforge.org source_changes at macosforge.org
Wed Nov 18 18:32:37 PST 2015


Revision: 15335
          http://trac.calendarserver.org//changeset/15335
Author:   cdaboo at apple.com
Date:     2015-11-18 18:32:37 -0800 (Wed, 18 Nov 2015)
Log Message:
-----------
Parse Oracle schema with / characters between functions.

Modified Paths:
--------------
    twext/trunk/twext/enterprise/dal/parseschema.py
    twext/trunk/twext/enterprise/dal/test/test_parseschema.py

Modified: twext/trunk/twext/enterprise/dal/parseschema.py
===================================================================
--- twext/trunk/twext/enterprise/dal/parseschema.py	2015-11-19 00:29:04 UTC (rev 15334)
+++ twext/trunk/twext/enterprise/dal/parseschema.py	2015-11-19 02:32:37 UTC (rev 15335)
@@ -134,6 +134,9 @@
 
     @return: the C{schema} argument
     """
+
+    # Filter out lines with just a / in them
+    schemaData = "\n".join(filter(lambda x: not x == "/", schemaData.splitlines()))
     parsed = parse(schemaData)
 
     for stmt in parsed:
@@ -253,7 +256,7 @@
             if createType == u"FUNCTION":
                 parseFunction(schema, stmt)
 
-        else:
+        elif stmt.get_type() != "UNKNOWN":
             print("unknown type:", stmt.get_type())
 
     return schema

Modified: twext/trunk/twext/enterprise/dal/test/test_parseschema.py
===================================================================
--- twext/trunk/twext/enterprise/dal/test/test_parseschema.py	2015-11-19 00:29:04 UTC (rev 15334)
+++ twext/trunk/twext/enterprise/dal/test/test_parseschema.py	2015-11-19 02:32:37 UTC (rev 15335)
@@ -467,6 +467,34 @@
         self.assertRaises(KeyError, s.functionNamed, "merge")
 
 
+    def test_oracle_functions(self):
+        """
+        A 'create (or replace) function' statement will add an L{Function} object to a L{Schema}'s
+        C{functions} list.
+        """
+        s = self.schemaFromString(
+            """
+CREATE OR REPLACE FUNCTION function1(now timestamp)
+  RETURN INTEGER is
+  result INTEGER;
+BEGIN
+  RETURN result;
+END;
+/
+
+CREATE OR REPLACE FUNCTION function2(now timestamp)
+  RETURN INTEGER is
+  result INTEGER;
+BEGIN
+  RETURN result;
+END;
+/
+            """
+        )
+        self.assertTrue(s.functionNamed("function1") is not None)
+        self.assertTrue(s.functionNamed("function2") is not None)
+
+
     def test_insert(self):
         """
         An 'insert' statement will add an L{schemaRows} to an L{Table}.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20151118/641f16b7/attachment-0001.html>


More information about the calendarserver-changes mailing list