summaryrefslogtreecommitdiff
path: root/test/testlib/tables.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-07-27 04:08:53 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-07-27 04:08:53 +0000
commited4fc64bb0ac61c27bc4af32962fb129e74a36bf (patch)
treec1cf2fb7b1cafced82a8898e23d2a0bf5ced8526 /test/testlib/tables.py
parent3a8e235af64e36b3b711df1f069d32359fe6c967 (diff)
downloadsqlalchemy-ed4fc64bb0ac61c27bc4af32962fb129e74a36bf.tar.gz
merging 0.4 branch to trunk. see CHANGES for details. 0.3 moves to maintenance branch in branches/rel_0_3.
Diffstat (limited to 'test/testlib/tables.py')
-rw-r--r--test/testlib/tables.py218
1 files changed, 218 insertions, 0 deletions
diff --git a/test/testlib/tables.py b/test/testlib/tables.py
new file mode 100644
index 000000000..69c84c5b3
--- /dev/null
+++ b/test/testlib/tables.py
@@ -0,0 +1,218 @@
+import testbase
+from sqlalchemy import *
+from testlib.schema import Table, Column
+
+
+# these are older test fixtures, used primarily by test/orm/mapper.py and test/orm/unitofwork.py.
+# newer unit tests make usage of test/orm/fixtures.py.
+
+metadata = MetaData()
+
+users = Table('users', metadata,
+ Column('user_id', Integer, Sequence('user_id_seq', optional=True), primary_key = True),
+ Column('user_name', String(40)),
+ test_needs_acid=True,
+ test_needs_fk=True,
+)
+
+addresses = Table('email_addresses', metadata,
+ Column('address_id', Integer, Sequence('address_id_seq', optional=True), primary_key = True),
+ Column('user_id', Integer, ForeignKey(users.c.user_id)),
+ Column('email_address', String(40)),
+)
+
+orders = Table('orders', metadata,
+ Column('order_id', Integer, Sequence('order_id_seq', optional=True), primary_key = True),
+ Column('user_id', Integer, ForeignKey(users.c.user_id)),
+ Column('description', String(50)),
+ Column('isopen', Integer),
+)
+
+orderitems = Table('items', metadata,
+ Column('item_id', INT, Sequence('items_id_seq', optional=True), primary_key = True),
+ Column('order_id', INT, ForeignKey("orders")),
+ Column('item_name', VARCHAR(50)),
+)
+
+keywords = Table('keywords', metadata,
+ Column('keyword_id', Integer, Sequence('keyword_id_seq', optional=True), primary_key = True),
+ Column('name', VARCHAR(50)),
+)
+
+userkeywords = Table('userkeywords', metadata,
+ Column('user_id', INT, ForeignKey("users")),
+ Column('keyword_id', INT, ForeignKey("keywords")),
+)
+
+itemkeywords = Table('itemkeywords', metadata,
+ Column('item_id', INT, ForeignKey("items")),
+ Column('keyword_id', INT, ForeignKey("keywords")),
+# Column('foo', Boolean, default=True)
+)
+
+def create():
+ if not metadata.bind:
+ metadata.bind = testbase.db
+ metadata.create_all()
+def drop():
+ if not metadata.bind:
+ metadata.bind = testbase.db
+ metadata.drop_all()
+def delete():
+ for t in metadata.table_iterator(reverse=True):
+ t.delete().execute()
+def user_data():
+ if not metadata.bind:
+ metadata.bind = testbase.db
+ users.insert().execute(
+ dict(user_id = 7, user_name = 'jack'),
+ dict(user_id = 8, user_name = 'ed'),
+ dict(user_id = 9, user_name = 'fred')
+ )
+def delete_user_data():
+ users.delete().execute()
+
+def data():
+ delete()
+
+ # with SQLITE, the OID column of a table defaults to the primary key, if it has one.
+ # so to database-neutrally get rows back in "insert order" based on OID, we
+ # have to also put the primary keys in order for the purpose of these tests
+ users.insert().execute(
+ dict(user_id = 7, user_name = 'jack'),
+ dict(user_id = 8, user_name = 'ed'),
+ dict(user_id = 9, user_name = 'fred')
+ )
+ addresses.insert().execute(
+ dict(address_id = 1, user_id = 7, email_address = "jack@bean.com"),
+ dict(address_id = 2, user_id = 8, email_address = "ed@wood.com"),
+ dict(address_id = 3, user_id = 8, email_address = "ed@bettyboop.com"),
+ dict(address_id = 4, user_id = 8, email_address = "ed@lala.com")
+ )
+ orders.insert().execute(
+ dict(order_id = 1, user_id = 7, description = 'order 1', isopen=0),
+ dict(order_id = 2, user_id = 9, description = 'order 2', isopen=0),
+ dict(order_id = 3, user_id = 7, description = 'order 3', isopen=1),
+ dict(order_id = 4, user_id = 9, description = 'order 4', isopen=1),
+ dict(order_id = 5, user_id = 7, description = 'order 5', isopen=0)
+ )
+ orderitems.insert().execute(
+ dict(item_id=1, order_id=2, item_name='item 1'),
+ dict(item_id=2, order_id=2, item_name='item 2'),
+ dict(item_id=3, order_id=3, item_name='item 3'),
+ dict(item_id=4, order_id=3, item_name='item 4'),
+ dict(item_id=5, order_id=3, item_name='item 5'),
+ )
+ keywords.insert().execute(
+ dict(keyword_id=1, name='blue'),
+ dict(keyword_id=2, name='red'),
+ dict(keyword_id=3, name='green'),
+ dict(keyword_id=4, name='big'),
+ dict(keyword_id=5, name='small'),
+ dict(keyword_id=6, name='round'),
+ dict(keyword_id=7, name='square')
+ )
+
+ # this many-to-many table has the keywords inserted
+ # in primary key order, to appease the unit tests.
+ # this is because postgres, oracle, and sqlite all support
+ # true insert-order row id, but of course our pal MySQL does not,
+ # so the best it can do is order by, well something, so there you go.
+ itemkeywords.insert().execute(
+ dict(keyword_id=2, item_id=1),
+ dict(keyword_id=2, item_id=2),
+ dict(keyword_id=4, item_id=1),
+ dict(keyword_id=6, item_id=1),
+ dict(keyword_id=5, item_id=2),
+ dict(keyword_id=3, item_id=3),
+ dict(keyword_id=4, item_id=3),
+ dict(keyword_id=7, item_id=2),
+ dict(keyword_id=6, item_id=3)
+ )
+
+class BaseObject(object):
+ def __repr__(self):
+ return "%s(%s)" % (self.__class__.__name__, ",".join("%s=%s" % (k, repr(v)) for k, v in self.__dict__.iteritems() if k[0] != '_'))
+
+class User(BaseObject):
+ def __init__(self):
+ self.user_id = None
+
+class Address(BaseObject):
+ pass
+
+class Order(BaseObject):
+ def __init__(self):
+ self.isopen=0
+
+class Item(BaseObject):
+ pass
+
+class Keyword(BaseObject):
+ pass
+
+user_result = [{'user_id' : 7}, {'user_id' : 8}, {'user_id' : 9}]
+
+user_address_result = [
+{'user_id' : 7, 'addresses' : (Address, [{'address_id' : 1}])},
+{'user_id' : 8, 'addresses' : (Address, [{'address_id' : 2}, {'address_id' : 3}, {'address_id' : 4}])},
+{'user_id' : 9, 'addresses' : (Address, [])}
+]
+
+user_address_orders_result = [{'user_id' : 7,
+ 'addresses' : (Address, [{'address_id' : 1}]),
+ 'orders' : (Order, [{'order_id' : 1}, {'order_id' : 3},{'order_id' : 5},])
+ },
+ {'user_id' : 8,
+ 'addresses' : (Address, [{'address_id' : 2}, {'address_id' : 3}, {'address_id' : 4}]),
+ 'orders' : (Order, [])
+ },
+ {'user_id' : 9,
+ 'addresses' : (Address, []),
+ 'orders' : (Order, [{'order_id' : 2},{'order_id' : 4}])
+}]
+
+user_all_result = [
+{'user_id' : 7,
+ 'addresses' : (Address, [{'address_id' : 1}]),
+ 'orders' : (Order, [
+ {'order_id' : 1, 'items': (Item, [])},
+ {'order_id' : 3, 'items': (Item, [{'item_id':3, 'item_name':'item 3'}, {'item_id':4, 'item_name':'item 4'}, {'item_id':5, 'item_name':'item 5'}])},
+ {'order_id' : 5, 'items': (Item, [])},
+ ])
+},
+{'user_id' : 8,
+ 'addresses' : (Address, [{'address_id' : 2}, {'address_id' : 3}, {'address_id' : 4}]),
+ 'orders' : (Order, [])
+},
+{'user_id' : 9,
+ 'addresses' : (Address, []),
+ 'orders' : (Order, [
+ {'order_id' : 2, 'items': (Item, [{'item_id':1, 'item_name':'item 1'}, {'item_id':2, 'item_name':'item 2'}])},
+ {'order_id' : 4, 'items': (Item, [])}
+ ])
+}]
+
+item_keyword_result = [
+{'item_id' : 1, 'keywords' : (Keyword, [{'keyword_id' : 2, 'name':'red'}, {'keyword_id' : 4, 'name':'big'}, {'keyword_id' : 6, 'name':'round'}])},
+{'item_id' : 2, 'keywords' : (Keyword, [{'keyword_id' : 2, 'name':'red'}, {'keyword_id' : 5, 'name':'small'}, {'keyword_id' : 7, 'name':'square'}])},
+{'item_id' : 3, 'keywords' : (Keyword, [{'keyword_id' : 3,'name':'green'}, {'keyword_id' : 4,'name':'big'}, {'keyword_id' : 6,'name':'round'}])},
+{'item_id' : 4, 'keywords' : (Keyword, [])},
+{'item_id' : 5, 'keywords' : (Keyword, [])}
+]
+
+order_result = [
+{'order_id' : 1, 'items':(Item, [])},
+{'order_id' : 2, 'items':(Item, [
+ {'item_id' : 1, 'keywords' : (Keyword, [{'keyword_id' : 2}, {'keyword_id' : 4}, {'keyword_id' : 6}])},
+ {'item_id' : 2, 'keywords' : (Keyword, [{'keyword_id' : 2, 'name':'red'}, {'keyword_id' : 5, 'name':'small'}, {'keyword_id' : 7, 'name':'square'}])},
+ ])},
+{'order_id' : 3, 'items':(Item, [
+ {'item_id' : 3, 'keywords' : (Keyword, [{'keyword_id' : 3,'name':'green'}, {'keyword_id' : 4,'name':'big'}, {'keyword_id' : 6,'name':'round'}])},
+ {'item_id' : 4, 'keywords' : (Keyword, [])},
+ {'item_id' : 5, 'keywords' : (Keyword, [])}
+ ])},
+{'order_id' : 4, 'items':(Item, [])},
+{'order_id' : 5, 'items':(Item, [])},
+]
+