- Corrected the "has_sequence" query to take current schema,
or explicit sequence-stated schema, into account.
[ticket:1576]
+
+ - Fixed the behavior of extract() to apply operator
+ precedence rules to the "::" operator when applying
+ the "timestamp" cast - ensures proper parenthesization.
+ [ticket:1611]
- mssql
- Changed the name of TrustedConnection to
def visit_extract(self, extract, **kwargs):
field = self.extract_map.get(extract.field, extract.field)
- return "EXTRACT(%s FROM %s::timestamp)" % (
- field, self.process(extract.expr))
+ return "EXTRACT(%s FROM %s)" % (
+ field, self.process(extract.expr.op('::')(sql.literal_column('timestamp'))))
class PGSchemaGenerator(compiler.SchemaGenerator):
for field in 'year', 'month', 'day':
self.assert_compile(
select([extract(field, t.c.col1)]),
- "SELECT EXTRACT(%s FROM t.col1::timestamp) AS anon_1 "
+ "SELECT EXTRACT(%s FROM t.col1 :: timestamp) AS anon_1 "
"FROM t" % field)
+ for field in 'year', 'month', 'day':
+ self.assert_compile(
+ select([extract(field, func.timestamp() - datetime.timedelta(days =5))]),
+ "SELECT EXTRACT(%s FROM (timestamp() - %%(timestamp_1)s) :: timestamp) AS anon_1"
+ % field)
class ReturningTest(TestBase, AssertsExecutionResults):
__only_on__ = 'postgres'
self.assert_((subject.c['id$']==referer.c.ref).compare(subject.join(referer).onclause))
finally:
meta1.drop_all()
-
+
+ def test_extract(self):
+ for field, exp in (
+ ('year', 2009),
+ ('month', 11),
+ ('day', 10),
+ ):
+ r = testing.db.execute(
+ select([extract(field, datetime.datetime(2009, 11, 15, 12, 15, 35) - datetime.timedelta(days =5))])
+ ).scalar()
+ eq_(r, exp)
+
def test_checksfor_sequence(self):
meta1 = MetaData(testing.db)
t = Table('mytable', meta1,