omlish 0.0.0.dev251__py3-none-any.whl → 0.0.0.dev253__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.
@@ -0,0 +1,291 @@
1
+ # type: ignore
2
+ # ruff: noqa
3
+ # flake8: noqa
4
+ # Generated from Minisql.g4 by ANTLR 4.13.2
5
+ from omlish.antlr._runtime._all import *
6
+ if "." in __name__:
7
+ from .MinisqlParser import MinisqlParser
8
+ else:
9
+ from MinisqlParser import MinisqlParser
10
+
11
+ # This class defines a complete generic visitor for a parse tree produced by MinisqlParser.
12
+
13
+ class MinisqlVisitor(ParseTreeVisitor):
14
+
15
+ # Visit a parse tree produced by MinisqlParser#singleStmt.
16
+ def visitSingleStmt(self, ctx:MinisqlParser.SingleStmtContext):
17
+ return self.visitChildren(ctx)
18
+
19
+
20
+ # Visit a parse tree produced by MinisqlParser#select.
21
+ def visitSelect(self, ctx:MinisqlParser.SelectContext):
22
+ return self.visitChildren(ctx)
23
+
24
+
25
+ # Visit a parse tree produced by MinisqlParser#cteSelect.
26
+ def visitCteSelect(self, ctx:MinisqlParser.CteSelectContext):
27
+ return self.visitChildren(ctx)
28
+
29
+
30
+ # Visit a parse tree produced by MinisqlParser#cte.
31
+ def visitCte(self, ctx:MinisqlParser.CteContext):
32
+ return self.visitChildren(ctx)
33
+
34
+
35
+ # Visit a parse tree produced by MinisqlParser#unionSelect.
36
+ def visitUnionSelect(self, ctx:MinisqlParser.UnionSelectContext):
37
+ return self.visitChildren(ctx)
38
+
39
+
40
+ # Visit a parse tree produced by MinisqlParser#unionItem.
41
+ def visitUnionItem(self, ctx:MinisqlParser.UnionItemContext):
42
+ return self.visitChildren(ctx)
43
+
44
+
45
+ # Visit a parse tree produced by MinisqlParser#primarySelect.
46
+ def visitPrimarySelect(self, ctx:MinisqlParser.PrimarySelectContext):
47
+ return self.visitChildren(ctx)
48
+
49
+
50
+ # Visit a parse tree produced by MinisqlParser#allSelectItem.
51
+ def visitAllSelectItem(self, ctx:MinisqlParser.AllSelectItemContext):
52
+ return self.visitChildren(ctx)
53
+
54
+
55
+ # Visit a parse tree produced by MinisqlParser#exprSelectItem.
56
+ def visitExprSelectItem(self, ctx:MinisqlParser.ExprSelectItemContext):
57
+ return self.visitChildren(ctx)
58
+
59
+
60
+ # Visit a parse tree produced by MinisqlParser#expr.
61
+ def visitExpr(self, ctx:MinisqlParser.ExprContext):
62
+ return self.visitChildren(ctx)
63
+
64
+
65
+ # Visit a parse tree produced by MinisqlParser#unaryBooleanExpr.
66
+ def visitUnaryBooleanExpr(self, ctx:MinisqlParser.UnaryBooleanExprContext):
67
+ return self.visitChildren(ctx)
68
+
69
+
70
+ # Visit a parse tree produced by MinisqlParser#predicatedBooleanExpr.
71
+ def visitPredicatedBooleanExpr(self, ctx:MinisqlParser.PredicatedBooleanExprContext):
72
+ return self.visitChildren(ctx)
73
+
74
+
75
+ # Visit a parse tree produced by MinisqlParser#binaryBooleanExpr.
76
+ def visitBinaryBooleanExpr(self, ctx:MinisqlParser.BinaryBooleanExprContext):
77
+ return self.visitChildren(ctx)
78
+
79
+
80
+ # Visit a parse tree produced by MinisqlParser#castBooleanExpr.
81
+ def visitCastBooleanExpr(self, ctx:MinisqlParser.CastBooleanExprContext):
82
+ return self.visitChildren(ctx)
83
+
84
+
85
+ # Visit a parse tree produced by MinisqlParser#cmpPredicate.
86
+ def visitCmpPredicate(self, ctx:MinisqlParser.CmpPredicateContext):
87
+ return self.visitChildren(ctx)
88
+
89
+
90
+ # Visit a parse tree produced by MinisqlParser#isNullPredicate.
91
+ def visitIsNullPredicate(self, ctx:MinisqlParser.IsNullPredicateContext):
92
+ return self.visitChildren(ctx)
93
+
94
+
95
+ # Visit a parse tree produced by MinisqlParser#inListPredicate.
96
+ def visitInListPredicate(self, ctx:MinisqlParser.InListPredicateContext):
97
+ return self.visitChildren(ctx)
98
+
99
+
100
+ # Visit a parse tree produced by MinisqlParser#inSelectPredicate.
101
+ def visitInSelectPredicate(self, ctx:MinisqlParser.InSelectPredicateContext):
102
+ return self.visitChildren(ctx)
103
+
104
+
105
+ # Visit a parse tree produced by MinisqlParser#likePredicate.
106
+ def visitLikePredicate(self, ctx:MinisqlParser.LikePredicateContext):
107
+ return self.visitChildren(ctx)
108
+
109
+
110
+ # Visit a parse tree produced by MinisqlParser#arithValueExpr.
111
+ def visitArithValueExpr(self, ctx:MinisqlParser.ArithValueExprContext):
112
+ return self.visitChildren(ctx)
113
+
114
+
115
+ # Visit a parse tree produced by MinisqlParser#unaryValueExpr.
116
+ def visitUnaryValueExpr(self, ctx:MinisqlParser.UnaryValueExprContext):
117
+ return self.visitChildren(ctx)
118
+
119
+
120
+ # Visit a parse tree produced by MinisqlParser#primaryValueExpr.
121
+ def visitPrimaryValueExpr(self, ctx:MinisqlParser.PrimaryValueExprContext):
122
+ return self.visitChildren(ctx)
123
+
124
+
125
+ # Visit a parse tree produced by MinisqlParser#functionCallExpr.
126
+ def visitFunctionCallExpr(self, ctx:MinisqlParser.FunctionCallExprContext):
127
+ return self.visitChildren(ctx)
128
+
129
+
130
+ # Visit a parse tree produced by MinisqlParser#starFunctionCallExpr.
131
+ def visitStarFunctionCallExpr(self, ctx:MinisqlParser.StarFunctionCallExprContext):
132
+ return self.visitChildren(ctx)
133
+
134
+
135
+ # Visit a parse tree produced by MinisqlParser#caseExpr.
136
+ def visitCaseExpr(self, ctx:MinisqlParser.CaseExprContext):
137
+ return self.visitChildren(ctx)
138
+
139
+
140
+ # Visit a parse tree produced by MinisqlParser#selectExpr.
141
+ def visitSelectExpr(self, ctx:MinisqlParser.SelectExprContext):
142
+ return self.visitChildren(ctx)
143
+
144
+
145
+ # Visit a parse tree produced by MinisqlParser#parenExpr.
146
+ def visitParenExpr(self, ctx:MinisqlParser.ParenExprContext):
147
+ return self.visitChildren(ctx)
148
+
149
+
150
+ # Visit a parse tree produced by MinisqlParser#simplePrimaryExpr.
151
+ def visitSimplePrimaryExpr(self, ctx:MinisqlParser.SimplePrimaryExprContext):
152
+ return self.visitChildren(ctx)
153
+
154
+
155
+ # Visit a parse tree produced by MinisqlParser#simpleExpr.
156
+ def visitSimpleExpr(self, ctx:MinisqlParser.SimpleExprContext):
157
+ return self.visitChildren(ctx)
158
+
159
+
160
+ # Visit a parse tree produced by MinisqlParser#caseItem.
161
+ def visitCaseItem(self, ctx:MinisqlParser.CaseItemContext):
162
+ return self.visitChildren(ctx)
163
+
164
+
165
+ # Visit a parse tree produced by MinisqlParser#over.
166
+ def visitOver(self, ctx:MinisqlParser.OverContext):
167
+ return self.visitChildren(ctx)
168
+
169
+
170
+ # Visit a parse tree produced by MinisqlParser#sortItem.
171
+ def visitSortItem(self, ctx:MinisqlParser.SortItemContext):
172
+ return self.visitChildren(ctx)
173
+
174
+
175
+ # Visit a parse tree produced by MinisqlParser#aliasedRelation.
176
+ def visitAliasedRelation(self, ctx:MinisqlParser.AliasedRelationContext):
177
+ return self.visitChildren(ctx)
178
+
179
+
180
+ # Visit a parse tree produced by MinisqlParser#joinRelation.
181
+ def visitJoinRelation(self, ctx:MinisqlParser.JoinRelationContext):
182
+ return self.visitChildren(ctx)
183
+
184
+
185
+ # Visit a parse tree produced by MinisqlParser#selectRelation.
186
+ def visitSelectRelation(self, ctx:MinisqlParser.SelectRelationContext):
187
+ return self.visitChildren(ctx)
188
+
189
+
190
+ # Visit a parse tree produced by MinisqlParser#tableRelation.
191
+ def visitTableRelation(self, ctx:MinisqlParser.TableRelationContext):
192
+ return self.visitChildren(ctx)
193
+
194
+
195
+ # Visit a parse tree produced by MinisqlParser#parenRelation.
196
+ def visitParenRelation(self, ctx:MinisqlParser.ParenRelationContext):
197
+ return self.visitChildren(ctx)
198
+
199
+
200
+ # Visit a parse tree produced by MinisqlParser#groupBy.
201
+ def visitGroupBy(self, ctx:MinisqlParser.GroupByContext):
202
+ return self.visitChildren(ctx)
203
+
204
+
205
+ # Visit a parse tree produced by MinisqlParser#qualifiedName.
206
+ def visitQualifiedName(self, ctx:MinisqlParser.QualifiedNameContext):
207
+ return self.visitChildren(ctx)
208
+
209
+
210
+ # Visit a parse tree produced by MinisqlParser#identList.
211
+ def visitIdentList(self, ctx:MinisqlParser.IdentListContext):
212
+ return self.visitChildren(ctx)
213
+
214
+
215
+ # Visit a parse tree produced by MinisqlParser#ident.
216
+ def visitIdent(self, ctx:MinisqlParser.IdentContext):
217
+ return self.visitChildren(ctx)
218
+
219
+
220
+ # Visit a parse tree produced by MinisqlParser#quotedIdent.
221
+ def visitQuotedIdent(self, ctx:MinisqlParser.QuotedIdentContext):
222
+ return self.visitChildren(ctx)
223
+
224
+
225
+ # Visit a parse tree produced by MinisqlParser#integerNumber.
226
+ def visitIntegerNumber(self, ctx:MinisqlParser.IntegerNumberContext):
227
+ return self.visitChildren(ctx)
228
+
229
+
230
+ # Visit a parse tree produced by MinisqlParser#decimalNumber.
231
+ def visitDecimalNumber(self, ctx:MinisqlParser.DecimalNumberContext):
232
+ return self.visitChildren(ctx)
233
+
234
+
235
+ # Visit a parse tree produced by MinisqlParser#floatNumber.
236
+ def visitFloatNumber(self, ctx:MinisqlParser.FloatNumberContext):
237
+ return self.visitChildren(ctx)
238
+
239
+
240
+ # Visit a parse tree produced by MinisqlParser#string.
241
+ def visitString(self, ctx:MinisqlParser.StringContext):
242
+ return self.visitChildren(ctx)
243
+
244
+
245
+ # Visit a parse tree produced by MinisqlParser#null.
246
+ def visitNull(self, ctx:MinisqlParser.NullContext):
247
+ return self.visitChildren(ctx)
248
+
249
+
250
+ # Visit a parse tree produced by MinisqlParser#true.
251
+ def visitTrue(self, ctx:MinisqlParser.TrueContext):
252
+ return self.visitChildren(ctx)
253
+
254
+
255
+ # Visit a parse tree produced by MinisqlParser#false.
256
+ def visitFalse(self, ctx:MinisqlParser.FalseContext):
257
+ return self.visitChildren(ctx)
258
+
259
+
260
+ # Visit a parse tree produced by MinisqlParser#setQuantifier.
261
+ def visitSetQuantifier(self, ctx:MinisqlParser.SetQuantifierContext):
262
+ return self.visitChildren(ctx)
263
+
264
+
265
+ # Visit a parse tree produced by MinisqlParser#joinType.
266
+ def visitJoinType(self, ctx:MinisqlParser.JoinTypeContext):
267
+ return self.visitChildren(ctx)
268
+
269
+
270
+ # Visit a parse tree produced by MinisqlParser#cmpOp.
271
+ def visitCmpOp(self, ctx:MinisqlParser.CmpOpContext):
272
+ return self.visitChildren(ctx)
273
+
274
+
275
+ # Visit a parse tree produced by MinisqlParser#arithOp.
276
+ def visitArithOp(self, ctx:MinisqlParser.ArithOpContext):
277
+ return self.visitChildren(ctx)
278
+
279
+
280
+ # Visit a parse tree produced by MinisqlParser#unaryOp.
281
+ def visitUnaryOp(self, ctx:MinisqlParser.UnaryOpContext):
282
+ return self.visitChildren(ctx)
283
+
284
+
285
+ # Visit a parse tree produced by MinisqlParser#unquotedIdent.
286
+ def visitUnquotedIdent(self, ctx:MinisqlParser.UnquotedIdentContext):
287
+ return self.visitChildren(ctx)
288
+
289
+
290
+
291
+ del MinisqlParser
File without changes
@@ -0,0 +1,119 @@
1
+ # ruff: noqa: N802 N803
2
+ import typing as ta
3
+
4
+ from ... import check
5
+ from ...antlr import runtime as antlr4
6
+ from ...antlr.delimit import DelimitingLexer
7
+ from ...antlr.errors import SilentRaisingErrorListener
8
+ from .. import queries as no
9
+ from ._antlr.MinisqlLexer import MinisqlLexer # type: ignore
10
+ from ._antlr.MinisqlParser import MinisqlParser # type: ignore
11
+ from ._antlr.MinisqlVisitor import MinisqlVisitor # type: ignore
12
+
13
+
14
+ ##
15
+
16
+
17
+ class _ParseVisitor(MinisqlVisitor):
18
+ def visit(self, ctx: antlr4.ParserRuleContext):
19
+ check.isinstance(ctx, antlr4.ParserRuleContext)
20
+ node = ctx.accept(self)
21
+ return node
22
+
23
+ def aggregateResult(self, aggregate, nextResult):
24
+ if aggregate is not None:
25
+ check.none(nextResult)
26
+ return aggregate
27
+ else:
28
+ check.none(aggregate)
29
+ return nextResult
30
+
31
+ #
32
+
33
+ def visitExprSelectItem(self, ctx: MinisqlParser.ExprSelectItemContext):
34
+ value = self.visit(ctx.expr())
35
+ label = self.visit(ctx.ident()) if ctx.ident() is not None else None
36
+ return no.SelectItem(value, label)
37
+
38
+ def visitIntegerNumber(self, ctx: MinisqlParser.IntegerNumberContext):
39
+ return no.Literal(int(ctx.INTEGER_VALUE().getText()))
40
+
41
+ def visitPrimarySelect(self, ctx: MinisqlParser.PrimarySelectContext):
42
+ items = [self.visit(i) for i in ctx.selectItem()]
43
+ relations = [self.visit(r) for r in ctx.relation()]
44
+ where = self.visit(ctx.where) if ctx.where is not None else None
45
+ return no.Select(
46
+ items=items,
47
+ from_=check.single(relations) if relations else None,
48
+ where=where,
49
+ )
50
+
51
+ def visitQuotedIdent(self, ctx: MinisqlParser.QuotedIdentContext):
52
+ name = unquote(ctx.QUOTED_IDENT().getText(), '"')
53
+ return no.Ident(name)
54
+
55
+ def visitUnquotedIdent(self, ctx: MinisqlParser.UnquotedIdentContext):
56
+ return no.Ident(ctx.getText())
57
+
58
+
59
+ ##
60
+
61
+
62
+ def create_parser(buf: str) -> MinisqlParser:
63
+ lexer = MinisqlLexer(antlr4.InputStream(buf))
64
+ lexer.removeErrorListeners()
65
+ lexer.addErrorListener(SilentRaisingErrorListener())
66
+
67
+ stream = antlr4.CommonTokenStream(lexer)
68
+ stream.fill()
69
+
70
+ parser = MinisqlParser(stream)
71
+ parser.removeErrorListeners()
72
+ parser.addErrorListener(SilentRaisingErrorListener())
73
+
74
+ return parser
75
+
76
+
77
+ ##
78
+
79
+
80
+ def parse_stmt(buf: str, **kwargs) -> no.Stmt:
81
+ parser = create_parser(buf, **kwargs)
82
+ node = _ParseVisitor().visit(parser.singleStmt())
83
+ return check.isinstance(node, no.Stmt)
84
+
85
+
86
+ class _DelimitingLexer(DelimitingLexer, MinisqlLexer):
87
+ pass
88
+
89
+
90
+ def split_stmts(buf: str) -> ta.Sequence[str]:
91
+ lexer = _DelimitingLexer(
92
+ antlr4.InputStream(buf),
93
+ delimiter_token=MinisqlParser.DELIMITER,
94
+ delimiters=[';'],
95
+ )
96
+ lexer.removeErrorListeners()
97
+ lexer.addErrorListener(SilentRaisingErrorListener())
98
+
99
+ lst, part = lexer.split()
100
+ if part.strip():
101
+ raise ValueError(part)
102
+
103
+ return [s for s, _ in lst]
104
+
105
+
106
+ def parse_stmts(buf: str, **kwargs) -> ta.Sequence[no.Stmt]:
107
+ return [parse_stmt(sb, **kwargs) for sb in split_stmts(buf)]
108
+
109
+
110
+ ##
111
+
112
+
113
+ def quote(val: str, q: str) -> str:
114
+ return q + val.replace(q, q * 2) + q
115
+
116
+
117
+ def unquote(val: str, q: str) -> str:
118
+ check.arg(val.startswith(q) and val.endswith(q))
119
+ return val[1:-1].replace(q * 2, q)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omlish
3
- Version: 0.0.0.dev251
3
+ Version: 0.0.0.dev253
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -13,7 +13,7 @@ Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
15
  Provides-Extra: all
