execsql2 2.29.0__py3-none-any.whl → 2.30.0__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.
- execsql/__main__.py +4 -5
- execsql/api.py +5 -0
- execsql/cli/__init__.py +3 -14
- execsql/cli/application.py +5 -3
- execsql/cli/commands/lint.py +4 -1
- execsql/cli/commands/lsp.py +42 -0
- execsql/cli/dsn.py +3 -1
- execsql/cli/lint.py +14 -6
- execsql/cli/run.py +17 -9
- execsql/config.py +32 -6
- execsql/db/duckdb.py +96 -14
- execsql/gui/__init__.py +3 -31
- execsql/lsp/_util.py +21 -0
- execsql/lsp/cache.py +73 -0
- execsql/lsp/code_actions.py +10 -14
- execsql/lsp/completion.py +8 -15
- execsql/lsp/diagnostics.py +14 -2
- execsql/lsp/document.py +139 -41
- execsql/lsp/hover.py +5 -13
- execsql/lsp/navigation.py +7 -10
- execsql/lsp/server.py +111 -29
- execsql/manifest.py +29 -9
- execsql/metacommands/__init__.py +0 -2
- execsql/metacommands/io_fileops.py +5 -0
- execsql/script/executor.py +2 -21
- execsql/state.py +6 -3
- execsql/state.pyi +2 -0
- execsql/utils/errors.py +19 -36
- execsql/utils/fileio.py +44 -48
- execsql/utils/regex.py +0 -5
- {execsql2-2.29.0.dist-info → execsql2-2.30.0.dist-info}/METADATA +2 -4
- {execsql2-2.29.0.dist-info → execsql2-2.30.0.dist-info}/RECORD +50 -48
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/README.md +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/config_settings.sqlite +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/example_config_prompt.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/make_config_db.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/md_compare.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/md_glossary.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/md_upsert.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/pg_compare.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/pg_glossary.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/pg_upsert.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/script_template.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/ss_compare.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/ss_glossary.sql +0 -0
- {execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/ss_upsert.sql +0 -0
- {execsql2-2.29.0.dist-info → execsql2-2.30.0.dist-info}/WHEEL +0 -0
- {execsql2-2.29.0.dist-info → execsql2-2.30.0.dist-info}/entry_points.txt +0 -0
- {execsql2-2.29.0.dist-info → execsql2-2.30.0.dist-info}/licenses/LICENSE.txt +0 -0
- {execsql2-2.29.0.dist-info → execsql2-2.30.0.dist-info}/licenses/NOTICE +0 -0
execsql/utils/fileio.py
CHANGED
|
@@ -34,7 +34,6 @@ import threading
|
|
|
34
34
|
import time
|
|
35
35
|
import weakref
|
|
36
36
|
from collections.abc import Callable
|
|
37
|
-
from encodings.aliases import aliases as codec_dict
|
|
38
37
|
from typing import Any, NamedTuple, cast
|
|
39
38
|
|
|
40
39
|
from execsql.exceptions import ErrInfo
|
|
@@ -47,14 +46,11 @@ __all__ = [
|
|
|
47
46
|
"EncodedFile",
|
|
48
47
|
"Logger",
|
|
49
48
|
"TempFileMgr",
|
|
50
|
-
"list_encodings",
|
|
51
49
|
"filewriter_filestatus",
|
|
52
50
|
"filewriter_write",
|
|
53
51
|
"filewriter_open_as_new",
|
|
54
52
|
"filewriter_close",
|
|
55
53
|
"filewriter_close_all_after_write",
|
|
56
|
-
"filewriter_closeall",
|
|
57
|
-
"filewriter_shutdown",
|
|
58
54
|
"filewriter_end",
|
|
59
55
|
"redact",
|
|
60
56
|
"register_secret",
|
|
@@ -216,9 +212,8 @@ class FileWriter(threading.Thread):
|
|
|
216
212
|
CMD_OPEN_AS_NEW,
|
|
217
213
|
CMD_CLOSE_ALL_AFTER_WRITE,
|
|
218
214
|
CMD_CLOSED_STATUS,
|
|
219
|
-
CMD_PING,
|
|
220
215
|
CMD_OPEN_FAILURES,
|
|
221
|
-
) = range(
|
|
216
|
+
) = range(9)
|
|
222
217
|
|
|
223
218
|
class FileControl:
|
|
224
219
|
STATUS_OPEN, STATUS_WAITING, STATUS_UNOPENED, STATUS_CLOSED, STATUS_OPENFAILURE, STATUS_WRITEFAILURE = range(6)
|
|
@@ -375,7 +370,6 @@ class FileWriter(threading.Thread):
|
|
|
375
370
|
self.open_as_new,
|
|
376
371
|
self.close_all_after_write,
|
|
377
372
|
self.closed_status,
|
|
378
|
-
self.ping,
|
|
379
373
|
self.open_failures,
|
|
380
374
|
)
|
|
381
375
|
|
|
@@ -417,10 +411,6 @@ class FileWriter(threading.Thread):
|
|
|
417
411
|
if fc.status != self.FileControl.STATUS_CLOSED and fc.status not in fc.FAILED:
|
|
418
412
|
self._on_file(fc, fc.clean_close)
|
|
419
413
|
|
|
420
|
-
def ping(self, token: object) -> None:
|
|
421
|
-
"""Echo *token* back on the return queue — used to synchronize callers."""
|
|
422
|
-
self.return_msg_queue.put(token)
|
|
423
|
-
|
|
424
414
|
def retry_waiting(self) -> None:
|
|
425
415
|
"""Re-attempt opening every file still waiting on a lock.
|
|
426
416
|
|
|
@@ -526,7 +516,7 @@ class FileWriter(threading.Thread):
|
|
|
526
516
|
the rest, so one bad command cannot stop the thread (and with it
|
|
527
517
|
every later write, to any file).
|
|
528
518
|
"""
|
|
529
|
-
filename = argtuple[0] if
|
|
519
|
+
filename = argtuple[0] if argtuple and isinstance(argtuple[0], str) else ""
|
|
530
520
|
lost = LostOutput(filename, 0, str(exc), "writer")
|
|
531
521
|
if command == self.CMD_OPEN_FAILURES:
|
|
532
522
|
self.return_msg_queue.put([lost])
|
|
@@ -535,7 +525,6 @@ class FileWriter(threading.Thread):
|
|
|
535
525
|
replies: dict[int, Any] = {
|
|
536
526
|
self.CMD_GET_STATUS: self.FileControl.STATUS_CLOSED,
|
|
537
527
|
self.CMD_CLOSED_STATUS: self.FileControl.STATUS_CLOSED,
|
|
538
|
-
self.CMD_PING: argtuple[0] if argtuple else None,
|
|
539
528
|
}
|
|
540
529
|
if command in replies:
|
|
541
530
|
self.return_msg_queue.put(replies[command])
|
|
@@ -745,20 +734,6 @@ def _lost_output_message(lost: LostOutput, open_timeout: int) -> str:
|
|
|
745
734
|
return f"{cause}; {lost.dropped} line(s) of output to it were discarded" if lost.dropped else cause
|
|
746
735
|
|
|
747
736
|
|
|
748
|
-
def filewriter_closeall() -> None:
|
|
749
|
-
fw = _active_writer()
|
|
750
|
-
if fw is None:
|
|
751
|
-
return
|
|
752
|
-
fw.input_queue.put((FileWriter.CMD_CLOSE_ALL, ()))
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
def filewriter_shutdown() -> None:
|
|
756
|
-
fw = _active_writer()
|
|
757
|
-
if fw is None:
|
|
758
|
-
return
|
|
759
|
-
fw.input_queue.put((FileWriter.CMD_SHUTDOWN, ()))
|
|
760
|
-
|
|
761
|
-
|
|
762
737
|
def filewriter_end(writer: FileWriter | None = None) -> None:
|
|
763
738
|
"""Close every file and stop *writer*, or the active run's writer if omitted.
|
|
764
739
|
|
|
@@ -894,6 +869,8 @@ class Logger:
|
|
|
894
869
|
self.server_name = server_name
|
|
895
870
|
self.cmdline_options = cmdline_options
|
|
896
871
|
self._redaction_values: list[str] = []
|
|
872
|
+
# Of those, the -a / --var values: masked in the log, not in the manifest.
|
|
873
|
+
self._argument_values: set[str] = set()
|
|
897
874
|
if log_file_name:
|
|
898
875
|
self.log_file_name = log_file_name
|
|
899
876
|
else:
|
|
@@ -956,9 +933,9 @@ class Logger:
|
|
|
956
933
|
)
|
|
957
934
|
self.writelog(self._redact(msg) or "")
|
|
958
935
|
if server_name:
|
|
959
|
-
msg = f"run_db_server\t{self.run_id}\t{server_name}\t{db_name}\n"
|
|
936
|
+
msg = f"run_db_server\t{self.run_id}\t{self._redact(server_name)}\t{self._redact(db_name)}\n"
|
|
960
937
|
else:
|
|
961
|
-
msg = f"run_db_file\t{self.run_id}\t{db_name}\n"
|
|
938
|
+
msg = f"run_db_file\t{self.run_id}\t{self._redact(db_name)}\n"
|
|
962
939
|
self.writelog(msg)
|
|
963
940
|
self.seq_no = 0
|
|
964
941
|
atexit.register(self.close)
|
|
@@ -974,20 +951,41 @@ class Logger:
|
|
|
974
951
|
|
|
975
952
|
return _datetime.datetime.now().isoformat(timespec="seconds")
|
|
976
953
|
|
|
977
|
-
def add_redaction_value(self, value: str | None) -> None:
|
|
954
|
+
def add_redaction_value(self, value: str | None, *, argument: bool = False) -> None:
|
|
955
|
+
"""Mask *value* in every later log record.
|
|
956
|
+
|
|
957
|
+
*argument* marks an ``-a`` / ``--var`` value: it may be a secret, so
|
|
958
|
+
the log masks it, but it is just as often part of a path, so the
|
|
959
|
+
``--manifest`` JSON (``redact(..., arguments=False)``) does not. A
|
|
960
|
+
value registered both ways is a secret.
|
|
961
|
+
"""
|
|
978
962
|
if value is None:
|
|
979
963
|
return
|
|
980
964
|
value = str(value)
|
|
981
|
-
if not value
|
|
965
|
+
if not value:
|
|
966
|
+
return
|
|
967
|
+
if not argument:
|
|
968
|
+
self._argument_values.discard(value)
|
|
969
|
+
if value in self._redaction_values:
|
|
982
970
|
return
|
|
983
971
|
self._redaction_values.append(value)
|
|
972
|
+
if argument:
|
|
973
|
+
self._argument_values.add(value)
|
|
974
|
+
|
|
975
|
+
def _redact(self, msg: str | None, *, arguments: bool = True) -> str | None:
|
|
976
|
+
"""*msg* with registered secrets and common secret shapes replaced by ``***``.
|
|
984
977
|
|
|
985
|
-
|
|
978
|
+
Every record applies it to its free-text fields (messages, names,
|
|
979
|
+
paths), never to a whole line: a registered value can be as short as
|
|
980
|
+
a ``-a 2024`` argument, which would otherwise mask timestamps and
|
|
981
|
+
sequence numbers.
|
|
982
|
+
"""
|
|
986
983
|
if msg is None:
|
|
987
984
|
return None
|
|
988
985
|
redacted = str(msg)
|
|
989
986
|
for value in sorted(self._redaction_values, key=len, reverse=True):
|
|
990
|
-
|
|
987
|
+
if arguments or value not in self._argument_values:
|
|
988
|
+
redacted = redacted.replace(value, "***")
|
|
991
989
|
for pattern in self._COMMON_SECRET_PATTERNS:
|
|
992
990
|
if pattern.pattern.startswith("(?i)(://"):
|
|
993
991
|
redacted = pattern.sub(r"\1***\3", redacted)
|
|
@@ -1026,12 +1024,13 @@ class Logger:
|
|
|
1026
1024
|
|
|
1027
1025
|
def log_db_connect(self, db: Any) -> None:
|
|
1028
1026
|
self.seq_no += 1
|
|
1029
|
-
msg = f"connect\t{self.run_id}\t{self.seq_no}\t{self._ts()}\t{db.name()}\n"
|
|
1027
|
+
msg = f"connect\t{self.run_id}\t{self.seq_no}\t{self._ts()}\t{self._redact(db.name())}\n"
|
|
1030
1028
|
self.writelog(msg)
|
|
1031
1029
|
|
|
1032
1030
|
def log_action_export(self, line_no: int, query_name: str, export_file_name: str) -> None:
|
|
1033
1031
|
self.seq_no += 1
|
|
1034
|
-
|
|
1032
|
+
description = self._redact(f"Query {query_name} exported to {export_file_name}")
|
|
1033
|
+
msg = f"action\t{self.run_id}\t{self.seq_no}\t{self._ts()}\texport\t{line_no}\t{description}\n"
|
|
1035
1034
|
self.writelog(msg)
|
|
1036
1035
|
|
|
1037
1036
|
def log_status_exception(self, msg: str | None) -> None:
|
|
@@ -1087,7 +1086,7 @@ class Logger:
|
|
|
1087
1086
|
self.exit_type = "halt"
|
|
1088
1087
|
self.exit_scriptfile = script_file_name
|
|
1089
1088
|
self.exit_lno = line_no
|
|
1090
|
-
self.exit_description = msg
|
|
1089
|
+
self.exit_description = None if not msg else msg.replace("\n", "")
|
|
1091
1090
|
|
|
1092
1091
|
def log_exit_interrupted(self) -> None:
|
|
1093
1092
|
# Save values to be used by exit() function triggered on program exit
|
|
@@ -1121,9 +1120,9 @@ class Logger:
|
|
|
1121
1120
|
wmsg = "exit\t{}\t{}\t{}({})\t{}\t{:.1f}s\n".format(
|
|
1122
1121
|
self.run_id,
|
|
1123
1122
|
self.exit_type,
|
|
1124
|
-
self.exit_scriptfile or "",
|
|
1123
|
+
self._redact(self.exit_scriptfile) or "",
|
|
1125
1124
|
str(self.exit_lno or ""),
|
|
1126
|
-
self.exit_description or "",
|
|
1125
|
+
self._redact(self.exit_description) or "", # a HALT MESSAGE can hold any variable's value
|
|
1127
1126
|
elapsed,
|
|
1128
1127
|
)
|
|
1129
1128
|
self.writelog(wmsg)
|
|
@@ -1144,12 +1143,16 @@ def register_secret(value: str | None) -> None:
|
|
|
1144
1143
|
add(value)
|
|
1145
1144
|
|
|
1146
1145
|
|
|
1147
|
-
def redact(text: str) -> str:
|
|
1148
|
-
"""*text* with the active run's registered secrets and common secret shapes replaced by ``***``.
|
|
1146
|
+
def redact(text: str, *, arguments: bool = True) -> str:
|
|
1147
|
+
"""*text* with the active run's registered secrets and common secret shapes replaced by ``***``.
|
|
1148
|
+
|
|
1149
|
+
With *arguments* false, ``-a`` / ``--var`` values are left as they are
|
|
1150
|
+
(see :meth:`Logger.add_redaction_value`).
|
|
1151
|
+
"""
|
|
1149
1152
|
import execsql.state as _state
|
|
1150
1153
|
|
|
1151
1154
|
redactor = getattr(_state.exec_log, "_redact", None)
|
|
1152
|
-
return redactor(text) if redactor is not None else text
|
|
1155
|
+
return (redactor(text, arguments=arguments) or "") if redactor is not None else text
|
|
1153
1156
|
|
|
1154
1157
|
|
|
1155
1158
|
class TempFileMgr:
|
|
@@ -1188,10 +1191,3 @@ _live_tempfile_mgrs: weakref.WeakSet[TempFileMgr] = weakref.WeakSet()
|
|
|
1188
1191
|
def _remove_all_temp_files() -> None:
|
|
1189
1192
|
for mgr in list(_live_tempfile_mgrs):
|
|
1190
1193
|
mgr.remove_all()
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
def list_encodings() -> None:
|
|
1194
|
-
enc = list(codec_dict.keys())
|
|
1195
|
-
enc.sort()
|
|
1196
|
-
msg = f"Encodings: {', '.join(enc)}\n"
|
|
1197
|
-
print(msg)
|
execsql/utils/regex.py
CHANGED
|
@@ -16,7 +16,6 @@ import os
|
|
|
16
16
|
|
|
17
17
|
__all__ = [
|
|
18
18
|
"ins_rxs",
|
|
19
|
-
"ins_quoted_rx",
|
|
20
19
|
"ins_schema_rxs",
|
|
21
20
|
"ins_table_rxs",
|
|
22
21
|
"ins_table_list_rxs",
|
|
@@ -42,10 +41,6 @@ def ins_rxs(rx_list: tuple[str, ...], fragment1: object, fragment2: object) -> t
|
|
|
42
41
|
return tuple(rv)
|
|
43
42
|
|
|
44
43
|
|
|
45
|
-
def ins_quoted_rx(fragment1: object, fragment2: object, rx: str) -> tuple[str, ...]:
|
|
46
|
-
return ins_rxs((rx, rf'"{rx}"'), fragment1, fragment2)
|
|
47
|
-
|
|
48
|
-
|
|
49
44
|
def ins_schema_rxs(fragment1: object, fragment2: object, suffix: str | None = None) -> tuple[str, ...]:
|
|
50
45
|
schema_exprs: tuple[str, ...] = (
|
|
51
46
|
r'"(?P<schema>[A-Za-z0-9_\- ]+)"',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: execsql2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.30.0
|
|
4
4
|
Summary: Runs a SQL script against a PostgreSQL, SQLite, MariaDB/MySQL, DuckDB, Firebird, MS-Access, MS-SQL-Server, or Oracle database, or an ODBC DSN. Provides metacommands to import and export data, copy data between databases, conditionally execute SQL and metacommands, and dynamically alter SQL and metacommands with substitution variables.
|
|
5
5
|
Project-URL: Homepage, https://execsql2.readthedocs.io
|
|
6
6
|
Project-URL: Repository, https://github.com/geocoug/execsql
|
|
@@ -83,7 +83,6 @@ Provides-Extra: auth-plaintext
|
|
|
83
83
|
Requires-Dist: keyring>=25.0; extra == 'auth-plaintext'
|
|
84
84
|
Requires-Dist: keyrings-alt>=5.0; extra == 'auth-plaintext'
|
|
85
85
|
Provides-Extra: dev
|
|
86
|
-
Requires-Dist: build>=1.2.2.post1; extra == 'dev'
|
|
87
86
|
Requires-Dist: bump-my-version>=1.2.7; extra == 'dev'
|
|
88
87
|
Requires-Dist: defusedxml>=0.7; extra == 'dev'
|
|
89
88
|
Requires-Dist: jinja2>=3.1; extra == 'dev'
|
|
@@ -104,7 +103,6 @@ Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
|
104
103
|
Requires-Dist: sqlglot<30.22,>=30.21.0; extra == 'dev'
|
|
105
104
|
Requires-Dist: tables>=3.10; extra == 'dev'
|
|
106
105
|
Requires-Dist: tox-uv>=1.13.1; extra == 'dev'
|
|
107
|
-
Requires-Dist: twine>=6.1.0; extra == 'dev'
|
|
108
106
|
Requires-Dist: xlrd>=2.0; extra == 'dev'
|
|
109
107
|
Requires-Dist: zensical==0.0.67; extra == 'dev'
|
|
110
108
|
Provides-Extra: duckdb
|
|
@@ -466,7 +464,7 @@ execsql format --no-sql --in-place scripts/
|
|
|
466
464
|
```yaml
|
|
467
465
|
repos:
|
|
468
466
|
- repo: https://github.com/geocoug/execsql
|
|
469
|
-
rev: v2.
|
|
467
|
+
rev: v2.30.0
|
|
470
468
|
hooks:
|
|
471
469
|
- id: execsql-format
|
|
472
470
|
- id: execsql-lint
|
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
execsql/__init__.py,sha256=ZeVnpEWu8M2bn3qLmVM72NhWRueUGNbsX8UAPTermo0,901
|
|
2
|
-
execsql/__main__.py,sha256=
|
|
3
|
-
execsql/api.py,sha256=
|
|
4
|
-
execsql/config.py,sha256
|
|
2
|
+
execsql/__main__.py,sha256=Nnh7_QgjYTTzd1Kog2thl7wzNpoxfnZ3YaurSOMzE_U,270
|
|
3
|
+
execsql/api.py,sha256=xcnqVy1IN1mHuBT3SslHkpx1z4ica8ez8HL4bWOTltQ,26722
|
|
4
|
+
execsql/config.py,sha256=-BbdMrWwdDDC7cMJqyYMxet2pMCA_aH3_VFkVx3-aq4,39149
|
|
5
5
|
execsql/config_validation.py,sha256=a4ZszyJFGTNgs1jkvXE3yMCaYFtF1Uqih2ojMDVh1v8,10556
|
|
6
6
|
execsql/exceptions.py,sha256=aHavdblmP7m5ZLxyyKKmPSwwbdmP962j4ShP1Gd9r64,9651
|
|
7
7
|
execsql/format.py,sha256=z-KZ8VY1muz8S6iaErZX9E_7wE_VtjEcUB7e_KyhfyI,59565
|
|
8
8
|
execsql/interactive.py,sha256=7vm7NAlcarBJJOIffcLOcJqH9ZCInvHB_CmC2sQsXf8,8241
|
|
9
|
-
execsql/manifest.py,sha256=
|
|
9
|
+
execsql/manifest.py,sha256=eJp39R8bYuFuJiGaBbDsk_lua13uJHXPOdwWdUfE-CQ,9027
|
|
10
10
|
execsql/models.py,sha256=caUGQ3C9hvFaj6c6-GwBzZc8FAGTD1ZSJYd8bFyRh5I,16410
|
|
11
11
|
execsql/parser.py,sha256=bw26e1lD-PZscV11VtBdqSLkjpcYfNLQC2EYfYD5UwU,16012
|
|
12
12
|
execsql/plugins.py,sha256=RykMlIjTyWcnQc9ygjLErS3wdcsZSsG9QTIvg4DwfAI,13626
|
|
13
13
|
execsql/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
execsql/state.py,sha256=
|
|
15
|
-
execsql/state.pyi,sha256=
|
|
14
|
+
execsql/state.py,sha256=rXhxx58dVFjhG58HGOXm3ewloVlvpcaYnW1rij4qjkM,23478
|
|
15
|
+
execsql/state.pyi,sha256=ZDHZ1DPKYu4Qs4bcJT31XNv4GOt6O4s_zH4UHCowovw,4344
|
|
16
16
|
execsql/types.py,sha256=zey_bc2AzbUduLoK-nps16qX2zazDYf_iapWkG_cbmA,33130
|
|
17
|
-
execsql/cli/__init__.py,sha256=
|
|
18
|
-
execsql/cli/application.py,sha256=
|
|
17
|
+
execsql/cli/__init__.py,sha256=FHg2lm2gt4L-XBnlVORn3qWHZ4739Ao-uwBIURfVIjg,2798
|
|
18
|
+
execsql/cli/application.py,sha256=lrBmuTfe9nKc_btGFeT_58Ij__w8FOEZvMqfb4rjc-k,12542
|
|
19
19
|
execsql/cli/dispatch.py,sha256=deyN2QQYvdzMSqGGa3CSMpaqdLNeMgc5Uke0mUbl764,2704
|
|
20
|
-
execsql/cli/dsn.py,sha256=
|
|
20
|
+
execsql/cli/dsn.py,sha256=vMabu01EEVAC5O3rpcyJnl4jWR2DQtjDeLLSg8CZqkM,3460
|
|
21
21
|
execsql/cli/help.py,sha256=bEy6ssVjyIw73JD_UPLXnCtnCifdVCKJr_cydAAVxhk,8220
|
|
22
|
-
execsql/cli/lint.py,sha256=
|
|
22
|
+
execsql/cli/lint.py,sha256=5V_th4la5DkUwZrPVj7mFZcM96Oq2DzoUfjXLdWtfDc,48125
|
|
23
23
|
execsql/cli/options.py,sha256=Srhf1gEOB5yy_7PxkTKBv07xK8Qzw8H-z7PUUnItpwE,2916
|
|
24
|
-
execsql/cli/run.py,sha256=
|
|
24
|
+
execsql/cli/run.py,sha256=PHaYBD9VACnlH8Yko4SD2duYHV6G8u95DzMHa1LnB-E,42610
|
|
25
25
|
execsql/cli/commands/__init__.py,sha256=FVe_xF7w98krP-USxqf-BIcflA1ctMYVsV8p0i6cChA,572
|
|
26
26
|
execsql/cli/commands/config.py,sha256=V7CGGkhSCqeJIlAXxAYyG_xNhnsORiwqth2XWEVPzss,8213
|
|
27
27
|
execsql/cli/commands/format.py,sha256=3awfNmCc6kImeyXKZo1Jt1qXbEuWk86ZllqEOY5vxzw,4456
|
|
28
28
|
execsql/cli/commands/init.py,sha256=kmuFgGz8sv_1KfiNh190E3A23evqkgYZeBRTU6vdjbs,5465
|
|
29
|
-
execsql/cli/commands/lint.py,sha256=
|
|
29
|
+
execsql/cli/commands/lint.py,sha256=Lkj_LEeZsLCVzRS9KxJFvx6fHJyf5enmR9pu5VZh4Yw,8435
|
|
30
30
|
execsql/cli/commands/listing.py,sha256=thtkJ-ILGd0SPs57oVIMkkCGpXsfS0hQxueMc2ccRVw,3514
|
|
31
|
-
execsql/cli/commands/lsp.py,sha256=
|
|
31
|
+
execsql/cli/commands/lsp.py,sha256=8xIrqA4dnapdlLqbGGb53YtFTnsX2YqpLYvrrl-Z6pE,4051
|
|
32
32
|
execsql/cli/commands/run.py,sha256=sGFDku66CazJrorr0mmrhUI3QDvQVSMEYlU8G1Pd5fQ,16492
|
|
33
33
|
execsql/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
34
|
execsql/data/execsql.conf.template,sha256=pqh7G21ifYO0BjZoTgUhGyQAx4eKOmbIr6nToc1V7QA,12494
|
|
@@ -37,7 +37,7 @@ execsql/db/__init__.py,sha256=jTbuafuKOqYtXFR1wvCOoKK5Lr3l1uErfaIbIr6UywI,1063
|
|
|
37
37
|
execsql/db/access.py,sha256=xfBzcgP1qJovxSYwrpu0bdxqyJWqMoMP8i4FsaCTYXA,21306
|
|
38
38
|
execsql/db/base.py,sha256=5f-1YxaaopRPnCPVs4OVOkYmWFtG1V71sk2XFoBUE_Y,42849
|
|
39
39
|
execsql/db/dsn.py,sha256=CaISffisqO5IjSE-elEpwK9vXLaArp3ItpV8lvRTu-I,6920
|
|
40
|
-
execsql/db/duckdb.py,sha256=
|
|
40
|
+
execsql/db/duckdb.py,sha256=KC8Tqbnemg3wsYH_efnFmxtybPbMXElFDsoeq_FeVus,11143
|
|
41
41
|
execsql/db/factory.py,sha256=cMptU3BL1Nsilo7LKLAI5RR-LiC9RTH-3UC9rHT2JLQ,5519
|
|
42
42
|
execsql/db/firebird.py,sha256=CoNnzFtOFAkp8OJByXXXclitCPAAjM23eFJGfy3C7IE,10171
|
|
43
43
|
execsql/db/mysql.py,sha256=PexKdOzqR7cpkD_nIjPDwSEK_Or8AkWvBh_TEqsIMhU,22231
|
|
@@ -70,7 +70,7 @@ execsql/exporters/xlsx.py,sha256=7sm-3KniYlB2K-n6xQmIoHbAvl2ryJhFWU95SEkR7e4,127
|
|
|
70
70
|
execsql/exporters/xml.py,sha256=t1PSr3i8xvTCWzd9jaxxAy5NcRpl6sqjnZALafKCqpM,2575
|
|
71
71
|
execsql/exporters/yaml.py,sha256=ex2h91E12wItvh84AarjrDTcZ4SDx9uq0c9wtr-NuQM,3084
|
|
72
72
|
execsql/exporters/zip.py,sha256=0vDkXB19WzLzgCACBVNnGJYxacgBwEehQDL7Inl-rgw,5002
|
|
73
|
-
execsql/gui/__init__.py,sha256=
|
|
73
|
+
execsql/gui/__init__.py,sha256=5qsg3aWsaC0HfTDrGeh_2x40QRuivGgzT7cKvaM7jS0,1269
|
|
74
74
|
execsql/gui/base.py,sha256=DMTqHLlpZlGCsNKyrLlJPbaxvukC0n1YmR4aHEN3jPY,14983
|
|
75
75
|
execsql/gui/console.py,sha256=dzdSl4NJNvRd9VvlwRCXHvfnXjQPimyTx7NcibcUZC8,18305
|
|
76
76
|
execsql/gui/desktop.py,sha256=y-T317NzSs9kcA4-NZW-Dx2cZ4Bv1mPoCr7hwQCJYoo,59467
|
|
@@ -83,17 +83,19 @@ execsql/importers/json.py,sha256=fL47h09Zzx4Qw3TTQRQJbdPdD3qVMiU-kK9C7j1IQzg,553
|
|
|
83
83
|
execsql/importers/ods.py,sha256=VsxIkr7opBamB0PbSFmMWt7G11w8lLUH1k_kRwz28zw,2847
|
|
84
84
|
execsql/importers/xls.py,sha256=D7Ul42gIRYZZC5QxD35ft_wmqQv2f1jNMSbnqlzV0ZA,3851
|
|
85
85
|
execsql/lsp/__init__.py,sha256=KXpbN_CfnfMcvHmE0xPz9ddpp9CAaQH_O7mzBi4O4X8,259
|
|
86
|
-
execsql/lsp/
|
|
87
|
-
execsql/lsp/
|
|
88
|
-
execsql/lsp/
|
|
89
|
-
execsql/lsp/
|
|
86
|
+
execsql/lsp/_util.py,sha256=8CypObGywKZP1aRetq0ytNBqlMelIdJWduR1JnEuW1E,729
|
|
87
|
+
execsql/lsp/cache.py,sha256=wAiZAzNdVseqRDJQ4aiKJF6WVHBV20tt9lQ7kvwlMeo,3149
|
|
88
|
+
execsql/lsp/code_actions.py,sha256=5UH_W22MY00PMXCc_IV0xv4v1WnvUvKMu3QWnk7qf-w,8579
|
|
89
|
+
execsql/lsp/completion.py,sha256=podEPbgDwGbvGdOWPQRuxsYpQ4f1mybuVgAkwwd7MGQ,7875
|
|
90
|
+
execsql/lsp/diagnostics.py,sha256=jCqilTXgcRmCYmH4KrFjvDG6apBQwPOT0mX3lr7v7og,3076
|
|
91
|
+
execsql/lsp/document.py,sha256=9Q3AG0ErAU3Uv-iQYxD8bOY2WM9DiZR8oX-weWX8u7A,12285
|
|
90
92
|
execsql/lsp/folding.py,sha256=PgwehzXnPcR68myldo2SYrqbfGla4f6gb_UrhKmaqyQ,2752
|
|
91
93
|
execsql/lsp/formatting.py,sha256=9YpCfLsi09M1PZovB2HJN-Tp9Jqgk-2xxit5g5NrTqU,1217
|
|
92
|
-
execsql/lsp/hover.py,sha256=
|
|
93
|
-
execsql/lsp/navigation.py,sha256=
|
|
94
|
+
execsql/lsp/hover.py,sha256=JemZqJ8d7FHouMhW92jkfek14fL9rl6JBQU7JIXJHos,5038
|
|
95
|
+
execsql/lsp/navigation.py,sha256=_f-zW82P4Wkelbsdedz_5l_ztFt-CFD8VSiVE5JaSAM,6436
|
|
94
96
|
execsql/lsp/rename.py,sha256=fYk1gDSWWhqyoIGZO5hVIHPYYdGKNjgZS0mijFDFpac,3756
|
|
95
|
-
execsql/lsp/server.py,sha256=
|
|
96
|
-
execsql/metacommands/__init__.py,sha256=
|
|
97
|
+
execsql/lsp/server.py,sha256=gTjk1agZbygdbcowa3jkL45WJ37sxhJ58oiLB7BM6Bw,19893
|
|
98
|
+
execsql/metacommands/__init__.py,sha256=MO5cF84jHakrgYDR8C4-YzeMTLU6oCDeB7x-kUpoVws,12970
|
|
97
99
|
execsql/metacommands/conditions.py,sha256=4DsMXr6vnfbtcKqgnxYV4UK4NmAfE_hpfgkFjlH0bjo,29844
|
|
98
100
|
execsql/metacommands/connect.py,sha256=SPk4h9yiUgTD3w1gNOT_oYx8VShggsO357by5Hoy6OI,15344
|
|
99
101
|
execsql/metacommands/control.py,sha256=9swW6X8jXDUpu5cHiAnQVx1ahFyWxlx7mjg4dqYfX5Y,9355
|
|
@@ -103,7 +105,7 @@ execsql/metacommands/dispatch.py,sha256=so0ebcnv66NhVDtA1Bt4GelD0hsC5w7gy7rItz2M
|
|
|
103
105
|
execsql/metacommands/effects.py,sha256=cRSo48R4nRJzkRR3OGHLhJzofcdAaNIobaxmn1N9TGw,3813
|
|
104
106
|
execsql/metacommands/io.py,sha256=vlGBje5sgnqeilooMdhJDgSRIhysHy5_7LrKtik9Xjs,3011
|
|
105
107
|
execsql/metacommands/io_export.py,sha256=YamxQwURRjZRpCG2z8W3QurncCmEmAyLFqDkxtHo5dY,14434
|
|
106
|
-
execsql/metacommands/io_fileops.py,sha256=
|
|
108
|
+
execsql/metacommands/io_fileops.py,sha256=sLTyh8CA-1rdDFLwh3ciACCPuM8r7xJJgk6tQS6CmwI,12939
|
|
107
109
|
execsql/metacommands/io_import.py,sha256=gJICeK1MOfG6D73I7m8zBCalvr_ZJzD-QBKOpKYeYXo,15684
|
|
108
110
|
execsql/metacommands/io_write.py,sha256=yXDkMbQ3haDARVATVUYZprakyJHSyk1NywdKkFLpQ14,12783
|
|
109
111
|
execsql/metacommands/prompt.py,sha256=PlXhtBYCembG_1SSCrwpQR10mGF3_jXodu4aCSHlSCM,37950
|
|
@@ -115,7 +117,7 @@ execsql/script/__init__.py,sha256=I7hVO6wm3iOocxRRGEcFHhjdtL1moKbUYLB-wKbjPdk,32
|
|
|
115
117
|
execsql/script/ast.py,sha256=WqCpFxhxrT2IIGvbArTp3QS0BZryRZAb7IL4ri3I6xg,20591
|
|
116
118
|
execsql/script/control.py,sha256=WqLy-HLPqHG3vEzYpKMiIJsD7LpORjyQuUWzFzcGz4w,2327
|
|
117
119
|
execsql/script/engine.py,sha256=wjXKwPIis-T2Y8rLnRXQ_ymUFdXff1MlI2IIYmxihKo,18448
|
|
118
|
-
execsql/script/executor.py,sha256=
|
|
120
|
+
execsql/script/executor.py,sha256=p3Aj7Ab8HwZRnmYds_e6h6yhRzCCa9XXbdVDkpg6NaQ,40855
|
|
119
121
|
execsql/script/parser.py,sha256=z73v6t6ZbPUKkRu-UOIL6q1cCRDeoRvG2aXXC8NpMvE,37162
|
|
120
122
|
execsql/script/variables.py,sha256=Tb01aHqOdWZbkgj-oW0ky3KWNy5N34XLD-Fm2eShYZM,17462
|
|
121
123
|
execsql/utils/__init__.py,sha256=0uR6JwVJQRX3vceByNBduCAf5dd5assKjeqJUWvpZoA,278
|
|
@@ -123,31 +125,31 @@ execsql/utils/auth.py,sha256=BV7VtLM-ID8jNB42vx7GEz8yb3Z1Qs9xCr4cUMqL864,14539
|
|
|
123
125
|
execsql/utils/color.py,sha256=goQqhnLg8yERpFolQikA9zYSVcuAm0unKTJiWTbQm-U,634
|
|
124
126
|
execsql/utils/crypto.py,sha256=KlT6lPk-v0-qQQfAMfWvT9Q6kRdCD3_5JVaLajNocKM,3051
|
|
125
127
|
execsql/utils/datetime.py,sha256=rqtGrc0t37V00mvirJ8wJKHmDtDSYzTg_UgCyIBzv9E,5583
|
|
126
|
-
execsql/utils/errors.py,sha256=
|
|
127
|
-
execsql/utils/fileio.py,sha256=
|
|
128
|
+
execsql/utils/errors.py,sha256=yUyA61vlY8cNmC4-XR7hpACG_T6wUK82FF0AnRxDrBs,11693
|
|
129
|
+
execsql/utils/fileio.py,sha256=IqIEhun9aOnr1oBCWK2z2VAPVo95bZ54cVglLW4rV9M,48208
|
|
128
130
|
execsql/utils/gui.py,sha256=1iiupP9AsLdR6ST0gcLE143o6y6YGUFlNv_pdVPxfCE,23943
|
|
129
131
|
execsql/utils/mail.py,sha256=4RiKtXa_sqij_YGdYmjQ3PG0u3G9qjs-9caQwBErtBw,7278
|
|
130
132
|
execsql/utils/numeric.py,sha256=_7bi5R6pHjMCkOPne_Sh5nUj-B8e9g6WFmjptFHaunA,1573
|
|
131
|
-
execsql/utils/regex.py,sha256=
|
|
133
|
+
execsql/utils/regex.py,sha256=DGzPBl0Kt4--RbwPhoZI6Bm6N_CBUvI0DbqE4EF6qp8,3718
|
|
132
134
|
execsql/utils/strings.py,sha256=UQNjpRCEFa1UO6feU-M-9e24wWAvizs_iu_4fFusLxo,8516
|
|
133
135
|
execsql/utils/timer.py,sha256=eDYf5VzCNFk7oo90InJucUm3XcBdhYMogjZMqeg9xzc,1899
|
|
134
|
-
execsql2-2.
|
|
135
|
-
execsql2-2.
|
|
136
|
-
execsql2-2.
|
|
137
|
-
execsql2-2.
|
|
138
|
-
execsql2-2.
|
|
139
|
-
execsql2-2.
|
|
140
|
-
execsql2-2.
|
|
141
|
-
execsql2-2.
|
|
142
|
-
execsql2-2.
|
|
143
|
-
execsql2-2.
|
|
144
|
-
execsql2-2.
|
|
145
|
-
execsql2-2.
|
|
146
|
-
execsql2-2.
|
|
147
|
-
execsql2-2.
|
|
148
|
-
execsql2-2.
|
|
149
|
-
execsql2-2.
|
|
150
|
-
execsql2-2.
|
|
151
|
-
execsql2-2.
|
|
152
|
-
execsql2-2.
|
|
153
|
-
execsql2-2.
|
|
136
|
+
execsql2-2.30.0.data/data/execsql2_extras/README.md,sha256=7SG9FbBpdqkgQTTt1aBTbCgymBZyV0rLrQMQrendzxs,5032
|
|
137
|
+
execsql2-2.30.0.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
|
|
138
|
+
execsql2-2.30.0.data/data/execsql2_extras/example_config_prompt.sql,sha256=2e8KzzVWhho8KxYVHETSVmZdhW7wodioDsqBLSL6m4s,7487
|
|
139
|
+
execsql2-2.30.0.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
|
|
140
|
+
execsql2-2.30.0.data/data/execsql2_extras/md_compare.sql,sha256=qYYVAjSeHZzjszxV3Bv6bg8Ckbq2kMHl87_gh4sywMU,24140
|
|
141
|
+
execsql2-2.30.0.data/data/execsql2_extras/md_glossary.sql,sha256=hkZ2Onn57LAKKsuXxzhR8tPtcWXkmWEQkwPE58-Tm2k,10796
|
|
142
|
+
execsql2-2.30.0.data/data/execsql2_extras/md_upsert.sql,sha256=_CAK4BzEboRXTNy03SJR-oOjcEdSNMuRBPL6noWUptY,112560
|
|
143
|
+
execsql2-2.30.0.data/data/execsql2_extras/pg_compare.sql,sha256=1zJd4hVUKHR0tncc2qTBC9B4qVV4Us2ITkJpsjN3tMw,24352
|
|
144
|
+
execsql2-2.30.0.data/data/execsql2_extras/pg_glossary.sql,sha256=IKuwna-_8b20ljSkXZruuiQigrCpo7ueQdUqd1MXiuI,9908
|
|
145
|
+
execsql2-2.30.0.data/data/execsql2_extras/pg_upsert.sql,sha256=HpPJtTHvpEjQy03j-3iPxDEOHMRkudOg7O4D4YR38UI,108315
|
|
146
|
+
execsql2-2.30.0.data/data/execsql2_extras/script_template.sql,sha256=2J35ddZPguJ-vwTsz83wErv0jiWUyJcdW_JM0mNKDXA,11155
|
|
147
|
+
execsql2-2.30.0.data/data/execsql2_extras/ss_compare.sql,sha256=j1qVNUPXQsEU7-DoVgDJCGcE0EuIl7whLBT3fgeiMAo,24833
|
|
148
|
+
execsql2-2.30.0.data/data/execsql2_extras/ss_glossary.sql,sha256=2gLxv34xzKt0vy7hSzJH7a9JiMC3ETrv9MofxQwAibU,13065
|
|
149
|
+
execsql2-2.30.0.data/data/execsql2_extras/ss_upsert.sql,sha256=G_8rQ0VzuKIZHWs24O_WrfzpC5S27R1JsL-bFBR3SUQ,117730
|
|
150
|
+
execsql2-2.30.0.dist-info/METADATA,sha256=FvWAXbU-34Ip_HUkL7e3-OQ4HJdZUBNGPtgZF8wWz6M,27760
|
|
151
|
+
execsql2-2.30.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
152
|
+
execsql2-2.30.0.dist-info/entry_points.txt,sha256=jOf53-4IVGjEZeNYUOF1GGaiPNfVZcNKxP3vDFKEyMA,58
|
|
153
|
+
execsql2-2.30.0.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
|
|
154
|
+
execsql2-2.30.0.dist-info/licenses/NOTICE,sha256=McYzgxYav3U1OaVsY4Su1sfBrfmplpRdA9b6-gCDQCg,342
|
|
155
|
+
execsql2-2.30.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{execsql2-2.29.0.data → execsql2-2.30.0.data}/data/execsql2_extras/example_config_prompt.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|