From: Guillaume DOUMENC Date: Tue, 12 Jan 2016 04:46:32 +0000 (+0000) Subject: Remove quote on first DATEPART paramater X-Git-Tag: rel_1_0_12~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc733bcea64a45f8aae3fa6f20392c8a41278ce1;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Remove quote on first DATEPART paramater (cherry picked from commit c4f415d97988bc8a8d901b150bfb67571f29712e) - changelog for pr bitbucket:70, fixes #3624 (cherry picked from commit 215167d8d38a381d27c8448f5c6e50c70b9ba0cc) --- diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst index 4d017cfb15..c465c73ed1 100644 --- a/doc/build/changelog/changelog_10.rst +++ b/doc/build/changelog/changelog_10.rst @@ -19,6 +19,15 @@ :version: 1.0.12 :released: + .. change:: + :tags: bug, mssql + :tickets: 3624 + :pullreq: bitbucket:70 + + Fixed the syntax of the :func:`.extract` function when used on + MSSQL against a datetime value; the quotes around the keyword + are removed. Pull request courtesy Guillaume Doumenc. + .. change:: :tags: bug, orm :tickets: 3623 diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index f3d20b3aa8..8fdb8ee877 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -1181,7 +1181,7 @@ class MSSQLCompiler(compiler.SQLCompiler): def visit_extract(self, extract, **kw): field = self.extract_map.get(extract.field, extract.field) - return 'DATEPART("%s", %s)' % \ + return 'DATEPART(%s, %s)' % \ (field, self.process(extract.expr, **kw)) def visit_savepoint(self, savepoint_stmt): diff --git a/test/dialect/mssql/test_types.py b/test/dialect/mssql/test_types.py index a3dc6a91df..68a6908520 100644 --- a/test/dialect/mssql/test_types.py +++ b/test/dialect/mssql/test_types.py @@ -64,6 +64,18 @@ class MSDateTypeTest(fixtures.TestBase): result_processor, 'abc' ) + def test_extract(self): + from sqlalchemy import extract + fivedaysago = datetime.datetime.now() \ + - datetime.timedelta(days=5) + for field, exp in ('year', fivedaysago.year), \ + ('month', fivedaysago.month), ('day', fivedaysago.day): + r = testing.db.execute( + select([ + extract(field, fivedaysago)]) + ).scalar() + eq_(r, exp) + class TypeDDLTest(fixtures.TestBase):