16
- Requires-Dist: anyio~=4.8; extra == "all"
16
+ Requires-Dist: anyio~=4.9; extra == "all"
17
17
  Requires-Dist: sniffio~=1.3; extra == "all"
18
18
  Requires-Dist: greenlet~=3.1; extra == "all"
19
19
  Requires-Dist: trio~=0.29; extra == "all"
@@ -43,7 +43,7 @@ Requires-Dist: apsw~=3.47; extra == "all"
43
43
  Requires-Dist: sqlean.py~=3.45; extra == "all"
44
44
  Requires-Dist: duckdb~=1.2; extra == "all"
45
45
  Requires-Dist: pytest~=8.0; extra == "all"
46
- Requires-Dist: anyio~=4.8; extra == "all"
46
+ Requires-Dist: anyio~=4.9; extra == "all"
47
47
  Requires-Dist: sniffio~=1.3; extra == "all"
48
48
  Requires-Dist: asttokens~=3.0; extra == "all"
49
49
  Requires-Dist: executing~=2.2; extra == "all"
@@ -51,7 +51,7 @@ Requires-Dist: orjson~=3.10; extra == "all"
51
51
  Requires-Dist: pyyaml~=6.0; extra == "all"
52
52
  Requires-Dist: wrapt~=1.17; extra == "all"
