pytrilogy 0.0.3.116__py3-none-any.whl → 0.0.3.117__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.116
3
+ Version: 0.0.3.117
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Classifier: Programming Language :: Python
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1,5 +1,5 @@
1
- pytrilogy-0.0.3.116.dist-info/licenses/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
2
- trilogy/__init__.py,sha256=4zCLL3ve6Z14PQ3LocAoJnyiTflxDn90gE8yUR-T9-w,304
1
+ pytrilogy-0.0.3.117.dist-info/licenses/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
2
+ trilogy/__init__.py,sha256=TkCDQL8X9qEaoFjTuzamNRfxRiggkAyy6htNlnHQ6XU,304
3
3
  trilogy/constants.py,sha256=_Tm7YGaAZuxH77X5ve0TajU0dQD7RcGV6ECrTHRL3qQ,2678
4
4
  trilogy/engine.py,sha256=v4TpNktM4zZ9OX7jZH2nde4dpX5uAH2U23ELfULTCSg,2280
5
5
  trilogy/executor.py,sha256=uKlCnPp4FHkgsa_dDcQJ4y-ObtvKat2KFx05c-z1mZo,17885
@@ -117,9 +117,9 @@ trilogy/parsing/common.py,sha256=GijDRpysULL6vQWpFcjgxVASuTWXUVUi5fILHvjzkbg,355
117
117
  trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
118
118
  trilogy/parsing/exceptions.py,sha256=Xwwsv2C9kSNv2q-HrrKC1f60JNHShXcCMzstTSEbiCw,154
119
119
  trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
120
- trilogy/parsing/parse_engine.py,sha256=iHBRUatv4hXSdDgAjllgTe1OtD8WE7V0Gu-ZTT2YugY,86301
120
+ trilogy/parsing/parse_engine.py,sha256=oCHQz5JaWvOu6u3IkpBWC8FwWCpDt0GNat5fxi9x0Eo,86742
121
121
  trilogy/parsing/render.py,sha256=k7MNp8EBTqVBSVqFlgTHSwIhfSKLyJfSeb2fSbt9dVA,24307
122
- trilogy/parsing/trilogy.lark,sha256=6nQ4fLpiL0pNMAlmmIEwN8Am4DlIIYpBVajp4jHveA8,17185
122
+ trilogy/parsing/trilogy.lark,sha256=mbwwPlz__xO3ydLXXSum0zZK8k8QyifPTJdyNyMDlSY,17280
123
123
  trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
124
  trilogy/scripts/trilogy.py,sha256=1L0XrH4mVHRt1C9T1HnaDv2_kYEfbWTb5_-cBBke79w,3774
125
125
  trilogy/std/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -132,8 +132,8 @@ trilogy/std/money.preql,sha256=XWwvAV3WxBsHX9zfptoYRnBigcfYwrYtBHXTME0xJuQ,2082
132
132
  trilogy/std/net.preql,sha256=WZCuvH87_rZntZiuGJMmBDMVKkdhTtxeHOkrXNwJ1EE,416
133
133
  trilogy/std/ranking.preql,sha256=LDoZrYyz4g3xsII9XwXfmstZD-_92i1Eox1UqkBIfi8,83
134
134
  trilogy/std/report.preql,sha256=LbV-XlHdfw0jgnQ8pV7acG95xrd1-p65fVpiIc-S7W4,202
