mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-05-18 22:52:01 -04:00
Support DEFAULT VALUES and VALUES(DEFAULT) individually
Fixed regression where the introduction of the INSERT syntax "INSERT... VALUES (DEFAULT)" was not supported on some backends that do however support "INSERT..DEFAULT VALUES", including SQLite. The two syntaxes are now each individually supported or non-supported for each dialect, for example MySQL supports "VALUES (DEFAULT)" but not "DEFAULT VALUES". Support for Oracle is still not enabled as there are unresolved issues in using RETURNING at the same time. Fixes: #6254 Change-Id: I47959bc826e3d9d2396ccfa290eb084841b02e77
This commit is contained in:
@@ -2,7 +2,6 @@ import datetime
|
||||
import itertools
|
||||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import Boolean
|
||||
from sqlalchemy import cast
|
||||
from sqlalchemy import DateTime
|
||||
from sqlalchemy import exc
|
||||
@@ -1062,25 +1061,6 @@ class PKIncrementTest(fixtures.TablesTest):
|
||||
)
|
||||
|
||||
|
||||
class EmptyInsertTest(fixtures.TestBase):
|
||||
__backend__ = True
|
||||
|
||||
@testing.fails_on("oracle", "FIXME: unknown")
|
||||
def test_empty_insert(self, metadata, connection):
|
||||
t1 = Table(
|
||||
"t1",
|
||||
metadata,
|
||||
Column("is_true", Boolean, server_default=("1")),
|
||||
)
|
||||
metadata.create_all(connection)
|
||||
connection.execute(t1.insert())
|
||||
eq_(
|
||||
1,
|
||||
connection.scalar(select(func.count(text("*"))).select_from(t1)),
|
||||
)
|
||||
eq_(True, connection.scalar(t1.select()))
|
||||
|
||||
|
||||
class AutoIncrementTest(fixtures.TestBase):
|
||||
|
||||
__backend__ = True
|
||||
@@ -1088,7 +1068,11 @@ class AutoIncrementTest(fixtures.TestBase):
|
||||
@testing.requires.empty_inserts
|
||||
def test_autoincrement_single_col(self, metadata, connection):
|
||||
single = Table(
|
||||
"single", self.metadata, Column("id", Integer, primary_key=True)
|
||||
"single",
|
||||
self.metadata,
|
||||
Column(
|
||||
"id", Integer, primary_key=True, test_needs_autoincrement=True
|
||||
),
|
||||
)
|
||||
self.metadata.create_all(connection)
|
||||
|
||||
|
||||
+11
-1
@@ -951,7 +951,9 @@ class EmptyTest(_InsertTestBase, fixtures.TablesTest, AssertsCompiledSQL):
|
||||
table1 = self.tables.mytable
|
||||
|
||||
dialect = default.DefaultDialect()
|
||||
dialect.supports_empty_insert = dialect.supports_default_values = True
|
||||
dialect.supports_empty_insert = False
|
||||
dialect.supports_default_values = True
|
||||
dialect.supports_default_metavalue = True
|
||||
|
||||
stmt = table1.insert().values({})
|
||||
self.assert_compile(
|
||||
@@ -961,6 +963,14 @@ class EmptyTest(_InsertTestBase, fixtures.TablesTest, AssertsCompiledSQL):
|
||||
for_executemany=True,
|
||||
)
|
||||
|
||||
dialect.supports_default_metavalue = False
|
||||
self.assert_compile(
|
||||
stmt,
|
||||
"INSERT INTO mytable DEFAULT VALUES",
|
||||
dialect=dialect,
|
||||
for_executemany=True,
|
||||
)
|
||||
|
||||
def test_supports_empty_insert_false(self):
|
||||
table1 = self.tables.mytable
|
||||
|
||||
|
||||
Reference in New Issue
Block a user