53
53
  Provides-Extra: async
54
- Requires-Dist: anyio~=4.8; extra == "async"
54
+ Requires-Dist: anyio~=4.9; extra == "async"
55
55
  Requires-Dist: sniffio~=1.3; extra == "async"
56
56
  Requires-Dist: greenlet~=3.1; extra == "async"
57
57
  Requires-Dist: trio~=0.29; extra == "async"
@@ -91,7 +91,7 @@ Requires-Dist: duckdb~=1.2; extra == "sqldrivers"
91
91
  Provides-Extra: testing
92
92
  Requires-Dist: pytest~=8.0; extra == "testing"
93
93
  Provides-Extra: plus
94
- Requires-Dist: anyio~=4.8; extra == "plus"
94
+ Requires-Dist: anyio~=4.9; extra == "plus"
95
95
  Requires-Dist: sniffio~=1.3; extra == "plus"
96
96
  Requires-Dist: asttokens~=3.0; extra == "plus"
97
97
  Requires-Dist: executing~=2.2; extra == "plus"
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=x26AIwDzScUvnX-p4xlq6Zc5QYrAo0Vmgf1qHc1KL_M,8253
2
- omlish/__about__.py,sha256=MFiFKUC3yK5vAd_nIoMJBCcGv-1JRmEmPlWpjfwcOkA,3380
2
+ omlish/__about__.py,sha256=SUzyh4gNJezXoDjwGUqKWpJF2LoBdZqSNlCL-GRYdsk,3380
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -13,6 +13,7 @@ omlish/outcome.py,sha256=ABIE0zjjTyTNtn-ZqQ_9_mUzLiBQ3sDAyqc9JVD8N2k,7852
13
13
  omlish/runmodule.py,sha256=PWvuAaJ9wQQn6bx9ftEL3_d04DyotNn8dR_twm2pgw0,700
