pytrilogy 0.0.2.31__py3-none-any.whl → 0.0.2.32__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.1
2
2
  Name: pytrilogy
3
- Version: 0.0.2.31
3
+ Version: 0.0.2.32
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,4 +1,4 @@
1
- trilogy/__init__.py,sha256=VblpsLULNBnUhw05evBTHbgeqv65Ler6brQxBYz86lM,291
1
+ trilogy/__init__.py,sha256=CPOHf23-XKufDWmGAC9X5pKiKQAepzaB-rNzkGplJNo,291
2
2
  trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  trilogy/constants.py,sha256=KiyYnctoZen4Hzv8WG2jeN-IE-dfQbWHdVCUeTZYjBg,1270
4
4
  trilogy/engine.py,sha256=R5ubIxYyrxRExz07aZCUfrTsoXCHQ8DKFTDsobXdWdA,1102
@@ -50,9 +50,9 @@ trilogy/core/processing/nodes/select_node_v2.py,sha256=7WoFxeGEAzhpS4y4Zw2nH2tt7
50
50
  trilogy/core/processing/nodes/unnest_node.py,sha256=mAmFluzm2yeeiQ6NfIB7BU_8atRGh-UJfPf9ROwbhr8,2152
51
51
  trilogy/core/processing/nodes/window_node.py,sha256=ro0QfMFi4ZmIn5Q4D0M_vJWfnHH_C0MN7XkVkx8Gygg,1214
52
52
  trilogy/dialect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- trilogy/dialect/base.py,sha256=VqBnDwPRzJkb1HPIlZ2X4lLsZzYrgJIOqr8x0UQuESg,34226
53
+ trilogy/dialect/base.py,sha256=V3YSzuyom8PLRS5Qru4iGatlB0huNLKorPKsYoAVWLk,34308
54
54
  trilogy/dialect/bigquery.py,sha256=15KJ-cOpBlk9O7FPviPgmg8xIydJeKx7WfmL3SSsPE8,2953
55
- trilogy/dialect/common.py,sha256=Pm9naWL5eo-BfZTYFMWhX9lpsGuxEyvvn_EuXbFeos0,3817
55
+ trilogy/dialect/common.py,sha256=eqJi_Si1iyb2sV0siTf8g8JOHueWu6RkdtQZtutKazk,3826
56
56
  trilogy/dialect/config.py,sha256=tLVEMctaTDhUgARKXUNfHUcIolGaALkQ0RavUvXAY4w,2994
57
57
  trilogy/dialect/duckdb.py,sha256=_0a5HBU8zRNtZj7YED3ju4fHXRYG9jNeKwnlZwUDvwI,3419
58
58
  trilogy/dialect/enums.py,sha256=4NdpsydBpDn6jnh0JzFz5VvQEtnShErWtWHVyT6TNpw,3948
@@ -70,14 +70,14 @@ trilogy/parsing/common.py,sha256=t7yiL_3f6rz_rouF9et84v5orAgs-EprV4V9ghQ6ql4,100
70
70
  trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
71
71
  trilogy/parsing/exceptions.py,sha256=92E5i2frv5hj9wxObJZsZqj5T6bglvPzvdvco_vW1Zk,38
72
72
  trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
73
- trilogy/parsing/parse_engine.py,sha256=goN7oQqvSjU3Vqm4lXs4bNVAoHEMT-JkL_o_fhYy9vo,64591
73
+ trilogy/parsing/parse_engine.py,sha256=eCEJJ06zgWhj4DNja5CEhlwv-PrGlVMXDHUX9Q3aITM,64688
74
74
  trilogy/parsing/render.py,sha256=VKyo8wEOuiOzUtJ6w9EoGGmkhlqDQyy8wFj_Q_h6EfE,15263
75
- trilogy/parsing/trilogy.lark,sha256=_z5px2N-e8oLUf7SpPMXXNqbAykDkZOvP4_lPgf5-Uk,12245
75
+ trilogy/parsing/trilogy.lark,sha256=Tuqw5oGMwOYt3TYOEx_hZqGpsAp-PiAKiMW8S3EFRcg,12236
76
76
  trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
77
  trilogy/scripts/trilogy.py,sha256=PHxvv6f2ODv0esyyhWxlARgra8dVhqQhYl0lTrSyVNo,3729
78
- pytrilogy-0.0.2.31.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
79
- pytrilogy-0.0.2.31.dist-info/METADATA,sha256=ouEJ1harU8vFjegOhfJuIsAfDrwyyhA8Tb1rbQiH4lU,8403
80
- pytrilogy-0.0.2.31.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
81
- pytrilogy-0.0.2.31.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
82
- pytrilogy-0.0.2.31.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
83
- pytrilogy-0.0.2.31.dist-info/RECORD,,
78
+ pytrilogy-0.0.2.32.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
79
+ pytrilogy-0.0.2.32.dist-info/METADATA,sha256=iOdK_We6Z-kEQP6SnEzowkN089iEjUCqq_Q7yGxLEkQ,8403
80
+ pytrilogy-0.0.2.32.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
81
+ pytrilogy-0.0.2.32.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
82
+ pytrilogy-0.0.2.32.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
83
+ pytrilogy-0.0.2.32.dist-info/RECORD,,
trilogy/__init__.py CHANGED
@@ -4,6 +4,6 @@ from trilogy.executor import Executor
4
4
  from trilogy.parser import parse
5
5
  from trilogy.constants import CONFIG
6
6
 
7
- __version__ = "0.0.2.31"
7
+ __version__ = "0.0.2.32"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
trilogy/dialect/base.py CHANGED
@@ -646,12 +646,14 @@ class BaseDialect:
646
646
  else None
