diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-04-05 12:55:39 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-04-05 13:55:10 -0400 |
commit | b39b6023c57b25c00bbed946a83bc44c36d52940 (patch) | |
tree | c6de96541c9c79a076091b66a53dcecfbcd8b965 /test/dialect/postgresql/test_reflection.py | |
parent | 06a90199c56b612dec0c318fbc775ad4edc091a5 (diff) | |
download | sqlalchemy-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.py | 60 |
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) + |