pytrilogy 0.0.3.22__py3-none-any.whl → 0.0.3.23__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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytrilogy
3
- Version: 0.0.3.22
3
+ Version: 0.0.3.23
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,5 +1,5 @@
1
- pytrilogy-0.0.3.22.dist-info/licenses/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
2
- trilogy/__init__.py,sha256=1qcH3mcGJGfd8RueLao8BkMgttF4E-nwXO82_8H_zUg,303
1
+ pytrilogy-0.0.3.23.dist-info/licenses/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
2
+ trilogy/__init__.py,sha256=V3stjtkh3sDxf-s4ccwlCSOIsq8WO5pyE5PuQVwEsio,303
3
3
  trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  trilogy/constants.py,sha256=5eQxk1A0pv-TQk3CCvgZCFA9_K-6nxrOm7E5Lxd7KIY,1652
5
5
  trilogy/engine.py,sha256=OK2RuqCIUId6yZ5hfF8J1nxGP0AJqHRZiafcowmW0xc,1728
@@ -23,19 +23,19 @@ trilogy/core/optimization.py,sha256=xGO8piVsLrpqrx-Aid_Y56_5slSv4eZmlP64hCHRiEc,
23
23
  trilogy/core/query_processor.py,sha256=Do8YpdPBdsbKtl9n37hobzk8SORMGqH-e_zNNxd-BE4,19456
24
24
  trilogy/core/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  trilogy/core/models/author.py,sha256=gsn_vkm8gvnwTvzgqOL5v3X1Lx4n8xg32tRwk_9Mxnc,73494
26
- trilogy/core/models/build.py,sha256=bO1qYvuGl6LeNGgsfS6ZHAzZBR2lBPLg-QJymp9hgkU,57235
26
+ trilogy/core/models/build.py,sha256=T3rDPoWNO_pNice90WBVwPzyiHK4pg-i-5iClkWeY8s,57392
27
27
  trilogy/core/models/build_environment.py,sha256=8UggvlPU708GZWYPJMc_ou2r7M3TY2g69eqGvz03YX0,5528
28
28
  trilogy/core/models/core.py,sha256=nb4h1HHm5_qwmUkYth4zRhEttS1EtsMZCP4vT20EEAE,10326
29
29
  trilogy/core/models/datasource.py,sha256=6RjJUd2u4nYmEwFBpJlM9LbHVYDv8iHJxqiBMZqUrwI,9422
30
30
  trilogy/core/models/environment.py,sha256=RlHNrRer4p1uSQM030iwGJL82M1hMyY5p8a550XTfUI,26606
31
- trilogy/core/models/execute.py,sha256=SG_qXK3hrorzcXi85iie1Z5FGnrSwCE4Zs9Ntj4Q1ok,34223
31
+ trilogy/core/models/execute.py,sha256=KZHiovlSr_3ZjyzKD1mdBlAqnPCqFCChQkO4_4WlGtg,34224
32
32
  trilogy/core/optimizations/__init__.py,sha256=EBanqTXEzf1ZEYjAneIWoIcxtMDite5-n2dQ5xcfUtg,356
33
33
  trilogy/core/optimizations/base_optimization.py,sha256=gzDOKImoFn36k7XBD3ysEYDnbnb6vdVIztUfFQZsGnM,513
34
34
  trilogy/core/optimizations/inline_constant.py,sha256=lvNTIXaLNkw3HseJyXyDNk5R52doLU9sIg3pmU2_S08,1332
35
35
  trilogy/core/optimizations/inline_datasource.py,sha256=AHuTGh2x0GQ8usOe0NiFncfTFQ_KogdgDl4uucmhIbI,4241
36
36
  trilogy/core/optimizations/predicate_pushdown.py,sha256=g4AYE8Aw_iMlAh68TjNXGP754NTurrDduFECkUjoBnc,9399
37
37
  trilogy/core/processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- trilogy/core/processing/concept_strategies_v3.py,sha256=pDajPY0b3fa8qgg2jR6Qj30RMu-OBLztlsVRTgGJbeU,40500
38
+ trilogy/core/processing/concept_strategies_v3.py,sha256=O-O08cGLl4XX3Faf59UlkFjsjzTU-QkzlDQ0mzY-LRE,40515
39
39
  trilogy/core/processing/graph_utils.py,sha256=8QUVrkE9j-9C1AyrCb1nQEh8daCe0u1HuXl-Te85lag,1205
40
40
  trilogy/core/processing/utility.py,sha256=Oc5tLGeDDpzhbfo2ZcF8ex1kez-NcJDMcG2Lm5BjS4c,20548
41
41
  trilogy/core/processing/node_generators/__init__.py,sha256=o8rOFHPSo-s_59hREwXMW6gjUJCsiXumdbJNozHUf-Y,800
@@ -91,13 +91,13 @@ trilogy/parsing/common.py,sha256=99tDKrpQTk-SpyTXUqKFtm-lfmhjCOQIn25hxbQvRRg,214
91
91
  trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
92
92
  trilogy/parsing/exceptions.py,sha256=92E5i2frv5hj9wxObJZsZqj5T6bglvPzvdvco_vW1Zk,38
