From: Mike Bayer Date: Sat, 24 Sep 2005 04:05:07 +0000 (+0000) Subject: (no commit message) X-Git-Tag: rel_0_1_0~599 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=455bf5f9da2cfe62ce3ea9983f57faf9191b8350;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git --- diff --git a/lib/sqlalchemy/ansisql.py b/lib/sqlalchemy/ansisql.py index fca984ba4b..c73181afa5 100644 --- a/lib/sqlalchemy/ansisql.py +++ b/lib/sqlalchemy/ansisql.py @@ -31,9 +31,6 @@ def engine(**params): class ANSISQLEngine(sqlalchemy.engine.SQLEngine): - def tableimpl(self, table): - return ANSISQLTableImpl(table) - def schemagenerator(self, proxy, **params): return ANSISchemaGenerator(proxy, **params) @@ -255,20 +252,11 @@ class ANSICompiler(sql.Compiled): return self.get_str(self.statement) - -class ANSISQLTableImpl(sql.TableImpl): - """Selectable implementation that gets attached to a schema.Table object.""" - - def __init__(self, table): - sql.TableImpl.__init__(self) - self.table = table - self.id = self.table.name - - def get_from_text(self): - return self.table.name - class ANSISchemaGenerator(sqlalchemy.engine.SchemaIterator): + def get_column_specification(self, column): + raise NotImplementedError() + def visit_table(self, table): self.append("\nCREATE TABLE " + table.name + "(") @@ -277,7 +265,7 @@ class ANSISchemaGenerator(sqlalchemy.engine.SchemaIterator): for column in table.columns: self.append(separator) separator = ", \n" - self.append("\t" + column.get_specification()) + self.append("\t" + self.get_column_specification(column)) self.append("\n)\n\n") self.execute() diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 59042eeb82..ce6dd8c633 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -216,8 +216,13 @@ class ForeignKey(SchemaItem): class Sequence(SchemaItem): """represents a sequence, which applies to Oracle and Postgres databases.""" + def __init__(self, name, start = None, increment = None): + self.name = name + self.start = start + self.increment = increment def _set_parent(self, column, key): self.column = column + self.column.sequence = self def accept_visitor(self, visitor): return visitor.visit_sequence(self) diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index aa247836c3..12666d72a6 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -597,17 +597,11 @@ class TableImpl(Selectable): def _get_from_objects(self): return [self.table] - def create(self, sqlproxy = None, **params): - if sqlproxy is None: - sqlproxy = self.table.engine.proxy() - - self.table.accept_visitor(self.table.engine.schemagenerator(sqlproxy, **params)) + def create(self, **params): + self.table.engine.create(self.table) - def drop(self, sqlproxy = None, **params): - if sqlproxy is None: - sqlproxy = self.table.engine.proxy() - - self.table.accept_visitor(self.table.engine.schemadropper(sqlproxy, **params)) + def drop(self, **params): + self.table.engine.drop(self.table) class Select(Selectable): diff --git a/test/engines.py b/test/engines.py index 2fb8e9aef7..3212f029c7 100644 --- a/test/engines.py +++ b/test/engines.py @@ -19,6 +19,7 @@ class EngineTest(PersistTest): self.do_tableops(db) def do_tableops(self, db): + # really trip it up with a circular reference users = Table('users', db, Column('user_id', INT, primary_key = True), Column('user_name', VARCHAR(20), nullable = False), @@ -27,7 +28,7 @@ class EngineTest(PersistTest): Column('test3', TEXT), Column('test4', DECIMAL, nullable = False), Column('test5', TIMESTAMP), - Column('parent_user_id', INT), + Column('parent_user_id', INT, foreign_key = ForeignKey('users.user_id')), Column('test6', DATETIME, nullable = False), Column('test7', CLOB), Column('test8', BLOB), @@ -40,18 +41,19 @@ class EngineTest(PersistTest): Column('email_address', VARCHAR(20)), ) - # really trip it up with a circular reference - users.c.parent_user_id.set_foreign_key(ForeignKey(users.c.user_id)) +# users.c.parent_user_id.set_foreign_key(ForeignKey(users.c.user_id)) users.create() addresses.create() # clear out table registry db.tables.clear() - + + print "HI" users = Table('users', db, autoload = True) addresses = Table('email_addresses', db, autoload = True) - + + print "DROP" users.drop() addresses.drop() diff --git a/test/mapper.py b/test/mapper.py index 03e604e518..36bbbb2542 100644 --- a/test/mapper.py +++ b/test/mapper.py @@ -1,15 +1,14 @@ from testbase import PersistTest, AssertMixin +import testbase import unittest, sys, os from sqlalchemy.mapper import * import sqlalchemy.objectstore as objectstore -#ECHO = True -ECHO = False -DATA = True -execfile("test/tables.py") -db.echo = True - +from tables import * + +db.echo = testbase.echo + class MapperTest(AssertMixin): def setUp(self): @@ -78,7 +77,7 @@ class PropertyTest(AssertMixin): ), is_primary = True) l = _User.mapper.select(_User.c.user_name == 'fred') - print repr(l) + self.echo(repr(l)) def testinherits(self): @@ -99,7 +98,7 @@ class PropertyTest(AssertMixin): jack.email_address = 'jack@gmail.com' objectstore.commit() - print repr(AddressUser.mapper.select(AddressUser.c.user_name == 'jack')) + self.echo(repr(AddressUser.mapper.select(AddressUser.c.user_name == 'jack'))) class LazyTest(AssertMixin): def setUp(self): @@ -120,16 +119,16 @@ class LazyTest(AssertMixin): address = relation(Address, addresses, lazy = True, uselist = False) )) l = m.select(users.c.user_id == 7) - print repr(l) - print repr(l[0].address) + self.echo(repr(l)) + self.echo(repr(l[0].address)) def testbackwardsonetoone(self): m = mapper(Address, addresses, properties = dict( user = relation(User, users, primaryjoin = users.c.user_id == addresses.c.user_id, lazy = True) )) l = m.select(addresses.c.address_id == 1) - print repr(l) - print repr(l[0].user) + self.echo(repr(l)) + self.echo(repr(l[0].user)) def testmanytomany(self): """tests a many-to-many lazy load""" @@ -186,7 +185,7 @@ class EagerTest(AssertMixin): m = mapper(Address, addresses, properties = dict( user = relation(User, users, lazy = False) )) - print repr(m.props['user'].uselist) + self.echo(repr(m.props['user'].uselist)) l = m.select(addresses.c.address_id == 1) self.assert_result(l, Address, {'address_id' : 1, 'email_address' : 'jack@bean.com', @@ -214,10 +213,10 @@ class EagerTest(AssertMixin): )) s = m.compile(and_(addresses.c.email_address == bindparam('emailad'), addresses.c.user_id==users.c.user_id)) c = s.compile() - print "\n" + str(c) + repr(c.get_params()) + self.echo("\n" + str(c) + repr(c.get_params())) l = m.instances(s.execute(emailad = 'jack@bean.com'), users.engine) - print repr(l) + self.echo(repr(l)) def testmulti(self): """tests eager loading with two relations simultaneously"""