]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixed #4474 - function as defaults for SQLite columns requires brackets 4475/head
authorBartlomiej Biernacki <pax0r@o2.pl>
Wed, 30 Jan 2019 15:57:06 +0000 (10:57 -0500)
committerBartlomiej Biernacki <pax0r@o2.pl>
Thu, 31 Jan 2019 08:24:24 +0000 (09:24 +0100)
This pull request fixes #4474

Closes: #4475
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4475
Pull-request-sha: 05a8f82bc0d1f27370f6db0c47dc2c7d4a13b5e6

Change-Id: I888c69bfba5a5ab8ffa420f512557ac311a36b31

lib/sqlalchemy/dialects/sqlite/base.py
test/dialect/test_sqlite.py

index 10c8d946ecd46359e1a19a66df3c05c22c72d2c1..63e927386566edd276e62c50b568b0e9a0ad3871 100644 (file)
@@ -468,15 +468,16 @@ When using the per-:class:`.Engine` execution option, note that
 import datetime
 import re
 
-from ... import exc
-from ... import processors
-from ... import schema as sa_schema
-from ... import sql
-from ... import types as sqltypes
-from ... import util
-from ...engine import default
-from ...engine import reflection
-from ...sql import compiler
+from sqlalchemy import exc
+from sqlalchemy import processors
+from sqlalchemy import schema as sa_schema
+from sqlalchemy import sql
+from sqlalchemy import types as sqltypes
+from sqlalchemy import util
+from sqlalchemy.engine import default
+from sqlalchemy.engine import reflection
+from sqlalchemy.sql import compiler
+from sqlalchemy.sql import functions
 from ...types import BLOB  # noqa
 from ...types import BOOLEAN  # noqa
 from ...types import CHAR  # noqa
@@ -908,6 +909,8 @@ class SQLiteDDLCompiler(compiler.DDLCompiler):
         colspec = self.preparer.format_column(column) + " " + coltype
         default = self.get_column_default_string(column)
         if default is not None:
+            if isinstance(column.server_default.arg, functions.Function):
+                default = '(' + default + ')'
             colspec += " DEFAULT " + default
 
         if not column.nullable:
index 0891ac9d61f46a5925c7b30630f179b996c67b46..c7d6ce8353e662738d85ddff5e62f21c4eafb1c6 100644 (file)
@@ -3,6 +3,7 @@
 """SQLite-specific tests."""
 import datetime
 import os
+import sqlite3
 
 from sqlalchemy import and_
 from sqlalchemy import bindparam
@@ -462,6 +463,21 @@ class DefaultsTest(fixtures.TestBase, AssertsCompiledSQL):
             [(False,), (True,)],
         )
 
+    @testing.provide_metadata
+    def test_function_default(self):
+        t = Table(
+            "t",
+            self.metadata,
+            Column("x", String, server_default=func.sqlite_version()),
+        )
+        t.create(testing.db)
+        testing.db.execute(t.insert())
+        testing.db.execute(t.insert().values(x="Test"))
+        eq_(
+            testing.db.execute(t.select().order_by(t.c.x)).fetchall(),
+            [(sqlite3.sqlite_version,), ("Test",)],
+        )
+
     def test_old_style_default(self):
         """test non-quoted integer value on older sqlite pragma"""