summaryrefslogtreecommitdiff
path: root/test/sql/test_defaults.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-02-09 14:58:26 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2015-02-09 14:58:26 -0500
commit81aa5b376eb80793e3734eb420b82872d2941d6f (patch)
tree4da2b193cdf4197580cf05e7794f1dc723b58ad0 /test/sql/test_defaults.py
parent53da71fcc2e82c1e6f7b174436043c06257af927 (diff)
downloadsqlalchemy-81aa5b376eb80793e3734eb420b82872d2941d6f.tar.gz
- Literal values within a :class:`.DefaultClause`, which is invoked
when using the :paramref:`.Column.server_default` parameter, will now be rendered using the "inline" compiler, so that they are rendered as-is, rather than as bound parameters. fixes #3087
Diffstat (limited to 'test/sql/test_defaults.py')
-rw-r--r--test/sql/test_defaults.py73
1 files changed, 70 insertions, 3 deletions
diff --git a/test/sql/test_defaults.py b/test/sql/test_defaults.py
index 48505dd8c..ecf3dcc4d 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