647
647
  ),
648
648
  group_by=(
649
- list(
650
- set(
651
- [
652
- self.render_concept_sql(c, cte, alias=False)
653
- for c in cte.group_concepts
654
- ]
649
+ sorted(
650
+ list(
651
+ set(
652
+ [
653
+ self.render_concept_sql(c, cte, alias=False)
654
+ for c in cte.group_concepts
655
+ ]
656
+ )
655
657
  )
656
658
  )
657
659
  if cte.group_to_grain
trilogy/dialect/common.py CHANGED
@@ -101,5 +101,6 @@ def render_join(
101
101
  )
102
102
  if not base_joinkeys:
103
103
  base_joinkeys = ["1=1"]
104
- joinkeys = " AND ".join(base_joinkeys)
104
+
105
+ joinkeys = " AND ".join(sorted(base_joinkeys))
105
106
  return f"{join.jointype.value.upper()} JOIN {right_base} on {joinkeys}"
@@ -164,8 +164,8 @@ def parse_concept_reference(
164
164
 
165
165
  def expr_to_boolean(
166
166
  root,
167
- ) -> Union[Comparison, Conditional, SubselectComparison, Parenthetical]:
168
- if not isinstance(root, (Comparison, Conditional, Parenthetical)):
167
+ ) -> Union[Comparison, SubselectComparison, Conditional]:
168
+ if not isinstance(root, (Comparison, SubselectComparison, Conditional)):
169
169
  if arg_to_datatype(root) == DataType.BOOL:
170
170
  root = Comparison(left=root, right=True, operator=ComparisonOperator.EQ)
171
171
  else:
@@ -1098,6 +1098,11 @@ class ParseToObjects(Transformer):
1098
1098
  def tuple_lit(self, args):
1099
1099
  return tuple_to_wrapper(args)
1100
1100
 
1101
+ def string_lit(self, args) -> str:
1102
+ if not args:
1103
+ return ""
1104
+ return args[0]
1105
+
1101
1106
  def struct_lit(self, args):
1102
1107
 
1103
1108
  zipped = dict(zip(args[::2], args[1::2]))
@@ -84,7 +84,7 @@
84
84
 
85
85
  COPY_TYPE: "csv"i
86
86
 
87
- copy_statement: "copy"i "into"i COPY_TYPE _string_lit "from"i select_statement
87
+ copy_statement: "copy"i "into"i COPY_TYPE string_lit "from"i select_statement
88
88
 
89
89
  // FUNCTION blocks
90
90
  function: raw_function
@@ -118,7 +118,7 @@
118
118
  _assignment: ("->") | "as"i
119
119
  select_transform : expr _assignment IDENTIFIER metadata?
120
120
 
121
- metadata: "metadata" "(" IDENTIFIER "=" _string_lit ")"
121
+ metadata: "metadata" "(" IDENTIFIER "=" string_lit ")"
122
122
 
123
123
  limit: "LIMIT"i /[0-9]+/
124
124
 
@@ -169,8 +169,8 @@
169
169
  unnest: _UNNEST expr ")"
170
170
  //indexing into an expression is a function
171
171
  index_access: expr "[" int_lit "]"
172
- map_key_access: expr "[" _string_lit "]"
173
- attr_access: expr "." _string_lit
172
+ map_key_access: expr "[" string_lit "]"
173
+ attr_access: expr "." string_lit
174
174
 
175
175
  expr: _constant_functions | window_item | filter_item | subselect_comparison | between_comparison | fgroup | aggregate_functions | unnest | _static_functions | literal | concept_lit | index_access | map_key_access | attr_access | parenthetical | expr_tuple | comparison | alt_like
176
176
 
@@ -209,16 +209,16 @@
209
209
 
210
210
  //string
211
211
  _LIKE.1: "like("i
212
- like: _LIKE expr "," _string_lit ")"
212
+ like: _LIKE expr "," string_lit ")"
213
213
  _ILIKE.1: "ilike("i
214
- ilike: _ILIKE expr "," _string_lit ")"
214
+ ilike: _ILIKE expr "," string_lit ")"
215
215
  alt_like: expr "like"i expr
216
216
  _UPPER.1: "upper("i
217
217
  upper: _UPPER expr ")"
218
218
  _LOWER.1: "lower("i
219
219
  lower: _LOWER expr ")"
220
220
  _SPLIT.1: "split("i
221
- fsplit: _SPLIT expr "," _string_lit ")"
221
+ fsplit: _SPLIT expr "," string_lit ")"
222
222
  _STRPOS.1: "strpos("i
223
223
  fstrpos: _STRPOS expr "," expr ")"
224
224
  _SUBSTRING.1: "substring("i
@@ -301,7 +301,7 @@
301
301
  SINGLE_STRING_CHARS: /(?:(?!\${)([^'\\]|\\.))+/+ // any character except '
302
302
  _single_quote: "'" ( SINGLE_STRING_CHARS )* "'"
303
303
  _double_quote: "\"" ( DOUBLE_STRING_CHARS )* "\""
304
- _string_lit: _single_quote | _double_quote
304
+ string_lit: _single_quote | _double_quote
305
305
 
306
306
  MINUS: "-"
307
307
 
@@ -322,7 +322,7 @@
322
322
 
323
323
  !null_lit.1: "null"i
324
324
 
325
- literal: null_lit | _string_lit | int_lit | float_lit | bool_lit | array_lit | map_lit | struct_lit | tuple_lit
325
+ literal: null_lit | string_lit | int_lit | float_lit | bool_lit | array_lit | map_lit | struct_lit | tuple_lit
326
326
 
327
327
  MODIFIER: "Optional"i | "Partial"i | "Nullable"i
328
328