pytrilogy 0.0.2.11__py3-none-any.whl → 0.0.2.12__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.
Potentially problematic release.
This version of pytrilogy might be problematic. Click here for more details.
- {pytrilogy-0.0.2.11.dist-info → pytrilogy-0.0.2.12.dist-info}/METADATA +1 -1
- {pytrilogy-0.0.2.11.dist-info → pytrilogy-0.0.2.12.dist-info}/RECORD +27 -27
- trilogy/__init__.py +1 -1
- trilogy/core/enums.py +0 -1
- trilogy/core/environment_helpers.py +44 -6
- trilogy/core/models.py +21 -21
- trilogy/core/optimization.py +31 -3
- trilogy/core/optimizations/__init__.py +2 -1
- trilogy/core/optimizations/predicate_pushdown.py +60 -42
- trilogy/core/processing/concept_strategies_v3.py +6 -4
- trilogy/core/processing/node_generators/basic_node.py +15 -9
- trilogy/core/processing/node_generators/node_merge_node.py +22 -1
- trilogy/core/processing/node_generators/unnest_node.py +10 -3
- trilogy/core/processing/nodes/base_node.py +7 -2
- trilogy/core/processing/nodes/group_node.py +0 -1
- trilogy/core/processing/nodes/merge_node.py +11 -4
- trilogy/core/processing/nodes/unnest_node.py +13 -9
- trilogy/core/processing/utility.py +3 -1
- trilogy/core/query_processor.py +9 -2
- trilogy/dialect/base.py +95 -52
- trilogy/dialect/common.py +3 -3
- trilogy/parsing/common.py +58 -1
- trilogy/parsing/parse_engine.py +70 -122
- {pytrilogy-0.0.2.11.dist-info → pytrilogy-0.0.2.12.dist-info}/LICENSE.md +0 -0
- {pytrilogy-0.0.2.11.dist-info → pytrilogy-0.0.2.12.dist-info}/WHEEL +0 -0
- {pytrilogy-0.0.2.11.dist-info → pytrilogy-0.0.2.12.dist-info}/entry_points.txt +0 -0
- {pytrilogy-0.0.2.11.dist-info → pytrilogy-0.0.2.12.dist-info}/top_level.txt +0 -0
trilogy/parsing/parse_engine.py
CHANGED
|
@@ -24,7 +24,6 @@ from trilogy.core.enums import (
|
|
|
24
24
|
ComparisonOperator,
|
|
25
25
|
FunctionType,
|
|
26
26
|
InfiniteFunctionArgs,
|
|
27
|
-
FunctionClass,
|
|
28
27
|
Modifier,
|
|
29
28
|
Ordering,
|
|
30
29
|
Purpose,
|
|
@@ -104,7 +103,6 @@ from trilogy.core.models import (
|
|
|
104
103
|
ConceptDeclarationStatement,
|
|
105
104
|
ConceptDerivation,
|
|
106
105
|
RowsetDerivationStatement,
|
|
107
|
-
LooseConceptList,
|
|
108
106
|
list_to_wrapper,
|
|
109
107
|
dict_to_map_wrapper,
|
|
110
108
|
NumericType,
|
|
@@ -119,6 +117,7 @@ from trilogy.parsing.common import (
|
|
|
119
117
|
filter_item_to_concept,
|
|
120
118
|
constant_to_concept,
|
|
121
119
|
arbitrary_to_concept,
|
|
120
|
+
process_function_args,
|
|
122
121
|
)
|
|
123
122
|
|
|
124
123
|
CONSTANT_TYPES = (int, float, str, bool, list, ListWrapper, MapWrapper)
|
|
@@ -230,50 +229,6 @@ class ParseToObjects(Transformer):
|
|
|
230
229
|
self.environment.concepts.undefined = {}
|
|
231
230
|
return reparsed
|
|
232
231
|
|
|
233
|
-
def process_function_args(
|
|
234
|
-
self, args, meta: Meta, concept_arguments: Optional[LooseConceptList] = None
|
|
235
|
-
):
|
|
236
|
-
final: List[Concept | Function] = []
|
|
237
|
-
for arg in args:
|
|
238
|
-
# if a function has an anonymous function argument
|
|
239
|
-
# create an implicit concept
|
|
240
|
-
while isinstance(arg, Parenthetical):
|
|
241
|
-
arg = arg.content
|
|
242
|
-
if isinstance(arg, Function):
|
|
243
|
-
# if it's not an aggregate function, we can skip the virtual concepts
|
|
244
|
-
# to simplify anonymous function handling
|
|
245
|
-
if arg.operator not in FunctionClass.AGGREGATE_FUNCTIONS.value:
|
|
246
|
-
final.append(arg)
|
|
247
|
-
continue
|
|
248
|
-
id_hash = string_to_hash(str(arg))
|
|
249
|
-
concept = function_to_concept(
|
|
250
|
-
arg,
|
|
251
|
-
name=f"{VIRTUAL_CONCEPT_PREFIX}_{id_hash}",
|
|
252
|
-
namespace=self.environment.namespace,
|
|
253
|
-
)
|
|
254
|
-
# to satisfy mypy, concept will always have metadata
|
|
255
|
-
if concept.metadata:
|
|
256
|
-
concept.metadata.line_number = meta.line
|
|
257
|
-
self.environment.add_concept(concept, meta=meta)
|
|
258
|
-
final.append(concept)
|
|
259
|
-
elif isinstance(
|
|
260
|
-
arg, (FilterItem, WindowItem, AggregateWrapper, ListWrapper, MapWrapper)
|
|
261
|
-
):
|
|
262
|
-
id_hash = string_to_hash(str(arg))
|
|
263
|
-
concept = arbitrary_to_concept(
|
|
264
|
-
arg,
|
|
265
|
-
name=f"{VIRTUAL_CONCEPT_PREFIX}_{id_hash}",
|
|
266
|
-
namespace=self.environment.namespace,
|
|
267
|
-
)
|
|
268
|
-
if concept.metadata:
|
|
269
|
-
concept.metadata.line_number = meta.line
|
|
270
|
-
self.environment.add_concept(concept, meta=meta)
|
|
271
|
-
final.append(concept)
|
|
272
|
-
|
|
273
|
-
else:
|
|
274
|
-
final.append(arg)
|
|
275
|
-
return final
|
|
276
|
-
|
|
277
232
|
def start(self, args):
|
|
278
233
|
return args
|
|
279
234
|
|
|
@@ -319,17 +274,18 @@ class ParseToObjects(Transformer):
|
|
|
319
274
|
@v_args(meta=True)
|
|
320
275
|
def struct_type(self, meta: Meta, args) -> StructType:
|
|
321
276
|
final: list[
|
|
322
|
-
DataType | MapType | ListType |
|
|
277
|
+
DataType | MapType | ListType | NumericType | StructType | Concept
|
|
323
278
|
] = []
|
|
324
279
|
for arg in args:
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
280
|
+
new = self.environment.concepts.__getitem__( # type: ignore
|
|
281
|
+
key=arg, line_no=meta.line
|
|
282
|
+
)
|
|
283
|
+
final.append(new)
|
|
284
|
+
|
|
285
|
+
return StructType(
|
|
286
|
+
fields=final,
|
|
287
|
+
fields_map={x.name: x for x in final if isinstance(x, Concept)},
|
|
288
|
+
)
|
|
333
289
|
|
|
334
290
|
def list_type(self, args) -> ListType:
|
|
335
291
|
return ListType(type=args[0])
|
|
@@ -520,18 +476,6 @@ class ParseToObjects(Transformer):
|
|
|
520
476
|
if concept.metadata:
|
|
521
477
|
concept.metadata.line_number = meta.line
|
|
522
478
|
self.environment.add_concept(concept, meta=meta)
|
|
523
|
-
assert isinstance(concept.datatype, StructType)
|
|
524
|
-
for key, value in concept.datatype.fields_map.items():
|
|
525
|
-
args = self.process_function_args([concept, key], meta=meta)
|
|
526
|
-
self.environment.add_concept(
|
|
527
|
-
Concept(
|
|
528
|
-
name=key,
|
|
529
|
-
datatype=arg_to_datatype(value),
|
|
530
|
-
purpose=Purpose.PROPERTY,
|
|
531
|
-
namespace=self.environment.namespace + "." + name,
|
|
532
|
-
lineage=AttrAccess(args),
|
|
533
|
-
)
|
|
534
|
-
)
|
|
535
479
|
return ConceptDerivation(concept=concept)
|
|
536
480
|
elif (
|
|
537
481
|
isinstance(source_value, Function)
|
|
@@ -1001,6 +945,12 @@ class ParseToObjects(Transformer):
|
|
|
1001
945
|
)
|
|
1002
946
|
self.environment.add_concept(new_concept, meta=meta)
|
|
1003
947
|
item.content.output = new_concept
|
|
948
|
+
elif isinstance(item.content, Concept):
|
|
949
|
+
# Sometimes cached values here don't have the latest info
|
|
950
|
+
# bug we can't just use environment, as it might not have the right grain.
|
|
951
|
+
item.content = self.environment.concepts[
|
|
952
|
+
item.content.address
|
|
953
|
+
].with_grain(item.content.grain)
|
|
1004
954
|
# TODO: revisit if we can push down every filter
|
|
1005
955
|
# else:
|
|
1006
956
|
# item.content = (
|
|
@@ -1291,57 +1241,58 @@ class ParseToObjects(Transformer):
|
|
|
1291
1241
|
|
|
1292
1242
|
@v_args(meta=True)
|
|
1293
1243
|
def index_access(self, meta, args):
|
|
1294
|
-
args =
|
|
1244
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1295
1245
|
if args[0].datatype == DataType.MAP or isinstance(args[0].datatype, MapType):
|
|
1296
1246
|
return MapAccess(args)
|
|
1297
1247
|
return IndexAccess(args)
|
|
1298
1248
|
|
|
1299
1249
|
@v_args(meta=True)
|
|
1300
1250
|
def map_key_access(self, meta, args):
|
|
1301
|
-
args =
|
|
1251
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1302
1252
|
return MapAccess(args)
|
|
1303
1253
|
|
|
1304
1254
|
@v_args(meta=True)
|
|
1305
1255
|
def attr_access(self, meta, args):
|
|
1306
|
-
args =
|
|
1256
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1307
1257
|
return AttrAccess(args)
|
|
1308
1258
|
|
|
1309
1259
|
@v_args(meta=True)
|
|
1310
1260
|
def fcoalesce(self, meta, args):
|
|
1311
|
-
args =
|
|
1261
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1312
1262
|
return Coalesce(args)
|
|
1313
1263
|
|
|
1314
1264
|
@v_args(meta=True)
|
|
1315
1265
|
def unnest(self, meta, args):
|
|
1316
|
-
args =
|
|
1266
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1317
1267
|
return Unnest(args)
|
|
1318
1268
|
|
|
1319
1269
|
@v_args(meta=True)
|
|
1320
1270
|
def count(self, meta, args):
|
|
1321
|
-
args =
|
|
1271
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1322
1272
|
return Count(args)
|
|
1323
1273
|
|
|
1324
1274
|
@v_args(meta=True)
|
|
1325
1275
|
def fgroup(self, meta, args):
|
|
1326
1276
|
if len(args) == 2:
|
|
1327
|
-
|
|
1277
|
+
fargs = [args[0]] + args[1]
|
|
1328
1278
|
else:
|
|
1329
|
-
|
|
1279
|
+
fargs = [args[0]]
|
|
1280
|
+
args = process_function_args(fargs, meta=meta, environment=self.environment)
|
|
1330
1281
|
return Group(args)
|
|
1331
1282
|
|
|
1332
1283
|
@v_args(meta=True)
|
|
1333
1284
|
def fabs(self, meta, args):
|
|
1334
|
-
args =
|
|
1285
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1335
1286
|
return Abs(args)
|
|
1336
1287
|
|
|
1337
1288
|
@v_args(meta=True)
|
|
1338
1289
|
def count_distinct(self, meta, args):
|
|
1339
|
-
args =
|
|
1290
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1340
1291
|
return CountDistinct(args)
|
|
1341
1292
|
|
|
1342
1293
|
@v_args(meta=True)
|
|
1343
1294
|
def sum(self, meta, args):
|
|
1344
|
-
args =
|
|
1295
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1345
1296
|
return Function(
|
|
1346
1297
|
operator=FunctionType.SUM,
|
|
1347
1298
|
arguments=args,
|
|
@@ -1352,7 +1303,7 @@ class ParseToObjects(Transformer):
|
|
|
1352
1303
|
|
|
1353
1304
|
@v_args(meta=True)
|
|
1354
1305
|
def avg(self, meta, args):
|
|
1355
|
-
args =
|
|
1306
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1356
1307
|
arg = args[0]
|
|
1357
1308
|
|
|
1358
1309
|
return Function(
|
|
@@ -1366,17 +1317,17 @@ class ParseToObjects(Transformer):
|
|
|
1366
1317
|
|
|
1367
1318
|
@v_args(meta=True)
|
|
1368
1319
|
def max(self, meta, args):
|
|
1369
|
-
args =
|
|
1320
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1370
1321
|
return Max(args)
|
|
1371
1322
|
|
|
1372
1323
|
@v_args(meta=True)
|
|
1373
1324
|
def min(self, meta, args):
|
|
1374
|
-
args =
|
|
1325
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1375
1326
|
return Min(args)
|
|
1376
1327
|
|
|
1377
1328
|
@v_args(meta=True)
|
|
1378
1329
|
def len(self, meta, args):
|
|
1379
|
-
args =
|
|
1330
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1380
1331
|
return Function(
|
|
1381
1332
|
operator=FunctionType.LENGTH,
|
|
1382
1333
|
arguments=args,
|
|
@@ -1388,12 +1339,12 @@ class ParseToObjects(Transformer):
|
|
|
1388
1339
|
|
|
1389
1340
|
@v_args(meta=True)
|
|
1390
1341
|
def fsplit(self, meta, args):
|
|
1391
|
-
args =
|
|
1342
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1392
1343
|
return Split(args)
|
|
1393
1344
|
|
|
1394
1345
|
@v_args(meta=True)
|
|
1395
1346
|
def concat(self, meta, args):
|
|
1396
|
-
args =
|
|
1347
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1397
1348
|
return Function(
|
|
1398
1349
|
operator=FunctionType.CONCAT,
|
|
1399
1350
|
arguments=args,
|
|
@@ -1406,7 +1357,7 @@ class ParseToObjects(Transformer):
|
|
|
1406
1357
|
|
|
1407
1358
|
@v_args(meta=True)
|
|
1408
1359
|
def like(self, meta, args):
|
|
1409
|
-
args =
|
|
1360
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1410
1361
|
return Function(
|
|
1411
1362
|
operator=FunctionType.LIKE,
|
|
1412
1363
|
arguments=args,
|
|
@@ -1418,7 +1369,7 @@ class ParseToObjects(Transformer):
|
|
|
1418
1369
|
|
|
1419
1370
|
@v_args(meta=True)
|
|
1420
1371
|
def alt_like(self, meta, args):
|
|
1421
|
-
args =
|
|
1372
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1422
1373
|
return Function(
|
|
1423
1374
|
operator=FunctionType.LIKE,
|
|
1424
1375
|
arguments=args,
|
|
@@ -1430,7 +1381,7 @@ class ParseToObjects(Transformer):
|
|
|
1430
1381
|
|
|
1431
1382
|
@v_args(meta=True)
|
|
1432
1383
|
def ilike(self, meta, args):
|
|
1433
|
-
args =
|
|
1384
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1434
1385
|
return Function(
|
|
1435
1386
|
operator=FunctionType.ILIKE,
|
|
1436
1387
|
arguments=args,
|
|
@@ -1442,7 +1393,7 @@ class ParseToObjects(Transformer):
|
|
|
1442
1393
|
|
|
1443
1394
|
@v_args(meta=True)
|
|
1444
1395
|
def upper(self, meta, args):
|
|
1445
|
-
args =
|
|
1396
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1446
1397
|
return Function(
|
|
1447
1398
|
operator=FunctionType.UPPER,
|
|
1448
1399
|
arguments=args,
|
|
@@ -1454,15 +1405,12 @@ class ParseToObjects(Transformer):
|
|
|
1454
1405
|
|
|
1455
1406
|
@v_args(meta=True)
|
|
1456
1407
|
def fstrpos(self, meta, args):
|
|
1457
|
-
args =
|
|
1408
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1458
1409
|
return StrPos(args)
|
|
1459
1410
|
|
|
1460
1411
|
@v_args(meta=True)
|
|
1461
1412
|
def fsubstring(self, meta, args):
|
|
1462
|
-
args = self.
|
|
1463
|
-
args,
|
|
1464
|
-
meta=meta,
|
|
1465
|
-
)
|
|
1413
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1466
1414
|
return SubString(args)
|
|
1467
1415
|
|
|
1468
1416
|
def logical_operator(self, args):
|
|
@@ -1470,7 +1418,7 @@ class ParseToObjects(Transformer):
|
|
|
1470
1418
|
|
|
1471
1419
|
@v_args(meta=True)
|
|
1472
1420
|
def lower(self, meta, args):
|
|
1473
|
-
args =
|
|
1421
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1474
1422
|
return Function(
|
|
1475
1423
|
operator=FunctionType.LOWER,
|
|
1476
1424
|
arguments=args,
|
|
@@ -1483,7 +1431,7 @@ class ParseToObjects(Transformer):
|
|
|
1483
1431
|
# date functions
|
|
1484
1432
|
@v_args(meta=True)
|
|
1485
1433
|
def fdate(self, meta, args):
|
|
1486
|
-
args =
|
|
1434
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1487
1435
|
return Function(
|
|
1488
1436
|
operator=FunctionType.DATE,
|
|
1489
1437
|
arguments=args,
|
|
@@ -1503,7 +1451,7 @@ class ParseToObjects(Transformer):
|
|
|
1503
1451
|
|
|
1504
1452
|
@v_args(meta=True)
|
|
1505
1453
|
def fdate_trunc(self, meta, args):
|
|
1506
|
-
args =
|
|
1454
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1507
1455
|
return Function(
|
|
1508
1456
|
operator=FunctionType.DATE_TRUNCATE,
|
|
1509
1457
|
arguments=args,
|
|
@@ -1523,7 +1471,7 @@ class ParseToObjects(Transformer):
|
|
|
1523
1471
|
|
|
1524
1472
|
@v_args(meta=True)
|
|
1525
1473
|
def fdate_part(self, meta, args):
|
|
1526
|
-
args =
|
|
1474
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1527
1475
|
return Function(
|
|
1528
1476
|
operator=FunctionType.DATE_PART,
|
|
1529
1477
|
arguments=args,
|
|
@@ -1543,7 +1491,7 @@ class ParseToObjects(Transformer):
|
|
|
1543
1491
|
|
|
1544
1492
|
@v_args(meta=True)
|
|
1545
1493
|
def fdate_add(self, meta, args):
|
|
1546
|
-
args =
|
|
1494
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1547
1495
|
return Function(
|
|
1548
1496
|
operator=FunctionType.DATE_ADD,
|
|
1549
1497
|
arguments=args,
|
|
@@ -1564,7 +1512,7 @@ class ParseToObjects(Transformer):
|
|
|
1564
1512
|
|
|
1565
1513
|
@v_args(meta=True)
|
|
1566
1514
|
def fdate_diff(self, meta, args):
|
|
1567
|
-
args =
|
|
1515
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1568
1516
|
purpose = function_args_to_output_purpose(args)
|
|
1569
1517
|
return Function(
|
|
1570
1518
|
operator=FunctionType.DATE_DIFF,
|
|
@@ -1589,7 +1537,7 @@ class ParseToObjects(Transformer):
|
|
|
1589
1537
|
|
|
1590
1538
|
@v_args(meta=True)
|
|
1591
1539
|
def fdatetime(self, meta, args):
|
|
1592
|
-
args =
|
|
1540
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1593
1541
|
return Function(
|
|
1594
1542
|
operator=FunctionType.DATETIME,
|
|
1595
1543
|
arguments=args,
|
|
@@ -1606,7 +1554,7 @@ class ParseToObjects(Transformer):
|
|
|
1606
1554
|
|
|
1607
1555
|
@v_args(meta=True)
|
|
1608
1556
|
def ftimestamp(self, meta, args):
|
|
1609
|
-
args =
|
|
1557
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1610
1558
|
return Function(
|
|
1611
1559
|
operator=FunctionType.TIMESTAMP,
|
|
1612
1560
|
arguments=args,
|
|
@@ -1618,7 +1566,7 @@ class ParseToObjects(Transformer):
|
|
|
1618
1566
|
|
|
1619
1567
|
@v_args(meta=True)
|
|
1620
1568
|
def fsecond(self, meta, args):
|
|
1621
|
-
args =
|
|
1569
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1622
1570
|
return Function(
|
|
1623
1571
|
operator=FunctionType.SECOND,
|
|
1624
1572
|
arguments=args,
|
|
@@ -1630,7 +1578,7 @@ class ParseToObjects(Transformer):
|
|
|
1630
1578
|
|
|
1631
1579
|
@v_args(meta=True)
|
|
1632
1580
|
def fminute(self, meta, args):
|
|
1633
|
-
args =
|
|
1581
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1634
1582
|
return Function(
|
|
1635
1583
|
operator=FunctionType.MINUTE,
|
|
1636
1584
|
arguments=args,
|
|
@@ -1642,7 +1590,7 @@ class ParseToObjects(Transformer):
|
|
|
1642
1590
|
|
|
1643
1591
|
@v_args(meta=True)
|
|
1644
1592
|
def fhour(self, meta, args):
|
|
1645
|
-
args =
|
|
1593
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1646
1594
|
return Function(
|
|
1647
1595
|
operator=FunctionType.HOUR,
|
|
1648
1596
|
arguments=args,
|
|
@@ -1654,7 +1602,7 @@ class ParseToObjects(Transformer):
|
|
|
1654
1602
|
|
|
1655
1603
|
@v_args(meta=True)
|
|
1656
1604
|
def fday(self, meta, args):
|
|
1657
|
-
args =
|
|
1605
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1658
1606
|
return Function(
|
|
1659
1607
|
operator=FunctionType.DAY,
|
|
1660
1608
|
arguments=args,
|
|
@@ -1666,7 +1614,7 @@ class ParseToObjects(Transformer):
|
|
|
1666
1614
|
|
|
1667
1615
|
@v_args(meta=True)
|
|
1668
1616
|
def fday_of_week(self, meta, args):
|
|
1669
|
-
args =
|
|
1617
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1670
1618
|
return Function(
|
|
1671
1619
|
operator=FunctionType.DAY_OF_WEEK,
|
|
1672
1620
|
arguments=args,
|
|
@@ -1678,7 +1626,7 @@ class ParseToObjects(Transformer):
|
|
|
1678
1626
|
|
|
1679
1627
|
@v_args(meta=True)
|
|
1680
1628
|
def fweek(self, meta, args):
|
|
1681
|
-
args =
|
|
1629
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1682
1630
|
return Function(
|
|
1683
1631
|
operator=FunctionType.WEEK,
|
|
1684
1632
|
arguments=args,
|
|
@@ -1690,7 +1638,7 @@ class ParseToObjects(Transformer):
|
|
|
1690
1638
|
|
|
1691
1639
|
@v_args(meta=True)
|
|
1692
1640
|
def fmonth(self, meta, args):
|
|
1693
|
-
args =
|
|
1641
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1694
1642
|
return Function(
|
|
1695
1643
|
operator=FunctionType.MONTH,
|
|
1696
1644
|
arguments=args,
|
|
@@ -1702,7 +1650,7 @@ class ParseToObjects(Transformer):
|
|
|
1702
1650
|
|
|
1703
1651
|
@v_args(meta=True)
|
|
1704
1652
|
def fquarter(self, meta, args):
|
|
1705
|
-
args =
|
|
1653
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1706
1654
|
return Function(
|
|
1707
1655
|
operator=FunctionType.QUARTER,
|
|
1708
1656
|
arguments=args,
|
|
@@ -1714,7 +1662,7 @@ class ParseToObjects(Transformer):
|
|
|
1714
1662
|
|
|
1715
1663
|
@v_args(meta=True)
|
|
1716
1664
|
def fyear(self, meta, args):
|
|
1717
|
-
args =
|
|
1665
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1718
1666
|
return Function(
|
|
1719
1667
|
operator=FunctionType.YEAR,
|
|
1720
1668
|
arguments=args,
|
|
@@ -1727,7 +1675,7 @@ class ParseToObjects(Transformer):
|
|
|
1727
1675
|
# utility functions
|
|
1728
1676
|
@v_args(meta=True)
|
|
1729
1677
|
def fcast(self, meta, args) -> Function:
|
|
1730
|
-
args =
|
|
1678
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1731
1679
|
output_datatype = args[1]
|
|
1732
1680
|
return Function(
|
|
1733
1681
|
operator=FunctionType.CAST,
|
|
@@ -1748,7 +1696,7 @@ class ParseToObjects(Transformer):
|
|
|
1748
1696
|
# math functions
|
|
1749
1697
|
@v_args(meta=True)
|
|
1750
1698
|
def fadd(self, meta, args) -> Function:
|
|
1751
|
-
args =
|
|
1699
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1752
1700
|
output_datatype = arg_to_datatype(args[0])
|
|
1753
1701
|
# TODO: check for valid transforms?
|
|
1754
1702
|
return Function(
|
|
@@ -1762,7 +1710,7 @@ class ParseToObjects(Transformer):
|
|
|
1762
1710
|
|
|
1763
1711
|
@v_args(meta=True)
|
|
1764
1712
|
def fsub(self, meta, args) -> Function:
|
|
1765
|
-
args =
|
|
1713
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1766
1714
|
output_datatype = arg_to_datatype(args[0])
|
|
1767
1715
|
return Function(
|
|
1768
1716
|
operator=FunctionType.SUBTRACT,
|
|
@@ -1775,7 +1723,7 @@ class ParseToObjects(Transformer):
|
|
|
1775
1723
|
|
|
1776
1724
|
@v_args(meta=True)
|
|
1777
1725
|
def fmul(self, meta, args) -> Function:
|
|
1778
|
-
args =
|
|
1726
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1779
1727
|
output_datatype = arg_to_datatype(args[0])
|
|
1780
1728
|
return Function(
|
|
1781
1729
|
operator=FunctionType.MULTIPLY,
|
|
@@ -1789,7 +1737,7 @@ class ParseToObjects(Transformer):
|
|
|
1789
1737
|
@v_args(meta=True)
|
|
1790
1738
|
def fdiv(self, meta: Meta, args):
|
|
1791
1739
|
output_datatype = arg_to_datatype(args[0])
|
|
1792
|
-
args =
|
|
1740
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1793
1741
|
return Function(
|
|
1794
1742
|
operator=FunctionType.DIVIDE,
|
|
1795
1743
|
arguments=args,
|
|
@@ -1802,7 +1750,7 @@ class ParseToObjects(Transformer):
|
|
|
1802
1750
|
@v_args(meta=True)
|
|
1803
1751
|
def fmod(self, meta: Meta, args):
|
|
1804
1752
|
output_datatype = arg_to_datatype(args[0])
|
|
1805
|
-
args =
|
|
1753
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1806
1754
|
return Function(
|
|
1807
1755
|
operator=FunctionType.MOD,
|
|
1808
1756
|
arguments=args,
|
|
@@ -1817,7 +1765,7 @@ class ParseToObjects(Transformer):
|
|
|
1817
1765
|
|
|
1818
1766
|
@v_args(meta=True)
|
|
1819
1767
|
def fround(self, meta, args) -> Function:
|
|
1820
|
-
args =
|
|
1768
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1821
1769
|
output_datatype = arg_to_datatype(args[0])
|
|
1822
1770
|
return Function(
|
|
1823
1771
|
operator=FunctionType.ROUND,
|
|
@@ -1851,27 +1799,27 @@ class ParseToObjects(Transformer):
|
|
|
1851
1799
|
|
|
1852
1800
|
@v_args(meta=True)
|
|
1853
1801
|
def fcase_when(self, meta, args) -> CaseWhen:
|
|
1854
|
-
args =
|
|
1802
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1855
1803
|
return CaseWhen(comparison=args[0], expr=args[1])
|
|
1856
1804
|
|
|
1857
1805
|
@v_args(meta=True)
|
|
1858
1806
|
def fcase_else(self, meta, args) -> CaseElse:
|
|
1859
|
-
args =
|
|
1807
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1860
1808
|
return CaseElse(expr=args[0])
|
|
1861
1809
|
|
|
1862
1810
|
@v_args(meta=True)
|
|
1863
1811
|
def fcurrent_date(self, meta, args):
|
|
1864
|
-
args =
|
|
1812
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1865
1813
|
return CurrentDate([])
|
|
1866
1814
|
|
|
1867
1815
|
@v_args(meta=True)
|
|
1868
1816
|
def fcurrent_datetime(self, meta, args):
|
|
1869
|
-
args =
|
|
1817
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1870
1818
|
return CurrentDatetime([])
|
|
1871
1819
|
|
|
1872
1820
|
@v_args(meta=True)
|
|
1873
1821
|
def fnot(self, meta, args):
|
|
1874
|
-
args =
|
|
1822
|
+
args = process_function_args(args, meta=meta, environment=self.environment)
|
|
1875
1823
|
return IsNull(args)
|
|
1876
1824
|
|
|
1877
1825
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|