execsql2 2.12.0__py3-none-any.whl → 2.12.2__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/db/base.py +37 -23
- execsql/exceptions.py +2 -0
- execsql/metacommands/control.py +1 -1
- execsql/script/engine.py +13 -4
- execsql/script/variables.py +2 -25
- {execsql2-2.12.0.dist-info → execsql2-2.12.2.dist-info}/METADATA +2 -1
- {execsql2-2.12.0.dist-info → execsql2-2.12.2.dist-info}/RECORD +26 -26
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/README.md +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/config_settings.sqlite +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/example_config_prompt.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/execsql.conf +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/make_config_db.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/md_compare.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/md_glossary.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/md_upsert.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/pg_compare.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/pg_glossary.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/pg_upsert.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/script_template.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/ss_compare.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/ss_glossary.sql +0 -0
- {execsql2-2.12.0.data → execsql2-2.12.2.data}/data/execsql2_extras/ss_upsert.sql +0 -0
- {execsql2-2.12.0.dist-info → execsql2-2.12.2.dist-info}/WHEEL +0 -0
- {execsql2-2.12.0.dist-info → execsql2-2.12.2.dist-info}/entry_points.txt +0 -0
- {execsql2-2.12.0.dist-info → execsql2-2.12.2.dist-info}/licenses/LICENSE.txt +0 -0
- {execsql2-2.12.0.dist-info → execsql2-2.12.2.dist-info}/licenses/NOTICE +0 -0
execsql/db/base.py
CHANGED
|
@@ -234,18 +234,22 @@ class Database(ABC):
|
|
|
234
234
|
pass # Non-critical: some drivers lack rowcount support.
|
|
235
235
|
|
|
236
236
|
def decode_row() -> Generator:
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
237
|
+
try:
|
|
238
|
+
while True:
|
|
239
|
+
rows = curs.fetchmany()
|
|
240
|
+
if not rows:
|
|
241
|
+
break
|
|
242
|
+
else:
|
|
243
|
+
for row in rows:
|
|
244
|
+
if self.encoding:
|
|
245
|
+
yield [
|
|
246
|
+
c.decode(self.encoding, "backslashreplace") if isinstance(c, bytes) else c
|
|
247
|
+
for c in row
|
|
248
|
+
]
|
|
249
|
+
else:
|
|
250
|
+
yield row
|
|
251
|
+
finally:
|
|
252
|
+
curs.close()
|
|
249
253
|
|
|
250
254
|
return [d[0] for d in curs.description], decode_row()
|
|
251
255
|
|
|
@@ -253,6 +257,10 @@ class Database(ABC):
|
|
|
253
257
|
"""Execute *sql* and return ``(column_names, row_iterator)`` where each row is a ``dict``."""
|
|
254
258
|
# Return an iterable that yields dictionaries of row data
|
|
255
259
|
curs = self.cursor()
|
|
260
|
+
try:
|
|
261
|
+
curs.arraysize = _state.conf.export_row_buffer
|
|
262
|
+
except Exception:
|
|
263
|
+
pass # Non-critical: not all drivers support arraysize.
|
|
256
264
|
try:
|
|
257
265
|
curs.execute(sql)
|
|
258
266
|
except Exception:
|
|
@@ -264,18 +272,24 @@ class Database(ABC):
|
|
|
264
272
|
pass # Non-critical: some drivers lack rowcount support.
|
|
265
273
|
hdrs = [d[0] for d in curs.description]
|
|
266
274
|
|
|
267
|
-
def
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
275
|
+
def dict_rows() -> Generator:
|
|
276
|
+
try:
|
|
277
|
+
while True:
|
|
278
|
+
rows = curs.fetchmany()
|
|
279
|
+
if not rows:
|
|
280
|
+
break
|
|
281
|
+
for row in rows:
|
|
282
|
+
if self.encoding:
|
|
283
|
+
r = [
|
|
284
|
+
c.decode(self.encoding, "backslashreplace") if isinstance(c, bytes) else c for c in row
|
|
285
|
+
]
|
|
286
|
+
else:
|
|
287
|
+
r = row
|
|
288
|
+
yield dict(zip(hdrs, r))
|
|
289
|
+
finally:
|
|
290
|
+
curs.close()
|
|
277
291
|
|
|
278
|
-
return hdrs,
|
|
292
|
+
return hdrs, dict_rows()
|
|
279
293
|
|
|
280
294
|
def schema_exists(self, schema_name: str) -> bool:
|
|
281
295
|
"""Return ``True`` if *schema_name* exists in this database."""
|
execsql/exceptions.py
CHANGED
|
@@ -132,6 +132,8 @@ class ErrInfo(ExecSqlError):
|
|
|
132
132
|
|
|
133
133
|
if self.type == "db":
|
|
134
134
|
self.error_message = "**** Error in SQL statement."
|
|
135
|
+
elif self.type == "assert":
|
|
136
|
+
self.error_message = "**** Assertion failed."
|
|
135
137
|
elif self.type == "cmd":
|
|
136
138
|
self.error_message = "**** Error in metacommand."
|
|
137
139
|
elif self.type == "log":
|
execsql/metacommands/control.py
CHANGED
|
@@ -66,7 +66,7 @@ def x_assert(**kwargs: Any) -> None:
|
|
|
66
66
|
if _state.exec_log is not None:
|
|
67
67
|
_state.exec_log.log_user_msg(f"ASSERT passed: {condition}")
|
|
68
68
|
else:
|
|
69
|
-
raise ErrInfo(type="
|
|
69
|
+
raise ErrInfo(type="assert", other_msg=message)
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
def x_if(**kwargs: Any) -> None:
|
execsql/script/engine.py
CHANGED
|
@@ -397,6 +397,15 @@ class ScriptCmd:
|
|
|
397
397
|
self.line_no = command_line_no
|
|
398
398
|
self.command_type = command_type
|
|
399
399
|
self.command = script_command
|
|
400
|
+
# MIGRATION NOTE: differs from monolith (execsql.py) — source_dir and source_name are
|
|
401
|
+
# resolved once at construction rather than on every statement execution. For absolute
|
|
402
|
+
# paths (the common case) the result is identical. For relative paths the value is
|
|
403
|
+
# anchored to the CWD at script-load time rather than at each statement's execution time;
|
|
404
|
+
# the original per-statement resolve could yield inconsistent values across statements of
|
|
405
|
+
# the same script if a CD metacommand ran between them.
|
|
406
|
+
_p = Path(command_source_name)
|
|
407
|
+
self.source_dir: str = str(_p.resolve().parent) + os.sep
|
|
408
|
+
self.source_name: str = _p.name
|
|
400
409
|
|
|
401
410
|
def __repr__(self) -> str:
|
|
402
411
|
return f"ScriptCmd({self.source!r}, {self.line_no!r}, {self.command_type!r}, {repr(self.command)!r})"
|
|
@@ -498,9 +507,9 @@ class CommandList:
|
|
|
498
507
|
_state.subvars.add_substitution("$CURRENT_SCRIPT", cmditem.source)
|
|
499
508
|
_state.subvars.add_substitution(
|
|
500
509
|
"$CURRENT_SCRIPT_PATH",
|
|
501
|
-
|
|
510
|
+
cmditem.source_dir,
|
|
502
511
|
)
|
|
503
|
-
_state.subvars.add_substitution("$CURRENT_SCRIPT_NAME",
|
|
512
|
+
_state.subvars.add_substitution("$CURRENT_SCRIPT_NAME", cmditem.source_name)
|
|
504
513
|
_state.subvars.add_substitution("$CURRENT_SCRIPT_LINE", str(cmditem.line_no))
|
|
505
514
|
_state.subvars.add_substitution("$SCRIPT_LINE", str(cmditem.line_no))
|
|
506
515
|
if _state.step_mode:
|
|
@@ -709,7 +718,7 @@ def set_system_vars() -> None:
|
|
|
709
718
|
"ON" if _state.conf.gui_wait_on_error_halt else "OFF",
|
|
710
719
|
)
|
|
711
720
|
_state.subvars.add_substitution("$CONSOLE_WAIT_WHEN_DONE_STATE", "ON" if _state.conf.gui_wait_on_exit else "OFF")
|
|
712
|
-
|
|
721
|
+
# $CURRENT_TIME is set per-statement in run_and_increment() for accuracy.
|
|
713
722
|
_state.subvars.add_substitution("$CURRENT_DIR", str(Path(".").resolve()))
|
|
714
723
|
_state.subvars.add_substitution("$CURRENT_PATH", str(Path(".").resolve()) + os.sep)
|
|
715
724
|
_state.subvars.add_substitution("$CURRENT_ALIAS", _state.dbs.current_alias())
|
|
@@ -742,7 +751,7 @@ def substitute_vars(command_str: str, localvars: SubVarSet | None = None) -> str
|
|
|
742
751
|
subs = _state.subvars.merge(localvars)
|
|
743
752
|
else:
|
|
744
753
|
subs = _state.subvars
|
|
745
|
-
cmdstr =
|
|
754
|
+
cmdstr = command_str
|
|
746
755
|
subs_made = True
|
|
747
756
|
iterations = 0
|
|
748
757
|
while subs_made:
|
execsql/script/variables.py
CHANGED
|
@@ -89,7 +89,6 @@ class SubVarSet:
|
|
|
89
89
|
# compatibility with external code.
|
|
90
90
|
def __init__(self) -> None:
|
|
91
91
|
self._subs_dict: dict[str, Any] = {}
|
|
92
|
-
self._compiled_patterns: dict[str, tuple] = {}
|
|
93
92
|
self.prefix_list: list[str] = ["$", "&", "@"]
|
|
94
93
|
# Don't construct/compile on init because deepcopy() can't handle compiled regexes.
|
|
95
94
|
self.var_rx = None
|
|
@@ -106,21 +105,6 @@ class SubVarSet:
|
|
|
106
105
|
self._subs_dict = dict(value)
|
|
107
106
|
else:
|
|
108
107
|
self._subs_dict = dict(value)
|
|
109
|
-
self._rebuild_all_patterns()
|
|
110
|
-
|
|
111
|
-
def _compile_patterns_for(self, varname: str) -> tuple:
|
|
112
|
-
"""Compile and return the three regex patterns (plain, single-quoted, double-quoted) for *varname*."""
|
|
113
|
-
match_escaped = "\\" + varname if varname[0] == "$" else varname
|
|
114
|
-
pat = re.compile(f"!!{match_escaped}!!", re.I)
|
|
115
|
-
patq = re.compile(f"!'!{match_escaped}!'!", re.I)
|
|
116
|
-
patdq = re.compile(f'!"!{match_escaped}!"!', re.I)
|
|
117
|
-
return (pat, patq, patdq)
|
|
118
|
-
|
|
119
|
-
def _rebuild_all_patterns(self) -> None:
|
|
120
|
-
"""Rebuild compiled patterns for every variable currently stored."""
|
|
121
|
-
self._compiled_patterns = {}
|
|
122
|
-
for varname in self._subs_dict:
|
|
123
|
-
self._compiled_patterns[varname] = self._compile_patterns_for(varname)
|
|
124
108
|
|
|
125
109
|
def compile_var_rx(self) -> None:
|
|
126
110
|
"""Compile the variable-name validation regex from the current prefix list."""
|
|
@@ -141,14 +125,12 @@ class SubVarSet:
|
|
|
141
125
|
self.check_var_name(template_str)
|
|
142
126
|
old_sub = template_str.lower()
|
|
143
127
|
self._subs_dict.pop(old_sub, None)
|
|
144
|
-
self._compiled_patterns.pop(old_sub, None)
|
|
145
128
|
|
|
146
129
|
def add_substitution(self, varname: str, repl_str: Any) -> None:
|
|
147
|
-
"""Add or overwrite a substitution variable
|
|
130
|
+
"""Add or overwrite a substitution variable."""
|
|
148
131
|
self.check_var_name(varname)
|
|
149
132
|
varname = varname.lower()
|
|
150
133
|
self._subs_dict[varname] = repl_str
|
|
151
|
-
self._compiled_patterns[varname] = self._compile_patterns_for(varname)
|
|
152
134
|
|
|
153
135
|
def append_substitution(self, varname: str, repl_str: str) -> None:
|
|
154
136
|
self.check_var_name(varname)
|
|
@@ -186,15 +168,10 @@ class SubVarSet:
|
|
|
186
168
|
return template_str.lower() in self._subs_dict
|
|
187
169
|
|
|
188
170
|
def merge(self, other_subvars: SubVarSet | None) -> SubVarSet:
|
|
189
|
-
"""Return a new SubVarSet with this object's variables merged with other_subvars.
|
|
190
|
-
|
|
191
|
-
Copies dictionaries and pre-compiled patterns directly instead of
|
|
192
|
-
re-adding variables one at a time, avoiding O(V) regex recompilation.
|
|
193
|
-
"""
|
|
171
|
+
"""Return a new SubVarSet with this object's variables merged with other_subvars."""
|
|
194
172
|
if other_subvars is not None:
|
|
195
173
|
newsubs = SubVarSet()
|
|
196
174
|
newsubs._subs_dict = {**self._subs_dict, **other_subvars._subs_dict}
|
|
197
|
-
newsubs._compiled_patterns = {**self._compiled_patterns, **other_subvars._compiled_patterns}
|
|
198
175
|
newsubs.prefix_list = list(set(self.prefix_list + other_subvars.prefix_list))
|
|
199
176
|
newsubs.compile_var_rx()
|
|
200
177
|
return newsubs
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: execsql2
|
|
3
|
-
Version: 2.12.
|
|
3
|
+
Version: 2.12.2
|
|
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
|
+
Project-URL: Homepage, https://execsql2.readthedocs.io
|
|
5
6
|
Project-URL: Repository, https://github.com/geocoug/execsql
|
|
6
7
|
Project-URL: Issues, https://github.com/geocoug/execsql/issues
|
|
7
8
|
Author-email: Dreas Nielsen <cortice@tutanota.com>
|
|
@@ -2,7 +2,7 @@ execsql/__init__.py,sha256=BIny4bL8uHuSl3gXPqEkIB2FtcexlARjR7IYPwtD9bM,486
|
|
|
2
2
|
execsql/__main__.py,sha256=HdbK-SAhyUmfB6xINY5AzxdMSxGzWSGEG_2dv42Jn64,315
|
|
3
3
|
execsql/config.py,sha256=ipOrF8frgtN9CDg5b9J3cQB0b5RiwzoH_znNN1GrkR8,36390
|
|
4
4
|
execsql/constants.py,sha256=bns8_sN36Pe4R4vTQZb3dRXDHZhe4N34wZZboe1jBdM,12792
|
|
5
|
-
execsql/exceptions.py,sha256=
|
|
5
|
+
execsql/exceptions.py,sha256=dpOjpD67nWQlKJIz4M2emDv5RbUbCo6-QuvnQ5M39p8,8477
|
|
6
6
|
execsql/format.py,sha256=-6iknDddqbkapMo4NKmT5LAynDLqMW5kHgDWRg0KSws,11990
|
|
7
7
|
execsql/models.py,sha256=DxkGp9iWbuZDWPGmnxZp9mvEeyOwxEJNx94fxQQiLfQ,13538
|
|
8
8
|
execsql/parser.py,sha256=mbNSMiAMR1NvNvFtQAZq6nxBOupMGJZXSimLWLtZeNs,15537
|
|
@@ -16,7 +16,7 @@ execsql/cli/lint.py,sha256=XWuVcEsheZ8ql48VFWqICWEkAUezB2nIePX6SUiKSg8,16109
|
|
|
16
16
|
execsql/cli/run.py,sha256=JGfndnBnJMkEqbz26pflhEdXDScZNIdGu6b6jTRLYl8,30681
|
|
17
17
|
execsql/db/__init__.py,sha256=jTbuafuKOqYtXFR1wvCOoKK5Lr3l1uErfaIbIr6UywI,1063
|
|
18
18
|
execsql/db/access.py,sha256=L79gUnAnnM9EJ_f4k42jr7DI0qGcKtLOnJTlBC7uPm0,17879
|
|
19
|
-
execsql/db/base.py,sha256=
|
|
19
|
+
execsql/db/base.py,sha256=CPoWu8qrxCOcQ6nh2oLyoqaPfC0yDU8bTECW_lZV9Dc,30953
|
|
20
20
|
execsql/db/dsn.py,sha256=TgQUedVCxnEYA3vae7JETyhb8kK23qkNbPxsMQrNUN8,5368
|
|
21
21
|
execsql/db/duckdb.py,sha256=cKeMwiSlYPyPDn1VLaJgbUD6_IEEaNqtUToLcmq7QaE,3189
|
|
22
22
|
execsql/db/factory.py,sha256=YR1m_c2Hhj_GXVGGkWoSEPZBpgNu_c4FxRnbp-xV3rs,5230
|
|
@@ -64,7 +64,7 @@ execsql/importers/xls.py,sha256=e0Zfe47ZiCpA1Ae3XDJ1ko3sCiH3-8U6XLKi6NvD0jQ,3683
|
|
|
64
64
|
execsql/metacommands/__init__.py,sha256=EmYUZZq1oaubbSQ26-8F9jJI_JnOJ2R697NeossXF1Q,11202
|
|
65
65
|
execsql/metacommands/conditions.py,sha256=Fzrk83-pWbFOoKahYdQW7CZjQeh3zByDUbfgpTM_bjQ,29259
|
|
66
66
|
execsql/metacommands/connect.py,sha256=Nsm0D91i3RX-R2rzQQ-Br-gULaI6Uvdn9fqb7DOAVfE,14804
|
|
67
|
-
execsql/metacommands/control.py,sha256=
|
|
67
|
+
execsql/metacommands/control.py,sha256=PAZFK1ck5SDSm5QdFV1ctif3KpEiyYWIXdDceRWgQ6k,8513
|
|
68
68
|
execsql/metacommands/data.py,sha256=tRQBGTAuW-eJ2tBNWaoZI9OjTyNNyHJISo7gOdL-sm8,11370
|
|
69
69
|
execsql/metacommands/debug.py,sha256=pnT24dfvfOx8xFu86mO5czfVCGKbcvgBLyXnqaMWO4w,8184
|
|
70
70
|
execsql/metacommands/dispatch.py,sha256=OQwLOo9XT3N9C96wsRt0zmu1Nn4HL-7cSBOsGCfp5V4,84041
|
|
@@ -78,8 +78,8 @@ execsql/metacommands/script_ext.py,sha256=TUgAldB2LSJAwZrCvDDi804hQ1d9BDQD2GDqHN
|
|
|
78
78
|
execsql/metacommands/system.py,sha256=sUR5kLL7idTVg8WXIMdd-Kv7nkERIiaeL0beWsz8NyY,7293
|
|
79
79
|
execsql/script/__init__.py,sha256=pIo0EJ7-vg67rSMbOvbri_BOUgLoGoSEUfJgxUN7ZS0,3380
|
|
80
80
|
execsql/script/control.py,sha256=s-1eZdGARM6H1FwZ6VDdO_f50j7bvvRtTHesfUm9tbc,6144
|
|
81
|
-
execsql/script/engine.py,sha256=
|
|
82
|
-
execsql/script/variables.py,sha256=
|
|
81
|
+
execsql/script/engine.py,sha256=1qcWGfXPRqDd48PQwEbHmCO1eN4YYrQrS-0QUQb270g,41694
|
|
82
|
+
execsql/script/variables.py,sha256=mklG20WPhfv1mmqSVoRQHrzZvGN7ne_bqvRd0PMx5ss,10388
|
|
83
83
|
execsql/utils/__init__.py,sha256=0uR6JwVJQRX3vceByNBduCAf5dd5assKjeqJUWvpZoA,278
|
|
84
84
|
execsql/utils/auth.py,sha256=onXzNkNZQZxGC5w7eey06sjvAIAX_Lf9g7nUJtcsel0,7009
|
|
85
85
|
execsql/utils/crypto.py,sha256=2OnBWwn9bCBGc1ZkyRv16TvhottoCNYtXqgbE3mG3Sg,2960
|
|
@@ -92,24 +92,24 @@ execsql/utils/numeric.py,sha256=xh02ANSRk3nUpQ-rtm66ILoMqoi7HtzCoRMIOT9U8QI,1570
|
|
|
92
92
|
execsql/utils/regex.py,sha256=diEzTZqU_HHwVMadPAvN1Vgzhl7I03eVaEFGCXyGGL8,3770
|
|
93
93
|
execsql/utils/strings.py,sha256=5Dvzrk-9SIw2lpxXZQkiJbNyo1sy7iXXAtSULlZ0KG8,8488
|
|
94
94
|
execsql/utils/timer.py,sha256=eDYf5VzCNFk7oo90InJucUm3XcBdhYMogjZMqeg9xzc,1899
|
|
95
|
-
execsql2-2.12.
|
|
96
|
-
execsql2-2.12.
|
|
97
|
-
execsql2-2.12.
|
|
98
|
-
execsql2-2.12.
|
|
99
|
-
execsql2-2.12.
|
|
100
|
-
execsql2-2.12.
|
|
101
|
-
execsql2-2.12.
|
|
102
|
-
execsql2-2.12.
|
|
103
|
-
execsql2-2.12.
|
|
104
|
-
execsql2-2.12.
|
|
105
|
-
execsql2-2.12.
|
|
106
|
-
execsql2-2.12.
|
|
107
|
-
execsql2-2.12.
|
|
108
|
-
execsql2-2.12.
|
|
109
|
-
execsql2-2.12.
|
|
110
|
-
execsql2-2.12.
|
|
111
|
-
execsql2-2.12.
|
|
112
|
-
execsql2-2.12.
|
|
113
|
-
execsql2-2.12.
|
|
114
|
-
execsql2-2.12.
|
|
115
|
-
execsql2-2.12.
|
|
95
|
+
execsql2-2.12.2.data/data/execsql2_extras/README.md,sha256=sxwVyU0ZahCfANv56LahkyuM505kFjrMhe-1SvWE69E,4845
|
|
96
|
+
execsql2-2.12.2.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
|
|
97
|
+
execsql2-2.12.2.data/data/execsql2_extras/example_config_prompt.sql,sha256=SY3Jxn1qcVm4kPW9xmmTfknHfvURXmeEYTbRjYrjGSw,7487
|
|
98
|
+
execsql2-2.12.2.data/data/execsql2_extras/execsql.conf,sha256=_45iJ-KWZnB8uMW_gEg067MM5pmGJ-dVl7VbAZMunAE,9530
|
|
99
|
+
execsql2-2.12.2.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
|
|
100
|
+
execsql2-2.12.2.data/data/execsql2_extras/md_compare.sql,sha256=B8Wd7LZ0vnMY2qvA139JIEBkPObgRH2i5xj6PejTQt8,24092
|
|
101
|
+
execsql2-2.12.2.data/data/execsql2_extras/md_glossary.sql,sha256=DJRHcU5NbFpxTTX-IwH3yRlsboj1q6BBGrUAHKn4Cuo,10796
|
|
102
|
+
execsql2-2.12.2.data/data/execsql2_extras/md_upsert.sql,sha256=v_7GbWh_N1mBTmw3gvTrkagOVp2q0KmXvM8hE-DlFxY,112524
|
|
103
|
+
execsql2-2.12.2.data/data/execsql2_extras/pg_compare.sql,sha256=9dWa8hnfy5dVJI-z2iGpd9JzQmI4j2ziMlEdpnr66ro,24352
|
|
104
|
+
execsql2-2.12.2.data/data/execsql2_extras/pg_glossary.sql,sha256=pKjIIDsROAgJq2H-1qNEcRMAWManivcZ_AEVHzUUlic,9908
|
|
105
|
+
execsql2-2.12.2.data/data/execsql2_extras/pg_upsert.sql,sha256=k7AFiGTLBy3nf-qO5QIaZrEYTAKvdxxU3JDLx9jqkzs,108315
|
|
106
|
+
execsql2-2.12.2.data/data/execsql2_extras/script_template.sql,sha256=1Estacb_vm1FgK41k_G9nuduP1yiA-fQ1Kn4Z4mv5Ao,11153
|
|
107
|
+
execsql2-2.12.2.data/data/execsql2_extras/ss_compare.sql,sha256=TsVxWm3cEpR5-EiMYXNhtaY0arSNeKZhsJdHdLA7xeI,24833
|
|
108
|
+
execsql2-2.12.2.data/data/execsql2_extras/ss_glossary.sql,sha256=cLM7nN8JOIu9ZVP9oY9qdSK3hrnWJiDcX6nZmQQbQWI,13065
|
|
109
|
+
execsql2-2.12.2.data/data/execsql2_extras/ss_upsert.sql,sha256=BCqmBykXBF-BpCgOFeG1qhf2XfScKsxPD17wd1hYfHw,120647
|
|
110
|
+
execsql2-2.12.2.dist-info/METADATA,sha256=ur8GMD9rCXKMfNHGYTpA5ZYqLM52FrZCObAhaDqvSv4,17436
|
|
111
|
+
execsql2-2.12.2.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
112
|
+
execsql2-2.12.2.dist-info/entry_points.txt,sha256=sUOxkM-dN1eBGGpSpDLsAaE0yNXYQKWZAfxPOlMkQyk,90
|
|
113
|
+
execsql2-2.12.2.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
|
|
114
|
+
execsql2-2.12.2.dist-info/licenses/NOTICE,sha256=sqVrM73Ys9zfvWC_P797lHfTnoPW_ETeBSrUTFaob0A,339
|
|
115
|
+
execsql2-2.12.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{execsql2-2.12.0.data → execsql2-2.12.2.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
|
|
File without changes
|