execsql2 2.16.0__py3-none-any.whl → 2.16.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 (26) hide show
  1. execsql/cli/run.py +333 -173
  2. execsql/config.py +1 -1
  3. execsql/script/executor.py +145 -47
  4. execsql/script/parser.py +9 -1
  5. execsql/state.py +72 -51
  6. {execsql2-2.16.0.dist-info → execsql2-2.16.2.dist-info}/METADATA +38 -29
  7. {execsql2-2.16.0.dist-info → execsql2-2.16.2.dist-info}/RECORD +26 -26
  8. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/README.md +0 -0
  9. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/config_settings.sqlite +0 -0
  10. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/example_config_prompt.sql +0 -0
  11. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/execsql.conf +0 -0
  12. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/make_config_db.sql +0 -0
  13. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/md_compare.sql +0 -0
  14. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/md_glossary.sql +0 -0
  15. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/md_upsert.sql +0 -0
  16. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/pg_compare.sql +0 -0
  17. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/pg_glossary.sql +0 -0
  18. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/pg_upsert.sql +0 -0
  19. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/script_template.sql +0 -0
  20. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/ss_compare.sql +0 -0
  21. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/ss_glossary.sql +0 -0
  22. {execsql2-2.16.0.data → execsql2-2.16.2.data}/data/execsql2_extras/ss_upsert.sql +0 -0
  23. {execsql2-2.16.0.dist-info → execsql2-2.16.2.dist-info}/WHEEL +0 -0
  24. {execsql2-2.16.0.dist-info → execsql2-2.16.2.dist-info}/entry_points.txt +0 -0
  25. {execsql2-2.16.0.dist-info → execsql2-2.16.2.dist-info}/licenses/LICENSE.txt +0 -0
  26. {execsql2-2.16.0.dist-info → execsql2-2.16.2.dist-info}/licenses/NOTICE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: execsql2
3
- Version: 2.16.0
3
+ Version: 2.16.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
5
  Project-URL: Homepage, https://execsql2.readthedocs.io
6
6
  Project-URL: Repository, https://github.com/geocoug/execsql
@@ -173,7 +173,8 @@ pip install execsql2[oracle] # Oracle (oracledb)
173
173
  pip install execsql2[odbc] # ODBC DSN (pyodbc)
174
174
 
175
175
  # Feature bundles
176
- pip install execsql2[formats] # ODS, Excel, Jinja2, Feather, Parquet, HDF5
176
+ pip install execsql2[formats] # ODS, Excel, Jinja2, Feather, Parquet, HDF5
177
+ pip install execsql2[upsert] # pg-upsert for PostgreSQL upsert operations
177
178
  pip install execsql2[auth] # OS keyring integration
178
179
  pip install execsql2[auth-plaintext] # Keyring + plaintext file backend (headless Linux)
179
180
  pip install execsql2[auth-encrypted] # Keyring + encrypted file backend (headless Linux)
@@ -219,33 +220,41 @@ execsql script.sql # read connection from config file
219
220
 
220
221
  ## Options
221
222
 