14
14
  omlish/shlex.py,sha256=bsW2XUD8GiMTUTDefJejZ5AyqT1pTgWMPD0BMoF02jE,248
15
15
  omlish/sync.py,sha256=QJ79kxmIqDP9SeHDoZAf--DpFIhDQe1jACy8H4N0yZI,2928
16
+ omlish/_antlr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
17
  omlish/algorithm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
18
  omlish/algorithm/all.py,sha256=FudUHwoaRLNNmqYM3jhP2Yd2BpmYhNBRPaVZzARMoSc,194
18
19
  omlish/algorithm/distribute.py,sha256=kO60F7HtMF3j-IxuhJdtsfgIR1Vpf1okQfacb4eNukQ,1533
@@ -289,7 +290,7 @@ omlish/formats/json5/__init__.py,sha256=BsjPz5zJDji3GjQ8x8hWvcl1GYPV_ZIHnE3c2Sr8
289
290
  omlish/formats/json5/codec.py,sha256=ldnxCRo0JP1fkGLt0mMxJlLvNxqIF_1KUCcSp1HtI-M,452
290
291
  omlish/formats/json5/errors.py,sha256=AHkR9ySjAoQdUrizpqgL8fg0M5oe5mHZkml3KZHEvC4,38
291
292
  omlish/formats/json5/literals.py,sha256=rj4-9KFXfgdq5oK_eUkp57cgoMQ8T0gRaG9ga430he4,2429
