pytrilogy 0.0.3.2__tar.gz → 0.0.3.3__tar.gz

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.

Files changed (127) hide show
  1. {pytrilogy-0.0.3.2/pytrilogy.egg-info → pytrilogy-0.0.3.3}/PKG-INFO +1 -1
  2. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3/pytrilogy.egg-info}/PKG-INFO +1 -1
  3. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_models.py +16 -0
  4. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/__init__.py +1 -1
  5. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/author.py +11 -7
  6. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/LICENSE.md +0 -0
  7. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/README.md +0 -0
  8. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pyproject.toml +0 -0
  9. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/SOURCES.txt +0 -0
  10. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/dependency_links.txt +0 -0
  11. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/entry_points.txt +0 -0
  12. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/requires.txt +0 -0
  13. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/top_level.txt +0 -0
  14. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/setup.cfg +0 -0
  15. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/setup.py +0 -0
  16. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_datatypes.py +0 -0
  17. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_declarations.py +0 -0
  18. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_derived_concepts.py +0 -0
  19. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_discovery_nodes.py +0 -0
  20. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_enums.py +0 -0
  21. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_environment.py +0 -0
  22. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_executor.py +0 -0
  23. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_functions.py +0 -0
  24. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_imports.py +0 -0
  25. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_metadata.py +0 -0
  26. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_multi_join_assignments.py +0 -0
  27. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_parse_engine.py +0 -0
  28. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_parsing.py +0 -0
  29. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_partial_handling.py +0 -0
  30. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_query_processing.py +0 -0
  31. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_select.py +0 -0
  32. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_show.py +0 -0
  33. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_statements.py +0 -0
  34. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_undefined_concept.py +0 -0
  35. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_where_clause.py +0 -0
  36. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/compiler.py +0 -0
  37. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/constants.py +0 -0
  38. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/__init__.py +0 -0
  39. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/constants.py +0 -0
  40. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/enums.py +0 -0
  41. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/env_processor.py +0 -0
  42. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/environment_helpers.py +0 -0
  43. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/ergonomics.py +0 -0
  44. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/exceptions.py +0 -0
  45. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/functions.py +0 -0
  46. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/graph_models.py +0 -0
  47. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/internal.py +0 -0
  48. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/__init__.py +0 -0
  49. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/build.py +0 -0
  50. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/build_environment.py +0 -0
  51. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/core.py +0 -0
  52. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/datasource.py +0 -0
  53. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/environment.py +0 -0
  54. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/execute.py +0 -0
  55. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimization.py +0 -0
  56. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/__init__.py +0 -0
  57. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/base_optimization.py +0 -0
  58. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/inline_constant.py +0 -0
  59. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/inline_datasource.py +0 -0
  60. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/predicate_pushdown.py +0 -0
  61. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/__init__.py +0 -0
  62. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/concept_strategies_v3.py +0 -0
  63. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/graph_utils.py +0 -0
  64. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/__init__.py +0 -0
  65. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/basic_node.py +0 -0
  66. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/common.py +0 -0
  67. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/filter_node.py +0 -0
  68. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/group_node.py +0 -0
  69. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/group_to_node.py +0 -0
  70. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/multiselect_node.py +0 -0
  71. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/node_merge_node.py +0 -0
  72. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/rowset_node.py +0 -0
  73. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_helpers/__init__.py +0 -0
  74. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +0 -0
  75. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_merge_node.py +0 -0
  76. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_node.py +0 -0
  77. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/synonym_node.py +0 -0
  78. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/union_node.py +0 -0
  79. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/unnest_node.py +0 -0
  80. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/window_node.py +0 -0
  81. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/__init__.py +0 -0
  82. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/base_node.py +0 -0
  83. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/filter_node.py +0 -0
  84. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/group_node.py +0 -0
  85. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/merge_node.py +0 -0
  86. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/select_node_v2.py +0 -0
  87. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/union_node.py +0 -0
  88. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/unnest_node.py +0 -0
  89. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/window_node.py +0 -0
  90. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/utility.py +0 -0
  91. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/query_processor.py +0 -0
  92. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/__init__.py +0 -0
  93. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/author.py +0 -0
  94. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/build.py +0 -0
  95. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/common.py +0 -0
  96. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/execute.py +0 -0
  97. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/__init__.py +0 -0
  98. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/base.py +0 -0
  99. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/bigquery.py +0 -0
  100. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/common.py +0 -0
  101. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/config.py +0 -0
  102. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/duckdb.py +0 -0
  103. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/enums.py +0 -0
  104. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/postgres.py +0 -0
  105. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/presto.py +0 -0
  106. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/snowflake.py +0 -0
  107. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/sql_server.py +0 -0
  108. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/engine.py +0 -0
  109. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/executor.py +0 -0
  110. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/hooks/__init__.py +0 -0
  111. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/hooks/base_hook.py +0 -0
  112. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/hooks/graph_hook.py +0 -0
  113. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/hooks/query_debugger.py +0 -0
  114. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/metadata/__init__.py +0 -0
  115. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parser.py +0 -0
  116. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/__init__.py +0 -0
  117. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/common.py +0 -0
  118. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/config.py +0 -0
  119. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/exceptions.py +0 -0
  120. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/helpers.py +0 -0
  121. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/parse_engine.py +0 -0
  122. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/render.py +0 -0
  123. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/trilogy.lark +0 -0
  124. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/py.typed +0 -0
  125. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/scripts/__init__.py +0 -0
  126. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/scripts/trilogy.py +0 -0
  127. {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/utility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pytrilogy
3
- Version: 0.0.3.2
3
+ Version: 0.0.3.3
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: pytrilogy
3
- Version: 0.0.3.2
3
+ Version: 0.0.3.3
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,5 +1,7 @@
1
1
  from copy import deepcopy
2
2
 
3
+ from pytest import raises
4
+
3
5
  from trilogy import parse
4
6
  from trilogy.core.enums import (
5
7
  BooleanOperator,
@@ -22,6 +24,7 @@ from trilogy.core.models.author import (
22
24
  from trilogy.core.models.build import BuildGrain
23
25
  from trilogy.core.models.core import (
24
26
  DataType,
27
+ ListWrapper,
25
28
  TupleWrapper,
26
29
  )
27
30
  from trilogy.core.models.datasource import Address
@@ -206,6 +209,19 @@ def test_base_join(test_environment: Environment):
206
209
  assert x.concepts == [test_environment.concepts["product_id"]]
207
210
 
208
211
 
212
+ def test_comparison():
213
+ with raises(SyntaxError):
214
+ Comparison(left=1, right="abc", operator=ComparisonOperator.EQ)
215
+
216
+ with raises(SyntaxError):
217
+ Comparison(left=1, right=1, operator=ComparisonOperator.IN)
218
+
219
+ # this should not error
220
+ Comparison(left=1, right=[1, 2, 3], operator=ComparisonOperator.IN)
221
+
222
+ Comparison(left=1, right=ListWrapper([1, 2, 3]), operator=ComparisonOperator.IN)
223
+
224
+
209
225
  def test_comparison():
210
226
  try:
211
227
  Comparison(left=1, right="abc", operator=ComparisonOperator.EQ)
@@ -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.2"
7
+ __version__ = "0.0.3.3"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
@@ -585,19 +585,23 @@ class Comparison(ConceptArgs, Mergeable, Namespaced, BaseModel):
585
585
  f"Cannot use {self.operator.value} with non-null or boolean value {self.right}"
586
586
  )
587
587
  elif self.operator in (ComparisonOperator.IN, ComparisonOperator.NOT_IN):
588
- right = arg_to_datatype(self.right)
589
- if not isinstance(
590
- self.right, (ConceptRef, Concept, ListType, TupleWrapper)
588
+ right_type = arg_to_datatype(self.right)
589
+ if not any(
590
+ [
591
+ isinstance(self.right, ConceptRef),
592
+ right_type in (DataType.LIST,),
593
+ isinstance(right_type, (ListType, ListWrapper, TupleWrapper)),
594
+ ]
591
595
  ):
592
596
  raise SyntaxError(
593
- f"Cannot use {self.operator.value} with non-list, non-tuple, non-concept object {right} in {str(self)}"
597
+ f"Cannot use {self.operator.value} with non-list, non-tuple, non-concept object {self.right} in {str(self)}"
594
598
  )
595
599
 
596
- elif isinstance(right, ListType) and not is_compatible_datatype(
597
- arg_to_datatype(self.left), right.value_data_type
600
+ elif isinstance(right_type, ListType) and not is_compatible_datatype(
601
+ arg_to_datatype(self.left), right_type.value_data_type
598
602
  ):
599
603
  raise SyntaxError(
600
- f"Cannot compare {arg_to_datatype(self.left)} and {right} with operator {self.operator} in {str(self)}"
604
+ f"Cannot compare {arg_to_datatype(self.left)} and {right_type} with operator {self.operator} in {str(self)}"
601
605
  )
602
606
  elif isinstance(self.right, Concept) and not is_compatible_datatype(
603
607
  arg_to_datatype(self.left), arg_to_datatype(self.right)
File without changes
File without changes
File without changes
File without changes
File without changes