diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-06-05 17:25:51 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-06-05 17:25:51 +0000 |
commit | 120dcee5a71187d4bebfe50aedbbefb09184cac1 (patch) | |
tree | f2a090a510c8df405d0b1bef2936bafa3511be07 /test/sql/defaults.py | |
parent | f8314ef9ff08af5f104731de402d6e6bd8c043f3 (diff) | |
download | sqlalchemy-120dcee5a71187d4bebfe50aedbbefb09184cac1.tar.gz |
reorganized unit tests into subdirectories
Diffstat (limited to 'test/sql/defaults.py')
-rw-r--r-- | test/sql/defaults.py | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/test/sql/defaults.py b/test/sql/defaults.py new file mode 100644 index 000000000..57b4388a1 --- /dev/null +++ b/test/sql/defaults.py @@ -0,0 +1,168 @@ +from testbase import PersistTest +import sqlalchemy.util as util +import unittest, sys, os +import sqlalchemy.schema as schema +import testbase +from sqlalchemy import * +import sqlalchemy + +db = testbase.db + +class DefaultTest(PersistTest): + + def setUpAll(self): + global t, f, f2, ts, currenttime + x = {'x':50} + def mydefault(): + x['x'] += 1 + return x['x'] + + use_function_defaults = db.engine.name == 'postgres' or db.engine.name == 'oracle' + is_oracle = db.engine.name == 'oracle' + + # select "count(1)" returns different results on different DBs + # also correct for "current_date" compatible as column default, value differences + currenttime = func.current_date(type=Date, engine=db); + if is_oracle: + ts = db.func.trunc(func.sysdate(), column("'DAY'")).scalar() + f = select([func.count(1) + 5], engine=db).scalar() + f2 = select([func.count(1) + 14], engine=db).scalar() + # TODO: engine propigation across nested functions not working + currenttime = func.trunc(currenttime, column("'DAY'"), engine=db) + def1 = currenttime + def2 = func.trunc(text("sysdate"), column("'DAY'")) + deftype = Date + elif use_function_defaults: + f = select([func.count(1) + 5], engine=db).scalar() + f2 = select([func.count(1) + 14], engine=db).scalar() + def1 = currenttime + def2 = text("current_date") + deftype = Date + ts = db.func.current_date().scalar() + else: + f = select([func.count(1) + 5], engine=db).scalar() + f2 = select([func.count(1) + 14], engine=db).scalar() + def1 = def2 = "3" + ts = 3 + deftype = Integer + + t = Table('default_test1', db, + # python function + Column('col1', Integer, primary_key=True, default=mydefault), + + # python literal + Column('col2', String(20), default="imthedefault", onupdate="im the update"), + + # preexecute expression + Column('col3', Integer, default=func.count(1) + 5, onupdate=func.count(1) + 14), + + # SQL-side default from sql expression + Column('col4', deftype, PassiveDefault(def1)), + + # SQL-side default from literal expression + Column('col5', deftype, PassiveDefault(def2)), + + # preexecute + update timestamp + Column('col6', Date, default=currenttime, onupdate=currenttime) + ) + t.create() + + def tearDownAll(self): + t.drop() + + def tearDown(self): + t.delete().execute() + + def teststandalone(self): + c = db.engine.contextual_connect() + x = c.execute(t.c.col1.default) + y = t.c.col2.default.execute() + z = c.execute(t.c.col3.default) + self.assert_(50 <= x <= 57) + self.assert_(y == 'imthedefault') + self.assert_(z == f) + # mysql/other db's return 0 or 1 for count(1) + self.assert_(5 <= z <= 6) + + def testinsert(self): + r = t.insert().execute() + self.assert_(r.lastrow_has_defaults()) + t.insert().execute() + t.insert().execute() + + ctexec = currenttime.scalar() + self.echo("Currenttime "+ repr(ctexec)) + l = t.select().execute() + self.assert_(l.fetchall() == [(51, 'imthedefault', f, ts, ts, ctexec), (52, 'imthedefault', f, ts, ts, ctexec), (53, 'imthedefault', f, ts, ts, ctexec)]) + + def testinsertvalues(self): + t.insert(values={'col3':50}).execute() + l = t.select().execute() + self.assert_(l.fetchone()['col3'] == 50) + + + def testupdate(self): + r = t.insert().execute() + pk = r.last_inserted_ids()[0] + t.update(t.c.col1==pk).execute(col4=None, col5=None) + ctexec = currenttime.scalar() + self.echo("Currenttime "+ repr(ctexec)) + l = t.select(t.c.col1==pk).execute() + l = l.fetchone() + self.assert_(l == (pk, 'im the update', f2, None, None, ctexec)) + # mysql/other db's return 0 or 1 for count(1) + self.assert_(14 <= f2 <= 15) + + def testupdatevalues(self): + r = t.insert().execute() + pk = r.last_inserted_ids()[0] + t.update(t.c.col1==pk, values={'col3': 55}).execute() + l = t.select(t.c.col1==pk).execute() + l = l.fetchone() + self.assert_(l['col3'] == 55) + +class SequenceTest(PersistTest): + + def setUpAll(self): + if testbase.db.engine.name != 'postgres' and testbase.db.engine.name != 'oracle': + return + global cartitems + cartitems = Table("cartitems", db, + Column("cart_id", Integer, Sequence('cart_id_seq'), primary_key=True), + Column("description", String(40)), + Column("createdate", DateTime()) + ) + + cartitems.create() + + @testbase.supported('postgres', 'oracle') + def testsequence(self): + cartitems.insert().execute(description='hi') + cartitems.insert().execute(description='there') + cartitems.insert().execute(description='lala') + + cartitems.select().execute().fetchall() + + + @testbase.supported('postgres', 'oracle') + def teststandalone(self): + s = Sequence("my_sequence", metadata=testbase.db) + s.create() + try: + x = s.execute() + self.assert_(x == 1) + finally: + s.drop() + + @testbase.supported('postgres', 'oracle') + def teststandalone2(self): + x = cartitems.c.cart_id.sequence.execute() + self.assert_(1 <= x <= 4) + + def tearDownAll(self): + if testbase.db.engine.name != 'postgres' and testbase.db.engine.name != 'oracle': + return + cartitems.drop() + +if __name__ == "__main__": + testbase.main() |