]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
updates to oracle
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 22 Oct 2006 05:02:11 +0000 (05:02 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 22 Oct 2006 05:02:11 +0000 (05:02 +0000)
added more ordering to schema collections for better predictability

lib/sqlalchemy/databases/oracle.py
lib/sqlalchemy/schema.py
lib/sqlalchemy/sql.py
test/orm/cycles.py
test/orm/polymorph.py

index 91e54ea759706fade2e405e4ad8e4e6abdd83757..107dea1634afe23ea858d39c81afe368db85318d 100644 (file)
@@ -5,7 +5,7 @@
 # the MIT License: http://www.opensource.org/licenses/mit-license.php
 
 
-import sys, StringIO, string
+import sys, StringIO, string, re
 
 import sqlalchemy.util as util
 import sqlalchemy.sql as sql
@@ -246,7 +246,11 @@ class OracleDialect(ansisql.ANSIDialect):
             elif coltype=='CHAR' or coltype=='VARCHAR2':
                 coltype = ischema_names.get(coltype, OracleString)(length)
             else:
-                coltype = ischema_names.get(coltype)
+                coltype = re.sub(r'\(\d+\)', '', coltype)
+                try:
+                    coltype = ischema_names[coltype]
+                except KeyError:
+                    raise exceptions.AssertionError("Cant get coltype for type '%s'" % coltype)
                
             colargs = []
             if default is not None:
index 97a80d3cd5a37dfcbacaa6d76797b1d4dc93faab..9750d37fdd20d0de358d733db626c3bd44bd2859 100644 (file)
@@ -378,7 +378,7 @@ class Column(SchemaItem, sql._ColumnClause):
         self.autoincrement = kwargs.pop('autoincrement', True)
         self.constraints = util.Set()
         self.__originating_column = self
-        self._foreign_keys = util.Set()
+        self._foreign_keys = util.OrderedSet()
         if len(kwargs):
             raise exceptions.ArgumentError("Unknown arguments passed to Column: " + repr(kwargs.keys()))
 
@@ -697,7 +697,7 @@ class ForeignKeyConstraint(Constraint):
         super(ForeignKeyConstraint, self).__init__(name)
         self.__colnames = columns
         self.__refcolnames = refcolumns
-        self.elements = util.Set()
+        self.elements = util.OrderedSet()
         self.onupdate = onupdate
         self.ondelete = ondelete
         if self.name is None and use_alter:
index 8a884332ebe377f9ce67e7be234db8e8e810963e..a34310ac1d70fc8a72f9e6a57e0d2d6d20100e5b 100644 (file)
@@ -1281,8 +1281,8 @@ class TableClause(FromClause):
         super(TableClause, self).__init__(name)
         self.name = self.fullname = name
         self._columns = ColumnCollection()
-        self._foreign_keys = util.Set()
-        self._primary_key = util.Set()
+        self._foreign_keys = util.OrderedSet()
+        self._primary_key = ColumnCollection()
         for c in columns:
             self.append_column(c)
         self._oid_column = _ColumnClause('oid', self, _is_oid=True)
index 0ff3abb7b76673dd677fba463ffb167026db86c0..387bd18441bb46e1b2fee68057fb8fe06b9cb906 100644 (file)
@@ -25,12 +25,12 @@ class SelfReferentialTest(AssertMixin):
         global t1, t2, metadata
         metadata = BoundMetaData(testbase.db)
         t1 = Table('t1', metadata, 
-            Column('c1', Integer, primary_key=True),
+            Column('c1', Integer, Sequence('t1c1_id_seq', optional=True), primary_key=True),
             Column('parent_c1', Integer, ForeignKey('t1.c1')),
             Column('data', String(20))
         )
         t2 = Table('t2', metadata,
-            Column('c1', Integer, primary_key=True),
+            Column('c1', Integer, Sequence('t2c1_id_seq', optional=True), primary_key=True),
             Column('c1id', Integer, ForeignKey('t1.c1')),
             Column('data', String(20))
         )
@@ -101,11 +101,11 @@ class BiDirectionalOneToManyTest(AssertMixin):
         global t1, t2, metadata
         metadata = BoundMetaData(testbase.db)
         t1 = Table('t1', metadata, 
-            Column('c1', Integer, primary_key=True),
+            Column('c1', Integer, Sequence('t1c1_id_seq', optional=True), primary_key=True),
             Column('c2', Integer, ForeignKey('t2.c1'))
         )
         t2 = Table('t2', metadata,
-            Column('c1', Integer, primary_key=True),
+            Column('c1', Integer, Sequence('t2c1_id_seq', optional=True), primary_key=True),
             Column('c2', Integer)
         )
         metadata.create_all()
@@ -144,29 +144,24 @@ class BiDirectionalOneToManyTest2(AssertMixin):
         global t1, t2, t3, metadata
         metadata = BoundMetaData(testbase.db)
         t1 = Table('t1', metadata, 
-            Column('c1', Integer, primary_key=True),
+            Column('c1', Integer, Sequence('t1c1_id_seq', optional=True), primary_key=True),
             Column('c2', Integer, ForeignKey('t2.c1')),
         )
         t2 = Table('t2', metadata,
-            Column('c1', Integer, primary_key=True),
-            Column('c2', Integer),
+            Column('c1', Integer, Sequence('t2c1_id_seq', optional=True), primary_key=True),
+            Column('c2', Integer, ForeignKey('t1.c1', use_alter=True, name='t1c1_fq')),
         )
-        t2.create()
-        t1.create()
-        t2.c.c2.append_foreign_key(ForeignKey('t1.c1'))
         t3 = Table('t1_data', metadata, 
-            Column('c1', Integer, primary_key=True),
+            Column('c1', Integer, Sequence('t1dc1_id_seq', optional=True), primary_key=True),
             Column('t1id', Integer, ForeignKey('t1.c1')),
             Column('data', String(20)))
-        t3.create()
+        metadata.create_all()
         
     def tearDown(self):
         clear_mappers()
 
     def tearDownAll(self):
-        t3.drop()
-        t1.drop()
-        t2.drop()
+        metadata.drop_all()
         
     def testcycle(self):
         class C1(object):pass
@@ -503,7 +498,7 @@ class SelfReferentialPostUpdateTest(AssertMixin):
         global metadata, node_table
         metadata = BoundMetaData(testbase.db)
         node_table = Table('node', metadata,
-            Column('id', Integer, primary_key=True),
+            Column('id', Integer, Sequence('nodeid_id_seq', optional=True), primary_key=True),
             Column('path', String(50), nullable=False),
             Column('parent_id', Integer, ForeignKey('node.id'), nullable=True),
             Column('prev_sibling_id', Integer, ForeignKey('node.id'), nullable=True),
index ce8f99320af2028d923c5acb2f8e8659c58f4096..5a3c1292c6cabbd8b8c4160f1ded4976f1065ae1 100644 (file)
@@ -34,13 +34,13 @@ class MultipleTableTest(testbase.PersistTest):
         
         # a table to store companies
         companies = Table('companies', metadata, 
-           Column('company_id', Integer, primary_key=True),
+           Column('company_id', Integer, Sequence('company_id_seq', optional=True), primary_key=True),
            Column('name', String(50)))
 
         # we will define an inheritance relationship between the table "people" and "engineers",
         # and a second inheritance relationship between the table "people" and "managers"
         people = Table('people', metadata, 
-           Column('person_id', Integer, primary_key=True),
+           Column('person_id', Integer, Sequence('person_id_seq', optional=True), primary_key=True),
            Column('company_id', Integer, ForeignKey('companies.company_id')),
            Column('name', String(50)),
            Column('type', String(30)))