execsql2 2.4.5__py3-none-any.whl → 2.5.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/cli/__init__.py +14 -0
- execsql/cli/dsn.py +2 -0
- execsql/cli/help.py +2 -0
- execsql/cli/run.py +4 -2
- execsql/constants.py +11 -0
- execsql/db/access.py +20 -0
- execsql/db/base.py +4 -0
- execsql/db/dsn.py +11 -8
- execsql/db/duckdb.py +12 -8
- execsql/db/firebird.py +17 -8
- execsql/db/mysql.py +13 -8
- execsql/db/oracle.py +22 -8
- execsql/db/postgres.py +21 -9
- execsql/db/sqlite.py +18 -8
- execsql/db/sqlserver.py +14 -8
- execsql/exporters/__init__.py +6 -1
- execsql/exporters/base.py +2 -0
- execsql/exporters/delimited.py +10 -0
- execsql/exporters/protocol.py +128 -0
- execsql/exporters/xls.py +8 -0
- execsql/format.py +3 -1
- execsql/gui/__init__.py +2 -0
- execsql/gui/base.py +2 -0
- execsql/gui/console.py +2 -0
- execsql/gui/desktop.py +1 -0
- execsql/gui/tui.py +2 -0
- execsql/importers/base.py +1 -0
- execsql/importers/csv.py +2 -0
- execsql/importers/feather.py +2 -0
- execsql/importers/ods.py +1 -0
- execsql/importers/xls.py +1 -0
- execsql/metacommands/__init__.py +206 -0
- execsql/metacommands/dispatch.py +2 -0
- execsql/metacommands/io.py +41 -0
- execsql/models.py +17 -0
- execsql/parser.py +41 -0
- execsql/script/control.py +2 -0
- execsql/script/engine.py +19 -0
- execsql/script/variables.py +9 -5
- execsql/state.py +52 -0
- execsql/types.py +46 -0
- {execsql2-2.4.5.dist-info → execsql2-2.5.0.dist-info}/METADATA +2 -2
- {execsql2-2.4.5.dist-info → execsql2-2.5.0.dist-info}/RECORD +62 -61
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/README.md +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/config_settings.sqlite +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/example_config_prompt.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/execsql.conf +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/make_config_db.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/md_compare.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/md_glossary.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/md_upsert.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/pg_compare.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/pg_glossary.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/pg_upsert.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/script_template.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/ss_compare.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/ss_glossary.sql +0 -0
- {execsql2-2.4.5.data → execsql2-2.5.0.data}/data/execsql2_extras/ss_upsert.sql +0 -0
- {execsql2-2.4.5.dist-info → execsql2-2.5.0.dist-info}/WHEEL +0 -0
- {execsql2-2.4.5.dist-info → execsql2-2.5.0.dist-info}/entry_points.txt +0 -0
- {execsql2-2.4.5.dist-info → execsql2-2.5.0.dist-info}/licenses/LICENSE.txt +0 -0
- {execsql2-2.4.5.dist-info → execsql2-2.5.0.dist-info}/licenses/NOTICE +0 -0
execsql/state.py
CHANGED
|
@@ -55,6 +55,58 @@ if TYPE_CHECKING:
|
|
|
55
55
|
from execsql.utils.mail import MailSpec
|
|
56
56
|
from execsql.utils.timer import Timer
|
|
57
57
|
|
|
58
|
+
__all__ = [
|
|
59
|
+
# Configuration / encoding
|
|
60
|
+
"conf",
|
|
61
|
+
"logfile_encoding",
|
|
62
|
+
# Runtime state
|
|
63
|
+
"last_command",
|
|
64
|
+
"upass",
|
|
65
|
+
"varlike",
|
|
66
|
+
"err_halt_writespec",
|
|
67
|
+
"err_halt_email",
|
|
68
|
+
"err_halt_exec",
|
|
69
|
+
"cancel_halt_writespec",
|
|
70
|
+
"cancel_halt_mailspec",
|
|
71
|
+
"cancel_halt_exec",
|
|
72
|
+
"commandliststack",
|
|
73
|
+
"savedscripts",
|
|
74
|
+
"loopcommandstack",
|
|
75
|
+
"compiling_loop",
|
|
76
|
+
"endloop_rx",
|
|
77
|
+
"loop_rx",
|
|
78
|
+
"loop_nest_level",
|
|
79
|
+
"cmds_run",
|
|
80
|
+
"defer_rx",
|
|
81
|
+
"stringtypes",
|
|
82
|
+
"exec_log",
|
|
83
|
+
"subvars",
|
|
84
|
+
"status",
|
|
85
|
+
# Lazy singletons
|
|
86
|
+
"if_stack",
|
|
87
|
+
"counters",
|
|
88
|
+
"timer",
|
|
89
|
+
"output",
|
|
90
|
+
"dbs",
|
|
91
|
+
"tempfiles",
|
|
92
|
+
"export_metadata",
|
|
93
|
+
"metacommandlist",
|
|
94
|
+
"conditionallist",
|
|
95
|
+
"filewriter",
|
|
96
|
+
"gui_console",
|
|
97
|
+
"gui_manager_queue",
|
|
98
|
+
"gui_manager_thread",
|
|
99
|
+
# Version
|
|
100
|
+
"primary_vno",
|
|
101
|
+
"secondary_vno",
|
|
102
|
+
"tertiary_vno",
|
|
103
|
+
# Functions
|
|
104
|
+
"xcmd_test",
|
|
105
|
+
"endloop",
|
|
106
|
+
"reset",
|
|
107
|
+
"initialize",
|
|
108
|
+
]
|
|
109
|
+
|
|
58
110
|
# ---------------------------------------------------------------------------
|
|
59
111
|
# Configuration / encoding
|
|
60
112
|
# ---------------------------------------------------------------------------
|
execsql/types.py
CHANGED
|
@@ -70,6 +70,8 @@ __all__ = [
|
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
class DataType:
|
|
73
|
+
"""Abstract base class for all data-type matchers used during column inference."""
|
|
74
|
+
|
|
73
75
|
data_type_name = None
|
|
74
76
|
data_type = None
|
|
75
77
|
lenspec = False # Is a length specification required for a (SQL) declaration of this data type?
|
|
@@ -83,9 +85,11 @@ class DataType:
|
|
|
83
85
|
return f"DataType({self.data_type_name!r}, {self.data_type!r})"
|
|
84
86
|
|
|
85
87
|
def is_null(self, data: object) -> bool:
|
|
88
|
+
"""Return True if the data value is None."""
|
|
86
89
|
return data is None
|
|
87
90
|
|
|
88
91
|
def matches(self, data: object) -> bool:
|
|
92
|
+
"""Return True if the non-null data value could be of this data type."""
|
|
89
93
|
# Returns T/F indicating whether the given data value could be of this data type.
|
|
90
94
|
# The data value should be non-null.
|
|
91
95
|
if self.is_null(data):
|
|
@@ -93,6 +97,7 @@ class DataType:
|
|
|
93
97
|
return self._is_match(data)
|
|
94
98
|
|
|
95
99
|
def from_data(self, data: object) -> object:
|
|
100
|
+
"""Coerce the data value to this type or raise DataTypeError."""
|
|
96
101
|
# Returns the data value coerced to this type, or raises a DataTypeError exception.
|
|
97
102
|
# The data value should be non-null.
|
|
98
103
|
if self.is_null(data):
|
|
@@ -123,16 +128,22 @@ class DataType:
|
|
|
123
128
|
|
|
124
129
|
|
|
125
130
|
class Tz(datetime.tzinfo):
|
|
131
|
+
"""Fixed-offset timezone implementation for timestamp-with-timezone parsing."""
|
|
132
|
+
|
|
126
133
|
def __init__(self, sign: int, hr: int, min: int) -> None:
|
|
134
|
+
"""Store the UTC offset as sign, hours, and minutes."""
|
|
127
135
|
self.sign = sign
|
|
128
136
|
self.hr = hr
|
|
129
137
|
self.min = min
|
|
130
138
|
|
|
131
139
|
def utcoffset(self, dt: object) -> datetime.timedelta:
|
|
140
|
+
"""Return the UTC offset as a timedelta."""
|
|
132
141
|
return self.sign * datetime.timedelta(hours=self.hr, minutes=self.min)
|
|
133
142
|
|
|
134
143
|
|
|
135
144
|
class DT_TimestampTZ(DataType):
|
|
145
|
+
"""Timezone-aware timestamp data type."""
|
|
146
|
+
|
|
136
147
|
data_type_name = "timestamptz"
|
|
137
148
|
data_type = datetime.datetime
|
|
138
149
|
# There is no distinct Python type corresponding to a timestamptz, so the data_type
|
|
@@ -166,6 +177,8 @@ class DT_TimestampTZ(DataType):
|
|
|
166
177
|
|
|
167
178
|
|
|
168
179
|
class DT_Timestamp(DataType):
|
|
180
|
+
"""Naive timestamp (datetime without timezone) data type."""
|
|
181
|
+
|
|
169
182
|
data_type_name = "timestamp"
|
|
170
183
|
data_type = datetime.datetime
|
|
171
184
|
|
|
@@ -207,10 +220,13 @@ date_fmts = collections.deque(
|
|
|
207
220
|
|
|
208
221
|
|
|
209
222
|
class DT_Date(DataType):
|
|
223
|
+
"""Calendar date data type with multiple format recognition."""
|
|
224
|
+
|
|
210
225
|
data_type_name = "date"
|
|
211
226
|
data_type = datetime.date
|
|
212
227
|
|
|
213
228
|
def __init__(self) -> None:
|
|
229
|
+
"""Initialise the date format deque for adaptive format matching."""
|
|
214
230
|
self._date_fmts = collections.deque(date_fmts)
|
|
215
231
|
|
|
216
232
|
def __repr__(self) -> str:
|
|
@@ -239,6 +255,8 @@ class DT_Date(DataType):
|
|
|
239
255
|
|
|
240
256
|
|
|
241
257
|
class DT_Time(DataType):
|
|
258
|
+
"""Time-of-day data type with multiple format recognition."""
|
|
259
|
+
|
|
242
260
|
data_type_name = "time"
|
|
243
261
|
data_type = datetime.time
|
|
244
262
|
time_fmts = (
|
|
@@ -288,6 +306,8 @@ class DT_Time_Oracle(DT_Time):
|
|
|
288
306
|
|
|
289
307
|
|
|
290
308
|
class DT_Boolean(DataType):
|
|
309
|
+
"""Boolean data type recognising word and integer true/false forms."""
|
|
310
|
+
|
|
291
311
|
data_type_name = "boolean"
|
|
292
312
|
data_type = bool
|
|
293
313
|
|
|
@@ -295,6 +315,7 @@ class DT_Boolean(DataType):
|
|
|
295
315
|
return "DT_Boolean()"
|
|
296
316
|
|
|
297
317
|
def set_bool_matches(self) -> None:
|
|
318
|
+
"""Populate the true/false match tuples from the current configuration."""
|
|
298
319
|
import execsql.state as _state
|
|
299
320
|
|
|
300
321
|
conf = _state.conf
|
|
@@ -342,6 +363,8 @@ class DT_Boolean(DataType):
|
|
|
342
363
|
|
|
343
364
|
|
|
344
365
|
class DT_Integer(DataType):
|
|
366
|
+
"""Small integer data type bounded by the configured max_int."""
|
|
367
|
+
|
|
345
368
|
data_type_name = "integer"
|
|
346
369
|
data_type = int
|
|
347
370
|
|
|
@@ -391,6 +414,8 @@ class DT_Integer(DataType):
|
|
|
391
414
|
|
|
392
415
|
|
|
393
416
|
class DT_Long(DataType):
|
|
417
|
+
"""Large integer (bigint) data type using Python int."""
|
|
418
|
+
|
|
394
419
|
data_type_name = "long"
|
|
395
420
|
data_type = int # In Python 3, long is just int
|
|
396
421
|
|
|
@@ -425,6 +450,8 @@ class DT_Long(DataType):
|
|
|
425
450
|
|
|
426
451
|
|
|
427
452
|
class DT_Float(DataType):
|
|
453
|
+
"""IEEE double-precision floating-point data type."""
|
|
454
|
+
|
|
428
455
|
data_type_name = "float"
|
|
429
456
|
data_type = float
|
|
430
457
|
|
|
@@ -463,6 +490,8 @@ class DT_Float(DataType):
|
|
|
463
490
|
|
|
464
491
|
|
|
465
492
|
class DT_Decimal(DataType):
|
|
493
|
+
"""Exact decimal data type tracking precision and scale."""
|
|
494
|
+
|
|
466
495
|
data_type_name = "decimal"
|
|
467
496
|
data_type = Decimal
|
|
468
497
|
precspec = True
|
|
@@ -471,6 +500,7 @@ class DT_Decimal(DataType):
|
|
|
471
500
|
return "DT_Decimal()"
|
|
472
501
|
|
|
473
502
|
def set_scale_prec(self, dec: Decimal) -> None:
|
|
503
|
+
"""Compute and store the precision and scale from a Decimal value."""
|
|
474
504
|
# 'dec' should be Decimal.
|
|
475
505
|
x = dec.as_tuple()
|
|
476
506
|
digits = len(x.digits)
|
|
@@ -501,6 +531,8 @@ class DT_Decimal(DataType):
|
|
|
501
531
|
|
|
502
532
|
|
|
503
533
|
class DT_Character(DataType):
|
|
534
|
+
"""Fixed-length string data type (up to 255 characters)."""
|
|
535
|
+
|
|
504
536
|
data_type_name = "character"
|
|
505
537
|
lenspec = True
|
|
506
538
|
|
|
@@ -530,6 +562,8 @@ class DT_Character(DataType):
|
|
|
530
562
|
|
|
531
563
|
|
|
532
564
|
class DT_Varchar(DataType):
|
|
565
|
+
"""Variable-length string data type (up to 255 characters)."""
|
|
566
|
+
|
|
533
567
|
data_type_name = "varchar"
|
|
534
568
|
lenspec = True
|
|
535
569
|
varlen = True
|
|
@@ -558,6 +592,8 @@ class DT_Varchar(DataType):
|
|
|
558
592
|
|
|
559
593
|
|
|
560
594
|
class DT_Text(DataType):
|
|
595
|
+
"""Unbounded text string data type."""
|
|
596
|
+
|
|
561
597
|
data_type_name = "character"
|
|
562
598
|
|
|
563
599
|
def __repr__(self) -> str:
|
|
@@ -581,6 +617,8 @@ class DT_Text(DataType):
|
|
|
581
617
|
|
|
582
618
|
|
|
583
619
|
class DT_Binary(DataType):
|
|
620
|
+
"""Binary byte-array data type."""
|
|
621
|
+
|
|
584
622
|
data_type_name = "binary"
|
|
585
623
|
data_type = bytearray
|
|
586
624
|
|
|
@@ -589,7 +627,10 @@ class DT_Binary(DataType):
|
|
|
589
627
|
|
|
590
628
|
|
|
591
629
|
class DbType:
|
|
630
|
+
"""Map Python DataType subclasses to DBMS-specific SQL type names."""
|
|
631
|
+
|
|
592
632
|
def __init__(self, DBMS_id: str, db_obj_quotes: str = '""') -> None:
|
|
633
|
+
"""Initialise a DBMS dialect with its identifier and quoting characters."""
|
|
593
634
|
# The DBMS_id is the name by which this DBMS is identified.
|
|
594
635
|
# db_obj_quotechars is a string of two characters that are the opening and closing quotes
|
|
595
636
|
# for identifiers (schema, table, and column names) that need to be quoted.
|
|
@@ -621,6 +662,7 @@ class DbType:
|
|
|
621
662
|
precision: object = None,
|
|
622
663
|
scale: object = None,
|
|
623
664
|
) -> None:
|
|
665
|
+
"""Register a DBMS-specific SQL type name for a DataType class."""
|
|
624
666
|
# data_type is a DataType class object.
|
|
625
667
|
# dbms_name is the DBMS-specific name for this data type.
|
|
626
668
|
# length_required indicates whether length information is required.
|
|
@@ -631,6 +673,7 @@ class DbType:
|
|
|
631
673
|
self.dialect[data_type] = (dbms_name, length_required, casting_name, conv_mod_fn, precision, scale)
|
|
632
674
|
|
|
633
675
|
def datatype_name(self, data_type: object) -> str:
|
|
676
|
+
"""Return the DBMS-specific SQL type name for the given DataType class."""
|
|
634
677
|
# A convenience function to simplify access to data type names.
|
|
635
678
|
try:
|
|
636
679
|
return self.dialect[data_type][0]
|
|
@@ -642,6 +685,7 @@ class DbType:
|
|
|
642
685
|
) from e
|
|
643
686
|
|
|
644
687
|
def quoted(self, dbms_object: str) -> str:
|
|
688
|
+
"""Quote a database identifier if it contains non-word characters."""
|
|
645
689
|
if re.search(r"\W", dbms_object):
|
|
646
690
|
if self.quotechars[0] == self.quotechars[1] and self.quotechars[0] in dbms_object:
|
|
647
691
|
dbms_object = dbms_object.replace(self.quotechars[0], self.quotechars[0] + self.quotechars[0])
|
|
@@ -649,6 +693,7 @@ class DbType:
|
|
|
649
693
|
return dbms_object
|
|
650
694
|
|
|
651
695
|
def spec_type(self, data_type: object) -> object:
|
|
696
|
+
"""Return the translated data type, or the original if no translation exists."""
|
|
652
697
|
# Returns a translated data type or the original if there is no translation.
|
|
653
698
|
if data_type in self.dt_xlate:
|
|
654
699
|
return self.dt_xlate[data_type]
|
|
@@ -663,6 +708,7 @@ class DbType:
|
|
|
663
708
|
precision: object = None,
|
|
664
709
|
scale: object = None,
|
|
665
710
|
) -> str:
|
|
711
|
+
"""Return a column specification string suitable for a CREATE TABLE statement."""
|
|
666
712
|
# Returns a column specification as it would be used in a CREATE TABLE statement.
|
|
667
713
|
data_type = self.spec_type(data_type)
|
|
668
714
|
try:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: execsql2
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.5.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: Repository, https://github.com/geocoug/execsql
|
|
6
6
|
Project-URL: Issues, https://github.com/geocoug/execsql/issues
|
|
@@ -298,7 +298,7 @@ repos:
|
|
|
298
298
|
args: [--in-place]
|
|
299
299
|
```
|
|
300
300
|
|
|
301
|
-
See the [formatter documentation](https://execsql2.readthedocs.io/en/latest/formatter/) for all options.
|
|
301
|
+
See the [formatter documentation](https://execsql2.readthedocs.io/en/latest/guides/formatter/) for all options.
|
|
302
302
|
|
|
303
303
|
# VS Code Syntax Highlighting
|
|
304
304
|
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
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
|
-
execsql/constants.py,sha256=
|
|
4
|
+
execsql/constants.py,sha256=bns8_sN36Pe4R4vTQZb3dRXDHZhe4N34wZZboe1jBdM,12792
|
|
5
5
|
execsql/exceptions.py,sha256=UE38-7HhQiwXzwKz9DgE4coTD2j6Jlam3jEB6-U-hNg,8383
|
|
6
|
-
execsql/format.py,sha256
|
|
7
|
-
execsql/models.py,sha256=
|
|
8
|
-
execsql/parser.py,sha256=
|
|
6
|
+
execsql/format.py,sha256=-6iknDddqbkapMo4NKmT5LAynDLqMW5kHgDWRg0KSws,11990
|
|
7
|
+
execsql/models.py,sha256=DxkGp9iWbuZDWPGmnxZp9mvEeyOwxEJNx94fxQQiLfQ,13538
|
|
8
|
+
execsql/parser.py,sha256=mbNSMiAMR1NvNvFtQAZq6nxBOupMGJZXSimLWLtZeNs,15537
|
|
9
9
|
execsql/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
execsql/state.py,sha256=
|
|
11
|
-
execsql/types.py,sha256=
|
|
12
|
-
execsql/cli/__init__.py,sha256=
|
|
13
|
-
execsql/cli/dsn.py,sha256=
|
|
14
|
-
execsql/cli/help.py,sha256=
|
|
15
|
-
execsql/cli/run.py,sha256=
|
|
10
|
+
execsql/state.py,sha256=aZP2xH1D9IcVl6c3gmxAIJwZuTcgz1dpIxygfxb8kPA,13346
|
|
11
|
+
execsql/types.py,sha256=HVWb4umIB9lpxCGgqk3xy1hoGYPfN39xci5mHF0Izq4,31882
|
|
12
|
+
execsql/cli/__init__.py,sha256=s4283f04Z-SS5CdwsJj6t_oHuyL5sQELsUGTh6x45NU,14908
|
|
13
|
+
execsql/cli/dsn.py,sha256=svaZtrUXFRL2W5G6FRRiKtR6kehOp7urrVhIx_642Z8,2820
|
|
14
|
+
execsql/cli/help.py,sha256=Sn_TgSJiQeBx-xZH0fuP5OvR_wasSTumjWF9UHfIX5k,5414
|
|
15
|
+
execsql/cli/run.py,sha256=seThMuXV0BmpG94lzOteoxlSjez-p-Ht4__5jjsJZAI,22829
|
|
16
16
|
execsql/db/__init__.py,sha256=jTbuafuKOqYtXFR1wvCOoKK5Lr3l1uErfaIbIr6UywI,1063
|
|
17
|
-
execsql/db/access.py,sha256=
|
|
18
|
-
execsql/db/base.py,sha256=
|
|
19
|
-
execsql/db/dsn.py,sha256=
|
|
20
|
-
execsql/db/duckdb.py,sha256=
|
|
17
|
+
execsql/db/access.py,sha256=L79gUnAnnM9EJ_f4k42jr7DI0qGcKtLOnJTlBC7uPm0,17879
|
|
18
|
+
execsql/db/base.py,sha256=hfMFj8fXY0T1aXLvWJHqb0aU4EQUDFOc-YrS29HH8U4,30405
|
|
19
|
+
execsql/db/dsn.py,sha256=TgQUedVCxnEYA3vae7JETyhb8kK23qkNbPxsMQrNUN8,5368
|
|
20
|
+
execsql/db/duckdb.py,sha256=cKeMwiSlYPyPDn1VLaJgbUD6_IEEaNqtUToLcmq7QaE,3189
|
|
21
21
|
execsql/db/factory.py,sha256=YR1m_c2Hhj_GXVGGkWoSEPZBpgNu_c4FxRnbp-xV3rs,5230
|
|
22
|
-
execsql/db/firebird.py,sha256=
|
|
23
|
-
execsql/db/mysql.py,sha256=
|
|
24
|
-
execsql/db/oracle.py,sha256=
|
|
25
|
-
execsql/db/postgres.py,sha256=
|
|
26
|
-
execsql/db/sqlite.py,sha256=
|
|
27
|
-
execsql/db/sqlserver.py,sha256=
|
|
28
|
-
execsql/exporters/__init__.py,sha256=
|
|
29
|
-
execsql/exporters/base.py,sha256=
|
|
30
|
-
execsql/exporters/delimited.py,sha256=
|
|
22
|
+
execsql/db/firebird.py,sha256=P_5H_aWTh8fzJoH3vWwwUpAd0hehoXvwDcjggoZqhWE,8537
|
|
23
|
+
execsql/db/mysql.py,sha256=BR68IeVCh3HlUuePOTtcih1m5-kEIWI_6xUiYBJnHeA,13703
|
|
24
|
+
execsql/db/oracle.py,sha256=AFVHhGlCzBuU7JgrAqeUG6e8TUUkk1Y80XVJQnGOqLM,10547
|
|
25
|
+
execsql/db/postgres.py,sha256=oXR7ODzQhR3yO6q-aNa9_il_rO3SpOX9yYGsfIqHwLI,20139
|
|
26
|
+
execsql/db/sqlite.py,sha256=2fD3AfckIGWN1oHcOaqQlQnbig26top1IlW-ejPHttI,10204
|
|
27
|
+
execsql/db/sqlserver.py,sha256=mNwmIIxTzqXU-cOjpNpeFi568HjQHsAk8Xnn-tR6F_E,7563
|
|
28
|
+
execsql/exporters/__init__.py,sha256=IB3GdPKdRdyp9UPWTMqqJty769-LXKgBcLbEf3Q4LuM,656
|
|
29
|
+
execsql/exporters/base.py,sha256=W9USFyk_2eztjJ51X6CJh7-chE1i3cSx-STOtbHXCNI,6373
|
|
30
|
+
execsql/exporters/delimited.py,sha256=VnqDRuybQ7D9fBWf8UtqYYKTiQ-qwMJZFg_SaxNUV-k,30298
|
|
31
31
|
execsql/exporters/duckdb.py,sha256=Wc9I5uiV4MzmVQzCX-vgVHQUL7U3ZWdOkFVFWBv5SXM,2911
|
|
32
32
|
execsql/exporters/feather.py,sha256=w2qZAnewzeiRMnmPXECvkgD-6KtyxaiQwjokRT7Awrc,4167
|
|
33
33
|
execsql/exporters/html.py,sha256=ISQBOr7AJ5koKlebXSvWqzEvl1nXriCRGeKmk-bzkrc,9335
|
|
@@ -36,32 +36,33 @@ execsql/exporters/latex.py,sha256=w_B83_5vKPe8uYxCWGdqvxwJeq0mw5zzKYDiAb7dbN0,45
|
|
|
36
36
|
execsql/exporters/ods.py,sha256=jl2qVHUeCLLv8xrkZfG3jgXbaglQ3rggCHziv7tNQOI,18876
|
|
37
37
|
execsql/exporters/parquet.py,sha256=186vUTH1oVAQ0s_qayLzEQVsKKu3ijAkhYEI6tysXkg,1095
|
|
38
38
|
execsql/exporters/pretty.py,sha256=9isA8f6xUz-3-JhMJimibnvtybVrT1cnoAjGnzsPEGI,3423
|
|
39
|
+
execsql/exporters/protocol.py,sha256=BxATgz0xKHbB2FpZBeNg7wZfIiCohhD1awlr3JCec0c,4372
|
|
39
40
|
execsql/exporters/raw.py,sha256=jNzfVqUgpKSIO7BsOVwBi4CcfCV5ooZLLq_kEXa4W_I,1918
|
|
40
41
|
execsql/exporters/sqlite.py,sha256=XA0ALLvy-r6Pz1lpOFkWWbvpSP9Hm1tHHiuo_BvPVDk,2686
|
|
41
42
|
execsql/exporters/templates.py,sha256=T9nk7vJrlxiPGfOWGc79xqqDxK3TCYu0wXq48U02npw,5564
|
|
42
43
|
execsql/exporters/values.py,sha256=HIyud31aux_dbCphfKHEGeZB9fkIPE5PoGXQz817XIE,2520
|
|
43
|
-
execsql/exporters/xls.py,sha256=
|
|
44
|
+
execsql/exporters/xls.py,sha256=nPROgxL8XK2oiBVoqN2L-o0j_jynRIMokwB8NpvOBt0,10623
|
|
44
45
|
execsql/exporters/xml.py,sha256=lqcOM8uKDoCayU42BPSLNH1_2DIHU5D3LtQItREU90c,2564
|
|
45
46
|
execsql/exporters/zip.py,sha256=9-hExltQorONNThiMfxPDYHqHsbTeq9zM9zmtG4oFb8,4410
|
|
46
|
-
execsql/gui/__init__.py,sha256=
|
|
47
|
-
execsql/gui/base.py,sha256=
|
|
48
|
-
execsql/gui/console.py,sha256=
|
|
49
|
-
execsql/gui/desktop.py,sha256=
|
|
50
|
-
execsql/gui/tui.py,sha256=
|
|
47
|
+
execsql/gui/__init__.py,sha256=oCb-cyhLZzVpWJ4WU5HbqEDBrV-lm0ytEwxemrOZyqs,2048
|
|
48
|
+
execsql/gui/base.py,sha256=sfNRkDrf7FhIgMRUOdyZpRLS1Xk9RqNhrV0A1RP6PXU,6068
|
|
49
|
+
execsql/gui/console.py,sha256=TuGzm7XFxa8iWrofGLwx5DuVIlr3wqqyP_pSnAJ1S3s,14271
|
|
50
|
+
execsql/gui/desktop.py,sha256=LxRzX0R5iOfXO-OFGm2nzgUZqzGtMJYm0VgY3TV5feA,42152
|
|
51
|
+
execsql/gui/tui.py,sha256=8ulz-ZucVgoqmYfhglPeWsSb3ez3OV5Ks6BVjp1mEEg,45978
|
|
51
52
|
execsql/importers/__init__.py,sha256=dDsxSVeQYXBvm9yGqN3QswyGbLWTwt08pvUuRJgZhl4,289
|
|
52
|
-
execsql/importers/base.py,sha256=
|
|
53
|
-
execsql/importers/csv.py,sha256=
|
|
54
|
-
execsql/importers/feather.py,sha256=
|
|
55
|
-
execsql/importers/ods.py,sha256=
|
|
56
|
-
execsql/importers/xls.py,sha256=
|
|
57
|
-
execsql/metacommands/__init__.py,sha256=
|
|
53
|
+
execsql/importers/base.py,sha256=FGVz3ntN6xHL99rQixlQj3tAf570K_oU83UtbYE1lJg,4124
|
|
54
|
+
execsql/importers/csv.py,sha256=Mu848WNzuhVO1ade-WurPyxqGOuVNRO8UwRF3-bav_I,4845
|
|
55
|
+
execsql/importers/feather.py,sha256=g2B69d2uv9vmnXcmjFyTVsMP40LYEzFYkhk3gD26mGw,1900
|
|
56
|
+
execsql/importers/ods.py,sha256=MJsdsjropzCvxAA3DDZfAL_AnmZ4yij7DnrjGyDJqHQ,2843
|
|
57
|
+
execsql/importers/xls.py,sha256=e0Zfe47ZiCpA1Ae3XDJ1ko3sCiH3-8U6XLKi6NvD0jQ,3683
|
|
58
|
+
execsql/metacommands/__init__.py,sha256=X0esqay79dBn3DOOt7S1hz8k1DghZ6c2dDc4JlXcM2M,13333
|
|
58
59
|
execsql/metacommands/conditions.py,sha256=u-XdeIWj9QMht9hRGhvH0XlB9V09AliAPKDBHRXc02s,24540
|
|
59
60
|
execsql/metacommands/connect.py,sha256=Nsm0D91i3RX-R2rzQQ-Br-gULaI6Uvdn9fqb7DOAVfE,14804
|
|
60
61
|
execsql/metacommands/control.py,sha256=FCIWD-ZivHRZDqMS-2k37iR05HKHsv_7UPh5zJAg4I4,7693
|
|
61
62
|
execsql/metacommands/data.py,sha256=tRQBGTAuW-eJ2tBNWaoZI9OjTyNNyHJISo7gOdL-sm8,11370
|
|
62
63
|
execsql/metacommands/debug.py,sha256=nmfQ2ijUbTQO3drnyV9EzFueGSTfMl-CddP_NlQyI14,8178
|
|
63
|
-
execsql/metacommands/dispatch.py,sha256=
|
|
64
|
-
execsql/metacommands/io.py,sha256=
|
|
64
|
+
execsql/metacommands/dispatch.py,sha256=th4vA2Vg4vY_fPcePRJUZ67CwUX-_j7tSckCucB3MQA,82065
|
|
65
|
+
execsql/metacommands/io.py,sha256=Vv0NnUHiNKVnHbWJ0nsEdtN5SW042OtPCu7hrV57XyY,2913
|
|
65
66
|
execsql/metacommands/io_export.py,sha256=kxfGnoBDdPFfncxgz6dazMIoGZEHPOO-Mg02kbpdd20,15965
|
|
66
67
|
execsql/metacommands/io_fileops.py,sha256=RKqbWPTYiwiqCZYG-lpih0w1JVOY4RBFdWr3BJb_pnY,9669
|
|
67
68
|
execsql/metacommands/io_import.py,sha256=wyxJJdlW07P5ZIhweejhXyyGANAvEhY5uMjKZ200Jyc,12983
|
|
@@ -70,9 +71,9 @@ execsql/metacommands/prompt.py,sha256=xd3mAkdbn4AE4hUPuSfN5DgZGUZmk-Db23iL-JJPwX
|
|
|
70
71
|
execsql/metacommands/script_ext.py,sha256=TUgAldB2LSJAwZrCvDDi804hQ1d9BDQD2GDqHNPVOcM,2280
|
|
71
72
|
execsql/metacommands/system.py,sha256=sUR5kLL7idTVg8WXIMdd-Kv7nkERIiaeL0beWsz8NyY,7293
|
|
72
73
|
execsql/script/__init__.py,sha256=pIo0EJ7-vg67rSMbOvbri_BOUgLoGoSEUfJgxUN7ZS0,3380
|
|
73
|
-
execsql/script/control.py,sha256=
|
|
74
|
-
execsql/script/engine.py,sha256=
|
|
75
|
-
execsql/script/variables.py,sha256=
|
|
74
|
+
execsql/script/control.py,sha256=s-1eZdGARM6H1FwZ6VDdO_f50j7bvvRtTHesfUm9tbc,6144
|
|
75
|
+
execsql/script/engine.py,sha256=5WOuSbQR1vrp_SawylshzLmdHco2oEjqZBSoxRg0Ggo,39638
|
|
76
|
+
execsql/script/variables.py,sha256=MOT9XEHucpuuuHQZM5bklxGMBQcwHzwTBxd0q3aO0XY,11641
|
|
76
77
|
execsql/utils/__init__.py,sha256=0uR6JwVJQRX3vceByNBduCAf5dd5assKjeqJUWvpZoA,278
|
|
77
78
|
execsql/utils/auth.py,sha256=onXzNkNZQZxGC5w7eey06sjvAIAX_Lf9g7nUJtcsel0,7009
|
|
78
79
|
execsql/utils/crypto.py,sha256=2OnBWwn9bCBGc1ZkyRv16TvhottoCNYtXqgbE3mG3Sg,2960
|
|
@@ -85,24 +86,24 @@ execsql/utils/numeric.py,sha256=xh02ANSRk3nUpQ-rtm66ILoMqoi7HtzCoRMIOT9U8QI,1570
|
|
|
85
86
|
execsql/utils/regex.py,sha256=diEzTZqU_HHwVMadPAvN1Vgzhl7I03eVaEFGCXyGGL8,3770
|
|
86
87
|
execsql/utils/strings.py,sha256=5Dvzrk-9SIw2lpxXZQkiJbNyo1sy7iXXAtSULlZ0KG8,8488
|
|
87
88
|
execsql/utils/timer.py,sha256=eDYf5VzCNFk7oo90InJucUm3XcBdhYMogjZMqeg9xzc,1899
|
|
88
|
-
execsql2-2.
|
|
89
|
-
execsql2-2.
|
|
90
|
-
execsql2-2.
|
|
91
|
-
execsql2-2.
|
|
92
|
-
execsql2-2.
|
|
93
|
-
execsql2-2.
|
|
94
|
-
execsql2-2.
|
|
95
|
-
execsql2-2.
|
|
96
|
-
execsql2-2.
|
|
97
|
-
execsql2-2.
|
|
98
|
-
execsql2-2.
|
|
99
|
-
execsql2-2.
|
|
100
|
-
execsql2-2.
|
|
101
|
-
execsql2-2.
|
|
102
|
-
execsql2-2.
|
|
103
|
-
execsql2-2.
|
|
104
|
-
execsql2-2.
|
|
105
|
-
execsql2-2.
|
|
106
|
-
execsql2-2.
|
|
107
|
-
execsql2-2.
|
|
108
|
-
execsql2-2.
|
|
89
|
+
execsql2-2.5.0.data/data/execsql2_extras/README.md,sha256=sxwVyU0ZahCfANv56LahkyuM505kFjrMhe-1SvWE69E,4845
|
|
90
|
+
execsql2-2.5.0.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
|
|
91
|
+
execsql2-2.5.0.data/data/execsql2_extras/example_config_prompt.sql,sha256=SY3Jxn1qcVm4kPW9xmmTfknHfvURXmeEYTbRjYrjGSw,7487
|
|
92
|
+
execsql2-2.5.0.data/data/execsql2_extras/execsql.conf,sha256=_45iJ-KWZnB8uMW_gEg067MM5pmGJ-dVl7VbAZMunAE,9530
|
|
93
|
+
execsql2-2.5.0.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
|
|
94
|
+
execsql2-2.5.0.data/data/execsql2_extras/md_compare.sql,sha256=B8Wd7LZ0vnMY2qvA139JIEBkPObgRH2i5xj6PejTQt8,24092
|
|
95
|
+
execsql2-2.5.0.data/data/execsql2_extras/md_glossary.sql,sha256=DJRHcU5NbFpxTTX-IwH3yRlsboj1q6BBGrUAHKn4Cuo,10796
|
|
96
|
+
execsql2-2.5.0.data/data/execsql2_extras/md_upsert.sql,sha256=v_7GbWh_N1mBTmw3gvTrkagOVp2q0KmXvM8hE-DlFxY,112524
|
|
97
|
+
execsql2-2.5.0.data/data/execsql2_extras/pg_compare.sql,sha256=9dWa8hnfy5dVJI-z2iGpd9JzQmI4j2ziMlEdpnr66ro,24352
|
|
98
|
+
execsql2-2.5.0.data/data/execsql2_extras/pg_glossary.sql,sha256=pKjIIDsROAgJq2H-1qNEcRMAWManivcZ_AEVHzUUlic,9908
|
|
99
|
+
execsql2-2.5.0.data/data/execsql2_extras/pg_upsert.sql,sha256=k7AFiGTLBy3nf-qO5QIaZrEYTAKvdxxU3JDLx9jqkzs,108315
|
|
100
|
+
execsql2-2.5.0.data/data/execsql2_extras/script_template.sql,sha256=1Estacb_vm1FgK41k_G9nuduP1yiA-fQ1Kn4Z4mv5Ao,11153
|
|
101
|
+
execsql2-2.5.0.data/data/execsql2_extras/ss_compare.sql,sha256=TsVxWm3cEpR5-EiMYXNhtaY0arSNeKZhsJdHdLA7xeI,24833
|
|
102
|
+
execsql2-2.5.0.data/data/execsql2_extras/ss_glossary.sql,sha256=cLM7nN8JOIu9ZVP9oY9qdSK3hrnWJiDcX6nZmQQbQWI,13065
|
|
103
|
+
execsql2-2.5.0.data/data/execsql2_extras/ss_upsert.sql,sha256=BCqmBykXBF-BpCgOFeG1qhf2XfScKsxPD17wd1hYfHw,120647
|
|
104
|
+
execsql2-2.5.0.dist-info/METADATA,sha256=1GftiLPx-XfwxK2axlqnf1066YyOB-js3bk7ocHRlCQ,16573
|
|
105
|
+
execsql2-2.5.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
106
|
+
execsql2-2.5.0.dist-info/entry_points.txt,sha256=sUOxkM-dN1eBGGpSpDLsAaE0yNXYQKWZAfxPOlMkQyk,90
|
|
107
|
+
execsql2-2.5.0.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
|
|
108
|
+
execsql2-2.5.0.dist-info/licenses/NOTICE,sha256=sqVrM73Ys9zfvWC_P797lHfTnoPW_ETeBSrUTFaob0A,339
|
|
109
|
+
execsql2-2.5.0.dist-info/RECORD,,
|
|
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
|
|
File without changes
|
|
File without changes
|