summaryrefslogtreecommitdiff
path: root/test/dialect/postgresql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-12-27 18:25:57 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2013-12-27 18:25:57 -0500
commit2104d0ba2d612a26d363a3049d5e49efe4284e15 (patch)
tree94878393dfd1d689dd5173e86c575af4b44c5261 /test/dialect/postgresql
parentde786a4208e621229769a8fb1f876f358dc4e70e (diff)
downloadsqlalchemy-2104d0ba2d612a26d363a3049d5e49efe4284e15.tar.gz
- rework the JSON expression system so that "astext" is called *after*
the indexing. this is for more natural operation. - also add cast() to the JSON expression to complement astext. This integrates the CAST call which will be needed frequently. Part of [ticket:2687]. - it's a little unclear how more advanced unicode attribute-access is going to go, some quick attempts at testing yielded strange error messages from psycopg2. - do other cross linking as mentioned in [ticket:2687].
Diffstat (limited to 'test/dialect/postgresql')
-rw-r--r--test/dialect/postgresql/test_types.py32
1 files changed, 25 insertions, 7 deletions
diff --git a/test/dialect/postgresql/test_types.py b/test/dialect/postgresql/test_types.py
index bcb3e1ebb..ba4b63e1a 100644
--- a/test/dialect/postgresql/test_types.py
+++ b/test/dialect/postgresql/test_types.py
@@ -1715,13 +1715,20 @@ class JSONTest(AssertsCompiledSQL, fixtures.TestBase):
def test_where_getitem_as_text(self):
self._test_where(
- self.jsoncol.astext['bar'] == None,
+ self.jsoncol['bar'].astext == None,
"(test_table.test_column ->> %(test_column_1)s) IS NULL"
)
+ def test_where_getitem_as_cast(self):
+ self._test_where(
+ self.jsoncol['bar'].cast(Integer) == 5,
+ "CAST(test_table.test_column ->> %(test_column_1)s AS INTEGER) "
+ "= %(param_1)s"
+ )
+
def test_where_path_as_text(self):
self._test_where(
- self.jsoncol.astext[("foo", 1)] == None,
+ self.jsoncol[("foo", 1)].astext == None,
"(test_table.test_column #>> %(test_column_1)s) IS NULL"
)
@@ -1752,7 +1759,7 @@ class JSONRoundTripTest(fixtures.TablesTest):
{'name': 'r2', 'data': {"k1": "r2v1", "k2": "r2v2"}},
{'name': 'r3', 'data': {"k1": "r3v1", "k2": "r3v2"}},
{'name': 'r4', 'data': {"k1": "r4v1", "k2": "r4v2"}},
- {'name': 'r5', 'data': {"k1": "r5v1", "k2": "r5v2"}},
+ {'name': 'r5', 'data': {"k1": "r5v1", "k2": "r5v2", "k3": 5}},
)
def _assert_data(self, compare):
@@ -1875,7 +1882,7 @@ class JSONRoundTripTest(fixtures.TablesTest):
data_table = self.tables.data_table
result = engine.execute(
select([data_table.c.data]).where(
- data_table.c.data.astext[('k1',)] == 'r3v1'
+ data_table.c.data[('k1',)].astext == 'r3v1'
)
).first()
eq_(result, ({'k1': 'r3v1', 'k2': 'r3v2'},))
@@ -1885,15 +1892,25 @@ class JSONRoundTripTest(fixtures.TablesTest):
self._fixture_data(engine)
data_table = self.tables.data_table
result = engine.execute(
- select([data_table.c.data.astext['k1']])
+ select([data_table.c.data['k1'].astext])
).first()
- assert isinstance(result[0], basestring)
+ assert isinstance(result[0], util.text_type)
+
+ def test_query_returned_as_int(self):
+ engine = testing.db
+ self._fixture_data(engine)
+ data_table = self.tables.data_table
+ result = engine.execute(
+ select([data_table.c.data['k3'].cast(Integer)]).where(
+ data_table.c.name == 'r5')
+ ).first()
+ assert isinstance(result[0], int)
def _test_criterion(self, engine):
data_table = self.tables.data_table
result = engine.execute(
select([data_table.c.data]).where(
- data_table.c.data.astext['k1'] == 'r3v1'
+ data_table.c.data['k1'].astext == 'r3v1'
)
).first()
eq_(result, ({'k1': 'r3v1', 'k2': 'r3v2'},))
@@ -1943,6 +1960,7 @@ class JSONRoundTripTest(fixtures.TablesTest):
},
)
+
def test_unicode_round_trip_python(self):
engine = self._non_native_engine()
self._test_unicode_round_trip(engine)