292
- omlish/formats/json5/parsing.py,sha256=v1CPnJF73yX6eDe1GNfDVXFxBhBeoHrG5E5Tf5f6oL8,2341
293
+ omlish/formats/json5/parsing.py,sha256=FrH6CgAYoqHGgJMPfbhNNuvwxi20i5rus9pGHU-BcW0,2346
293
294
  omlish/formats/json5/_antlr/Json5Lexer.py,sha256=8TKxlENDsl6CPfoLR06uQSvhDnzGcY7fKsIhFJ_g6N4,23237
294
295
  omlish/formats/json5/_antlr/Json5Listener.py,sha256=fSiOzSS0CMjxaCev3sxZqJlW-buqIyDLwgnuRv-Uh80,2095
295
296
  omlish/formats/json5/_antlr/Json5Parser.py,sha256=nbbwoCPvEVRcEh5_t092XLmsXIHnbzONvH0W0g_BYkQ,19677
@@ -579,7 +580,7 @@ omlish/sockets/server/handlers.py,sha256=PPsb1X5oU9dN8jfztaMGsRiqWTyEANT-1aSLbS6
579
580
  omlish/sockets/server/server.py,sha256=FkaishIxJuU4it9tTI7wzlGqJYzFGXzDrd_HgV0jAmU,6253
