execsql2 2.22.6__py3-none-any.whl → 2.22.7__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 (21) hide show
  1. execsql/format.py +19 -1
  2. {execsql2-2.22.6.dist-info → execsql2-2.22.7.dist-info}/METADATA +2 -2
  3. {execsql2-2.22.6.dist-info → execsql2-2.22.7.dist-info}/RECORD +21 -21
  4. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/README.md +0 -0
  5. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/config_settings.sqlite +0 -0
  6. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/example_config_prompt.sql +0 -0
  7. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/make_config_db.sql +0 -0
  8. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/md_compare.sql +0 -0
  9. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/md_glossary.sql +0 -0
  10. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/md_upsert.sql +0 -0
  11. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/pg_compare.sql +0 -0
  12. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/pg_glossary.sql +0 -0
  13. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/pg_upsert.sql +0 -0
  14. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/script_template.sql +0 -0
  15. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/ss_compare.sql +0 -0
  16. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/ss_glossary.sql +0 -0
  17. {execsql2-2.22.6.data → execsql2-2.22.7.data}/data/execsql2_extras/ss_upsert.sql +0 -0
  18. {execsql2-2.22.6.dist-info → execsql2-2.22.7.dist-info}/WHEEL +0 -0
  19. {execsql2-2.22.6.dist-info → execsql2-2.22.7.dist-info}/entry_points.txt +0 -0
  20. {execsql2-2.22.6.dist-info → execsql2-2.22.7.dist-info}/licenses/LICENSE.txt +0 -0
  21. {execsql2-2.22.6.dist-info → execsql2-2.22.7.dist-info}/licenses/NOTICE +0 -0
