execsql2 2.30.0__py3-none-any.whl → 2.31.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.
Files changed (49) hide show
  1. execsql/api.py +1 -0
  2. execsql/cli/application.py +1 -1
  3. execsql/cli/commands/lint.py +1 -1
  4. execsql/cli/dsn.py +35 -1
  5. execsql/cli/lint.py +10 -1
  6. execsql/cli/run.py +8 -3
  7. execsql/config.py +26 -4
  8. execsql/data/execsql.conf.template +8 -2
  9. execsql/db/access.py +9 -5
  10. execsql/db/base.py +18 -0
  11. execsql/db/dsn.py +3 -0
  12. execsql/db/factory.py +11 -1
  13. execsql/db/mysql.py +56 -3
  14. execsql/db/odbc.py +62 -0
  15. execsql/db/postgres.py +1 -1
  16. execsql/db/sqlserver.py +39 -21
  17. execsql/exporters/ods.py +146 -41
  18. execsql/exporters/values.py +166 -9
  19. execsql/importers/base.py +1 -1
  20. execsql/importers/csv.py +1 -1
  21. execsql/importers/ods.py +2 -0
  22. execsql/lsp/diagnostics.py +1 -1
  23. execsql/lsp/document.py +3 -0
  24. execsql/metacommands/io_fileops.py +11 -5
  25. execsql/metacommands/reference.py +1 -1
  26. execsql/metacommands/upsert.py +10 -1
  27. execsql/utils/auth.py +21 -14
  28. execsql/utils/errors.py +1 -1
  29. execsql/utils/paths.py +31 -0
  30. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/README.md +9 -8
  31. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/md_compare.sql +53 -29
  32. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/md_glossary.sql +20 -20
  33. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/md_upsert.sql +59 -66
  34. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/pg_compare.sql +19 -22
  35. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/pg_glossary.sql +13 -17
  36. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/script_template.sql +302 -299
  37. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/ss_compare.sql +39 -29
  38. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/ss_glossary.sql +13 -17
  39. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/ss_upsert.sql +56 -66
  40. {execsql2-2.30.0.dist-info → execsql2-2.31.2.dist-info}/METADATA +17 -41
  41. {execsql2-2.30.0.dist-info → execsql2-2.31.2.dist-info}/RECORD +48 -47
  42. execsql2-2.30.0.data/data/execsql2_extras/pg_upsert.sql +0 -2791
  43. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/config_settings.sqlite +0 -0
  44. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/example_config_prompt.sql +0 -0
  45. {execsql2-2.30.0.data → execsql2-2.31.2.data}/data/execsql2_extras/make_config_db.sql +0 -0
  46. {execsql2-2.30.0.dist-info → execsql2-2.31.2.dist-info}/WHEEL +0 -0
  47. {execsql2-2.30.0.dist-info → execsql2-2.31.2.dist-info}/entry_points.txt +0 -0
  48. {execsql2-2.30.0.dist-info → execsql2-2.31.2.dist-info}/licenses/LICENSE.txt +0 -0
  49. {execsql2-2.30.0.dist-info → execsql2-2.31.2.dist-info}/licenses/NOTICE +0 -0
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: execsql2
3
- Version: 2.30.0
3
+ Version: 2.31.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
+ Project-URL: Homepage, https://execsql2.readthedocs.io/en/stable/
6
6
  Project-URL: Repository, https://github.com/geocoug/execsql
7
7
  Project-URL: Issues, https://github.com/geocoug/execsql/issues
8
8
  Author-email: Dreas Nielsen <cortice@tutanota.com>
@@ -53,7 +53,7 @@ Requires-Dist: lsprotocol>=2025.0.0; extra == 'all'
53
53
  Requires-Dist: odfpy>=1.4; extra == 'all'
54
54
  Requires-Dist: openpyxl>=3.1; extra == 'all'
55
55
  Requires-Dist: oracledb>=3.0; extra == 'all'
56
- Requires-Dist: pg-upsert>=1.25.0; extra == 'all'
56
+ Requires-Dist: pg-upsert>=1.26.0; extra == 'all'
57
57
  Requires-Dist: polars>=1.0; extra == 'all'
58
58
  Requires-Dist: psycopg[binary]<4,>=3.1; extra == 'all'
59
59
  Requires-Dist: pygls<3,>=2.1; extra == 'all'
@@ -82,29 +82,6 @@ Requires-Dist: pycryptodome>=3.20; extra == 'auth-encrypted'
82
82
  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
