summaryrefslogtreecommitdiff
path: root/test/dialect/postgresql/test_reflection.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2017-04-05 12:55:39 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2017-04-05 13:55:10 -0400
commitb39b6023c57b25c00bbed946a83bc44c36d52940 (patch)
treec6de96541c9c79a076091b66a53dcecfbcd8b965 /test/dialect/postgresql/test_reflection.py
parent06a90199c56b612dec0c318fbc775ad4edc091a5 (diff)
downloadsqlalchemy-b39b6023c57b25c00bbed946a83bc44c36d52940.tar.gz
Support Postgresql INTERVAL fields spec/reflection
Added support for all possible "fields" identifiers when reflecting the Postgresql ``INTERVAL`` datatype, e.g. "YEAR", "MONTH", "DAY TO MINUTE", etc.. In addition, the :class:`.postgresql.INTERVAL` datatype itself now includes a new parameter :paramref:`.postgresql.INTERVAL.fields` where these qualifiers can be specified; the qualifier is also reflected back into the resulting datatype upon reflection / inspection. Change-Id: I33816e68c533b023e0632db6f4e73fefd2de4721 Fixes: #3959
Diffstat (limited to 'test/dialect/postgresql/test_reflection.py')
-rw-r--r--test/dialect/postgresql/test_reflection.py60
1 files changed, 59 insertions, 1 deletions
diff --git a/test/dialect/postgresql/test_reflection.py b/test/dialect/postgresql/test_reflection.py
index e02c8915d..a1942ab30 100644
--- a/test/dialect/postgresql/test_reflection.py
+++ b/test/dialect/postgresql/test_reflection.py
@@ -13,7 +13,7 @@ from sqlalchemy import Table, Column, MetaData, Integer, String, \
from sqlalchemy import exc
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import base as postgresql
-from sqlalchemy.dialects.postgresql import ARRAY
+from sqlalchemy.dialects.postgresql import ARRAY, INTERVAL
import re
@@ -1069,3 +1069,61 @@ class CustomTypeReflectionTest(fixtures.TestBase):
dialect.ischema_names = dialect.ischema_names.copy()
dialect.ischema_names['my_custom_type'] = self.CustomType
self._assert_reflected(dialect)
+
+
+class IntervalReflectionTest(fixtures.TestBase):
+ __only_on__ = 'postgresql'
+ __backend__ = True
+
+ def test_interval_types(self):
+ for sym in [
+ "YEAR",
+ "MONTH",
+ "DAY",
+ "HOUR",
+ "MINUTE",
+ "SECOND",
+ "YEAR TO MONTH",
+ "DAY TO HOUR",
+ "DAY TO MINUTE",
+ "DAY TO SECOND",
+ "HOUR TO MINUTE",
+ "HOUR TO SECOND",
+ "MINUTE TO SECOND",
+ ]:
+ self._test_interval_symbol(sym)
+
+ @testing.provide_metadata
+ def _test_interval_symbol(self, sym):
+ t = Table(
+ 'i_test', self.metadata,
+ Column('id', Integer, primary_key=True),
+ Column('data1', INTERVAL(fields=sym)),
+ )
+ t.create(testing.db)
+
+ columns = {
+ rec['name']: rec
+ for rec in inspect(testing.db).get_columns("i_test")
+ }
+ assert isinstance(columns["data1"]["type"], INTERVAL)
+ eq_(columns["data1"]["type"].fields, sym.lower())
+ eq_(columns["data1"]["type"].precision, None)
+
+ @testing.provide_metadata
+ def test_interval_precision(self):
+ t = Table(
+ 'i_test', self.metadata,
+ Column('id', Integer, primary_key=True),
+ Column('data1', INTERVAL(precision=6)),
+ )
+ t.create(testing.db)
+
+ columns = {
+ rec['name']: rec
+ for rec in inspect(testing.db).get_columns("i_test")
+ }
+ assert isinstance(columns["data1"]["type"], INTERVAL)
+ eq_(columns["data1"]["type"].fields, None)
+ eq_(columns["data1"]["type"].precision, 6)
+