diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-02-09 14:58:26 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-02-09 14:58:26 -0500 |
| commit | 81aa5b376eb80793e3734eb420b82872d2941d6f (patch) | |
| tree | 4da2b193cdf4197580cf05e7794f1dc723b58ad0 /test/sql/test_defaults.py | |
| parent | 53da71fcc2e82c1e6f7b174436043c06257af927 (diff) | |
| download | sqlalchemy-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.py | 73 |
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 |