580
581
  omlish/sockets/server/ssl.py,sha256=VE0GpdA-gYsN2m9_uvfDwWmXtIbRQqJomVdpGJO8o2M,1061
581
582
  omlish/sockets/server/threading.py,sha256=YmW3Ym_p5j_F4SIH9BgRHIObywjq1HS39j9CGWIcMAY,2856
582
- omlish/specs/__init__.py,sha256=zZwF8yXTEkSstYtORkDhVLK-_hWU8WOJCuBpognb_NY,118
583
+ omlish/specs/__init__.py,sha256=fxpcfXEWESH2kiPStKhl2dAdfLkZVTt_cssZKyqBLiQ,87
583
584
  omlish/specs/irc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
584
585
  omlish/specs/irc/messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
585
586
  omlish/specs/irc/messages/base.py,sha256=JQWq4L-USYFw1DmHPpL3FiAwvynf6Hi48-zNdC__jT0,1240
@@ -640,6 +641,15 @@ omlish/specs/jsonschema/schemas/draft202012/vocabularies/validation.json,sha256=
640
641
  omlish/specs/openapi/__init__.py,sha256=zilQhafjvteRDF_TUIRgF293dBC6g-TJChmUb6T9VBQ,77
641
642
  omlish/specs/openapi/marshal.py,sha256=Z-E2Knm04C81N8AA8cibCVSl2ImhSpHZVc7yAhmPx88,2135
