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.

@@ -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 | StructType | NumericType | Concept
277
+ DataType | MapType | ListType | NumericType | StructType | Concept
323
278
  ] = []
324
279
  for arg in args:
325
- if not isinstance(arg, (DataType, ListType, StructType)):
326
- new = self.environment.concepts.__getitem__( # type: ignore
327
- key=arg, line_no=meta.line
328
- )
329
- final.append(new)
330
- else:
331
- final.append(arg)
332
- return StructType(fields=final)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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
- args = self.process_function_args([args[0]] + args[1], meta=meta)
1277
+ fargs = [args[0]] + args[1]
1328
1278
  else:
1329
- args = self.process_function_args([args[0]], meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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.process_function_args(
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
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 = self.process_function_args(args, meta=meta)
1822
+ args = process_function_args(args, meta=meta, environment=self.environment)
1875
1823
  return IsNull(args)
1876
1824
 
1877
1825