Skip to content

Commit db9de17

Browse files
author
Ricardo Piro-Rael
committed
Add JSON access query support
1 parent e807fed commit db9de17

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

base.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,12 @@ def visit_external_stage(self, external_stage, **kw):
288288
external_stage.path,
289289
external_stage.file_format)
290290

291+
def visit_json_getitem_op_binary(self, binary, operator, **kw):
292+
return '%s[%s]' % (
293+
self.process(binary.left, **kw),
294+
self.process(binary.right, **kw)
295+
)
296+
291297
def delete_extra_from_clause(self, delete_stmt, from_table,
292298
extra_froms, from_hints, **kw):
293299
return "USING " + ', '.join(

test/test_compiler.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
#!/usr/bin/env python
22
# -*- coding: utf-8 -*-
33

4-
from sqlalchemy import Integer, String, and_, select
4+
from sqlalchemy import Integer, JSON, String, and_, select
55
from sqlalchemy.sql import column, quoted_name, table
66
from sqlalchemy.testing import AssertsCompiledSQL
77

88
table1 = table(
99
'table1',
1010
column('id', Integer),
1111
column('name', String),
12-
column('value', Integer)
12+
column('value', Integer),
13+
column('metadata', JSON)
1314
)
1415

1516
table2 = table(
@@ -19,7 +20,6 @@
1920
column('value', Integer)
2021
)
2122

22-
2323
class TestSnowflakeCompiler(AssertsCompiledSQL):
2424
__dialect__ = "snowflake"
2525

@@ -55,6 +55,16 @@ def test_multi_table_update(self):
5555
)
5656

5757

58+
def test_json_getitem(self):
59+
statement = table1.query \
60+
.with_entities(table1.metadata['size'].label('size')) \
61+
.statement
62+
self.assert_compile(
63+
statement,
64+
"SELECT data['size'] AS size FROM table1"
65+
)
66+
67+
5868
def test_quoted_name_label(engine_testaccount):
5969
test_cases = [
6070
# quote name

0 commit comments

Comments
 (0)