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

source_changes at macosforge.org source_changes at macosforge.org
Sun Nov 15 10:07:19 PST 2015


Revision: 15311
          http://trac.calendarserver.org//changeset/15311
Author:   cdaboo at apple.com
Date:     2015-11-15 10:07:19 -0800 (Sun, 15 Nov 2015)
Log Message:
-----------
Allow comparisons of index columns.

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

Modified: twext/trunk/twext/enterprise/dal/model.py
===================================================================
--- twext/trunk/twext/enterprise/dal/model.py	2015-11-13 23:07:17 UTC (rev 15310)
+++ twext/trunk/twext/enterprise/dal/model.py	2015-11-15 18:07:19 UTC (rev 15311)
@@ -569,18 +569,15 @@
     a name based on the table name, uniqueness and column names.
     """
 
-    def __init__(self, table, columns, unique=False):
-        if unique:
-            suffix = "-unique"
-        else:
-            suffix = ""
+    def __init__(self, name, table, columns, index_type=""):
 
         self.name = (
-            "%s%s:(%s)"
-            % (table.name, suffix, ",".join([col.name for col in columns]))
+            "%s:%s:(%s)"
+            % (table.name, index_type, ",".join([col.name for col in columns]))
         )
+        self.original_name = name if name else self.name
         self.table = table
-        self.unique = unique
+        self.index_type = index_type
         self.columns = columns
 
 
@@ -592,11 +589,26 @@
         @type other: L{Index}
         """
 
-        # Nothing to do as name comparison will catch differences
-        return []
+        results = []
 
+        # Compare the columns
+        myColumns = dict([(item.name.lower(), item) for item in self.columns])
+        otherColumns = dict([
+            (item.name.lower(), item) for item in other.columns
+        ])
+        for item in set(myColumns.keys()) - set(otherColumns.keys()):
+            results.append(
+                "Index: %s, extra column: %s" % (self.original_name, myColumns[item].name,)
+            )
+        for item in set(otherColumns.keys()) - set(myColumns.keys()):
+            results.append(
+                "Index: %s, missing column: %s" % (self.original_name, otherColumns[item].name,)
+            )
 
+        return results
 
+
+
 class Sequence(FancyEqMixin, object):
     """
     A sequence object.
@@ -735,17 +747,17 @@
         # First add the list of explicit indexes we have
         for index in self.indexes:
             results.append(
-                PseudoIndex(index.table, index.columns, index.unique)
+                PseudoIndex(index.name, index.table, index.columns, "unique" if index.unique else "")
             )
 
         # Now do implicit index for each table
         for table in self.tables:
             if table.primaryKey is not None:
-                results.append(PseudoIndex(table, table.primaryKey, True))
+                results.append(PseudoIndex(None, table, table.primaryKey, "unique"))
             for constraint in table.constraints:
                 if constraint.type == Constraint.UNIQUE:
                     results.append(
-                        PseudoIndex(table, constraint.affectsColumns, True)
+                        PseudoIndex(None, table, constraint.affectsColumns, "unique")
                     )
 
         return results

Modified: twext/trunk/twext/enterprise/dal/test/test_parseschema.py
===================================================================
--- twext/trunk/twext/enterprise/dal/test/test_parseschema.py	2015-11-13 23:07:17 UTC (rev 15310)
+++ twext/trunk/twext/enterprise/dal/test/test_parseschema.py	2015-11-15 18:07:19 UTC (rev 15311)
@@ -425,10 +425,10 @@
         self.assertEqual(
             set([pseudo.name for pseudo in s.pseudoIndexes()]),
             set((
-                "a-unique:(c)",
-                "a:(c,b)",
-                "a-unique:(b)",
-                "z-unique:(c)",
+                "a:unique:(c)",
+                "a::(c,b)",
+                "a:unique:(b)",
+                "z:unique:(c)",
             ))
         )
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20151115/6d35452b/attachment.html>


More information about the calendarserver-changes mailing list