642
643
  omlish/specs/openapi/openapi.py,sha256=y4h04jeB7ORJSVrcy7apaBdpwLjIyscv1Ub5SderH2c,12682
644
+ omlish/specs/proto/Protobuf3.g4,sha256=chDrovFsuZaHf5W35WZNts3jOa1ssPwvWiJR4yVIgjw,5552
645
+ omlish/specs/proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
646
+ omlish/specs/proto/nodes.py,sha256=nwA6KyU9pZHLE9cO9dh46qTl6vfYJ8SjuUDlLBuoOms,776
647
+ omlish/specs/proto/parsing.py,sha256=Rrdhvl-QHBxykGFd9XltqG8GBPgHaw5rRM8wuELCdsA,2861
648
+ omlish/specs/proto/_antlr/Protobuf3Lexer.py,sha256=-FpQNpCJyhHf2dM4ngLtAtb7sssrtAXeR0W4WuKY4Yo,19471
649
+ omlish/specs/proto/_antlr/Protobuf3Listener.py,sha256=hjzAJjcj4xWRim-68v-6QwIsPVdPwOFUGz1rusRcaWU,14506
650
+ omlish/specs/proto/_antlr/Protobuf3Parser.py,sha256=VmkUyJx3WxIgAecOa1BGwbO9fVNysZt5-arQ-wDubpk,132411
651
+ omlish/specs/proto/_antlr/Protobuf3Visitor.py,sha256=zEVBXly2k9Cqmgdb45QwpLR-fZCEq8hpp2WQj-s7Wps,8782
652
+ omlish/specs/proto/_antlr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
643
653
  omlish/sql/__init__.py,sha256=TpZLsEJKJzvJ0eMzuV8hwOJJbkxBCV1RZPUMLAVB6io,173
644
654
  omlish/sql/abc.py,sha256=yrUSO2OSY6rtMyA0_MlrEFEyIKXLJymSPpmJwEjEJuc,4038