execsql/format.py CHANGED
@@ -456,7 +456,21 @@ def _sqlglot_format(
456
456
 
457
457
  try:
458
458
  with contextlib.redirect_stderr(io.StringIO()):
459
- ast = sqlglot.parse(protected, read="postgres", error_level=sqlglot_errors.ErrorLevel.IGNORE)
459
+ # Parse with RAISE, not IGNORE. Under IGNORE sqlglot answers a
460
+ # statement it cannot parse with a *partial* AST — the tokens it
461
+ # failed on are simply absent — and regenerating from that AST
462
+ # writes back SQL that no longer means what the author wrote.
463
+ # ``INSERT ... CROSS JOIN LATERAL (VALUES ...) AS g(a, b) ON
464
+ # CONFLICT (a) DO NOTHING`` came back with ``DO NOTHING`` deleted:
465
+ # still one statement, still 88% of the input's alphanumeric
466
+ # characters, no string literals to compare, so every guard below
467
+ # passed it through. The guards are quantitative and this loss is
468
+ # qualitative — a dropped ``DISTINCT``, ``CASCADE``, ``DESC`` or
469
+ # ``NOT`` is smaller still, and no threshold separates those from
470
+ # ordinary reformatting. Only the parser knows whether it
471
+ # understood the whole statement, so ask it: input that does not
472
+ # parse is left exactly as written.
473
+ ast = sqlglot.parse(protected, read="postgres", error_level=sqlglot_errors.ErrorLevel.RAISE)
460
474
  statements: list[str] = []
461
475
  for node in ast:
462
476
  if node is None:
@@ -524,6 +538,10 @@ def _sqlglot_format(
524
538
  if restored is None:
525
539
  return sql_lines
526
540
  return _restore_variables(restored, replacements).split("\n")
541
+ except sqlglot_errors.ParseError:
542
+ # Unparsable input: anything generated from a partial parse is
543
+ # untrustworthy, so emit the original lines untouched.
544
+ return sql_lines
527
545
  except Exception:
528
546
  return sql_lines
529
547
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: execsql2
3
- Version: 2.22.6
3
+ Version: 2.22.7
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
@@ -384,7 +384,7 @@ execsql-format --no-sql --in-place scripts/
384
384
  ```yaml
385
385
  repos:
386
386
  - repo: https://github.com/geocoug/execsql
387
- rev: v2.22.6
387
+ rev: v2.22.7
388
388
  hooks:
389
389
  - id: execsql-format
390
390
  ```
@@ -3,7 +3,7 @@ execsql/__main__.py,sha256=HdbK-SAhyUmfB6xINY5AzxdMSxGzWSGEG_2dv42Jn64,315
3
3
  execsql/api.py,sha256=EOtBwMnm-8fmB_KmvxyjglR6C7CjdYhCPBisJ9CFfJg,22227
4
4
  execsql/config.py,sha256=txKziUJLV7UPonj2sGFgkmlinDdSV50aHmR_cuCbEIo,34369
5
5
  execsql/exceptions.py,sha256=GlphAiR8iZu4UR4U50WgSqEUMd9_8AeQJ_hhPcJOeQU,9381
6
- execsql/format.py,sha256=YJH_JA1_IqBfeWhgrusA3KKs_xrmbm3ktuVf_xJryws,46017
6
+ execsql/format.py,sha256=oJvAxDaWi-TQAnj_enwuEH-wtjZylKf67QWwHrSNEUU,47254
7
7
  execsql/models.py,sha256=-DWTVrPNwM-n1h3e3rXMoBv9-wpWVdZahyy4RB7fRRE,15502
8
8
  execsql/parser.py,sha256=aOxZ7Mzgvk7G4-nvy9Bgz7xlaZm6oo81cffDeBk_LCk,15597
9
9
  execsql/plugins.py,sha256=l82VWa5NpvOQWD6vcO-WKP-vtn0wp9__wWDFAbwxZg0,12838
@@ -101,23 +101,23 @@ execsql/utils/numeric.py,sha256=_7bi5R6pHjMCkOPne_Sh5nUj-B8e9g6WFmjptFHaunA,1573
101
101
  execsql/utils/regex.py,sha256=B3mSBhRRx_DpUnX_t9IoYd05KvWAebiLMCZqQAmEwcw,3885
102
102
  execsql/utils/strings.py,sha256=UQNjpRCEFa1UO6feU-M-9e24wWAvizs_iu_4fFusLxo,8516
103
103
  execsql/utils/timer.py,sha256=eDYf5VzCNFk7oo90InJucUm3XcBdhYMogjZMqeg9xzc,1899
104
- execsql2-2.22.6.data/data/execsql2_extras/README.md,sha256=vX4NTL095dUoA_hesyRMGYBorEZ_Y_tJ9qrd-MVV09I,5032
105
- execsql2-2.22.6.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
106
- execsql2-2.22.6.data/data/execsql2_extras/example_config_prompt.sql,sha256=2e8KzzVWhho8KxYVHETSVmZdhW7wodioDsqBLSL6m4s,7487
107
- execsql2-2.22.6.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
108
- execsql2-2.22.6.data/data/execsql2_extras/md_compare.sql,sha256=qYYVAjSeHZzjszxV3Bv6bg8Ckbq2kMHl87_gh4sywMU,24140
109
- execsql2-2.22.6.data/data/execsql2_extras/md_glossary.sql,sha256=hkZ2Onn57LAKKsuXxzhR8tPtcWXkmWEQkwPE58-Tm2k,10796
110
- execsql2-2.22.6.data/data/execsql2_extras/md_upsert.sql,sha256=_CAK4BzEboRXTNy03SJR-oOjcEdSNMuRBPL6noWUptY,112560
111
- execsql2-2.22.6.data/data/execsql2_extras/pg_compare.sql,sha256=1zJd4hVUKHR0tncc2qTBC9B4qVV4Us2ITkJpsjN3tMw,24352
112
- execsql2-2.22.6.data/data/execsql2_extras/pg_glossary.sql,sha256=IKuwna-_8b20ljSkXZruuiQigrCpo7ueQdUqd1MXiuI,9908
113
- execsql2-2.22.6.data/data/execsql2_extras/pg_upsert.sql,sha256=HpPJtTHvpEjQy03j-3iPxDEOHMRkudOg7O4D4YR38UI,108315
114
- execsql2-2.22.6.data/data/execsql2_extras/script_template.sql,sha256=2J35ddZPguJ-vwTsz83wErv0jiWUyJcdW_JM0mNKDXA,11155
115
- execsql2-2.22.6.data/data/execsql2_extras/ss_compare.sql,sha256=j1qVNUPXQsEU7-DoVgDJCGcE0EuIl7whLBT3fgeiMAo,24833
116
- execsql2-2.22.6.data/data/execsql2_extras/ss_glossary.sql,sha256=2gLxv34xzKt0vy7hSzJH7a9JiMC3ETrv9MofxQwAibU,13065
117
- execsql2-2.22.6.data/data/execsql2_extras/ss_upsert.sql,sha256=G_8rQ0VzuKIZHWs24O_WrfzpC5S27R1JsL-bFBR3SUQ,117730
118
- execsql2-2.22.6.dist-info/METADATA,sha256=zX8fCinRuVHLFNIAKypooRUh_qPFfn-J6oBwu30_J_U,20382
119
- execsql2-2.22.6.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
120
- execsql2-2.22.6.dist-info/entry_points.txt,sha256=sUOxkM-dN1eBGGpSpDLsAaE0yNXYQKWZAfxPOlMkQyk,90
121
- execsql2-2.22.6.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
122
- execsql2-2.22.6.dist-info/licenses/NOTICE,sha256=McYzgxYav3U1OaVsY4Su1sfBrfmplpRdA9b6-gCDQCg,342
123
- execsql2-2.22.6.dist-info/RECORD,,
104
+ execsql2-2.22.7.data/data/execsql2_extras/README.md,sha256=vX4NTL095dUoA_hesyRMGYBorEZ_Y_tJ9qrd-MVV09I,5032
105
+ execsql2-2.22.7.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
106
+ execsql2-2.22.7.data/data/execsql2_extras/example_config_prompt.sql,sha256=2e8KzzVWhho8KxYVHETSVmZdhW7wodioDsqBLSL6m4s,7487
107
+ execsql2-2.22.7.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
108
+ execsql2-2.22.7.data/data/execsql2_extras/md_compare.sql,sha256=qYYVAjSeHZzjszxV3Bv6bg8Ckbq2kMHl87_gh4sywMU,24140
109
+ execsql2-2.22.7.data/data/execsql2_extras/md_glossary.sql,sha256=hkZ2Onn57LAKKsuXxzhR8tPtcWXkmWEQkwPE58-Tm2k,10796
110
+ execsql2-2.22.7.data/data/execsql2_extras/md_upsert.sql,sha256=_CAK4BzEboRXTNy03SJR-oOjcEdSNMuRBPL6noWUptY,112560
111
+ execsql2-2.22.7.data/data/execsql2_extras/pg_compare.sql,sha256=1zJd4hVUKHR0tncc2qTBC9B4qVV4Us2ITkJpsjN3tMw,24352
112
+ execsql2-2.22.7.data/data/execsql2_extras/pg_glossary.sql,sha256=IKuwna-_8b20ljSkXZruuiQigrCpo7ueQdUqd1MXiuI,9908
113
+ execsql2-2.22.7.data/data/execsql2_extras/pg_upsert.sql,sha256=HpPJtTHvpEjQy03j-3iPxDEOHMRkudOg7O4D4YR38UI,108315
114
+ execsql2-2.22.7.data/data/execsql2_extras/script_template.sql,sha256=2J35ddZPguJ-vwTsz83wErv0jiWUyJcdW_JM0mNKDXA,11155
115
+ execsql2-2.22.7.data/data/execsql2_extras/ss_compare.sql,sha256=j1qVNUPXQsEU7-DoVgDJCGcE0EuIl7whLBT3fgeiMAo,24833
116
+ execsql2-2.22.7.data/data/execsql2_extras/ss_glossary.sql,sha256=2gLxv34xzKt0vy7hSzJH7a9JiMC3ETrv9MofxQwAibU,13065
117
+ execsql2-2.22.7.data/data/execsql2_extras/ss_upsert.sql,sha256=G_8rQ0VzuKIZHWs24O_WrfzpC5S27R1JsL-bFBR3SUQ,117730
118
+ execsql2-2.22.7.dist-info/METADATA,sha256=DbIBWCsTnJIRQx1h0UKA9kB5kXFMybxn7U9j-xWG8P4,20382
119
+ execsql2-2.22.7.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
120
+ execsql2-2.22.7.dist-info/entry_points.txt,sha256=sUOxkM-dN1eBGGpSpDLsAaE0yNXYQKWZAfxPOlMkQyk,90
121
+ execsql2-2.22.7.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
122
+ execsql2-2.22.7.dist-info/licenses/NOTICE,sha256=McYzgxYav3U1OaVsY4Su1sfBrfmplpRdA9b6-gCDQCg,342
123
+ execsql2-2.22.7.dist-info/RECORD,,