222
- | Flag | Description |
223
- | ----------------------------------- | --------------------------------------------------------------- |
224
- | `-t {p,m,s,l,k,a,f,o,d}` | Database type |
225
- | `-u USER` | Database username |
226
- | `-p PORT` | Server port |
227
- | `-a VALUE` | Set substitution variable `$ARG_x` |
228
- | `-c SCRIPT` | Execute inline SQL or metacommand string |
229
- | `-d` | Auto-create export directories |
230
- | `-f ENCODING` | Script file encoding (default: UTF-8) |
231
- | `-l` | Write run log to `~/execsql.log` |
232
- | `-m` | List metacommands and exit |
233
- | `-n` | Create a new SQLite or PostgreSQL database if it does not exist |
234
- | `-v {0,1,2,3}` | GUI level (0=none, 1=password, 2=selection, 3=full) |
235
- | `-w` | Skip password prompt when a username is supplied |
236
- | `--dsn URL` | Connection string (e.g. `postgresql://user:pass@host/db`) |
237
- | `--output-dir DIR` | Default base directory for EXPORT output files |
238
- | `--dry-run` | Parse the script and report commands without executing |
239
- | `--lint` | Static analysis: check structure and warn on issues (no DB) |
240
- | `--parse-tree` | Print the script's AST structure and exit (no DB) |
241
- | `--list-plugins` | List discovered plugins and exit |
242
- | `--ping` | Test database connectivity and exit |
243
- | `--profile` | Show per-statement timing summary after execution |
244
- | `--progress` | Show a progress bar for long-running IMPORT operations |
245
- | `--config FILE` | Load an explicit config file (highest priority after CLI args) |
246
- | `--debug` | Start in step-through debug mode (REPL pauses before each stmt) |
247
- | `--dump-keywords` | Print metacommand keywords as JSON and exit |
248
- | `--gui-framework {tkinter,textual}` | GUI framework for interactive prompts |
223
+ | Flag | Description |
224
+ | ------------------------------------- | ---------------------------------------------------------------- |
225
+ | `-t {p,m,s,l,k,a,f,o,d}` | Database type |
226
+ | `-u USER` | Database username |
227
+ | `-p PORT` | Server port |
228
+ | `-a VALUE` | Set substitution variable `$ARG_x` |
229
+ | `-b` / `--boolean-int` | Treat integers 0 and 1 as boolean values |
230
+ | `-c SCRIPT` | Execute inline SQL or metacommand string |
231
+ | `-d` | Auto-create export directories |
232
+ | `-e ENCODING` / `--database-encoding` | Character encoding used in the database |
233
+ | `-f ENCODING` | Script file encoding (default: UTF-8) |
234
+ | `-g ENCODING` / `--output-encoding` | Encoding for WRITE and EXPORT output |
235
+ | `-i ENCODING` / `--import-encoding` | Encoding for data files used with IMPORT |
236
+ | `-l` | Write run log to `~/execsql.log` |
237
+ | `-m` | List metacommands and exit |
238
+ | `-n` | Create a new SQLite or PostgreSQL database if it does not exist |
239
+ | `-o` / `--online-help` | Open the online documentation in the default browser |
240
+ | `-s N` / `--scan-lines` | Lines to scan for IMPORT format detection (0 = scan entire file) |
241
+ | `-v {0,1,2,3}` | GUI level (0=none, 1=password, 2=selection, 3=full) |
242
+ | `-w` | Skip password prompt when a username is supplied |
243
+ | `-y` / `--encodings` | List available encoding names and exit |
244
+ | `-z KB` / `--import-buffer` | Import buffer size in KB (default: 32) |
245
+ | `--dsn URL` | Connection string (e.g. `postgresql://user:pass@host/db`) |
246
+ | `--output-dir DIR` | Default base directory for EXPORT output files |
247
+ | `--dry-run` | Parse the script and report commands without executing |
248
+ | `--lint` | Static analysis: check structure and warn on issues (no DB) |
249
+ | `--parse-tree` | Print the script's AST structure and exit (no DB) |
250
+ | `--list-plugins` | List discovered plugins and exit |
251
+ | `--ping` | Test database connectivity and exit |
252
+ | `--profile` | Show per-statement timing summary after execution |
253
+ | `--progress` | Show a progress bar for long-running IMPORT operations |
254
+ | `--config FILE` | Load an explicit config file (highest priority after CLI args) |
255
+ | `--debug` | Start in step-through debug mode (REPL pauses before each stmt) |
256
+ | `--dump-keywords` | Print metacommand keywords as JSON and exit |
257
+ | `--gui-framework {tkinter,textual}` | GUI framework for interactive prompts |
249
258
 
250
259
  Run `execsql --help` for the full option list, or `execsql -m` to list all metacommands.
251
260
 
@@ -1,21 +1,21 @@
1
1
  execsql/__init__.py,sha256=ytQ4NlIQW2kFzxjiAjPU2Pu030L9Nz3ozwJVA5D_HbM,666
2
2
  execsql/__main__.py,sha256=HdbK-SAhyUmfB6xINY5AzxdMSxGzWSGEG_2dv42Jn64,315
3
3
  execsql/api.py,sha256=0D2Rl329fvDXERNrJBUzoWEt_VxqCHwRgaGzrq04rVs,19709
