class ANSISQLEngine(sqlalchemy.engine.SQLEngine):
- def tableimpl(self, table):
- return ANSISQLTableImpl(table)
-
def schemagenerator(self, proxy, **params):
return ANSISchemaGenerator(proxy, **params)
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 + "(")
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()
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)
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):
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),
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),
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()
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):
), is_primary = True)
l = _User.mapper.select(_User.c.user_name == 'fred')
- print repr(l)
+ self.echo(repr(l))
def testinherits(self):
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):
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"""
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',
))
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"""