summaryrefslogtreecommitdiff
path: root/test/sql/test_defaults.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/sql/test_defaults.py')
-rw-r--r--test/sql/test_defaults.py100
1 files changed, 89 insertions, 11 deletions
diff --git a/test/sql/test_defaults.py b/test/sql/test_defaults.py
index 10e557b76..c154daa22 100644
--- a/test/sql/test_defaults.py
+++ b/test/sql/test_defaults.py
@@ -1,7 +1,8 @@
-from sqlalchemy.testing import eq_, assert_raises_message, assert_raises
+from sqlalchemy.testing import eq_, assert_raises_message, \
+ assert_raises, AssertsCompiledSQL
import datetime
-from sqlalchemy.schema import CreateSequence, DropSequence
-from sqlalchemy.sql import select, text
+from sqlalchemy.schema import CreateSequence, DropSequence, CreateTable
+from sqlalchemy.sql import select, text, literal_column
import sqlalchemy as sa
from sqlalchemy import testing
from sqlalchemy.testing import engines
@@ -19,6 +20,72 @@ import itertools
t = f = f2 = ts = currenttime = metadata = default_generator = None
+class DDLTest(fixtures.TestBase, AssertsCompiledSQL):
+ __dialect__ = 'default'
+
+ def test_string(self):
+ m = MetaData()
+ t = Table('t', m, Column('x', Integer, server_default='5'))
+ self.assert_compile(
+ CreateTable(t),
+ "CREATE TABLE t (x INTEGER DEFAULT '5')"
+ )
+
+ def test_text(self):
+ m = MetaData()
+ t = Table('t', m, Column('x', Integer, server_default=text('5 + 8')))
+ self.assert_compile(
+ CreateTable(t),
+ "CREATE TABLE t (x INTEGER DEFAULT 5 + 8)"
+ )
+
+ def test_text_literal_binds(self):
+ m = MetaData()
+ t = Table(
+ 't', m,
+ Column(
+ 'x', Integer, server_default=text('q + :x1').bindparams(x1=7)))
+ self.assert_compile(
+ CreateTable(t),
+ "CREATE TABLE t (x INTEGER DEFAULT q + 7)"
+ )
+
+ def test_sqlexpr(self):
+ m = MetaData()
+ t = Table('t', m, Column(
+ 'x', Integer,
+ server_default=literal_column('a') + literal_column('b'))
+ )
+ self.assert_compile(
+ CreateTable(t),
+ "CREATE TABLE t (x INTEGER DEFAULT a + b)"
+ )
+
+ def test_literal_binds_plain(self):
+ m = MetaData()
+ t = Table('t', m, Column(
+ 'x', Integer,
+ server_default=literal('a') + literal('b'))
+ )
+ self.assert_compile(
+ CreateTable(t),
+ "CREATE TABLE t (x INTEGER DEFAULT 'a' || 'b')"
+ )
+
+ def test_literal_binds_pgarray(self):
+ from sqlalchemy.dialects.postgresql import ARRAY, array
+ m = MetaData()
+ t = Table('t', m, Column(
+ 'x', ARRAY(Integer),
+ server_default=array([1, 2, 3]))
+ )
+ self.assert_compile(
+ CreateTable(t),
+ "CREATE TABLE t (x INTEGER[] DEFAULT ARRAY[1, 2, 3])",
+ dialect='postgresql'
+ )
+
+
class DefaultTest(fixtures.TestBase):
__backend__ = True
@@ -66,7 +133,7 @@ class DefaultTest(fixtures.TestBase):
[
func.trunc(
func.sysdate(), sa.literal_column("'DAY'"),
- type_=sa.Date).label('today')]))
+ type_=sa.Date)]))
assert isinstance(ts, datetime.date) and not isinstance(
ts, datetime.datetime)
f = sa.select([func.length('abcdef')], bind=db).scalar()
@@ -336,13 +403,7 @@ class DefaultTest(fixtures.TestBase):
[(54, 'imthedefault', f, ts, ts, ctexec, True, False,
12, today, None, 'hi')])
- @testing.fails_on('firebird', 'Data type unknown')
def test_insertmany(self):
- # MySQL-Python 1.2.2 breaks functions in execute_many :(
- if (testing.against('mysql+mysqldb') and
- testing.db.dialect.dbapi.version_info[:3] == (1, 2, 2)):
- return
-
t.insert().execute({}, {}, {})
ctexec = currenttime.scalar()
@@ -356,6 +417,22 @@ class DefaultTest(fixtures.TestBase):
(53, 'imthedefault', f, ts, ts, ctexec, True, False,
12, today, 'py', 'hi')])
+ @testing.requires.multivalues_inserts
+ def test_insert_multivalues(self):
+
+ t.insert().values([{}, {}, {}]).execute()
+
+ ctexec = currenttime.scalar()
+ l = t.select().execute()
+ today = datetime.date.today()
+ eq_(l.fetchall(),
+ [(51, 'imthedefault', f, ts, ts, ctexec, True, False,
+ 12, today, 'py', 'hi'),
+ (52, 'imthedefault', f, ts, ts, ctexec, True, False,
+ 12, today, 'py', 'hi'),
+ (53, 'imthedefault', f, ts, ts, ctexec, True, False,
+ 12, today, 'py', 'hi')])
+
def test_no_embed_in_sql(self):
"""Using a DefaultGenerator, Sequence, DefaultClause
in the columns, where clause of a select, or in the values
@@ -368,7 +445,8 @@ class DefaultTest(fixtures.TestBase):
):
assert_raises_message(
sa.exc.ArgumentError,
- "SQL expression object or string expected.",
+ "SQL expression object or string expected, got object of type "
+ "<.* 'list'> instead",
t.select, [const]
)
assert_raises_message(