execsql2 2.16.7__tar.gz → 2.16.8__tar.gz
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.
- {execsql2-2.16.7 → execsql2-2.16.8}/CHANGELOG.md +8 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/PKG-INFO +1 -1
- {execsql2-2.16.7 → execsql2-2.16.8}/pyproject.toml +2 -2
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/script/parser.py +40 -20
- {execsql2-2.16.7 → execsql2-2.16.8}/uv.lock +1 -1
- {execsql2-2.16.7 → execsql2-2.16.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/.github/workflows/ci-cd.yml +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/.gitignore +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/.pre-commit-config.yaml +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/.pre-commit-hooks.yaml +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/.python-version +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/.readthedocs.yaml +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/CONTRIBUTING.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/LICENSE.txt +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/NOTICE +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/README.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/SECURITY.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/about/contributors.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/about/copyright.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/about/divergence.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/api/cli.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/api/db.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/api/exporters.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/api/importers.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/api/index.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/api/metacommands.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/dev/adding_db_adapters.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/dev/adding_exporters.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/dev/adding_importers.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/dev/adding_metacommands.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/dev/architecture.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/getting-started/installation.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/getting-started/requirements.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/getting-started/syntax.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/guides/debugging.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/guides/documentation.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/guides/encoding.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/guides/examples.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/guides/formatter.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/guides/logging.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/guides/sql_syntax.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/guides/usage.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/guides/using_scripts.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/Compare_planets.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/actions.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/actions2.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/checkboxes.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/connect.b64 +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/connect.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/create_conf.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/data_error1_screenshot.jpg +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/entry_form.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/execsql_console.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/execsql_logo_01.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/fatals.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/logo_small.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/pause_terminal.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/pause_terminal_sm.b64 +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/pause_terminal_sm.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/prompt_compare.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/set_build_commands.jpg +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/unit_conversions.b64 +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/unit_conversions_029.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/unmatched.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/images/vim_execsql_highlight.png +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/index.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/reference/configuration.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/reference/metacommands.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/reference/security.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/docs/reference/substitution_vars.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/extras/plugin-template/README.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/extras/plugin-template/pyproject.toml +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/extras/plugin-template/src/execsql_plugin_YOURNAME/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/extras/plugin-template/tests/test_plugin.py.example +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/extras/vscode-execsql/README.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/extras/vscode-execsql/package.json +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/extras/vscode-execsql/syntaxes/execsql.tmLanguage.json +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/justfile +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/scripts/generate_vscode_grammar.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/__main__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/api.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/cli/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/cli/dsn.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/cli/help.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/cli/lint.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/cli/lint_ast.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/cli/run.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/config.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/access.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/base.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/dsn.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/duckdb.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/factory.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/firebird.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/mysql.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/oracle.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/postgres.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/sqlite.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/db/sqlserver.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/debug/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/debug/repl.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exceptions.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/base.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/delimited.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/duckdb.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/feather.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/html.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/json.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/latex.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/markdown.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/ods.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/parquet.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/pretty.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/protocol.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/raw.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/sqlite.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/templates.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/values.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/xls.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/xlsx.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/xml.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/yaml.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/exporters/zip.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/format.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/gui/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/gui/base.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/gui/console.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/gui/desktop.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/gui/tui.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/importers/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/importers/base.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/importers/csv.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/importers/feather.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/importers/json.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/importers/ods.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/importers/xls.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/conditions.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/connect.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/control.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/data.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/debug.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/dispatch.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/io.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/io_export.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/io_fileops.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/io_import.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/io_write.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/prompt.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/script_ext.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/system.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/metacommands/upsert.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/models.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/parser.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/plugins.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/py.typed +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/script/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/script/ast.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/script/control.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/script/engine.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/script/executor.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/script/variables.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/state.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/types.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/auth.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/crypto.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/datetime.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/errors.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/fileio.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/gui.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/mail.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/numeric.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/regex.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/strings.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/src/execsql/utils/timer.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/README.md +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/config_settings.sqlite +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/example_config_prompt.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/execsql.conf +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/make_config_db.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/md_compare.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/md_glossary.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/md_upsert.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/pg_compare.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/pg_glossary.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/pg_upsert.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/script_template.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/ss_compare.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/ss_glossary.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/templates/ss_upsert.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/cli/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/cli/test_cli.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/cli/test_cli_e2e.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/cli/test_cli_run.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/cli/test_lint.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/cli/test_ping.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/cli/test_profile.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/conftest.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/db/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/db/test_base.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/db/test_db_adapters_mocked.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/db/test_dsn.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/db/test_duckdb.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/db/test_factory.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/db/test_postgres.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/db/test_sqlite.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/db/test_sqlite_extra.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_base.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_db.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_delimited.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_duckdb_exporter.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_exporters.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_feather.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_html_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_html_latex.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_json.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_json_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_latex_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_markdown.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_ods.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_parquet.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_pretty_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_raw_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_sqlite_exporter.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_templates.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_templates_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_values_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_xls_xlsx.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_xlsx.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_xml.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_yaml.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/exporters/test_zip.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/gui/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/gui/test_backends.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/gui/test_compare_stats.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/gui/test_compute_row_diffs.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/importers/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/importers/test_base_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/importers/test_csv_edge_cases.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/importers/test_csv_importer.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/importers/test_feather_importer.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/importers/test_json_importer.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/importers/test_ods_importer.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/importers/test_xls_importer.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/integration/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/integration/conftest.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/integration/test_dsn.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/integration/test_duckdb.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/integration/test_mysql.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/integration/test_postgres.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/integration/test_sqlite.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_assert.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_breakpoint.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_connect.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_io_export.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_io_import.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands_connect.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands_data.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands_fileops_extra.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands_io.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands_io_write_extra.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands_script_ext.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands_system.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_metacommands_system_extra.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_pg_upsert.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/metacommands/test_row_count.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/scripts/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/scripts/fixtures/control_flow.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/scripts/fixtures/io_roundtrip.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/scripts/fixtures/parse_only/parse_tree.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/scripts/fixtures/smoke.sql +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/scripts/test_sql_scripts.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_api.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_ast.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_ast_parser.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_config.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_config_data.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_config_extended.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_debug_repl.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_engine.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_error_messages.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_exceptions.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_executor.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_format.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_mail.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_models.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_package.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_parser.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_plugins.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_registry.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_script.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_state.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/test_types.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/__init__.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_auth.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_auth_extra.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_crypto.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_datetime.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_errors.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_errors_extra.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_fileio.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_fileio_extra.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_numeric.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_regex.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_strings.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_timer.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/tests/utils/test_timer_extra.py +0 -0
- {execsql2-2.16.7 → execsql2-2.16.8}/zensical.toml +0 -0
|
@@ -13,6 +13,14 @@ ______________________________________________________________________
|
|
|
13
13
|
|
|
14
14
|
______________________________________________________________________
|
|
15
15
|
|
|
16
|
+
## [2.16.8] - 2026-04-30
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- SQL comments (`--` and `/* */`) inside multi-line SQL statements no longer split the statement. Previously, a comment like `-- col2,` between SELECT columns would cause the parser to flush the accumulated SQL at the comment line, sending an incomplete statement to the database. Comments inside SQL are now preserved as part of the statement text.
|
|
21
|
+
|
|
22
|
+
______________________________________________________________________
|
|
23
|
+
|
|
16
24
|
## [2.16.7] - 2026-04-30
|
|
17
25
|
|
|
18
26
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: execsql2
|
|
3
|
-
Version: 2.16.
|
|
3
|
+
Version: 2.16.8
|
|
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
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "execsql2"
|
|
7
|
-
version = "2.16.
|
|
7
|
+
version = "2.16.8"
|
|
8
8
|
description = "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."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
license = { file = "LICENSE.txt" }
|
|
@@ -165,7 +165,7 @@ skip-magic-trailing-comma = false
|
|
|
165
165
|
line-ending = "auto"
|
|
166
166
|
|
|
167
167
|
[tool.bumpversion]
|
|
168
|
-
current_version = "2.16.
|
|
168
|
+
current_version = "2.16.8"
|
|
169
169
|
commit = true
|
|
170
170
|
tag = true
|
|
171
171
|
tag_name = "v{new_version}"
|
|
@@ -163,6 +163,7 @@ def _parse_lines(lines: Iterable[str], source_name: str) -> Script:
|
|
|
163
163
|
in_sql_block = False # inside BEGIN SQL ... END SQL
|
|
164
164
|
sql_accum = "" # multi-line SQL accumulator
|
|
165
165
|
sql_start_line = 0
|
|
166
|
+
sql_accum_at_block_comment = False # was sql_accum non-empty when /* started?
|
|
166
167
|
|
|
167
168
|
def _current_body() -> list[Node]:
|
|
168
169
|
"""Return the body list that new nodes should be appended to."""
|
|
@@ -217,14 +218,21 @@ def _parse_lines(lines: Iterable[str], source_name: str) -> Script:
|
|
|
217
218
|
block_comment_lines.append(line)
|
|
218
219
|
if len(line) > 1 and line.rstrip().endswith("*/"):
|
|
219
220
|
in_block_comment = False
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
221
|
+
comment_text = "\n".join(block_comment_lines)
|
|
222
|
+
if sql_accum_at_block_comment:
|
|
223
|
+
# Block comment started inside a SQL statement — fold it
|
|
224
|
+
# back into sql_accum so the statement isn't split.
|
|
225
|
+
sql_accum += "\n" + comment_text
|
|
226
|
+
else:
|
|
227
|
+
_flush_sql(file_lineno)
|
|
228
|
+
_current_body().append(
|
|
229
|
+
Comment(
|
|
230
|
+
span=SourceSpan(source_name, block_comment_start, file_lineno),
|
|
231
|
+
text=comment_text,
|
|
232
|
+
),
|
|
233
|
+
)
|
|
227
234
|
block_comment_lines = []
|
|
235
|
+
sql_accum_at_block_comment = False
|
|
228
236
|
continue
|
|
229
237
|
|
|
230
238
|
# --- Single-line comment classification ---
|
|
@@ -232,12 +240,17 @@ def _parse_lines(lines: Iterable[str], source_name: str) -> Script:
|
|
|
232
240
|
comment_match = _COMMENT_LINE_RX.match(line)
|
|
233
241
|
|
|
234
242
|
if comment_match and not metacommand_match and not in_sql_block:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
243
|
+
if sql_accum:
|
|
244
|
+
# Inside a multi-line SQL statement — keep the comment as part
|
|
245
|
+
# of the SQL text so that commented-out columns, WHERE clauses,
|
|
246
|
+
# etc. don't split the statement.
|
|
247
|
+
sql_accum += "\n" + line.rstrip()
|
|
248
|
+
else:
|
|
249
|
+
# Standalone comment (not inside a SQL statement) — accumulate
|
|
250
|
+
# consecutive -- lines into a single Comment node.
|
|
251
|
+
if not line_comment_lines:
|
|
252
|
+
line_comment_start = file_lineno
|
|
253
|
+
line_comment_lines.append(line.rstrip())
|
|
241
254
|
continue
|
|
242
255
|
|
|
243
256
|
# Non-comment line — flush any accumulated -- comment group before proceeding.
|
|
@@ -248,17 +261,24 @@ def _parse_lines(lines: Iterable[str], source_name: str) -> Script:
|
|
|
248
261
|
if len(stripped) > 1 and stripped.startswith("/*"):
|
|
249
262
|
block_comment_start = file_lineno
|
|
250
263
|
block_comment_lines = [line]
|
|
264
|
+
# Remember whether we were inside a SQL statement when the block
|
|
265
|
+
# comment started, so we can fold it back on close.
|
|
266
|
+
sql_accum_at_block_comment = bool(sql_accum)
|
|
251
267
|
in_block_comment = True
|
|
252
268
|
if stripped.endswith("*/"):
|
|
253
269
|
in_block_comment = False
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
270
|
+
if sql_accum_at_block_comment:
|
|
271
|
+
sql_accum += "\n" + line.rstrip()
|
|
272
|
+
else:
|
|
273
|
+
_flush_sql(file_lineno)
|
|
274
|
+
_current_body().append(
|
|
275
|
+
Comment(
|
|
276
|
+
span=SourceSpan(source_name, file_lineno),
|
|
277
|
+
text=line,
|
|
278
|
+
),
|
|
279
|
+
)
|
|
261
280
|
block_comment_lines = []
|
|
281
|
+
sql_accum_at_block_comment = False
|
|
262
282
|
continue
|
|
263
283
|
|
|
264
284
|
# --- Metacommand handling ---
|
|
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
|
|
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
|
|
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
|
|
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
|
{execsql2-2.16.7 → execsql2-2.16.8}/extras/plugin-template/src/execsql_plugin_YOURNAME/__init__.py
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|