From fe27b87023e99ff58371a6e689709a6ab2b5c3b7 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 22 Oct 2006 05:02:11 +0000 Subject: [PATCH] updates to oracle added more ordering to schema collections for better predictability --- lib/sqlalchemy/databases/oracle.py | 8 ++++++-- lib/sqlalchemy/schema.py | 4 ++-- lib/sqlalchemy/sql.py | 4 ++-- test/orm/cycles.py | 27 +++++++++++---------------- test/orm/polymorph.py | 4 ++-- 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 91e54ea759..107dea1634 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -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: diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 97a80d3cd5..9750d37fdd 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -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: diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 8a884332eb..a34310ac1d 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -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) diff --git a/test/orm/cycles.py b/test/orm/cycles.py index 0ff3abb7b7..387bd18441 100644 --- a/test/orm/cycles.py +++ b/test/orm/cycles.py @@ -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), diff --git a/test/orm/polymorph.py b/test/orm/polymorph.py index ce8f99320a..5a3c1292c6 100644 --- a/test/orm/polymorph.py +++ b/test/orm/polymorph.py @@ -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))) -- 2.47.2