execsql2 2.34.0__py3-none-any.whl → 2.35.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/api.py +1 -0
- execsql/config.py +2 -0
- execsql/data/execsql.conf.template +7 -0
- execsql/metacommands/data.py +7 -1
- execsql/metacommands/dispatch.py +7 -0
- execsql/metacommands/reference.py +1 -0
- execsql/models.py +30 -4
- execsql/script/executor.py +10 -10
- execsql/utils/errors.py +2 -2
- {execsql2-2.34.0.dist-info → execsql2-2.35.0.dist-info}/METADATA +2 -2
- {execsql2-2.34.0.dist-info → execsql2-2.35.0.dist-info}/RECORD +28 -28
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/README.md +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/config_settings.sqlite +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/example_config_prompt.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/make_config_db.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/md_compare.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/md_glossary.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/md_upsert.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/pg_compare.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/pg_glossary.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/script_template.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/ss_compare.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/ss_glossary.sql +0 -0
- {execsql2-2.34.0.data → execsql2-2.35.0.data}/data/execsql2_extras/ss_upsert.sql +0 -0
- {execsql2-2.34.0.dist-info → execsql2-2.35.0.dist-info}/WHEEL +0 -0
- {execsql2-2.34.0.dist-info → execsql2-2.35.0.dist-info}/entry_points.txt +0 -0
- {execsql2-2.34.0.dist-info → execsql2-2.35.0.dist-info}/licenses/LICENSE.txt +0 -0
- {execsql2-2.34.0.dist-info → execsql2-2.35.0.dist-info}/licenses/NOTICE +0 -0
execsql/api.py
CHANGED
execsql/config.py
CHANGED
|
@@ -300,6 +300,7 @@ class ConfigData:
|
|
|
300
300
|
self._get_bool(cp, self._INPUT_SECTION, "boolean_int", "boolean_int")
|
|
301
301
|
self._get_bool(cp, self._INPUT_SECTION, "boolean_words", "boolean_words")
|
|
302
302
|
self._get_bool(cp, self._INPUT_SECTION, "empty_strings", "empty_strings")
|
|
303
|
+
self._get_bool(cp, self._INPUT_SECTION, "exact_decimals", "exact_decimals")
|
|
303
304
|
self._get_bool(cp, self._INPUT_SECTION, "only_strings", "only_strings")
|
|
304
305
|
self._get_bool(cp, self._INPUT_SECTION, "empty_rows", "empty_rows")
|
|
305
306
|
self._get_bool(cp, self._INPUT_SECTION, "delete_empty_columns", "del_empty_cols")
|
|
@@ -503,6 +504,7 @@ class ConfigData:
|
|
|
503
504
|
self.boolean_int = True
|
|
504
505
|
self.boolean_words = False
|
|
505
506
|
self.empty_strings = True
|
|
507
|
+
self.exact_decimals = False
|
|
506
508
|
self.only_strings = False
|
|
507
509
|
self.empty_rows = True
|
|
508
510
|
self.del_empty_cols = False
|
|
@@ -115,6 +115,13 @@
|
|
|
115
115
|
# Values: Yes or No. Default: Yes.
|
|
116
116
|
#empty_strings=Yes
|
|
117
117
|
|
|
118
|
+
# Whether a column of decimal numbers with different numbers of decimal places
|
|
119
|
+
# (1.5, 2.25) gets an exact DECIMAL(precision, scale) type when IMPORT or COPY
|
|
120
|
+
# creates a table. With No it gets a floating-point type, unless a value has
|
|
121
|
+
# more than 15 significant digits (then it is DECIMAL, so no digit is lost).
|
|
122
|
+
# Values: Yes or No. Default: No.
|
|
123
|
+
#exact_decimals=No
|
|
124
|
+
|
|
118
125
|
# Whether to fold column headers to lowercase, uppercase, or leave unchanged.
|
|
119
126
|
# Values: No, Lower, or Upper. Default: No.
|
|
120
127
|
#fold_column_headers=No
|
execsql/metacommands/data.py
CHANGED
|
@@ -21,7 +21,7 @@ What's actually here:
|
|
|
21
21
|
``x_set_counter``.
|
|
22
22
|
- IMPORT / scanning configuration metacommands (the ``CONFIG …`` form):
|
|
23
23
|
``x_empty_strings``, ``x_trim_strings``, ``x_replace_newlines``,
|
|
24
|
-
``x_empty_rows``, ``x_only_strings``, ``x_boolean_int``,
|
|
24
|
+
``x_empty_rows``, ``x_exact_decimals``, ``x_only_strings``, ``x_boolean_int``,
|
|
25
25
|
``x_boolean_words``, ``x_fold_col_hdrs``, ``x_trim_col_hdrs``,
|
|
26
26
|
``x_clean_col_hdrs``, ``x_del_empty_cols``, ``x_create_col_hdrs``,
|
|
27
27
|
``x_dedup_col_hdrs``, ``x_import_common_cols_only``, ``x_max_int``.
|
|
@@ -301,6 +301,12 @@ def x_only_strings(**kwargs: Any) -> None:
|
|
|
301
301
|
return None
|
|
302
302
|
|
|
303
303
|
|
|
304
|
+
def x_exact_decimals(**kwargs: Any) -> None:
|
|
305
|
+
flag = kwargs["yesno"].lower()
|
|
306
|
+
_state.conf.exact_decimals = flag in ("yes", "on", "true", "1")
|
|
307
|
+
return None
|
|
308
|
+
|
|
309
|
+
|
|
304
310
|
def x_boolean_int(**kwargs: Any) -> None:
|
|
305
311
|
flag = kwargs["yesno"].lower()
|
|
306
312
|
_state.conf.boolean_int = flag in ("yes", "on", "true", "1")
|
execsql/metacommands/dispatch.py
CHANGED
|
@@ -64,6 +64,7 @@ from execsql.metacommands.data import (
|
|
|
64
64
|
x_dedup_col_hdrs,
|
|
65
65
|
x_empty_rows,
|
|
66
66
|
x_empty_strings,
|
|
67
|
+
x_exact_decimals,
|
|
67
68
|
x_fold_col_hdrs,
|
|
68
69
|
x_import_common_cols_only,
|
|
69
70
|
x_max_int,
|
|
@@ -768,6 +769,12 @@ def build_dispatch_table() -> MetaCommandList:
|
|
|
768
769
|
description="EMPTY_ROWS",
|
|
769
770
|
category="config_option",
|
|
770
771
|
)
|
|
772
|
+
mcl.add(
|
|
773
|
+
r"^\s*CONFIG\s+EXACT_DECIMALS\s+(?P<yesno>YES|NO|ON|OFF|TRUE|FALSE|0|1)\s*$",
|
|
774
|
+
x_exact_decimals,
|
|
775
|
+
description="EXACT_DECIMALS",
|
|
776
|
+
category="config_option",
|
|
777
|
+
)
|
|
771
778
|
mcl.add(
|
|
772
779
|
r"^\s*CONFIG\s+ONLY_STRINGS\s+(?P<yesno>YES|NO|ON|OFF|TRUE|FALSE|0|1)\s*$",
|
|
773
780
|
x_only_strings,
|
|
@@ -254,6 +254,7 @@ _METACOMMANDS: tuple[Metacommand, ...] = (
|
|
|
254
254
|
"CONFIG DELETE_EMPTY_COLUMNS YES|NO",
|
|
255
255
|
"CONFIG EMPTY_ROWS YES|NO",
|
|
256
256
|
"CONFIG EMPTY_STRINGS YES|NO",
|
|
257
|
+
"CONFIG EXACT_DECIMALS YES|NO",
|
|
257
258
|
"CONFIG EXPORT_ROW_BUFFER <n>",
|
|
258
259
|
"CONFIG FOLD_COLUMN_HEADERS NO|LOWER|UPPER",
|
|
259
260
|
"CONFIG GUI_LEVEL <n>",
|
execsql/models.py
CHANGED
|
@@ -49,6 +49,10 @@ __all__ = [
|
|
|
49
49
|
|
|
50
50
|
ColumnType = tuple[str, type[DataType], int | None, bool, int | None, int | None]
|
|
51
51
|
|
|
52
|
+
# Every decimal of up to this many significant digits reads back unchanged
|
|
53
|
+
# from an IEEE double (DBL_DIG).
|
|
54
|
+
_DOUBLE_EXACT_DIGITS = 15
|
|
55
|
+
|
|
52
56
|
|
|
53
57
|
def _text_length(value: Any) -> int:
|
|
54
58
|
"""Return the length of *value* written as text (a column may turn out to be text)."""
|
|
@@ -71,9 +75,14 @@ class Column:
|
|
|
71
75
|
"""Accumulate match counts and length statistics for a single data type."""
|
|
72
76
|
|
|
73
77
|
# Accumulates the count of matches for each data type, plus the maximum length if appropriate.
|
|
74
|
-
def __init__(self, data_type_obj: DataType) -> None:
|
|
75
|
-
"""Initialise the accumulator for the given data type.
|
|
78
|
+
def __init__(self, data_type_obj: DataType, *, exact_decimals: bool = False) -> None:
|
|
79
|
+
"""Initialise the accumulator for the given data type.
|
|
80
|
+
|
|
81
|
+
*exact_decimals*: the ``exact_decimals`` setting; see
|
|
82
|
+
:meth:`chooses_float`.
|
|
83
|
+
"""
|
|
76
84
|
self.dt = data_type_obj
|
|
85
|
+
self.exact_decimals = exact_decimals
|
|
77
86
|
self.failed = False
|
|
78
87
|
self.count = 0
|
|
79
88
|
self.maxlen = 0
|
|
@@ -127,6 +136,23 @@ class Column:
|
|
|
127
136
|
self.maxscale = max(self.dt.scale, self.maxscale)
|
|
128
137
|
self.max_int_digits = max(int_digits, self.max_int_digits)
|
|
129
138
|
|
|
139
|
+
def chooses_float(self) -> bool:
|
|
140
|
+
"""Whether a decimal column gives way to a float column.
|
|
141
|
+
|
|
142
|
+
A column of decimals with different scales (``1.50``, ``2``,
|
|
143
|
+
``-3.25``) is a float unless the ``exact_decimals`` setting is on,
|
|
144
|
+
or a value has more digits than a double holds exactly: every
|
|
145
|
+
decimal of up to 15 significant digits reads back unchanged from
|
|
146
|
+
a double, so such a column loses nothing, and a longer one
|
|
147
|
+
(``1234567890.1234567891``) stays ``DECIMAL(p, s)``.
|
|
148
|
+
"""
|
|
149
|
+
return (
|
|
150
|
+
self.varscale
|
|
151
|
+
and not self.exact_decimals
|
|
152
|
+
and self.maxprecision is not None
|
|
153
|
+
and self.maxprecision <= _DOUBLE_EXACT_DIGITS
|
|
154
|
+
)
|
|
155
|
+
|
|
130
156
|
def __init__(self, colname: str, infer_strings: bool = True) -> None:
|
|
131
157
|
"""Create a column characteriser for the named column.
|
|
132
158
|
|
|
@@ -169,7 +195,7 @@ class Column:
|
|
|
169
195
|
self.Accum(DT_Boolean()),
|
|
170
196
|
self.Accum(DT_Integer()),
|
|
171
197
|
self.Accum(DT_Long()),
|
|
172
|
-
self.Accum(DT_Decimal()),
|
|
198
|
+
self.Accum(DT_Decimal(), exact_decimals=conf.exact_decimals),
|
|
173
199
|
self.Accum(DT_Float()),
|
|
174
200
|
self.Accum(DT_Character()),
|
|
175
201
|
self.Accum(DT_Varchar()),
|
|
@@ -262,7 +288,7 @@ class Column:
|
|
|
262
288
|
break
|
|
263
289
|
else:
|
|
264
290
|
if ac.dt.precspec:
|
|
265
|
-
if ac.dt.precision is not None and ac.dt.scale is not None:
|
|
291
|
+
if ac.dt.precision is not None and ac.dt.scale is not None and not ac.chooses_float():
|
|
266
292
|
sel_type = ac
|
|
267
293
|
break
|
|
268
294
|
else:
|
execsql/script/executor.py
CHANGED
|
@@ -85,6 +85,14 @@ _DEFER_RX = re.compile(r"!\{([$@&~#+]?\w+)\}!")
|
|
|
85
85
|
_VARLIKE = re.compile(r"!![$@&~#]?\w+!!", re.I)
|
|
86
86
|
|
|
87
87
|
|
|
88
|
+
def _warn_unsubstituted(cmd: str) -> None:
|
|
89
|
+
"""Log a command that still looks like it holds a variable; print it too if ``write_warnings`` is on."""
|
|
90
|
+
from execsql.utils.errors import write_warning
|
|
91
|
+
from execsql.utils.fileio import redact
|
|
92
|
+
|
|
93
|
+
write_warning(f"There is a potential un-substituted variable in the command\n {redact(cmd)}")
|
|
94
|
+
|
|
95
|
+
|
|
88
96
|
def _stack_localvars(ctx: RuntimeContext) -> SubVarSet | None:
|
|
89
97
|
"""Build the merged ``~`` local + ``#`` param overlay for the current scope.
|
|
90
98
|
|
|
@@ -254,11 +262,7 @@ def _exec_sql(
|
|
|
254
262
|
effective_locals = _stack_localvars(ctx) or localvars
|
|
255
263
|
cmd = substitute_vars(text, effective_locals, ctx=ctx)
|
|
256
264
|
if _VARLIKE.search(cmd):
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
output.write(
|
|
260
|
-
f"Warning: There is a potential un-substituted variable in the command\n {redact(cmd)}\n",
|
|
261
|
-
)
|
|
265
|
+
_warn_unsubstituted(cmd)
|
|
262
266
|
e = None
|
|
263
267
|
result = None
|
|
264
268
|
try:
|
|
@@ -323,11 +327,7 @@ def _exec_metacommand(
|
|
|
323
327
|
assert subvars is not None
|
|
324
328
|
|
|
325
329
|
if _VARLIKE.search(cmd):
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
output.write(
|
|
329
|
-
f"Warning: There is a potential un-substituted variable in the command\n {redact(cmd)}\n",
|
|
330
|
-
)
|
|
330
|
+
_warn_unsubstituted(cmd)
|
|
331
331
|
e = None
|
|
332
332
|
try:
|
|
333
333
|
applies, result = metacommandlist.eval(cmd)
|
execsql/utils/errors.py
CHANGED
|
@@ -274,8 +274,8 @@ def write_warning(warning_msg: str, *, always: bool = False) -> None:
|
|
|
274
274
|
warning_msg: The warning text to emit.
|
|
275
275
|
always: When ``True``, always write to stderr regardless of the
|
|
276
276
|
``conf.write_warnings`` setting. Use this for structural warnings
|
|
277
|
-
(e.g. IF-level mismatch
|
|
278
|
-
|
|
277
|
+
(e.g. IF-level mismatch) that should always be visible. When
|
|
278
|
+
``False`` (default), stderr output is gated by
|
|
279
279
|
``conf.write_warnings``.
|
|
280
280
|
"""
|
|
281
281
|
if _state.exec_log is not None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: execsql2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.35.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/en/stable/
|
|
6
6
|
Project-URL: Repository, https://github.com/geocoug/execsql
|
|
@@ -441,7 +441,7 @@ execsql format --no-sql --in-place scripts/
|
|
|
441
441
|
```yaml
|
|
442
442
|
repos:
|
|
443
443
|
- repo: https://github.com/geocoug/execsql
|
|
444
|
-
rev: v2.
|
|
444
|
+
rev: v2.35.0
|
|
445
445
|
hooks:
|
|
446
446
|
- id: execsql-format
|
|
447
447
|
- id: execsql-lint
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
execsql/__init__.py,sha256=ZeVnpEWu8M2bn3qLmVM72NhWRueUGNbsX8UAPTermo0,901
|
|
2
2
|
execsql/__main__.py,sha256=Nnh7_QgjYTTzd1Kog2thl7wzNpoxfnZ3YaurSOMzE_U,270
|
|
3
|
-
execsql/api.py,sha256=
|
|
4
|
-
execsql/config.py,sha256=
|
|
3
|
+
execsql/api.py,sha256=WrlmuLKYpOnNLW8l9Svzeh28Ox0zGFrjhJtYlKY7niU,26831
|
|
4
|
+
execsql/config.py,sha256=wTtugbLNplxgva4P8uD8jKYs8N0MywHPTvjwHTsYFDU,40528
|
|
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
9
|
execsql/manifest.py,sha256=eJp39R8bYuFuJiGaBbDsk_lua13uJHXPOdwWdUfE-CQ,9027
|
|
10
|
-
execsql/models.py,sha256=
|
|
10
|
+
execsql/models.py,sha256=8AnxILNwFZjDX8xXvv5usgOcTDsOIwkfZJjeYbXREe8,18374
|
|
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
|
|
@@ -31,7 +31,7 @@ execsql/cli/commands/listing.py,sha256=thtkJ-ILGd0SPs57oVIMkkCGpXsfS0hQxueMc2ccR
|
|
|
31
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
|
-
execsql/data/execsql.conf.template,sha256=
|
|
34
|
+
execsql/data/execsql.conf.template,sha256=3-sJPrB1u3KPsuiXv7X_BcSugUmRBgqFh37GuevyfTc,13138
|
|
35
35
|
execsql/data/script_header.sql,sha256=a7WKScekNgJoxVEmMRTkWv8NsAzW1jJ4vJfGy9HVy0g,349
|
|
36
36
|
execsql/db/__init__.py,sha256=jTbuafuKOqYtXFR1wvCOoKK5Lr3l1uErfaIbIr6UywI,1063
|
|
37
37
|
execsql/db/access.py,sha256=fxiC3rtoOJzrNXNxau-w7oh1fd9tyh2_PMliBbFc164,21427
|
|
@@ -101,9 +101,9 @@ execsql/metacommands/__init__.py,sha256=aMf-3IRjMpNFSUI-IMAcvL-kXZHq5qF6W_p3Uawd
|
|
|
101
101
|
execsql/metacommands/conditions.py,sha256=4DsMXr6vnfbtcKqgnxYV4UK4NmAfE_hpfgkFjlH0bjo,29844
|
|
102
102
|
execsql/metacommands/connect.py,sha256=SPk4h9yiUgTD3w1gNOT_oYx8VShggsO357by5Hoy6OI,15344
|
|
103
103
|
execsql/metacommands/control.py,sha256=9swW6X8jXDUpu5cHiAnQVx1ahFyWxlx7mjg4dqYfX5Y,9355
|
|
104
|
-
execsql/metacommands/data.py,sha256=
|
|
104
|
+
execsql/metacommands/data.py,sha256=9zxyg3_kV4jRuagUNtSlhhlvH2TiPP0gdNAaXBXdhI0,12493
|
|
105
105
|
execsql/metacommands/debug.py,sha256=mKRT7uLwnw34Xl46fNDI_zH4MsPpZyihoLlonapbXuU,12981
|
|
106
|
-
execsql/metacommands/dispatch.py,sha256=
|
|
106
|
+
execsql/metacommands/dispatch.py,sha256=m7p2L_HtooKfSv58MHbDmYJJ7Xe1UEpr6mnHdvABViI,87655
|
|
107
107
|
execsql/metacommands/effects.py,sha256=cRSo48R4nRJzkRR3OGHLhJzofcdAaNIobaxmn1N9TGw,3813
|
|
108
108
|
execsql/metacommands/io.py,sha256=vlGBje5sgnqeilooMdhJDgSRIhysHy5_7LrKtik9Xjs,3011
|
|
109
109
|
execsql/metacommands/io_export.py,sha256=_1o5T3Ejqq_0N1hYwaRPgDktn8nZT8sQLMyXPRgXEec,14587
|
|
@@ -111,7 +111,7 @@ execsql/metacommands/io_fileops.py,sha256=ru7zYgNV7rg0WtaDwhdYjy5iJTcecvjzR1PCdM
|
|
|
111
111
|
execsql/metacommands/io_import.py,sha256=gJICeK1MOfG6D73I7m8zBCalvr_ZJzD-QBKOpKYeYXo,15684
|
|
112
112
|
execsql/metacommands/io_write.py,sha256=yXDkMbQ3haDARVATVUYZprakyJHSyk1NywdKkFLpQ14,12783
|
|
113
113
|
execsql/metacommands/prompt.py,sha256=PlXhtBYCembG_1SSCrwpQR10mGF3_jXodu4aCSHlSCM,37950
|
|
114
|
-
execsql/metacommands/reference.py,sha256=
|
|
114
|
+
execsql/metacommands/reference.py,sha256=9Q7DSiPEjXyD9HQkkqiToRN59TrZ8_6Gz9VVVv9WSjw,54369
|
|
115
115
|
execsql/metacommands/script_ext.py,sha256=CsUbyq8QFPnnvfX_k7fPlYNvvRw1xLmAWER4Exo5pwc,3658
|
|
116
116
|
execsql/metacommands/system.py,sha256=6X2qmMpGUHDzyEluEotXt0Ks9jKQTpc2x0eoYNgN12M,7997
|
|
117
117
|
execsql/metacommands/upsert.py,sha256=hcYGonmh2sdijbqwNynn1-iajMnLp7x5vbRbtfjaf8c,21461
|
|
@@ -119,7 +119,7 @@ execsql/script/__init__.py,sha256=I7hVO6wm3iOocxRRGEcFHhjdtL1moKbUYLB-wKbjPdk,32
|
|
|
119
119
|
execsql/script/ast.py,sha256=WqCpFxhxrT2IIGvbArTp3QS0BZryRZAb7IL4ri3I6xg,20591
|
|
120
120
|
execsql/script/control.py,sha256=WqLy-HLPqHG3vEzYpKMiIJsD7LpORjyQuUWzFzcGz4w,2327
|
|
121
121
|
execsql/script/engine.py,sha256=h1pUSXGqwJASLJizqzd9LBMn_U5Vuqc1UbaZk1xUinw,18468
|
|
122
|
-
execsql/script/executor.py,sha256=
|
|
122
|
+
execsql/script/executor.py,sha256=s942xbokn1S8wUNqZd8zGKs-Hr-6Gd8FNaWqnTbZk28,41041
|
|
123
123
|
execsql/script/parser.py,sha256=z73v6t6ZbPUKkRu-UOIL6q1cCRDeoRvG2aXXC8NpMvE,37162
|
|
124
124
|
execsql/script/variables.py,sha256=XHRnViFp0zPy-skGpYbpckkYAcczqpw1lqTVLR9eZvo,17735
|
|
125
125
|
execsql/utils/__init__.py,sha256=0uR6JwVJQRX3vceByNBduCAf5dd5assKjeqJUWvpZoA,278
|
|
@@ -127,7 +127,7 @@ execsql/utils/auth.py,sha256=0LYKdNMhodq9R0B8WyKp69a-xlP9wOR6Ua9Lgo2aJnQ,14868
|
|
|
127
127
|
execsql/utils/color.py,sha256=goQqhnLg8yERpFolQikA9zYSVcuAm0unKTJiWTbQm-U,634
|
|
128
128
|
execsql/utils/crypto.py,sha256=KlT6lPk-v0-qQQfAMfWvT9Q6kRdCD3_5JVaLajNocKM,3051
|
|
129
129
|
execsql/utils/datetime.py,sha256=9ZizCFBYut5gC4gU3Cmegfddv1HLoU5xVQWm9thy5EI,6127
|
|
130
|
-
execsql/utils/errors.py,sha256=
|
|
130
|
+
execsql/utils/errors.py,sha256=PtOM2XZSMxXVyHEOcCLAmkeLNjGbGuecU8TVDgCF2RE,11668
|
|
131
131
|
execsql/utils/fileio.py,sha256=IqIEhun9aOnr1oBCWK2z2VAPVo95bZ54cVglLW4rV9M,48208
|
|
132
132
|
execsql/utils/gui.py,sha256=1iiupP9AsLdR6ST0gcLE143o6y6YGUFlNv_pdVPxfCE,23943
|
|
133
133
|
execsql/utils/mail.py,sha256=4RiKtXa_sqij_YGdYmjQ3PG0u3G9qjs-9caQwBErtBw,7278
|
|
@@ -136,22 +136,22 @@ execsql/utils/paths.py,sha256=7IIHT6vqXTfs6Ltfrzm_I2ZV4pU8IuedOLkHo6a1_K8,1175
|
|
|
136
136
|
execsql/utils/regex.py,sha256=DGzPBl0Kt4--RbwPhoZI6Bm6N_CBUvI0DbqE4EF6qp8,3718
|
|
137
137
|
execsql/utils/strings.py,sha256=UQNjpRCEFa1UO6feU-M-9e24wWAvizs_iu_4fFusLxo,8516
|
|
138
138
|
execsql/utils/timer.py,sha256=eDYf5VzCNFk7oo90InJucUm3XcBdhYMogjZMqeg9xzc,1899
|
|
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.
|
|
154
|
-
execsql2-2.
|
|
155
|
-
execsql2-2.
|
|
156
|
-
execsql2-2.
|
|
157
|
-
execsql2-2.
|
|
139
|
+
execsql2-2.35.0.data/data/execsql2_extras/README.md,sha256=6f5bWiBlKRn8s6GVrU423-HFrU1Jwbk2AabxraLu3AY,5398
|
|
140
|
+
execsql2-2.35.0.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
|
|
141
|
+
execsql2-2.35.0.data/data/execsql2_extras/example_config_prompt.sql,sha256=2e8KzzVWhho8KxYVHETSVmZdhW7wodioDsqBLSL6m4s,7487
|
|
142
|
+
execsql2-2.35.0.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
|
|
143
|
+
execsql2-2.35.0.data/data/execsql2_extras/md_compare.sql,sha256=ARYEcOlxWLxfw-KCKDeJRdCqnuCb9PVwGaHtITR2sYU,26535
|
|
144
|
+
execsql2-2.35.0.data/data/execsql2_extras/md_glossary.sql,sha256=gu2PDTm295YvxR7cDp25Mf-xXHly0BvlMudoNOrep5Q,10931
|
|
145
|
+
execsql2-2.35.0.data/data/execsql2_extras/md_upsert.sql,sha256=YNUTFS6yB4bZXs-wRDn6dN8jL5wIumzZyE2uo5arIos,113407
|
|
146
|
+
execsql2-2.35.0.data/data/execsql2_extras/pg_compare.sql,sha256=WcupGxQoWtMwHVPuy42xCpP4gAV4Ttb1W-_hwh-3xb4,24529
|
|
147
|
+
execsql2-2.35.0.data/data/execsql2_extras/pg_glossary.sql,sha256=CfQz2HZj2nMvJfYfQrAmNYdx0uRrOIWsCXwVo5gKv_k,9953
|
|
148
|
+
execsql2-2.35.0.data/data/execsql2_extras/script_template.sql,sha256=s5i0HULxp49N2Cpd24iALleM_dBq5oLuN3Arx_4Z7-o,11140
|
|
149
|
+
execsql2-2.35.0.data/data/execsql2_extras/ss_compare.sql,sha256=PpU-vPyqqC1faBoo5zwVZlZHYKkT79QZisWVlk4o-ss,26415
|
|
150
|
+
execsql2-2.35.0.data/data/execsql2_extras/ss_glossary.sql,sha256=_oTiZHpadPXWrNs8VoRe9PZgX9XdK490NMVWVTVtjl4,13110
|
|
151
|
+
execsql2-2.35.0.data/data/execsql2_extras/ss_upsert.sql,sha256=Dvst877h4KHn8ayYF9EXI_OxqLQ89wyfcnGYYT4szro,118304
|
|
152
|
+
execsql2-2.35.0.dist-info/METADATA,sha256=w_11vJcNw1_5LNse5KT9rHS7IJDv3-Ng6dCGM7q0_Oo,26939
|
|
153
|
+
execsql2-2.35.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
154
|
+
execsql2-2.35.0.dist-info/entry_points.txt,sha256=jOf53-4IVGjEZeNYUOF1GGaiPNfVZcNKxP3vDFKEyMA,58
|
|
155
|
+
execsql2-2.35.0.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
|
|
156
|
+
execsql2-2.35.0.dist-info/licenses/NOTICE,sha256=McYzgxYav3U1OaVsY4Su1sfBrfmplpRdA9b6-gCDQCg,342
|
|
157
|
+
execsql2-2.35.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{execsql2-2.34.0.data → execsql2-2.35.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
|