4
- execsql/config.py,sha256=izB-1NyETzk9zZhppNAiGEe-KN-aAiavXLxFVL18T6o,29480
4
+ execsql/config.py,sha256=6icjr8PKenUGfFF6lciSclvejjDzY8GTW1OZ1-IZt-Y,29480
5
5
  execsql/exceptions.py,sha256=j8hykBiof9H3Za9hwLIbDcVB2Xn65ODXXplp1jkvdgM,8453
6
6
  execsql/format.py,sha256=-6iknDddqbkapMo4NKmT5LAynDLqMW5kHgDWRg0KSws,11990
7
7
  execsql/models.py,sha256=kCTUQg9-vReM6WNFfB_ZrEppuOW5u1uMBQThSkfPC0o,13264
8
8
  execsql/parser.py,sha256=P3ea8k7T_XLMrbhpFNZXwytdShrY302MKnhosqza1lo,15493
9
9
  execsql/plugins.py,sha256=2voLwT6eFap6BCBoZYndNNC_bMEJO1f_aP6xQTVXwYI,12815
10
10
  execsql/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- execsql/state.py,sha256=bdFiDqWD3igqBs1A93PB1WJl_iMGziMaa9Gsz4boLyE,16935
11
+ execsql/state.py,sha256=MmvQDup1LsZdLzVFtKHbZeOxaOoM8_cwWwDxN0aOarI,17536
12
12
  execsql/types.py,sha256=5K3aTuWQZHftz5slFODwqxlcvvt6lROISUnvUtRUazs,31799
13
13
  execsql/cli/__init__.py,sha256=qNK4u1ZoAnaqUGngZ-hxtaA6egDSTxxzH-WtWn8Jaqo,21523
14
14
  execsql/cli/dsn.py,sha256=svaZtrUXFRL2W5G6FRRiKtR6kehOp7urrVhIx_642Z8,2820
15
15
  execsql/cli/help.py,sha256=Sn_TgSJiQeBx-xZH0fuP5OvR_wasSTumjWF9UHfIX5k,5414
16
16
  execsql/cli/lint.py,sha256=mVZu3Knp13-yQZkofiaeDmxLTWP7DkbaZoDeHPsfAEQ,24094
17
17
  execsql/cli/lint_ast.py,sha256=c9UEFsZ7PZlFdrK0zJCe-WXfCqvS3WlOUWEycZozqB8,14688
18
- execsql/cli/run.py,sha256=Ctf-feNq7aWctIj-wZxVfkJp1zRPP1VUXsc5H5tLp_A,30485
18
+ execsql/cli/run.py,sha256=QrJ5SqIGiRO5AXavmxyhlJCMGtgZydC8MtHHAieQ4II,34571
19
19
  execsql/db/__init__.py,sha256=jTbuafuKOqYtXFR1wvCOoKK5Lr3l1uErfaIbIr6UywI,1063
20
20
  execsql/db/access.py,sha256=dAFuP1YeL7e7sy13T-9wll2Av5cr_PcUdxHf1NlvRNY,18204
21
21
  execsql/db/base.py,sha256=-el1s7YrxHkdy0lFx86BKZ8mBXWD-1EvE44e5ZhD5KI,31322
@@ -84,8 +84,8 @@ execsql/script/__init__.py,sha256=3WaBklMVIWjtCsYQ-BVo9UAVEIATOgeGsuyv21YKnxo,39
84
84
  execsql/script/ast.py,sha256=yFw9ZvLLDNNSmSgy7cwK2fXLatpp2CKYAAyOneJoKVc,18836
85
85
  execsql/script/control.py,sha256=s-1eZdGARM6H1FwZ6VDdO_f50j7bvvRtTHesfUm9tbc,6144
86
86
  execsql/script/engine.py,sha256=EhuVBniOrFkzAW4I3NIZLt3INHTZJvlYoF7B99rZBLI,29391
87
- execsql/script/executor.py,sha256=ncxkkhVuMWgf-x6JGvcBfioe3nkOfe-84j3XBW4TUHc,29608
88
- execsql/script/parser.py,sha256=5PrOaFNgilroxbHDkyumE2CMnQ7Tf7yrlu4MGYv_3mg,24770
87
+ execsql/script/executor.py,sha256=35RGyua8sGR2rrrnf3WvaC3nAjobKoH9pmVm4FJ5oZY,34213
88
+ execsql/script/parser.py,sha256=4Mk5tF4rr9lpJpJh-cPPFemkQta2QBbNnMqFQ6S5huo,24983
89
89
  execsql/script/variables.py,sha256=ZSBGQUsoii6w3dLDVY9xxoPIV6wY0sAV_BNIQ6pgQAE,14328
