1414import typing as ty
1515
1616import sqlalchemy as sa
17+ import sqlalchemy .dialects .postgresql as sa_pg
1718
1819from .sig import (
1920 Sig ,
7778)
7879
7980
80- def make_parent (parent ):
81- assert isinstance (parent , Op )
82- if isinstance (parent .rel , RelParent ) and parent .expr is None :
83- return parent
84- return Op (
85- rel = RelParent (parent = parent ),
86- expr = None ,
87- scope = parent .scope ,
88- card = Cardinality .ONE ,
89- syn = None ,
90- )
91-
92-
93- def plan (syn : Syn , meta : sa .MetaData ):
81+ def plan (syn : Syn , meta : sa .MetaData ) -> Op :
9482 """ Produce operations from syntax."""
9583 parent = Op (
9684 rel = RelVoid (),
@@ -102,13 +90,13 @@ def plan(syn: Syn, meta: sa.MetaData):
10290 return build_op (syn , parent )
10391
10492
105- def build_op (syn : Syn , parent : Op ):
93+ def build_op (syn : Syn , parent : Op ) -> Op :
10694 op , k = norm_to_op (syn , parent = parent )
10795 op = k (build_op_expr (op ))
10896 return op
10997
11098
111- def build_op_expr (op : Op ):
99+ def build_op_expr (op : Op ) -> Op :
112100 if op .expr is None :
113101 if isinstance (op .scope , RecordScope ):
114102 expr = ExprRecord (fields = op .scope .op_fields )
@@ -161,21 +149,17 @@ def build_op_expr(op: Op):
161149 return op
162150
163151
164- def run_to_op (syn , parent ):
165- op = to_op (syn , parent )
166- if isinstance (op , tuple ):
167- op , k = op
168- op = k (op )
169- assert isinstance (op , Op ), type (op )
170- return op
171-
172-
173- def norm_to_op (syn , parent ):
174- res = to_op (syn , parent )
175- if isinstance (res , tuple ):
176- return res
177- else :
178- return res , lambda op : op
152+ def make_parent (parent : Op ) -> Op :
153+ assert isinstance (parent , Op )
154+ if isinstance (parent .rel , RelParent ) and parent .expr is None :
155+ return parent
156+ return Op (
157+ rel = RelParent (parent = parent ),
158+ expr = None ,
159+ scope = parent .scope ,
160+ card = Cardinality .ONE ,
161+ syn = None ,
162+ )
179163
180164
181165#
@@ -184,11 +168,21 @@ def norm_to_op(syn, parent):
184168
185169
186170@functools .singledispatch
187- def to_op (syn : ty .Optional [Syn ], parent : Op ):
171+ def to_op (syn : ty .Optional [Syn ], parent : Op ) -> Op :
188172 """ Produce an operation out of a query."""
189173 raise NotImplementedError (type (syn )) # pragma: no cover
190174
191175
176+ def run_to_op (syn , parent ):
177+ op = to_op (syn , parent )
178+ return op [1 ](op [0 ]) if isinstance (op , tuple ) else op
179+
180+
181+ def norm_to_op (syn , parent ):
182+ res = to_op (syn , parent )
183+ return res if isinstance (res , tuple ) else (res , lambda op : op )
184+
185+
192186@to_op .register
193187def None_to_op (syn : type (None ), parent : Op ):
194188 return parent
@@ -609,7 +603,5 @@ def DateLiteral_embed(_: sa.Date):
609603
610604
611605@embed .register
612- def JsonLiteral_embed (_ : sa .dialects .postgresql .JSONB ):
613- return lambda v : sa .cast (
614- sa .literal (json .dumps (v )), sa .dialects .postgresql .JSONB
615- )
606+ def JsonLiteral_embed (_ : sa_pg .JSONB ):
607+ return lambda v : sa .cast (sa .literal (json .dumps (v )), sa_pg .JSONB )
0 commit comments