645
655
  omlish/sql/dbapi.py,sha256=o6umqE7zVFI_ax0TnCKAikhAIPXChYOwVULb_OdcL1c,2974
@@ -660,6 +670,14 @@ omlish/sql/api/errors.py,sha256=YtC2gz5DqRTT3uCJniUOufVH1GEnFIc5ElkYLK3BHwM,230
660
670
  omlish/sql/api/funcs.py,sha256=-H6V-o9JPSHFXsxdHtutB4mP2LwJfCzlLbRrPHunmB4,990
661
671
  omlish/sql/api/queries.py,sha256=IgB8_sDe40-mKE-ByTmZ4GVOCdLLJDzJGJCevMd8R5s,1207
662
672
  omlish/sql/api/rows.py,sha256=MEK9LNYEe8vLEJXQJD63MpnSOiE22cawJL-dUWQD6sU,1246
673
+ omlish/sql/parsing/Minisql.g4,sha256=DlriPFcnGT4QYG7O7VH2EmDVJQZq5zewoQ-tpXsSbIY,4748
674
+ omlish/sql/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
675
+ omlish/sql/parsing/parsing.py,sha256=hYIZdEKik4q22aEHHOX6lCpMa1jvgUk2aC1Llx10NMI,3343
676
+ omlish/sql/parsing/_antlr/MinisqlLexer.py,sha256=f4WzRrwqM7tW6sNn01035hRWPZL7xtuvba9EMR06j2E,17611
677
+ omlish/sql/parsing/_antlr/MinisqlListener.py,sha256=2py_bfDQeEtJaJh9rtpKghbSrQlEGAEKf5ZBLErKqsI,16633
678
+ omlish/sql/parsing/_antlr/MinisqlParser.py,sha256=y9SFjXdQlWYJa2PbPm30d5SfcYM_8M8ts46IHhENbNc,132457
679
+ omlish/sql/parsing/_antlr/MinisqlVisitor.py,sha256=NCPorucLLOZ-Q99BtNbDOAfHytQl8wyroR8pI1uVovg,10030
680
+ omlish/sql/parsing/_antlr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
663
681
  omlish/sql/queries/__init__.py,sha256=N8oQFKY99g_MQhrPmvlBAkMeGIRURE9UxMO244mytzY,1332
664
682
  omlish/sql/queries/base.py,sha256=_8O3MbH_OEjBnhp2oIJUZ3ClaQ8l4Sj9BdPdsP0Ie-g,224
665
683
  omlish/sql/queries/binary.py,sha256=dcEzeEn104AMPuQ7QrJU2O-YCN3SUdxB5S4jaWKOUqY,2253
@@ -735,9 +753,9 @@ omlish/text/mangle.py,sha256=kfzFLfvepH-chl1P89_mdc5vC4FSqyPA2aVtgzuB8IY,1133
735
753
  omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
736
754
  omlish/text/parts.py,sha256=JkNZpyR2tv2CNcTaWJJhpQ9E4F0yPR8P_YfDbZfMtwQ,6182
737
755
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
738
- omlish-0.0.0.dev251.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
739
- omlish-0.0.0.dev251.dist-info/METADATA,sha256=mYsGKjeHcS30unmOluKNzDF1SzqNbVkhC4jMoCs8nwI,4176
740
- omlish-0.0.0.dev251.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
741
- omlish-0.0.0.dev251.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
742
- omlish-0.0.0.dev251.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
743
- omlish-0.0.0.dev251.dist-info/RECORD,,
756
+ omlish-0.0.0.dev253.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
757
+ omlish-0.0.0.dev253.dist-info/METADATA,sha256=Mo7bxTA92y4u34s-B-sWSsWvkHFRu4wOhRnIk5VTauA,4176
758
+ omlish-0.0.0.dev253.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
759
+ omlish-0.0.0.dev253.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
760
+ omlish-0.0.0.dev253.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
761
+ omlish-0.0.0.dev253.dist-info/RECORD,,