90
90
  execsql/utils/__init__.py,sha256=0uR6JwVJQRX3vceByNBduCAf5dd5assKjeqJUWvpZoA,278
91
91
  execsql/utils/auth.py,sha256=onXzNkNZQZxGC5w7eey06sjvAIAX_Lf9g7nUJtcsel0,7009
@@ -99,24 +99,24 @@ execsql/utils/numeric.py,sha256=xh02ANSRk3nUpQ-rtm66ILoMqoi7HtzCoRMIOT9U8QI,1570
99
99
  execsql/utils/regex.py,sha256=diEzTZqU_HHwVMadPAvN1Vgzhl7I03eVaEFGCXyGGL8,3770
100
100
  execsql/utils/strings.py,sha256=5Dvzrk-9SIw2lpxXZQkiJbNyo1sy7iXXAtSULlZ0KG8,8488
101
101
  execsql/utils/timer.py,sha256=eDYf5VzCNFk7oo90InJucUm3XcBdhYMogjZMqeg9xzc,1899
102
- execsql2-2.16.0.data/data/execsql2_extras/README.md,sha256=sxwVyU0ZahCfANv56LahkyuM505kFjrMhe-1SvWE69E,4845
103
- execsql2-2.16.0.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
104
- execsql2-2.16.0.data/data/execsql2_extras/example_config_prompt.sql,sha256=SY3Jxn1qcVm4kPW9xmmTfknHfvURXmeEYTbRjYrjGSw,7487
105
- execsql2-2.16.0.data/data/execsql2_extras/execsql.conf,sha256=_45iJ-KWZnB8uMW_gEg067MM5pmGJ-dVl7VbAZMunAE,9530
106
- execsql2-2.16.0.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
107
- execsql2-2.16.0.data/data/execsql2_extras/md_compare.sql,sha256=B8Wd7LZ0vnMY2qvA139JIEBkPObgRH2i5xj6PejTQt8,24092
108
- execsql2-2.16.0.data/data/execsql2_extras/md_glossary.sql,sha256=DJRHcU5NbFpxTTX-IwH3yRlsboj1q6BBGrUAHKn4Cuo,10796
109
- execsql2-2.16.0.data/data/execsql2_extras/md_upsert.sql,sha256=v_7GbWh_N1mBTmw3gvTrkagOVp2q0KmXvM8hE-DlFxY,112524
110
- execsql2-2.16.0.data/data/execsql2_extras/pg_compare.sql,sha256=9dWa8hnfy5dVJI-z2iGpd9JzQmI4j2ziMlEdpnr66ro,24352
111
- execsql2-2.16.0.data/data/execsql2_extras/pg_glossary.sql,sha256=pKjIIDsROAgJq2H-1qNEcRMAWManivcZ_AEVHzUUlic,9908
112
- execsql2-2.16.0.data/data/execsql2_extras/pg_upsert.sql,sha256=k7AFiGTLBy3nf-qO5QIaZrEYTAKvdxxU3JDLx9jqkzs,108315
113
- execsql2-2.16.0.data/data/execsql2_extras/script_template.sql,sha256=1Estacb_vm1FgK41k_G9nuduP1yiA-fQ1Kn4Z4mv5Ao,11153
114
- execsql2-2.16.0.data/data/execsql2_extras/ss_compare.sql,sha256=TsVxWm3cEpR5-EiMYXNhtaY0arSNeKZhsJdHdLA7xeI,24833
115
- execsql2-2.16.0.data/data/execsql2_extras/ss_glossary.sql,sha256=cLM7nN8JOIu9ZVP9oY9qdSK3hrnWJiDcX6nZmQQbQWI,13065
116
- execsql2-2.16.0.data/data/execsql2_extras/ss_upsert.sql,sha256=BCqmBykXBF-BpCgOFeG1qhf2XfScKsxPD17wd1hYfHw,120647
117
- execsql2-2.16.0.dist-info/METADATA,sha256=p2Fn86wyXcH8sym1nr4PvdUWbQjcb2BN9l8pWK-ABRY,19879
118
- execsql2-2.16.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
119
- execsql2-2.16.0.dist-info/entry_points.txt,sha256=sUOxkM-dN1eBGGpSpDLsAaE0yNXYQKWZAfxPOlMkQyk,90
120
- execsql2-2.16.0.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
121
- execsql2-2.16.0.dist-info/licenses/NOTICE,sha256=sqVrM73Ys9zfvWC_P797lHfTnoPW_ETeBSrUTFaob0A,339
122
- execsql2-2.16.0.dist-info/RECORD,,
102
+ execsql2-2.16.2.data/data/execsql2_extras/README.md,sha256=sxwVyU0ZahCfANv56LahkyuM505kFjrMhe-1SvWE69E,4845
103
+ execsql2-2.16.2.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
104
+ execsql2-2.16.2.data/data/execsql2_extras/example_config_prompt.sql,sha256=SY3Jxn1qcVm4kPW9xmmTfknHfvURXmeEYTbRjYrjGSw,7487
105
+ execsql2-2.16.2.data/data/execsql2_extras/execsql.conf,sha256=_45iJ-KWZnB8uMW_gEg067MM5pmGJ-dVl7VbAZMunAE,9530
106
+ execsql2-2.16.2.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
107
+ execsql2-2.16.2.data/data/execsql2_extras/md_compare.sql,sha256=B8Wd7LZ0vnMY2qvA139JIEBkPObgRH2i5xj6PejTQt8,24092
108
+ execsql2-2.16.2.data/data/execsql2_extras/md_glossary.sql,sha256=DJRHcU5NbFpxTTX-IwH3yRlsboj1q6BBGrUAHKn4Cuo,10796
109
+ execsql2-2.16.2.data/data/execsql2_extras/md_upsert.sql,sha256=v_7GbWh_N1mBTmw3gvTrkagOVp2q0KmXvM8hE-DlFxY,112524
110
+ execsql2-2.16.2.data/data/execsql2_extras/pg_compare.sql,sha256=9dWa8hnfy5dVJI-z2iGpd9JzQmI4j2ziMlEdpnr66ro,24352
111
+ execsql2-2.16.2.data/data/execsql2_extras/pg_glossary.sql,sha256=pKjIIDsROAgJq2H-1qNEcRMAWManivcZ_AEVHzUUlic,9908
112
+ execsql2-2.16.2.data/data/execsql2_extras/pg_upsert.sql,sha256=k7AFiGTLBy3nf-qO5QIaZrEYTAKvdxxU3JDLx9jqkzs,108315
113
+ execsql2-2.16.2.data/data/execsql2_extras/script_template.sql,sha256=1Estacb_vm1FgK41k_G9nuduP1yiA-fQ1Kn4Z4mv5Ao,11153
114
+ execsql2-2.16.2.data/data/execsql2_extras/ss_compare.sql,sha256=TsVxWm3cEpR5-EiMYXNhtaY0arSNeKZhsJdHdLA7xeI,24833
115
+ execsql2-2.16.2.data/data/execsql2_extras/ss_glossary.sql,sha256=cLM7nN8JOIu9ZVP9oY9qdSK3hrnWJiDcX6nZmQQbQWI,13065
116
+ execsql2-2.16.2.data/data/execsql2_extras/ss_upsert.sql,sha256=BCqmBykXBF-BpCgOFeG1qhf2XfScKsxPD17wd1hYfHw,120647
117
+ execsql2-2.16.2.dist-info/METADATA,sha256=zFrU6GFUFGmxMEW3tV0Hh1Zl2IaU2WCxFfsFBIGW0Fo,20920
118
+ execsql2-2.16.2.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
119
+ execsql2-2.16.2.dist-info/entry_points.txt,sha256=sUOxkM-dN1eBGGpSpDLsAaE0yNXYQKWZAfxPOlMkQyk,90
120
+ execsql2-2.16.2.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
121
+ execsql2-2.16.2.dist-info/licenses/NOTICE,sha256=sqVrM73Ys9zfvWC_P797lHfTnoPW_ETeBSrUTFaob0A,339
122
+ execsql2-2.16.2.dist-info/RECORD,,