pylegend 0.2.2__py3-none-any.whl → 0.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pylegend/__init__.py +9 -5
- pylegend/core/{databse → database}/sql_to_string/__init__.py +3 -3
- pylegend/core/{databse → database}/sql_to_string/db_extension.py +11 -5
- pylegend/core/{databse → database}/sql_to_string/generator.py +2 -2
- pylegend/core/language/__init__.py +10 -10
- pylegend/core/language/legacy_api/__init__.py +13 -0
- pylegend/core/language/{aggregate_specification.py → legacy_api/aggregate_specification.py} +10 -10
- pylegend/core/language/legacy_api/legacy_api_tds_row.py +32 -0
- pylegend/core/language/legendql_api/__init__.py +13 -0
- pylegend/core/language/legendql_api/legendql_api_custom_expressions.py +541 -0
- pylegend/core/language/legendql_api/legendql_api_tds_row.py +292 -0
- pylegend/core/language/shared/__init__.py +13 -0
- pylegend/core/language/{column_expressions.py → shared/column_expressions.py} +32 -31
- pylegend/core/language/{expression.py → shared/expression.py} +8 -0
- pylegend/core/language/{functions.py → shared/functions.py} +3 -3
- pylegend/core/language/shared/helpers.py +75 -0
- pylegend/core/language/{literal_expressions.py → shared/literal_expressions.py} +39 -1
- pylegend/core/language/{operations → shared/operations}/binary_expression.py +34 -2
- pylegend/core/language/{operations → shared/operations}/boolean_operation_expressions.py +34 -6
- pylegend/core/language/{operations → shared/operations}/collection_operation_expressions.py +146 -26
- pylegend/core/language/{operations → shared/operations}/date_operation_expressions.py +164 -24
- pylegend/core/language/{operations → shared/operations}/float_operation_expressions.py +53 -8
- pylegend/core/language/{operations → shared/operations}/integer_operation_expressions.py +62 -9
- pylegend/core/language/{operations → shared/operations}/nullary_expression.py +9 -2
- pylegend/core/language/{operations → shared/operations}/number_operation_expressions.py +211 -30
- pylegend/core/language/{operations → shared/operations}/primitive_operation_expressions.py +42 -3
- pylegend/core/language/{operations → shared/operations}/string_operation_expressions.py +169 -21
- pylegend/core/language/{operations → shared/operations}/unary_expression.py +10 -2
- pylegend/core/language/{primitive_collection.py → shared/primitive_collection.py} +2 -2
- pylegend/core/language/{primitives → shared/primitives}/__init__.py +9 -9
- pylegend/core/language/{primitives → shared/primitives}/boolean.py +9 -5
- pylegend/core/language/{primitives → shared/primitives}/date.py +23 -15
- pylegend/core/language/{primitives → shared/primitives}/datetime.py +4 -5
- pylegend/core/language/{primitives → shared/primitives}/float.py +6 -6
- pylegend/core/language/{primitives → shared/primitives}/integer.py +6 -6
- pylegend/core/language/{primitives → shared/primitives}/number.py +16 -13
- pylegend/core/language/{primitives → shared/primitives}/primitive.py +25 -5
- pylegend/core/language/{primitives → shared/primitives}/strictdate.py +4 -5
- pylegend/core/language/{primitives → shared/primitives}/string.py +18 -19
- pylegend/core/language/{tds_row.py → shared/tds_row.py} +46 -16
- pylegend/core/request/__init__.py +8 -1
- pylegend/core/request/auth.py +89 -11
- pylegend/core/request/legend_client.py +32 -0
- pylegend/core/sql/metamodel_extension.py +16 -0
- pylegend/core/tds/abstract/__init__.py +13 -0
- pylegend/core/tds/abstract/frames/__init__.py +13 -0
- pylegend/core/tds/{legend_api/frames/legend_api_applied_function_tds_frame.py → abstract/frames/applied_function_tds_frame.py} +19 -13
- pylegend/core/tds/abstract/frames/base_tds_frame.py +125 -0
- pylegend/core/tds/{legend_api/frames/legend_api_input_tds_frame.py → abstract/frames/input_tds_frame.py} +9 -12
- pylegend/core/tds/{legend_api/frames/functions → abstract}/function_helpers.py +1 -1
- pylegend/core/tds/{legend_api/frames/functions/concatenate_function.py → legacy_api/frames/functions/legacy_api_concatenate_function.py} +25 -13
- pylegend/core/tds/{legend_api/frames/functions/distinct_function.py → legacy_api/frames/functions/legacy_api_distinct_function.py} +13 -8
- pylegend/core/tds/{legend_api/frames/functions/drop_function.py → legacy_api/frames/functions/legacy_api_drop_function.py} +13 -8
- pylegend/core/tds/{legend_api/frames/functions/extend_function.py → legacy_api/frames/functions/legacy_api_extend_function.py} +36 -16
- pylegend/core/tds/{legend_api/frames/functions/filter_function.py → legacy_api/frames/functions/legacy_api_filter_function.py} +25 -13
- pylegend/core/tds/{legend_api/frames/functions/group_by_function.py → legacy_api/frames/functions/legacy_api_group_by_function.py} +44 -17
- pylegend/core/tds/{legend_api/frames/functions/head_function.py → legacy_api/frames/functions/legacy_api_head_function.py} +13 -8
- pylegend/core/tds/{legend_api/frames/functions/join_by_columns_function.py → legacy_api/frames/functions/legacy_api_join_by_columns_function.py} +40 -13
- pylegend/core/tds/{legend_api/frames/functions/join_function.py → legacy_api/frames/functions/legacy_api_join_function.py} +44 -20
- pylegend/core/tds/{legend_api/frames/functions/rename_columns_function.py → legacy_api/frames/functions/legacy_api_rename_columns_function.py} +20 -8
- pylegend/core/tds/{legend_api/frames/functions/restrict_function.py → legacy_api/frames/functions/legacy_api_restrict_function.py} +17 -8
- pylegend/core/tds/{legend_api/frames/functions/slice_function.py → legacy_api/frames/functions/legacy_api_slice_function.py} +13 -8
- pylegend/core/tds/{legend_api/frames/functions/sort_function.py → legacy_api/frames/functions/legacy_api_sort_function.py} +19 -8
- pylegend/core/tds/legacy_api/frames/legacy_api_applied_function_tds_frame.py +37 -0
- pylegend/core/tds/legacy_api/frames/legacy_api_base_tds_frame.py +204 -0
- pylegend/core/tds/legacy_api/frames/legacy_api_input_tds_frame.py +51 -0
- pylegend/core/tds/{legend_api/frames/legend_api_tds_frame.py → legacy_api/frames/legacy_api_tds_frame.py} +28 -28
- pylegend/core/tds/legendql_api/__init__.py +13 -0
- pylegend/core/tds/legendql_api/frames/__init__.py +13 -0
- pylegend/core/tds/legendql_api/frames/functions/__init__.py +13 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_asofjoin_function.py +156 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_concatenate_function.py +139 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_distinct_function.py +69 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_drop_function.py +74 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_extend_function.py +256 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_filter_function.py +121 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_function_helpers.py +137 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_groupby_function.py +256 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_head_function.py +74 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_join_function.py +214 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_project_function.py +169 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_rename_function.py +189 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_select_function.py +131 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_slice_function.py +82 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_sort_function.py +93 -0
- pylegend/core/tds/legendql_api/frames/functions/legendql_api_window_extend_function.py +283 -0
- pylegend/core/tds/legendql_api/frames/legendql_api_applied_function_tds_frame.py +37 -0
- pylegend/core/tds/legendql_api/frames/legendql_api_base_tds_frame.py +419 -0
- pylegend/core/tds/legendql_api/frames/legendql_api_input_tds_frame.py +50 -0
- pylegend/core/tds/legendql_api/frames/legendql_api_tds_frame.py +327 -0
- pylegend/core/tds/pandas_api/frames/functions/assign_function.py +6 -6
- pylegend/core/tds/pandas_api/frames/pandas_api_applied_function_tds_frame.py +4 -0
- pylegend/core/tds/pandas_api/frames/pandas_api_base_tds_frame.py +11 -3
- pylegend/core/tds/pandas_api/frames/pandas_api_tds_frame.py +2 -2
- pylegend/core/tds/tds_frame.py +32 -2
- pylegend/extensions/database/vendors/postgres/postgres_sql_to_string.py +1 -1
- pylegend/extensions/tds/abstract/legend_function_input_frame.py +4 -0
- pylegend/extensions/tds/abstract/legend_service_input_frame.py +4 -0
- pylegend/extensions/tds/abstract/table_spec_input_frame.py +4 -0
- pylegend/extensions/tds/{legend_api/frames/legend_api_legend_function_input_frame.py → legacy_api/frames/legacy_api_legend_function_input_frame.py} +5 -5
- pylegend/extensions/tds/{legend_api/frames/legend_api_legend_service_input_frame.py → legacy_api/frames/legacy_api_legend_service_input_frame.py} +6 -6
- pylegend/extensions/tds/{legend_api/frames/legend_api_table_spec_input_frame.py → legacy_api/frames/legacy_api_table_spec_input_frame.py} +5 -5
- pylegend/extensions/tds/legendql_api/__init__.py +13 -0
- pylegend/extensions/tds/legendql_api/frames/__init__.py +13 -0
- pylegend/extensions/tds/legendql_api/frames/legendql_api_legend_service_input_frame.py +46 -0
- pylegend/extensions/tds/legendql_api/frames/legendql_api_table_spec_input_frame.py +36 -0
- pylegend/{legend_api_tds_client.py → legacy_api_tds_client.py} +15 -15
- {pylegend-0.2.2.dist-info → pylegend-0.4.0.dist-info}/METADATA +7 -8
- pylegend-0.4.0.dist-info/NOTICE +5 -0
- pylegend-0.4.0.dist-info/RECORD +155 -0
- {pylegend-0.2.2.dist-info → pylegend-0.4.0.dist-info}/WHEEL +1 -1
- pylegend/core/tds/legend_api/frames/legend_api_base_tds_frame.py +0 -294
- pylegend-0.2.2.dist-info/RECORD +0 -115
- /pylegend/core/{databse → database}/__init__.py +0 -0
- /pylegend/core/{databse → database}/sql_to_string/config.py +0 -0
- /pylegend/core/language/{operations → shared/operations}/__init__.py +0 -0
- /pylegend/core/tds/{legend_api → legacy_api}/__init__.py +0 -0
- /pylegend/core/tds/{legend_api → legacy_api}/frames/__init__.py +0 -0
- /pylegend/core/tds/{legend_api → legacy_api}/frames/functions/__init__.py +0 -0
- /pylegend/extensions/tds/{legend_api → legacy_api}/__init__.py +0 -0
- /pylegend/extensions/tds/{legend_api → legacy_api}/frames/__init__.py +0 -0
- {pylegend-0.2.2.dist-info → pylegend-0.4.0.dist-info}/LICENSE +0 -0
- {pylegend-0.2.2.dist-info → pylegend-0.4.0.dist-info}/LICENSE.spdx +0 -0
|
@@ -16,11 +16,12 @@ from pylegend._typing import (
|
|
|
16
16
|
PyLegendSequence,
|
|
17
17
|
PyLegendDict,
|
|
18
18
|
)
|
|
19
|
-
from pylegend.core.language.expression import (
|
|
19
|
+
from pylegend.core.language.shared.expression import (
|
|
20
20
|
PyLegendExpressionIntegerReturn,
|
|
21
21
|
)
|
|
22
|
-
from pylegend.core.language.operations.binary_expression import PyLegendBinaryExpression
|
|
23
|
-
from pylegend.core.language.operations.unary_expression import PyLegendUnaryExpression
|
|
22
|
+
from pylegend.core.language.shared.operations.binary_expression import PyLegendBinaryExpression
|
|
23
|
+
from pylegend.core.language.shared.operations.unary_expression import PyLegendUnaryExpression
|
|
24
|
+
from pylegend.core.language.shared.helpers import generate_pure_functional_call
|
|
24
25
|
from pylegend.core.sql.metamodel import (
|
|
25
26
|
Expression,
|
|
26
27
|
QuerySpecification,
|
|
@@ -32,6 +33,7 @@ from pylegend.core.sql.metamodel_extension import (
|
|
|
32
33
|
AbsoluteExpression,
|
|
33
34
|
)
|
|
34
35
|
from pylegend.core.tds.tds_frame import FrameToSqlConfig
|
|
36
|
+
from pylegend.core.tds.tds_frame import FrameToPureConfig
|
|
35
37
|
|
|
36
38
|
|
|
37
39
|
__all__: PyLegendSequence[str] = [
|
|
@@ -55,15 +57,26 @@ class PyLegendIntegerAddExpression(PyLegendBinaryExpression, PyLegendExpressionI
|
|
|
55
57
|
) -> Expression:
|
|
56
58
|
return ArithmeticExpression(ArithmeticType.ADD, expression1, expression2)
|
|
57
59
|
|
|
60
|
+
@staticmethod
|
|
61
|
+
def __to_pure_func(op1_expr: str, op2_expr: str, config: FrameToPureConfig) -> str:
|
|
62
|
+
return f"({op1_expr} + {op2_expr})"
|
|
63
|
+
|
|
58
64
|
def __init__(self, operand1: PyLegendExpressionIntegerReturn, operand2: PyLegendExpressionIntegerReturn) -> None:
|
|
59
65
|
PyLegendExpressionIntegerReturn.__init__(self)
|
|
60
66
|
PyLegendBinaryExpression.__init__(
|
|
61
67
|
self,
|
|
62
68
|
operand1,
|
|
63
69
|
operand2,
|
|
64
|
-
PyLegendIntegerAddExpression.__to_sql_func
|
|
70
|
+
PyLegendIntegerAddExpression.__to_sql_func,
|
|
71
|
+
PyLegendIntegerAddExpression.__to_pure_func
|
|
65
72
|
)
|
|
66
73
|
|
|
74
|
+
def is_non_nullable(self) -> bool:
|
|
75
|
+
return True
|
|
76
|
+
|
|
77
|
+
def to_pure_expression(self, config: FrameToPureConfig) -> str:
|
|
78
|
+
return PyLegendBinaryExpression.to_pure_expression_with_to_one_on_both_operands(self, config)
|
|
79
|
+
|
|
67
80
|
|
|
68
81
|
class PyLegendIntegerSubtractExpression(PyLegendBinaryExpression, PyLegendExpressionIntegerReturn):
|
|
69
82
|
|
|
@@ -76,15 +89,26 @@ class PyLegendIntegerSubtractExpression(PyLegendBinaryExpression, PyLegendExpres
|
|
|
76
89
|
) -> Expression:
|
|
77
90
|
return ArithmeticExpression(ArithmeticType.SUBTRACT, expression1, expression2)
|
|
78
91
|
|
|
92
|
+
@staticmethod
|
|
93
|
+
def __to_pure_func(op1_expr: str, op2_expr: str, config: FrameToPureConfig) -> str:
|
|
94
|
+
return f"({op1_expr} - {op2_expr})"
|
|
95
|
+
|
|
79
96
|
def __init__(self, operand1: PyLegendExpressionIntegerReturn, operand2: PyLegendExpressionIntegerReturn) -> None:
|
|
80
97
|
PyLegendExpressionIntegerReturn.__init__(self)
|
|
81
98
|
PyLegendBinaryExpression.__init__(
|
|
82
99
|
self,
|
|
83
100
|
operand1,
|
|
84
101
|
operand2,
|
|
85
|
-
PyLegendIntegerSubtractExpression.__to_sql_func
|
|
102
|
+
PyLegendIntegerSubtractExpression.__to_sql_func,
|
|
103
|
+
PyLegendIntegerSubtractExpression.__to_pure_func
|
|
86
104
|
)
|
|
87
105
|
|
|
106
|
+
def is_non_nullable(self) -> bool:
|
|
107
|
+
return True
|
|
108
|
+
|
|
109
|
+
def to_pure_expression(self, config: FrameToPureConfig) -> str:
|
|
110
|
+
return PyLegendBinaryExpression.to_pure_expression_with_to_one_on_both_operands(self, config)
|
|
111
|
+
|
|
88
112
|
|
|
89
113
|
class PyLegendIntegerMultiplyExpression(PyLegendBinaryExpression, PyLegendExpressionIntegerReturn):
|
|
90
114
|
|
|
@@ -97,15 +121,26 @@ class PyLegendIntegerMultiplyExpression(PyLegendBinaryExpression, PyLegendExpres
|
|
|
97
121
|
) -> Expression:
|
|
98
122
|
return ArithmeticExpression(ArithmeticType.MULTIPLY, expression1, expression2)
|
|
99
123
|
|
|
124
|
+
@staticmethod
|
|
125
|
+
def __to_pure_func(op1_expr: str, op2_expr: str, config: FrameToPureConfig) -> str:
|
|
126
|
+
return f"({op1_expr} * {op2_expr})"
|
|
127
|
+
|
|
100
128
|
def __init__(self, operand1: PyLegendExpressionIntegerReturn, operand2: PyLegendExpressionIntegerReturn) -> None:
|
|
101
129
|
PyLegendExpressionIntegerReturn.__init__(self)
|
|
102
130
|
PyLegendBinaryExpression.__init__(
|
|
103
131
|
self,
|
|
104
132
|
operand1,
|
|
105
133
|
operand2,
|
|
106
|
-
PyLegendIntegerMultiplyExpression.__to_sql_func
|
|
134
|
+
PyLegendIntegerMultiplyExpression.__to_sql_func,
|
|
135
|
+
PyLegendIntegerMultiplyExpression.__to_pure_func
|
|
107
136
|
)
|
|
108
137
|
|
|
138
|
+
def is_non_nullable(self) -> bool:
|
|
139
|
+
return True
|
|
140
|
+
|
|
141
|
+
def to_pure_expression(self, config: FrameToPureConfig) -> str:
|
|
142
|
+
return PyLegendBinaryExpression.to_pure_expression_with_to_one_on_both_operands(self, config)
|
|
143
|
+
|
|
109
144
|
|
|
110
145
|
class PyLegendIntegerModuloExpression(PyLegendBinaryExpression, PyLegendExpressionIntegerReturn):
|
|
111
146
|
|
|
@@ -118,15 +153,23 @@ class PyLegendIntegerModuloExpression(PyLegendBinaryExpression, PyLegendExpressi
|
|
|
118
153
|
) -> Expression:
|
|
119
154
|
return ArithmeticExpression(ArithmeticType.MODULUS, expression1, expression2)
|
|
120
155
|
|
|
156
|
+
@staticmethod
|
|
157
|
+
def __to_pure_func(op1_expr: str, op2_expr: str, config: FrameToPureConfig) -> str:
|
|
158
|
+
return generate_pure_functional_call("mod", [op1_expr, op2_expr], auto_map=True)
|
|
159
|
+
|
|
121
160
|
def __init__(self, operand1: PyLegendExpressionIntegerReturn, operand2: PyLegendExpressionIntegerReturn) -> None:
|
|
122
161
|
PyLegendExpressionIntegerReturn.__init__(self)
|
|
123
162
|
PyLegendBinaryExpression.__init__(
|
|
124
163
|
self,
|
|
125
164
|
operand1,
|
|
126
165
|
operand2,
|
|
127
|
-
PyLegendIntegerModuloExpression.__to_sql_func
|
|
166
|
+
PyLegendIntegerModuloExpression.__to_sql_func,
|
|
167
|
+
PyLegendIntegerModuloExpression.__to_pure_func
|
|
128
168
|
)
|
|
129
169
|
|
|
170
|
+
def to_pure_expression(self, config: FrameToPureConfig) -> str:
|
|
171
|
+
return PyLegendBinaryExpression.to_pure_expression_with_to_one_on_second_operand(self, config)
|
|
172
|
+
|
|
130
173
|
|
|
131
174
|
class PyLegendIntegerAbsoluteExpression(PyLegendUnaryExpression, PyLegendExpressionIntegerReturn):
|
|
132
175
|
|
|
@@ -138,12 +181,17 @@ class PyLegendIntegerAbsoluteExpression(PyLegendUnaryExpression, PyLegendExpress
|
|
|
138
181
|
) -> Expression:
|
|
139
182
|
return AbsoluteExpression(expression)
|
|
140
183
|
|
|
184
|
+
@staticmethod
|
|
185
|
+
def __to_pure_func(op_expr: str, config: FrameToPureConfig) -> str:
|
|
186
|
+
return generate_pure_functional_call("abs", [op_expr], auto_map=True)
|
|
187
|
+
|
|
141
188
|
def __init__(self, operand: PyLegendExpressionIntegerReturn) -> None:
|
|
142
189
|
PyLegendExpressionIntegerReturn.__init__(self)
|
|
143
190
|
PyLegendUnaryExpression.__init__(
|
|
144
191
|
self,
|
|
145
192
|
operand,
|
|
146
|
-
PyLegendIntegerAbsoluteExpression.__to_sql_func
|
|
193
|
+
PyLegendIntegerAbsoluteExpression.__to_sql_func,
|
|
194
|
+
PyLegendIntegerAbsoluteExpression.__to_pure_func
|
|
147
195
|
)
|
|
148
196
|
|
|
149
197
|
|
|
@@ -157,10 +205,15 @@ class PyLegendIntegerNegativeExpression(PyLegendUnaryExpression, PyLegendExpress
|
|
|
157
205
|
) -> Expression:
|
|
158
206
|
return NegativeExpression(expression)
|
|
159
207
|
|
|
208
|
+
@staticmethod
|
|
209
|
+
def __to_pure_func(op_expr: str, config: FrameToPureConfig) -> str:
|
|
210
|
+
return generate_pure_functional_call("minus", [op_expr], auto_map=True)
|
|
211
|
+
|
|
160
212
|
def __init__(self, operand: PyLegendExpressionIntegerReturn) -> None:
|
|
161
213
|
PyLegendExpressionIntegerReturn.__init__(self)
|
|
162
214
|
PyLegendUnaryExpression.__init__(
|
|
163
215
|
self,
|
|
164
216
|
operand,
|
|
165
|
-
PyLegendIntegerNegativeExpression.__to_sql_func
|
|
217
|
+
PyLegendIntegerNegativeExpression.__to_sql_func,
|
|
218
|
+
PyLegendIntegerNegativeExpression.__to_pure_func
|
|
166
219
|
)
|
|
@@ -18,7 +18,7 @@ from pylegend._typing import (
|
|
|
18
18
|
PyLegendDict,
|
|
19
19
|
PyLegendCallable,
|
|
20
20
|
)
|
|
21
|
-
from pylegend.core.language.expression import (
|
|
21
|
+
from pylegend.core.language.shared.expression import (
|
|
22
22
|
PyLegendExpression,
|
|
23
23
|
)
|
|
24
24
|
from pylegend.core.sql.metamodel import (
|
|
@@ -26,6 +26,7 @@ from pylegend.core.sql.metamodel import (
|
|
|
26
26
|
QuerySpecification,
|
|
27
27
|
)
|
|
28
28
|
from pylegend.core.tds.tds_frame import FrameToSqlConfig
|
|
29
|
+
from pylegend.core.tds.tds_frame import FrameToPureConfig
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
__all__: PyLegendSequence[str] = [
|
|
@@ -38,15 +39,18 @@ class PyLegendNullaryExpression(PyLegendExpression, metaclass=ABCMeta):
|
|
|
38
39
|
[PyLegendDict[str, QuerySpecification], FrameToSqlConfig],
|
|
39
40
|
Expression
|
|
40
41
|
]
|
|
42
|
+
__to_pure_func: PyLegendCallable[[FrameToPureConfig], str]
|
|
41
43
|
|
|
42
44
|
def __init__(
|
|
43
45
|
self,
|
|
44
46
|
to_sql_func: PyLegendCallable[
|
|
45
47
|
[PyLegendDict[str, QuerySpecification], FrameToSqlConfig],
|
|
46
48
|
Expression
|
|
47
|
-
]
|
|
49
|
+
],
|
|
50
|
+
to_pure_func: PyLegendCallable[[FrameToPureConfig], str]
|
|
48
51
|
) -> None:
|
|
49
52
|
self.__to_sql_func = to_sql_func
|
|
53
|
+
self.__to_pure_func = to_pure_func
|
|
50
54
|
|
|
51
55
|
def to_sql_expression(
|
|
52
56
|
self,
|
|
@@ -57,3 +61,6 @@ class PyLegendNullaryExpression(PyLegendExpression, metaclass=ABCMeta):
|
|
|
57
61
|
frame_name_to_base_query_map,
|
|
58
62
|
config
|
|
59
63
|
)
|
|
64
|
+
|
|
65
|
+
def to_pure_expression(self, config: FrameToPureConfig) -> str:
|
|
66
|
+
return self.__to_pure_func(config)
|