93
93
  trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
94
- trilogy/parsing/parse_engine.py,sha256=UiTrjU6Lpp25S-wly_pNS0wUYEsZpjHExxduArtE1vQ,60602
94
+ trilogy/parsing/parse_engine.py,sha256=Jja7SxpD0QSVdDfhaGs7QN301tt6g0npc3fAGhsuVuI,60787
95
95
  trilogy/parsing/render.py,sha256=o_XuQWhcwx1lD9eGVqkqZEwkmQK0HdmWWokGBtdeH4I,17837
96
96
  trilogy/parsing/trilogy.lark,sha256=7libFS5HNiyHJYzr5_lEiY-Lpqit04_PgyIPHMZT7-w,12928
97
97
  trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
98
  trilogy/scripts/trilogy.py,sha256=1L0XrH4mVHRt1C9T1HnaDv2_kYEfbWTb5_-cBBke79w,3774
99
- pytrilogy-0.0.3.22.dist-info/METADATA,sha256=hRYKLlss7MfsGa488K07_o93KgVoI77O7QBqJ30vR4I,9100
100
- pytrilogy-0.0.3.22.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
101
- pytrilogy-0.0.3.22.dist-info/entry_points.txt,sha256=ewBPU2vLnVexZVnB-NrVj-p3E-4vukg83Zk8A55Wp2w,56
102
- pytrilogy-0.0.3.22.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
103
- pytrilogy-0.0.3.22.dist-info/RECORD,,
99
+ pytrilogy-0.0.3.23.dist-info/METADATA,sha256=ZlYR5KCt_WOZwxuAmV6P5iFW88GmieXKo48iTCHmG9c,9100
100
+ pytrilogy-0.0.3.23.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
101
+ pytrilogy-0.0.3.23.dist-info/entry_points.txt,sha256=ewBPU2vLnVexZVnB-NrVj-p3E-4vukg83Zk8A55Wp2w,56
102
+ pytrilogy-0.0.3.23.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
103
+ pytrilogy-0.0.3.23.dist-info/RECORD,,
trilogy/__init__.py CHANGED
@@ -4,6 +4,6 @@ from trilogy.dialect.enums import Dialects
4
4
  from trilogy.executor import Executor
5
5
  from trilogy.parser import parse
6
6
 
7
- __version__ = "0.0.3.22"
7
+ __version__ = "0.0.3.23"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
@@ -1721,6 +1721,10 @@ class Factory:
1721
1721
  components=base.components, where_clause=where
1722
1722
  )
1723
1723
 
1724
+ @build.register
1725
+ def _(self, base: TupleWrapper) -> TupleWrapper:
1726
+ return TupleWrapper(val=[self.build(x) for x in base.val], type=base.type)
1727
+
1724
1728
  @build.register
1725
1729
  def _(self, base: FilterItem) -> BuildFilterItem:
1726
1730
  return BuildFilterItem.model_construct(
@@ -162,7 +162,7 @@ class CTE(BaseModel):
162
162
  base += (
163
163
  f"\n-- Nullable: {', '.join([str(x) for x in self.nullable_concepts])}."
164
164
  )
165
- base +='\n'
165
+ base += "\n"
166
166
  return base
167
167
 
168
168
  def inline_parent_datasource(
@@ -788,14 +788,16 @@ def _search_concepts(
788
788
  # if anything we need to get is in the filter set and it's a computed value
789
789
  # we need to get _everything_ in this loop
790
790
  required_filters = [
791
- x
792
- for x in mandatory_list if x.derivation not in (Derivation.ROOT, Derivation.CONSTANT)
793
- and not (x.derivation == Derivation.AGGREGATE and x.granularity == Granularity.SINGLE_ROW)
794
- and x.address in conditions.row_arguments
795
- ]
796
- if any(
797
- required_filters
798
- ):
791
+ x
792
+ for x in mandatory_list
793
+ if x.derivation not in (Derivation.ROOT, Derivation.CONSTANT)
794
+ and not (
795
+ x.derivation == Derivation.AGGREGATE
796
+ and x.granularity == Granularity.SINGLE_ROW
797
+ )
798
+ and x.address in conditions.row_arguments
799
+ ]
800
+ if any(required_filters):
799
801
  logger.info(
800
802
  f"{depth_to_prefix(depth)}{LOGGER_PREFIX} derived condition row inputs {[x.address for x in required_filters]} present in mandatory list, forcing condition evaluation at this level. "
801
803
  )
@@ -1342,7 +1342,10 @@ class ParseToObjects(Transformer):
1342
1342
  )
1343
1343
 
1344
1344
  def expr_tuple(self, args):
1345
- return TupleWrapper(content=tuple(args))
1345
+ datatypes = set([arg_to_datatype(x) for x in args])
1346
+ if len(datatypes) != 1:
1347
+ raise ParseError("Tuple must have same type for all elements")
1348
+ return TupleWrapper(val=tuple(args), type=datatypes.pop())
1346
1349
 
1347
1350
  def parenthetical(self, args):
1348
1351
  return Parenthetical(content=args[0])