- Provides-Extra: dev
86
- Requires-Dist: bump-my-version>=1.2.7; extra == 'dev'
87
- Requires-Dist: defusedxml>=0.7; extra == 'dev'
88
- Requires-Dist: jinja2>=3.1; extra == 'dev'
89
- Requires-Dist: lsprotocol>=2025.0.0; extra == 'dev'
90
- Requires-Dist: mkdocstrings-python>=2.0.3; extra == 'dev'
91
- Requires-Dist: mypy>=1.10; extra == 'dev'
92
- Requires-Dist: odfpy>=1.4; extra == 'dev'
93
- Requires-Dist: openpyxl>=3.1; extra == 'dev'
94
- Requires-Dist: polars>=1.0; extra == 'dev'
95
- Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
96
- Requires-Dist: pygls<3,>=2.1; extra == 'dev'
97
- Requires-Dist: pytest-asyncio>=1.0; extra == 'dev'
98
- Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
99
- Requires-Dist: pytest-lsp>=1.0; extra == 'dev'
100
- Requires-Dist: pytest>=8; extra == 'dev'
101
- Requires-Dist: pyyaml>=6.0; extra == 'dev'
102
- Requires-Dist: ruff>=0.4; extra == 'dev'
103
- Requires-Dist: sqlglot<30.22,>=30.21.0; extra == 'dev'
104
- Requires-Dist: tables>=3.10; extra == 'dev'
105
- Requires-Dist: tox-uv>=1.13.1; extra == 'dev'
106
- Requires-Dist: xlrd>=2.0; extra == 'dev'
107
- Requires-Dist: zensical==0.0.67; extra == 'dev'
108
85
  Provides-Extra: duckdb
109
86
  Requires-Dist: duckdb>=1.0; extra == 'duckdb'
110
87
  Requires-Dist: pytz; extra == 'duckdb'
@@ -138,7 +115,7 @@ Requires-Dist: oracledb>=3.0; extra == 'oracle'
138
115
  Provides-Extra: postgres
139
116
  Requires-Dist: psycopg[binary]<4,>=3.1; extra == 'postgres'
140
117
  Provides-Extra: upsert
141
- Requires-Dist: pg-upsert>=1.25.0; extra == 'upsert'
118
+ Requires-Dist: pg-upsert>=1.26.0; extra == 'upsert'
142
119
  Description-Content-Type: text/markdown
143
120
 
144
121
  > [!NOTE]
@@ -146,7 +123,7 @@ Description-Content-Type: text/markdown
146
123
 
147
124
  <div align="center">
148
125
 
149
- <img src="https://execsql2.readthedocs.io/en/latest/images/execsql_logo_01.png" alt="execsql logo">
126
+ <img src="https://execsql2.readthedocs.io/en/stable/images/execsql_logo_01.png" alt="execsql logo">
150
127
 
151
128
  *Multi-DBMS SQL script processor.*
152
129
 
@@ -178,7 +155,7 @@ Scripts are ordinary SQL plus metacommands embedded in comments (`-- !x!`), whic
178
155
  | `execsql config` | Show every config option, its value, and the file that set it | No |
179
156
  | `execsql list` | Metacommands, encodings, plugins, or the keyword vocabulary | No |
180
157
  | `execsql init` | Set up a project: config file, a script with a header, pre-commit hooks | No |