135
- pytrilogy-0.0.3.116.dist-info/METADATA,sha256=N3aeyGXHRF0etmB8YiAXUHOfidTmQgqDcxUm8enTumw,12911
136
- pytrilogy-0.0.3.116.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
137
- pytrilogy-0.0.3.116.dist-info/entry_points.txt,sha256=ewBPU2vLnVexZVnB-NrVj-p3E-4vukg83Zk8A55Wp2w,56
138
- pytrilogy-0.0.3.116.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
139
- pytrilogy-0.0.3.116.dist-info/RECORD,,
135
+ pytrilogy-0.0.3.117.dist-info/METADATA,sha256=abcEvZwmW_1-WWPIeGOqghBy9u2MD3Rh0xCMbxQzA78,12911
136
+ pytrilogy-0.0.3.117.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
137
+ pytrilogy-0.0.3.117.dist-info/entry_points.txt,sha256=ewBPU2vLnVexZVnB-NrVj-p3E-4vukg83Zk8A55Wp2w,56
138
+ pytrilogy-0.0.3.117.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
139
+ pytrilogy-0.0.3.117.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.116"
7
+ __version__ = "0.0.3.117"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
@@ -425,6 +425,9 @@ class ParseToObjects(Transformer):
425
425
  def IDENTIFIER(self, args) -> str:
426
426
  return args.value
427
427
 
428
+ def ORDER_IDENTIFIER(self, args) -> ConceptRef:
429
+ return self.environment.concepts[args.value.strip()].reference
430
+
428
431
  def WILDCARD_IDENTIFIER(self, args) -> str:
429
432
  return args.value
430
433
 
@@ -2405,6 +2408,10 @@ def parse_text(
2405
2408
  """Handle UnexpectedToken errors to make friendlier error messages."""
2406
2409
  # Handle ordering direction error
2407
2410
  pos = e.pos_in_stream or 0
2411
+ if e.interactive_parser.lexer_thread.state:
2412
+ last_token = e.interactive_parser.lexer_thread.state.last_token
2413
+ else:
2414
+ last_token = None
2408
2415
  if e.expected == {"ORDERING_DIRECTION"}:
2409
2416
  raise _create_syntax_error(210, pos, text)
2410
2417
 
@@ -2412,19 +2419,22 @@ def parse_text(
2412
2419
  parsed_tokens = (
2413
2420
  [x.value for x in e.token_history if x] if e.token_history else []
2414
2421
  )
2422
+
2415
2423
  if parsed_tokens == ["FROM"]:
2416
2424
  raise _create_syntax_error(101, pos, text)
2417
2425
  # check if they are missing a semicolon
2418
- try:
2419
- e.interactive_parser.feed_token(Token("_TERMINATOR", ";"))
2420
- state = e.interactive_parser.lexer_thread.state
2421
- if state and state.last_token:
2422
- new_pos = state.last_token.end_pos or pos
2423
- else:
2424
- new_pos = pos
2425
- raise _create_syntax_error(202, new_pos, text)
2426
- except UnexpectedToken:
2427
- pass
2426
+ if last_token and e.token.type == "$END":
2427
+ try:
2428
+
2429
+ e.interactive_parser.feed_token(Token("_TERMINATOR", ";"))
2430
+ state = e.interactive_parser.lexer_thread.state
2431
+ if state and state.last_token:
2432
+ new_pos = state.last_token.end_pos or pos
2433
+ else:
2434
+ new_pos = pos
2435
+ raise _create_syntax_error(202, new_pos, text)
2436
+ except UnexpectedToken:
2437
+ pass
2428
2438
  # check if they forgot an as
2429
2439
  try:
2430
2440
  e.interactive_parser.feed_token(Token("AS", "AS"))
@@ -2434,6 +2444,8 @@ def parse_text(
2434
2444
  else:
2435
2445
  new_pos = pos
2436
2446
  e.interactive_parser.feed_token(Token("IDENTIFIER", e.token.value))
2447
+ next(e.interactive_parser.iter_parse())
2448
+
2437
2449
  raise _create_syntax_error(201, new_pos, text)
2438
2450
  except UnexpectedToken:
2439
2451
  pass
@@ -139,7 +139,8 @@
139
139
 
140
140
  limit: "LIMIT"i /[0-9]+/
141
141
 
142
- _order_atom: expr ordering
142
+ ORDER_IDENTIFIER.2: /(?!LIMIT)[a-zA-Z_][a-zA-Z0-9_\.]*\s+/
143
+ _order_atom: (ORDER_IDENTIFIER ordering) | (expr ordering)
143
144
 
144
145
  order_list: _order_atom ("," _order_atom)* ","?
145
146