181
- | `execsql lsp` | [Language server](https://execsql2.readthedocs.io/en/latest/guides/editors/): lint findings, completion, hover, navigation, quick fixes and formatting in your editor | No |
158
+ | `execsql lsp` | [Language server](https://execsql2.readthedocs.io/en/stable/guides/editors/): lint findings, completion, hover, navigation, quick fixes and formatting in your editor | No |
182
159
  | [VS Code extension](extras/vscode-execsql) | Highlighting plus everything `execsql lsp` provides | No |
183
160
 
184
161
  `format` and `lint` take files or directories.
@@ -212,7 +189,7 @@ load_data.sql
212
189
  Found 3 issues in 1 file: 3 warnings (1 file checked)
213
190
  ```
214
191
 
215
- `V002` and `V001` together point at a typo: `site_cd` is defined and `site_code` is used. Every issue has a rule code for `--select` and `--ignore`; `--output-format concise` prints one `path:line` line per issue and `json` feeds CI tools. The [lint rules](https://execsql2.readthedocs.io/en/latest/reference/lint/) page explains each one.
192
+ `V002` and `V001` together point at a typo: `site_cd` is defined and `site_code` is used. Every issue has a rule code for `--select` and `--ignore`; `--output-format concise` prints one `path:line` line per issue and `json` feeds CI tools. The [lint rules](https://execsql2.readthedocs.io/en/stable/reference/lint/) page explains each one.
216
193
 
217
194
  `execsql format` also runs as a [pre-commit hook](#formatting-scripts), so formatting is enforced without anyone remembering to run it.
218
195
 
@@ -252,7 +229,7 @@ drop table if exists staging.errorlog cascade;
252
229
 
253
230
  The `PROMPT` metacommand produces a GUI display of the data:
254
231
 
255
- ![PROMPT display of 'fatals' view](https://execsql2.readthedocs.io/en/latest/images/fatals.png)
232
+ ![PROMPT display of 'fatals' view](https://execsql2.readthedocs.io/en/stable/images/fatals.png)
256
233
 
257
234
  ## Installation
258
235
 
@@ -267,7 +244,7 @@ uv tool install "execsql2[all]" # everything: all drivers plus all fea
267
244
  add it to that project instead: `uv add "execsql2[postgres]"` or
268
245
  `pip install "execsql2[postgres]"` in its virtual environment.
269
246
 
270
- Feature extras cover spreadsheet and Parquet/Feather formats, keyring authentication, PostgreSQL upsert, and more. See the [installation guide](https://execsql2.readthedocs.io/en/latest/getting-started/installation/) for the full list.
247
+ Feature extras cover spreadsheet and Parquet/Feather formats, keyring authentication, PostgreSQL upsert, and more. See the [installation guide](https://execsql2.readthedocs.io/en/stable/getting-started/installation/) for the full list.
271
248
 
272
249
  ## Usage
273
250
 
@@ -334,7 +311,7 @@ silences.
334
311
  | `--debug` | Start in step-through debug mode (REPL pauses before each stmt) |
335
312
  | `--no-system-cmd` / `--no-rm-file` / `--no-serve` | Disable the `SYSTEM_CMD` / `RM_FILE` / `SERVE` metacommands |
336
313
 
337
- See the [full options reference](https://execsql2.readthedocs.io/en/latest/getting-started/syntax/#options) or run `execsql run --help` for the complete list, `execsql run --ping` to test a connection, `execsql config` to see which config files set what, and `execsql list metacommands` for all metacommands.
314
+ See the [full options reference](https://execsql2.readthedocs.io/en/stable/getting-started/syntax/#options) or run `execsql run --help` for the complete list, `execsql run --ping` to test a connection, `execsql config` to see which config files set what, and `execsql list metacommands` for all metacommands.
338
315
 
339
316
  ## Features
340
317
 
@@ -437,7 +414,7 @@ result = run(sql="SELECT 1;", connection=conn)
437
414
  conn.close()
438
415
  ```
439
416
 
440
- Factory functions exist for every supported backend (`db_Postgres`, `db_MySQL`, `db_SQLite`, `db_DuckDB`, `db_SqlServer`, `db_Oracle`, `db_Firebird`, `db_Access`, `db_Dsn`). See [`execsql.db.factory`](https://execsql2.readthedocs.io/en/latest/api/db/).
417
+ Factory functions exist for every supported backend (`db_Postgres`, `db_MySQL`, `db_SQLite`, `db_DuckDB`, `db_SqlServer`, `db_Oracle`, `db_Firebird`, `db_Access`, `db_Dsn`). See [`execsql.db.factory`](https://execsql2.readthedocs.io/en/stable/api/db/).
441
418
 
442
419
  Each call to `run()` uses an isolated `RuntimeContext`, so multiple calls do not share state.
443
420
 
@@ -464,13 +441,13 @@ execsql format --no-sql --in-place scripts/
464
441
  ```yaml
465
442
  repos:
466
443
  - repo: https://github.com/geocoug/execsql
467
- rev: v2.30.0
444
+ rev: v2.31.2
468
445
  hooks:
469
446
  - id: execsql-format
470
447
  - id: execsql-lint
471
448
  ```
472
449
 
473
- The format hook rewrites `*.sql` files in place by default; the lint hook fails the commit when a script has a lint error. See the [formatter documentation](https://execsql2.readthedocs.io/en/latest/guides/formatter/) for `--check`, `--indent`, and other options.
450
+ The format hook rewrites `*.sql` files in place by default; the lint hook fails the commit when a script has a lint error. See the [formatter documentation](https://execsql2.readthedocs.io/en/stable/guides/formatter/) for `--check`, `--indent`, and other options.
474
451
 
475
452
  ## VS Code
476
453
 
@@ -481,19 +458,18 @@ uv tool install "execsql2[lsp]" # the language server
481
458
  code --install-extension execsql-syntax.vsix # the extension, from the release
482
459
  ```
483
460
 
484
- If execsql is already installed with other extras, name them too, e.g. `uv tool install "execsql2[postgres,lsp]"` or `pipx install --force "execsql2[postgres,lsp]"`: the new list replaces the old one (see [Adding an extra later](https://execsql2.readthedocs.io/en/latest/getting-started/installation/#adding-an-extra-later)).
461
+ If execsql is already installed with other extras, name them too, e.g. `uv tool install "execsql2[postgres,lsp]"` or `pipx install --force "execsql2[postgres,lsp]"`: the new list replaces the old one (see [Adding an extra later](https://execsql2.readthedocs.io/en/stable/getting-started/installation/#adding-an-extra-later)).
485
462
 
486
- Other editors use the language server directly: see [Editor Support](https://execsql2.readthedocs.io/en/latest/guides/editors/). The [extension README](extras/vscode-execsql/README.md) covers settings, installing from a clone, color customization, and troubleshooting.
463
+ Other editors use the language server directly: see [Editor Support](https://execsql2.readthedocs.io/en/stable/guides/editors/). The [extension README](extras/vscode-execsql/README.md) covers settings, installing from a clone, color customization, and troubleshooting.
487
464
 
488
465
  ## Templates
489
466
 
490
- The `templates/` directory in this repository includes ready-to-use execsql scripts:
467
+ The `templates/` directory in this repository includes ready-to-use execsql scripts, tested against live databases in CI; see the [Templates documentation](https://execsql2.readthedocs.io/en/stable/templates/). (`execsql config --init` writes an annotated configuration file.)
491
468
 
492
- - **Upsert scripts** (`pg_upsert.sql`, `md_upsert.sql`, `ss_upsert.sql`): Perform merge/upsert operations on multiple tables simultaneously, respecting foreign key order, for PostgreSQL, MySQL/MariaDB, and SQL Server.
469
+ - **Upsert scripts** (`md_upsert.sql`, `ss_upsert.sql`): Perform merge/upsert operations on multiple tables simultaneously, respecting foreign key order, for MySQL/MariaDB and SQL Server. On PostgreSQL, use the [`PG_UPSERT`](https://execsql2.readthedocs.io/en/stable/reference/metacommands/#pg_upsert) metacommand.
493
470
  - **Comparison scripts** (`pg_compare.sql`, `md_compare.sql`, `ss_compare.sql`): Compare staging and base tables across multiple dimensions.
494
471
  - **Glossary scripts** (`pg_glossary.sql`, `md_glossary.sql`, `ss_glossary.sql`): Produce a glossary of column names and definitions to accompany a database export.
495
472
  - **`script_template.sql`**: A framework for new scripts with sections for configuration, logging, and error reporting.
496
- - **`execsql.conf`**: An annotated configuration file covering all available settings.
497
473
 
498
474
  ## Documentation
499
475
 
@@ -1,7 +1,7 @@
1
1
  execsql/__init__.py,sha256=ZeVnpEWu8M2bn3qLmVM72NhWRueUGNbsX8UAPTermo0,901
2
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
3
+ execsql/api.py,sha256=jJa9P8T0lWR7hXF1WZKgfK7QHbU5qns4x6YNFbFH_eo,26795
4
+ execsql/config.py,sha256=PoIU1dr6uwTCHVmnNhA4zzPT1BsZBPcX0Q7KC1ItvqI,40408
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
@@ -15,36 +15,37 @@ execsql/state.py,sha256=rXhxx58dVFjhG58HGOXm3ewloVlvpcaYnW1rij4qjkM,23478
15
15
  execsql/state.pyi,sha256=ZDHZ1DPKYu4Qs4bcJT31XNv4GOt6O4s_zH4UHCowovw,4344
16
16
  execsql/types.py,sha256=zey_bc2AzbUduLoK-nps16qX2zazDYf_iapWkG_cbmA,33130
17
17
  execsql/cli/__init__.py,sha256=FHg2lm2gt4L-XBnlVORn3qWHZ4739Ao-uwBIURfVIjg,2798
18
- execsql/cli/application.py,sha256=lrBmuTfe9nKc_btGFeT_58Ij__w8FOEZvMqfb4rjc-k,12542
18
+ execsql/cli/application.py,sha256=tsSYE8cerJxY6y73GM_Xr1WBwc6A0_al8y969B6lPP8,12542
19
19
  execsql/cli/dispatch.py,sha256=deyN2QQYvdzMSqGGa3CSMpaqdLNeMgc5Uke0mUbl764,2704
20
- execsql/cli/dsn.py,sha256=vMabu01EEVAC5O3rpcyJnl4jWR2DQtjDeLLSg8CZqkM,3460
20
+ execsql/cli/dsn.py,sha256=Jqr0CBtj6L3BY25Ej-U13xHV85phX1TFTVpjB7A-KIs,4815
21
21
  execsql/cli/help.py,sha256=bEy6ssVjyIw73JD_UPLXnCtnCifdVCKJr_cydAAVxhk,8220
22
- execsql/cli/lint.py,sha256=5V_th4la5DkUwZrPVj7mFZcM96Oq2DzoUfjXLdWtfDc,48125
22
+ execsql/cli/lint.py,sha256=kQ5zOayLTOY1jib_6jME2mzSGKCsZ6FI_qr4fysLlRs,48433
23
23
  execsql/cli/options.py,sha256=Srhf1gEOB5yy_7PxkTKBv07xK8Qzw8H-z7PUUnItpwE,2916
24
- execsql/cli/run.py,sha256=PHaYBD9VACnlH8Yko4SD2duYHV6G8u95DzMHa1LnB-E,42610
24
+ execsql/cli/run.py,sha256=bMLvStRSX9svzb8GmbLJ9QS5bsPPoxBUhBbIwi1aX_g,42960
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=Lkj_LEeZsLCVzRS9KxJFvx6fHJyf5enmR9pu5VZh4Yw,8435
29
+ execsql/cli/commands/lint.py,sha256=K_4eeU4JcQh6vNV5Thcta9Kuqek_cNiKFOHskgOtDzI,8435
30
30
  execsql/cli/commands/listing.py,sha256=thtkJ-ILGd0SPs57oVIMkkCGpXsfS0hQxueMc2ccRVw,3514
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=pqh7G21ifYO0BjZoTgUhGyQAx4eKOmbIr6nToc1V7QA,12494
34
+ execsql/data/execsql.conf.template,sha256=Mz8wZxu0U2bfL-fsDpRHvdLkwNpfuZrl4QUMjp7SXyk,12770
35
35
  execsql/data/script_header.sql,sha256=a7WKScekNgJoxVEmMRTkWv8NsAzW1jJ4vJfGy9HVy0g,349
36
36
  execsql/db/__init__.py,sha256=jTbuafuKOqYtXFR1wvCOoKK5Lr3l1uErfaIbIr6UywI,1063
37
- execsql/db/access.py,sha256=xfBzcgP1qJovxSYwrpu0bdxqyJWqMoMP8i4FsaCTYXA,21306
38
- execsql/db/base.py,sha256=5f-1YxaaopRPnCPVs4OVOkYmWFtG1V71sk2XFoBUE_Y,42849
39
- execsql/db/dsn.py,sha256=CaISffisqO5IjSE-elEpwK9vXLaArp3ItpV8lvRTu-I,6920
37
+ execsql/db/access.py,sha256=fxiC3rtoOJzrNXNxau-w7oh1fd9tyh2_PMliBbFc164,21427
38
+ execsql/db/base.py,sha256=tBAcNRiYE7VZo98S75mu6Y2ySdBNoh8LzzTn7TgLOBs,43684
39
+ execsql/db/dsn.py,sha256=Evrc6MUllJVFDn0jZB_iks-aKCsXuNF9XYjAkttqgGQ,6995
40
40
  execsql/db/duckdb.py,sha256=KC8Tqbnemg3wsYH_efnFmxtybPbMXElFDsoeq_FeVus,11143
41
- execsql/db/factory.py,sha256=cMptU3BL1Nsilo7LKLAI5RR-LiC9RTH-3UC9rHT2JLQ,5519
41
+ execsql/db/factory.py,sha256=Uz7Xcbff6ZZbtLM55FhHCwGdo4KKfqU_1kyjvOHn-HY,5691
42
42
  execsql/db/firebird.py,sha256=CoNnzFtOFAkp8OJByXXXclitCPAAjM23eFJGfy3C7IE,10171
43
- execsql/db/mysql.py,sha256=PexKdOzqR7cpkD_nIjPDwSEK_Or8AkWvBh_TEqsIMhU,22231
43
+ execsql/db/mysql.py,sha256=FVId78NifBmNfEI8zmqjRMJ3FUy7hskv411LqABAAOQ,24198
44
+ execsql/db/odbc.py,sha256=l03UNHi8sFtjHbgOKUNA2teKOisNk-8laQGCsHZs2eo,2526
44
45
  execsql/db/oracle.py,sha256=i5qPahsy_z1AuZT7l54Hzixknkvbzd-SCQgiVcTN94w,13796
45
- execsql/db/postgres.py,sha256=0SbdJk9vZ8JXMTHrBfZU3RLssCoX5IL--Awi5zYCOKw,23645
46
+ execsql/db/postgres.py,sha256=sX2azdSt9N6jm_I47Zg8fukdYExGHRq_7XwVRZcfgAo,23647
46
47
  execsql/db/sqlite.py,sha256=fEpNPkfJGnqm1Wx_rZK5SEqaWsBqLy85Jxk_5NsnqgM,12109
47
- execsql/db/sqlserver.py,sha256=cdbyHoSUKEwUee2GQTKD5SlLyBraYiOvJ2ro5MJuMFA,9525
48
+ execsql/db/sqlserver.py,sha256=6-wySx9BrSTAyXl5BnBLjRYEpl4_GubDjiGuvpehgco,10528
48
49
  execsql/db/tiers.py,sha256=PH2sUYwlYqcANGVKXprWQKVIlM6fpWU9q74djn8oFwc,2924
49
50
  execsql/debug/__init__.py,sha256=j6EGUR0dHzUhWN1mHHtf1-Lhjq3Sb1V-vmnq2Ztgj1M,178
50
51
  execsql/debug/repl.py,sha256=jnwrqRac4krc1pES7Ni-j1Dyw3mJIcWl5LQQIX1GkRw,20753
@@ -57,14 +58,14 @@ execsql/exporters/html.py,sha256=hwf9UHs7EZ7xiP3p9ilBIsAukXcDu-KO2dcQHVh2z30,101
57
58
  execsql/exporters/json.py,sha256=wWGT6zjvIdWlO5FmXbaEw1xOhy23f1YY6bm5uQD_NS0,4393
58
59
  execsql/exporters/latex.py,sha256=bdUN3GwfENUZHgpw6bvjsjfivDgzyf-HRkYTP-eH-pM,5480
59
60
  execsql/exporters/markdown.py,sha256=FuMGFxm9uZUOrdEuXT2ZZLCqmVDly7SMrFlrjP6kVEI,4827
60
- execsql/exporters/ods.py,sha256=5Qubpuz7CLIrl7KgMp1uXIFPrF_7alMjuTuVdj76eh4,20771
61
+ execsql/exporters/ods.py,sha256=hMKhUwLTKVf28JY1x7pdCGBl-WAE75oO9Oa7oUITS60,24916
61
62
  execsql/exporters/parquet.py,sha256=mbCo2Wlit1lkXmyo5EyLd_ATIHSICS49bouiBT2kdAs,1121
62
63
  execsql/exporters/pretty.py,sha256=SiJHBXIjoFsOHegXcdrtxYa6xSIPga1U0DQEy7pK4QY,4145
63
64
  execsql/exporters/protocol.py,sha256=BxATgz0xKHbB2FpZBeNg7wZfIiCohhD1awlr3JCec0c,4372
64
65
  execsql/exporters/raw.py,sha256=9o3BMt7UYmnjbP8OEzmM2kNKfwwERi2yDcuNfUoEfuQ,2530
65
66
  execsql/exporters/sqlite.py,sha256=QjP_W90S-hecNqp2A-Vy58DD8MZitME1sTq4lqIS43w,3401
66
67
  execsql/exporters/templates.py,sha256=N9PRFet0mYuDQFu7PNbq5c6qGu2You2qfHpqnxg17NA,7065
67
- execsql/exporters/values.py,sha256=UPxN5IprasBZLqM5jfUXQihjdTeBFTxbJslOEtmGOcY,3384
68
+ execsql/exporters/values.py,sha256=IzdpjeIwI_wukzo5wrVYCOwW-Ag_70SjPU-cPLEUV7k,8450
68
69
  execsql/exporters/xls.py,sha256=bdGDTnePkXY3MtPJi4D47sTFSqfZteg9lftbi-7nB24,11361
69
70
  execsql/exporters/xlsx.py,sha256=7sm-3KniYlB2K-n6xQmIoHbAvl2ryJhFWU95SEkR7e4,12702
70
71
  execsql/exporters/xml.py,sha256=t1PSr3i8xvTCWzd9jaxxAy5NcRpl6sqjnZALafKCqpM,2575
@@ -76,19 +77,19 @@ execsql/gui/console.py,sha256=dzdSl4NJNvRd9VvlwRCXHvfnXjQPimyTx7NcibcUZC8,18305
76
77
  execsql/gui/desktop.py,sha256=y-T317NzSs9kcA4-NZW-Dx2cZ4Bv1mPoCr7hwQCJYoo,59467
77
78
  execsql/gui/tui.py,sha256=VoUtjSMopYtbtc8_-qV7YQAFvc-bS7zrZ5J2hl1cPxM,66853
78
79
  execsql/importers/__init__.py,sha256=zZwdQxMaValCNqUrVdvaA7XPU3J8NmqVJ4uolNWY2iU,299
79
- execsql/importers/base.py,sha256=N94kJ_a3_UvjOrZv7TCYOL2b4lshYb_HuLTqpht4D4A,5578
80
- execsql/importers/csv.py,sha256=4zIv-K02fuHKxnbqS5iTvLOeVnfssLYYJrs0Gh3qv7I,5021
80
+ execsql/importers/base.py,sha256=_RkCCP8cgqXfNioFVhuo8DAmrbZ-YBdW3rdpKntv-BY,5608
81
+ execsql/importers/csv.py,sha256=IANjZhAhKUXJo_W1RAR-6smVCLSO7_CVHAHdzhtzAck,5005
81
82
  execsql/importers/feather.py,sha256=g2B69d2uv9vmnXcmjFyTVsMP40LYEzFYkhk3gD26mGw,1900
82
83
  execsql/importers/json.py,sha256=fL47h09Zzx4Qw3TTQRQJbdPdD3qVMiU-kK9C7j1IQzg,5534
83
- execsql/importers/ods.py,sha256=VsxIkr7opBamB0PbSFmMWt7G11w8lLUH1k_kRwz28zw,2847
84
+ execsql/importers/ods.py,sha256=scSId1sQpvWxtyPsp6QWTmuXn-h34gbbC4FM2fmhvFA,2980
84
85
  execsql/importers/xls.py,sha256=D7Ul42gIRYZZC5QxD35ft_wmqQv2f1jNMSbnqlzV0ZA,3851
85
86
  execsql/lsp/__init__.py,sha256=KXpbN_CfnfMcvHmE0xPz9ddpp9CAaQH_O7mzBi4O4X8,259
86
87
  execsql/lsp/_util.py,sha256=8CypObGywKZP1aRetq0ytNBqlMelIdJWduR1JnEuW1E,729
87
88
  execsql/lsp/cache.py,sha256=wAiZAzNdVseqRDJQ4aiKJF6WVHBV20tt9lQ7kvwlMeo,3149
88
89
  execsql/lsp/code_actions.py,sha256=5UH_W22MY00PMXCc_IV0xv4v1WnvUvKMu3QWnk7qf-w,8579
89
90
  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
91
+ execsql/lsp/diagnostics.py,sha256=wZuCYGkYqyqTRBQ5s-s4UwdMoive8M9_O74T318HzAA,3076
92
+ execsql/lsp/document.py,sha256=psqVjh46kw71qpPYifM59ku0dEBGgEmlTh_dejbe5QI,12458
92
93
  execsql/lsp/folding.py,sha256=PgwehzXnPcR68myldo2SYrqbfGla4f6gb_UrhKmaqyQ,2752
93
94
  execsql/lsp/formatting.py,sha256=9YpCfLsi09M1PZovB2HJN-Tp9Jqgk-2xxit5g5NrTqU,1217
94
95
  execsql/lsp/hover.py,sha256=JemZqJ8d7FHouMhW92jkfek14fL9rl6JBQU7JIXJHos,5038
@@ -105,14 +106,14 @@ execsql/metacommands/dispatch.py,sha256=so0ebcnv66NhVDtA1Bt4GelD0hsC5w7gy7rItz2M
105
106
  execsql/metacommands/effects.py,sha256=cRSo48R4nRJzkRR3OGHLhJzofcdAaNIobaxmn1N9TGw,3813
106
107
  execsql/metacommands/io.py,sha256=vlGBje5sgnqeilooMdhJDgSRIhysHy5_7LrKtik9Xjs,3011
107
108
  execsql/metacommands/io_export.py,sha256=YamxQwURRjZRpCG2z8W3QurncCmEmAyLFqDkxtHo5dY,14434
108
- execsql/metacommands/io_fileops.py,sha256=sLTyh8CA-1rdDFLwh3ciACCPuM8r7xJJgk6tQS6CmwI,12939
109
+ execsql/metacommands/io_fileops.py,sha256=CmdgfgTHFWlzsA5XzsHeu6B9OTncb0K8n9uEgS68dkQ,13306
109
110
  execsql/metacommands/io_import.py,sha256=gJICeK1MOfG6D73I7m8zBCalvr_ZJzD-QBKOpKYeYXo,15684
110
111
  execsql/metacommands/io_write.py,sha256=yXDkMbQ3haDARVATVUYZprakyJHSyk1NywdKkFLpQ14,12783
111
112
  execsql/metacommands/prompt.py,sha256=PlXhtBYCembG_1SSCrwpQR10mGF3_jXodu4aCSHlSCM,37950
112
- execsql/metacommands/reference.py,sha256=tMHyfpGMNJQubX4yERe_nFZaXOoxjYWI542YHusBVHE,53953
113
+ execsql/metacommands/reference.py,sha256=yiv_qNp-MPI2UNBOzfwT11JU-xvWM9lw8yBZjP_VlsY,53953
113
114
  execsql/metacommands/script_ext.py,sha256=CsUbyq8QFPnnvfX_k7fPlYNvvRw1xLmAWER4Exo5pwc,3658
114
115
  execsql/metacommands/system.py,sha256=6X2qmMpGUHDzyEluEotXt0Ks9jKQTpc2x0eoYNgN12M,7997
115
- execsql/metacommands/upsert.py,sha256=vy8zfvxs9OYsyDiXInNIRT93ovzue4N_KMPBabNH6Ys,20320
116
+ execsql/metacommands/upsert.py,sha256=Dl7NfaAH8ziGBqcLCgcat3Hcw9vSewK1eo7-nzToI4g,20725
116
117
  execsql/script/__init__.py,sha256=I7hVO6wm3iOocxRRGEcFHhjdtL1moKbUYLB-wKbjPdk,3267
117
118
  execsql/script/ast.py,sha256=WqCpFxhxrT2IIGvbArTp3QS0BZryRZAb7IL4ri3I6xg,20591
118
119
  execsql/script/control.py,sha256=WqLy-HLPqHG3vEzYpKMiIJsD7LpORjyQuUWzFzcGz4w,2327
@@ -121,35 +122,35 @@ execsql/script/executor.py,sha256=p3Aj7Ab8HwZRnmYds_e6h6yhRzCCa9XXbdVDkpg6NaQ,40
121
122
  execsql/script/parser.py,sha256=z73v6t6ZbPUKkRu-UOIL6q1cCRDeoRvG2aXXC8NpMvE,37162
122
123
  execsql/script/variables.py,sha256=Tb01aHqOdWZbkgj-oW0ky3KWNy5N34XLD-Fm2eShYZM,17462
123
124
  execsql/utils/__init__.py,sha256=0uR6JwVJQRX3vceByNBduCAf5dd5assKjeqJUWvpZoA,278
124
- execsql/utils/auth.py,sha256=BV7VtLM-ID8jNB42vx7GEz8yb3Z1Qs9xCr4cUMqL864,14539
125
+ execsql/utils/auth.py,sha256=0LYKdNMhodq9R0B8WyKp69a-xlP9wOR6Ua9Lgo2aJnQ,14868
125
126
  execsql/utils/color.py,sha256=goQqhnLg8yERpFolQikA9zYSVcuAm0unKTJiWTbQm-U,634
126
127
  execsql/utils/crypto.py,sha256=KlT6lPk-v0-qQQfAMfWvT9Q6kRdCD3_5JVaLajNocKM,3051
127
128
  execsql/utils/datetime.py,sha256=rqtGrc0t37V00mvirJ8wJKHmDtDSYzTg_UgCyIBzv9E,5583
128
- execsql/utils/errors.py,sha256=yUyA61vlY8cNmC4-XR7hpACG_T6wUK82FF0AnRxDrBs,11693
129
+ execsql/utils/errors.py,sha256=WKojSMjNecL9riRo9TnZ4fXofZr2uDo2_4B6n-zP31M,11693
129
130
  execsql/utils/fileio.py,sha256=IqIEhun9aOnr1oBCWK2z2VAPVo95bZ54cVglLW4rV9M,48208
130
131
  execsql/utils/gui.py,sha256=1iiupP9AsLdR6ST0gcLE143o6y6YGUFlNv_pdVPxfCE,23943
131
132
  execsql/utils/mail.py,sha256=4RiKtXa_sqij_YGdYmjQ3PG0u3G9qjs-9caQwBErtBw,7278
132
133
  execsql/utils/numeric.py,sha256=_7bi5R6pHjMCkOPne_Sh5nUj-B8e9g6WFmjptFHaunA,1573
134
+ execsql/utils/paths.py,sha256=7IIHT6vqXTfs6Ltfrzm_I2ZV4pU8IuedOLkHo6a1_K8,1175
133
135
  execsql/utils/regex.py,sha256=DGzPBl0Kt4--RbwPhoZI6Bm6N_CBUvI0DbqE4EF6qp8,3718
134
136
  execsql/utils/strings.py,sha256=UQNjpRCEFa1UO6feU-M-9e24wWAvizs_iu_4fFusLxo,8516
135
137
  execsql/utils/timer.py,sha256=eDYf5VzCNFk7oo90InJucUm3XcBdhYMogjZMqeg9xzc,1899
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,,
138
+ execsql2-2.31.2.data/data/execsql2_extras/README.md,sha256=6f5bWiBlKRn8s6GVrU423-HFrU1Jwbk2AabxraLu3AY,5398
139
+ execsql2-2.31.2.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
140
+ execsql2-2.31.2.data/data/execsql2_extras/example_config_prompt.sql,sha256=2e8KzzVWhho8KxYVHETSVmZdhW7wodioDsqBLSL6m4s,7487
141
+ execsql2-2.31.2.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
142
+ execsql2-2.31.2.data/data/execsql2_extras/md_compare.sql,sha256=ARYEcOlxWLxfw-KCKDeJRdCqnuCb9PVwGaHtITR2sYU,26535
143
+ execsql2-2.31.2.data/data/execsql2_extras/md_glossary.sql,sha256=gu2PDTm295YvxR7cDp25Mf-xXHly0BvlMudoNOrep5Q,10931
144
+ execsql2-2.31.2.data/data/execsql2_extras/md_upsert.sql,sha256=YNUTFS6yB4bZXs-wRDn6dN8jL5wIumzZyE2uo5arIos,113407
145
+ execsql2-2.31.2.data/data/execsql2_extras/pg_compare.sql,sha256=WcupGxQoWtMwHVPuy42xCpP4gAV4Ttb1W-_hwh-3xb4,24529
146
+ execsql2-2.31.2.data/data/execsql2_extras/pg_glossary.sql,sha256=CfQz2HZj2nMvJfYfQrAmNYdx0uRrOIWsCXwVo5gKv_k,9953
147
+ execsql2-2.31.2.data/data/execsql2_extras/script_template.sql,sha256=s5i0HULxp49N2Cpd24iALleM_dBq5oLuN3Arx_4Z7-o,11140
148
+ execsql2-2.31.2.data/data/execsql2_extras/ss_compare.sql,sha256=PpU-vPyqqC1faBoo5zwVZlZHYKkT79QZisWVlk4o-ss,26415
149
+ execsql2-2.31.2.data/data/execsql2_extras/ss_glossary.sql,sha256=_oTiZHpadPXWrNs8VoRe9PZgX9XdK490NMVWVTVtjl4,13110
150
+ execsql2-2.31.2.data/data/execsql2_extras/ss_upsert.sql,sha256=Dvst877h4KHn8ayYF9EXI_OxqLQ89wyfcnGYYT4szro,118304
151
+ execsql2-2.31.2.dist-info/METADATA,sha256=hcqYBQapidB4W3tZ0n4YWwdb6-j_8I4N6TrSyrHcrXY,26927
152
+ execsql2-2.31.2.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
153
+ execsql2-2.31.2.dist-info/entry_points.txt,sha256=jOf53-4IVGjEZeNYUOF1GGaiPNfVZcNKxP3vDFKEyMA,58
154
+ execsql2-2.31.2.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
155
+ execsql2-2.31.2.dist-info/licenses/NOTICE,sha256=McYzgxYav3U1OaVsY4Su1sfBrfmplpRdA9b6-gCDQCg,342
156
+ execsql2-2.31.2.dist-info/RECORD,,