execsql2 2.25.0__tar.gz → 2.25.1__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.25.0 → execsql2-2.25.1}/CHANGELOG.md +9 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/PKG-INFO +2 -2
- {execsql2-2.25.0 → execsql2-2.25.1}/README.md +1 -1
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/guides/formatter.md +1 -1
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/reference/lint.md +3 -2
- {execsql2-2.25.0 → execsql2-2.25.1}/pyproject.toml +2 -2
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/lint.py +86 -26
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_lint.py +73 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/uv.lock +1 -1
- {execsql2-2.25.0 → execsql2-2.25.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/.github/dependabot.yml +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/.github/workflows/ci-cd.yml +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/.gitignore +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/.pre-commit-config.yaml +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/.pre-commit-hooks.yaml +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/.python-version +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/.readthedocs.yaml +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/CONTRIBUTING.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/LICENSE.txt +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/NOTICE +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/SECURITY.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/about/contributors.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/about/copyright.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/about/divergence.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/api/cli.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/api/db.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/api/exporters.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/api/importers.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/api/index.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/api/metacommands.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/dev/adding_db_adapters.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/dev/adding_exporters.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/dev/adding_importers.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/dev/adding_metacommands.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/dev/architecture.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/dev/releasing.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/getting-started/installation.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/getting-started/requirements.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/getting-started/syntax.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/guides/debugging.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/guides/documentation.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/guides/encoding.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/guides/examples.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/guides/logging.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/guides/sql_syntax.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/guides/usage.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/guides/using_scripts.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/Compare_planets.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/actions.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/actions2.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/checkboxes.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/connect.b64 +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/connect.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/create_conf.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/data_error1_screenshot.jpg +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/entry_form.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/execsql_console.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/execsql_logo_01.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/fatals.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/logo_small.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/pause_terminal.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/pause_terminal_sm.b64 +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/pause_terminal_sm.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/prompt_compare.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/set_build_commands.jpg +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/unit_conversions.b64 +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/unit_conversions_029.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/unmatched.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/images/vim_execsql_highlight.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/index.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/reference/configuration.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/reference/metacommands.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/reference/security.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/docs/reference/substitution_vars.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/plugin-template/README.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/plugin-template/pyproject.toml +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/plugin-template/src/execsql_plugin_YOURNAME/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/plugin-template/tests/test_plugin.py.example +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/vscode-execsql/.vscodeignore +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/vscode-execsql/LICENSE.txt +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/vscode-execsql/README.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/vscode-execsql/icon.png +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/vscode-execsql/package.json +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/extras/vscode-execsql/syntaxes/execsql.tmLanguage.json +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/justfile +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/scripts/benchmarks/README.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/scripts/benchmarks/results/.gitignore +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/scripts/benchmarks/run_benchmarks.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/scripts/generate_vscode_grammar.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/__main__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/api.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/application.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/commands/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/commands/config.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/commands/format.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/commands/init.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/commands/lint.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/commands/listing.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/commands/run.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/dispatch.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/dsn.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/help.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/options.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/cli/run.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/config.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/config_validation.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/data/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/data/execsql.conf.template +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/data/script_header.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/access.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/base.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/dsn.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/duckdb.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/factory.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/firebird.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/mysql.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/oracle.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/postgres.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/sqlite.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/sqlserver.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/db/tiers.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/debug/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/debug/repl.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exceptions.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/base.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/delimited.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/duckdb.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/feather.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/html.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/json.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/latex.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/markdown.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/ods.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/parquet.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/pretty.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/protocol.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/raw.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/sqlite.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/templates.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/values.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/xls.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/xlsx.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/xml.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/yaml.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/exporters/zip.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/format.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/gui/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/gui/base.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/gui/console.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/gui/desktop.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/gui/tui.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/importers/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/importers/base.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/importers/csv.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/importers/feather.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/importers/json.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/importers/ods.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/importers/xls.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/interactive.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/manifest.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/conditions.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/connect.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/control.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/data.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/debug.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/dispatch.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/effects.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/io.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/io_export.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/io_fileops.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/io_import.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/io_write.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/prompt.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/script_ext.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/system.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/metacommands/upsert.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/models.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/parser.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/plugins.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/py.typed +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/script/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/script/ast.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/script/control.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/script/engine.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/script/executor.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/script/parser.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/script/variables.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/state.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/state.pyi +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/types.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/auth.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/color.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/crypto.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/datetime.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/errors.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/fileio.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/gui.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/mail.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/numeric.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/regex.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/strings.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/src/execsql/utils/timer.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/README.md +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/config_settings.sqlite +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/example_config_prompt.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/make_config_db.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/md_compare.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/md_glossary.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/md_upsert.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/pg_compare.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/pg_glossary.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/pg_upsert.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/script_template.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/ss_compare.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/ss_glossary.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/templates/ss_upsert.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_cli.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_cli_e2e.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_cli_run.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_cli_surface.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_commands.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_config_validate.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_dispatch.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_error_location.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_init.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_lint_fixtures.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_log_exit_record.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_manifest.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_ping.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_profile.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_sigterm.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/cli/test_undeclared_imports.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/conftest.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/data/formatter_shapes/comment_anchoring.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/data/formatter_shapes/escapes_and_literals.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/data/formatter_shapes/substitution_and_metacommands.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/data/formatter_shapes/unparsable_sql.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/data/lint/conditions_and_blocks.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/data/lint/does_not_parse.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/data/lint/every_metacommand.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/data/lint/invalid.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_access_windows.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_base.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_copy_new.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_db_adapters_mocked.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_db_adapters_mocked_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_dsn.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_duckdb.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_factory.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_factory_postgres_encoding.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_import_atomic.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_import_replacement_quoted.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_import_short_rows.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_import_timezones.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_mysql_case_folding.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_mysql_inprocess.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_new_table_checks.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_oracle_driver.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_postgres.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_postgres_inprocess.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_roundtrip_adapters.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_sqlite.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_sqlite_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_sqlserver_inprocess.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_tiers.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/db/test_transactions.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/conftest.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_base.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_db.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_delimited.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_duckdb_exporter.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_exporters.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_feather.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_html_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_html_latex.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_json.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_json_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_latex_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_markdown.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_ods.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_ods_export.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_parquet.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_pretty_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_raw_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_columnar.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_dbfile.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_delimited.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_json.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_latex_xml.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_markup.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_ods.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_pretty_raw.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_template.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_values.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_roundtrip_xlsx.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_sqlite_exporter.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_templates.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_templates_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_values_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_xls_xlsx.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_xlsx.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_xml.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_yaml.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/exporters/test_zip.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/test_backends.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/test_backends_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/test_compare_stats.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/test_compute_row_diffs.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/test_desktop_dialogs.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/test_format_table.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/test_tui_pilot.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/test_tui_pilot_complex.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/gui/test_utils_gui_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/conftest.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/test_base_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/test_csv_blank_lines.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/test_csv_edge_cases.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/test_csv_importer.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/test_feather_importer.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/test_json_importer.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/test_ods_importer.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/test_roundtrip_csv.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/importers/test_xls_importer.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/integration/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/integration/conftest.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/integration/test_dsn.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/integration/test_duckdb.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/integration/test_mysql.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/integration/test_postgres.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/integration/test_sqlite.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/live_db.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_assert.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_breakpoint.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_conditions_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_connect.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_io_export.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_io_import.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands_connect.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands_data.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands_fileops_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands_io.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands_io_write_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands_script_ext.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands_system.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_metacommands_system_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_pg_upsert.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_prompt.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_row_count.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/metacommands/test_show_scripts.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/audit_lint_bad.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/audit_smoke/sample.json +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/audit_smoke/sample.jsonl +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/audit_smoke.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/config_runtime.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/control_flow.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/counters_and_locals.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/error_handling.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/import_options/has_comments.csv +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/import_options.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/includes/helper.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/includes.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/io_formats.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/io_roundtrip.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/multi_db.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/parquet_feather_roundtrip.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/parse_only/parse_tree.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/predicates.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/scripts.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/smoke.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/subroutine_loops.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/subvars_advanced.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/template_export/greeting.tmpl +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/template_export.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/timer.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/transactions.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/write_create_table.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/fixtures/xlsx_ods_roundtrip.sql +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/scripts/test_sql_scripts.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/test_env_detection.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/test_expansion_bomb.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/test_import_regex_hardening.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/test_log_redaction.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/test_log_secrets.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/test_odbc_injection.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/test_path_containment.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/test_substitution_injection.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/security/test_zip_bomb.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_api.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_api_errors.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_api_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_api_filewriter.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_api_isolation.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_api_subprocess.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_ast.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_ast_parser.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_bundled_templates.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_config.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_config_data.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_config_extended.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_date_inference.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_debug_repl.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_engine.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_error_messages.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_exceptions.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_executor.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_executor_inprocess.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_format.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_interactive.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_mail.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_models.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_package.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_parser.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_parser_params.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_plugins.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_registry.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_script.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_state.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_tooling_versions.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/test_types.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/__init__.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_auth.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_auth_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_crypto.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_datetime.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_encodedfile_context.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_errors.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_errors_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_fileio.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_fileio_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_keyring_rules.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_mail_tls.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_numeric.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_regex.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_strings.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_timer.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/tests/utils/test_timer_extra.py +0 -0
- {execsql2-2.25.0 → execsql2-2.25.1}/zensical.toml +0 -0
|
@@ -13,6 +13,15 @@ ______________________________________________________________________
|
|
|
13
13
|
|
|
14
14
|
______________________________________________________________________
|
|
15
15
|
|
|
16
|
+
## [2.25.1] - 2026-10-09
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **`execsql lint` `V001` / `V002` and nested variable names:** `!!N_!!CHECK_GROUP!!_CHECKS!!` no longer reports `!!N_!!` and `!!_CHECKS!!` as undefined; the inner `!!CHECK_GROUP!!` is checked, and counts as used.
|
|
21
|
+
- **`execsql lint` and `SUB_INI`:** a script whose `SUB_INI` names a FIFO or device (`/dev/zero`) no longer hangs lint, and an INI file that does not parse no longer stops it.
|
|
22
|
+
|
|
23
|
+
______________________________________________________________________
|
|
24
|
+
|
|
16
25
|
## [2.25.0] - 2026-10-09
|
|
17
26
|
|
|
18
27
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: execsql2
|
|
3
|
-
Version: 2.25.
|
|
3
|
+
Version: 2.25.1
|
|
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
|
|
@@ -451,7 +451,7 @@ execsql format --no-sql --in-place scripts/
|
|
|
451
451
|
```yaml
|
|
452
452
|
repos:
|
|
453
453
|
- repo: https://github.com/geocoug/execsql
|
|
454
|
-
rev: v2.25.
|
|
454
|
+
rev: v2.25.1
|
|
455
455
|
hooks:
|
|
456
456
|
- id: execsql-format
|
|
457
457
|
- id: execsql-lint
|
|
@@ -233,7 +233,7 @@ select id,name,created_at from users where active = true order by name;
|
|
|
233
233
|
```yaml
|
|
234
234
|
repos:
|
|
235
235
|
- repo: https://github.com/geocoug/execsql
|
|
236
|
-
rev: v2.25.
|
|
236
|
+
rev: v2.25.1
|
|
237
237
|
hooks:
|
|
238
238
|
- id: execsql-format
|
|
239
239
|
- id: execsql-lint # optional: fail the commit on lint errors
|
|
@@ -158,7 +158,7 @@ The `execsql-lint` [pre-commit](https://pre-commit.com/) hook runs `execsql lint
|
|
|
158
158
|
```yaml
|
|
159
159
|
repos:
|
|
160
160
|
- repo: https://github.com/geocoug/execsql
|
|
161
|
-
rev: v2.25.
|
|
161
|
+
rev: v2.25.1
|
|
162
162
|
hooks:
|
|
163
163
|
- id: execsql-lint
|
|
164
164
|
args: [--ignore, V002] # optional: any execsql lint option
|
|
@@ -313,7 +313,7 @@ A `!!variable!!` is referenced, but nothing in the script defines it. At run tim
|
|
|
313
313
|
|
|
314
314
|
A definition is any metacommand in the same file that sets a variable:
|
|
315
315
|
|
|
316
|
-
- the SUB family: `SUB`, `SUB_EMPTY`, `SUB_ADD`, `SUB_APPEND`, `SUBDATA`, `SUB_LOCAL`, `SUB_TEMPFILE`, `SUB_ENCRYPT`, `SUB_DECRYPT`, the keys of `SUB_QUERYSTRING`, and the keys of a `SUB_INI` file that
|
|
316
|
+
- the SUB family: `SUB`, `SUB_EMPTY`, `SUB_ADD`, `SUB_APPEND`, `SUBDATA`, `SUB_LOCAL`, `SUB_TEMPFILE`, `SUB_ENCRYPT`, `SUB_DECRYPT`, the keys of `SUB_QUERYSTRING`, and the keys of a `SUB_INI` file that lint can read (a regular file of at most 1 MiB that parses as INI);
|
|
317
317
|
- the prompts that store an answer: `PROMPT ENTER_SUB`, `ASK ... SUB`, `PROMPT ASK ... SUB` (with or without `COMPARE`), `PROMPT OPENFILE SUB`, `PROMPT SAVEFILE SUB` and `PROMPT DIRECTORY SUB` (every variable named after `SUB`), and both variables of `PROMPT CREDENTIALS`.
|
|
318
318
|
|
|
319
319
|
Definitions inside `BEGIN SCRIPT` blocks that the file runs with `EXECUTE SCRIPT` count too, and so does a definition that comes after the first use.
|
|
@@ -324,6 +324,7 @@ Not reported:
|
|
|
324
324
|
|
|
325
325
|
- System variables (`!!$DATE_TAG!!`, `!!$DB_NAME!!`, …), `!!$ARG_n!!` set with `-a`, and `!!$COUNTER_n!!`.
|
|
326
326
|
- References with the `&` (environment), `@` (column), `~` (local), `#` and `+` prefixes, which resolve only at run time.
|
|
327
|
+
- A name built from another variable, such as `!!N_!!CHECK_GROUP!!_CHECKS!!`. execsql substitutes `!!CHECK_GROUP!!` first, so the outer name is only known at run time. Lint checks the inner variable: if `CHECK_GROUP` is undefined, `!!CHECK_GROUP!!` is reported, not the fragments `!!N_!!` and `!!_CHECKS!!`.
|
|
327
328
|
|
|
328
329
|
Variables defined somewhere lint cannot see are reported: in a configuration file, on the command line other than as `$ARG_n`, or in a file pulled in with `INCLUDE` (lint does not read `INCLUDE`d files for definitions). If that is how a library works, `--ignore V001` for those scripts.
|
|
329
330
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "execsql2"
|
|
7
|
-
version = "2.25.
|
|
7
|
+
version = "2.25.1"
|
|
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" }
|
|
@@ -177,7 +177,7 @@ skip-magic-trailing-comma = false
|
|
|
177
177
|
line-ending = "auto"
|
|
178
178
|
|
|
179
179
|
[tool.bumpversion]
|
|
180
|
-
current_version = "2.25.
|
|
180
|
+
current_version = "2.25.1"
|
|
181
181
|
commit = true
|
|
182
182
|
tag = true
|
|
183
183
|
tag_name = "v{new_version}"
|
|
@@ -243,6 +243,12 @@ _RX_PROMPT_CREDENTIALS = re.compile(
|
|
|
243
243
|
)
|
|
244
244
|
|
|
245
245
|
_RX_VAR_REF = re.compile(r"!!([$@&~#+]?\w+)!!", re.I)
|
|
246
|
+
# Every candidate reference, including one nested in another's name
|
|
247
|
+
# (``!!N_!!GROUP!!_CHECKS!!``), which _RX_VAR_REF's left-to-right scan skips.
|
|
248
|
+
_RX_VAR_REF_ANY = re.compile(r"(?=!!([$@&~#+]?\w+)!!)")
|
|
249
|
+
# Stands for a substituted value in _unresolved_var_refs: a word character
|
|
250
|
+
# (so an enclosing name still matches) that no script name contains.
|
|
251
|
+
_SUBSTITUTED = "ª"
|
|
246
252
|
|
|
247
253
|
|
|
248
254
|
# ---------------------------------------------------------------------------
|
|
@@ -424,54 +430,108 @@ def _extract_var_definition(
|
|
|
424
430
|
_read_ini_vars(ini_file, ini_section, script_dir, defined)
|
|
425
431
|
|
|
426
432
|
|
|
433
|
+
# Larger than any real SUB_INI file; lint reads no more than this.
|
|
434
|
+
_MAX_INI_BYTES = 1024 * 1024
|
|
435
|
+
|
|
436
|
+
|
|
427
437
|
def _read_ini_vars(
|
|
428
438
|
ini_file: str,
|
|
429
439
|
section: str,
|
|
430
440
|
script_dir: Path | None,
|
|
431
441
|
defined_vars: set[str],
|
|
432
442
|
) -> None:
|
|
433
|
-
"""Read an INI file and register its section keys as defined variables.
|
|
443
|
+
"""Read an INI file and register its section keys as defined variables.
|
|
444
|
+
|
|
445
|
+
Only a regular file up to :data:`_MAX_INI_BYTES` is read, so a script
|
|
446
|
+
naming a FIFO or a device (``/dev/zero``) cannot hang lint or the
|
|
447
|
+
language server; a file that is unreadable or not valid INI defines
|
|
448
|
+
nothing.
|
|
449
|
+
"""
|
|
434
450
|
from configparser import ConfigParser
|
|
451
|
+
from configparser import Error as ConfigError
|
|
435
452
|
|
|
436
453
|
p = Path(ini_file)
|
|
437
454
|
if not p.is_absolute() and script_dir is not None:
|
|
438
455
|
p = script_dir / p
|
|
439
456
|
|
|
440
|
-
if not p.exists():
|
|
441
|
-
return
|
|
442
|
-
|
|
443
457
|
cp = ConfigParser()
|
|
444
|
-
|
|
458
|
+
try:
|
|
459
|
+
if not p.is_file() or p.stat().st_size > _MAX_INI_BYTES:
|
|
460
|
+
return
|
|
461
|
+
cp.read_string(p.read_text(encoding="utf-8"), source=str(p))
|
|
462
|
+
except (OSError, UnicodeDecodeError, ConfigError):
|
|
463
|
+
return
|
|
445
464
|
if cp.has_section(section):
|
|
446
465
|
for key, _value in cp.items(section):
|
|
447
466
|
defined_vars.add(key.upper())
|
|
448
467
|
|
|
449
468
|
|
|
450
|
-
def
|
|
451
|
-
raw_name
|
|
452
|
-
source: str,
|
|
453
|
-
line_no: int,
|
|
454
|
-
defined_vars: set[str],
|
|
455
|
-
issues: list[_Issue],
|
|
456
|
-
) -> None:
|
|
457
|
-
"""Emit a warning if *raw_name* looks like an undefined user variable."""
|
|
458
|
-
if not raw_name:
|
|
459
|
-
return
|
|
460
|
-
|
|
469
|
+
def _is_known_var(raw_name: str, defined_vars: set[str]) -> bool:
|
|
470
|
+
"""Whether execsql may substitute *raw_name* (as written, with its sigil) at run time."""
|
|
461
471
|
sigil = raw_name[0] if raw_name[0] in ("$", "@", "&", "~", "#", "+") else ""
|
|
462
472
|
name = raw_name[len(sigil) :]
|
|
463
473
|
|
|
464
474
|
# Skip non-$ sigil prefixes — resolved at runtime
|
|
465
475
|
if sigil in ("@", "&", "~", "#", "+"):
|
|
466
|
-
return
|
|
476
|
+
return True
|
|
467
477
|
|
|
468
478
|
if sigil == "$":
|
|
469
479
|
# System variables: $ARG_N is set with -a/--assign-arg, $COUNTER_N by
|
|
470
480
|
# CounterVars, the rest by execsql itself. A SUB cannot define one.
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
481
|
+
return bool(re.match(r"^(?:ARG|COUNTER)_\d+$", name, re.I)) or name.upper() in _get_builtin_vars()
|
|
482
|
+
# User variables, defined by a SUB-family metacommand or a prompt.
|
|
483
|
+
return name.upper() in defined_vars
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
def _unresolved_var_refs(text: str, defined_vars: set[str]) -> list[str]:
|
|
487
|
+
"""The variable names in *text* that execsql would leave unsubstituted, as written.
|
|
488
|
+
|
|
489
|
+
execsql substitutes a known variable wherever ``!!name!!`` appears and
|
|
490
|
+
repeats until nothing changes, so a variable written inside another's
|
|
491
|
+
name (``!!N_!!GROUP!!_CHECKS!!``) is replaced first, and the outer name
|
|
492
|
+
is only known at run time: it is not checked. Here each known variable
|
|
493
|
+
is replaced by a placeholder character, a name holding one counts as
|
|
494
|
+
known, and that repeats until nothing is replaced.
|
|
495
|
+
|
|
496
|
+
In a run of unknown candidates that share delimiters, the inner ones
|
|
497
|
+
(every second, from the second) are reported: with ``GROUP`` undefined,
|
|
498
|
+
``!!N_!!GROUP!!_CHECKS!!`` reports ``GROUP``, not the fragments ``N_``
|
|
499
|
+
and ``_CHECKS``.
|
|
500
|
+
"""
|
|
501
|
+
while True:
|
|
502
|
+
parts: list[str] = []
|
|
503
|
+
end = 0
|
|
504
|
+
for m in _RX_VAR_REF_ANY.finditer(text):
|
|
505
|
+
name = m.group(1)
|
|
506
|
+
if m.start() >= end and (_SUBSTITUTED in name or _is_known_var(name, defined_vars)):
|
|
507
|
+
parts += [text[end : m.start()], _SUBSTITUTED]
|
|
508
|
+
end = m.start() + len(name) + 4
|
|
509
|
+
if not parts:
|
|
510
|
+
break
|
|
511
|
+
text = "".join([*parts, text[end:]])
|
|
512
|
+
|
|
513
|
+
unresolved: list[str] = []
|
|
514
|
+
run: list[str] = []
|
|
515
|
+
end = -1
|
|
516
|
+
for m in _RX_VAR_REF_ANY.finditer(text):
|
|
517
|
+
if run and m.start() != end - 2: # not sharing the previous candidate's closing !!
|
|
518
|
+
unresolved.extend(run if len(run) == 1 else run[1::2])
|
|
519
|
+
run = []
|
|
520
|
+
run.append(m.group(1))
|
|
521
|
+
end = m.start() + len(m.group(1)) + 4
|
|
522
|
+
unresolved.extend(run if len(run) == 1 else run[1::2])
|
|
523
|
+
return unresolved
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
def _check_var_ref(
|
|
527
|
+
raw_name: str,
|
|
528
|
+
source: str,
|
|
529
|
+
line_no: int,
|
|
530
|
+
defined_vars: set[str],
|
|
531
|
+
issues: list[_Issue],
|
|
532
|
+
) -> None:
|
|
533
|
+
"""Emit a warning if *raw_name* looks like an undefined user variable."""
|
|
534
|
+
if not raw_name or _is_known_var(raw_name, defined_vars):
|
|
475
535
|
return
|
|
476
536
|
|
|
477
537
|
issues.append(
|
|
@@ -735,7 +795,7 @@ def _collect_var_references(nodes: list[Node], seen: set[str]) -> None:
|
|
|
735
795
|
"""Record every variable read anywhere beneath *nodes*: ``!!var!!``, or ``sub_defined(var)`` / ``sub_empty(var)``."""
|
|
736
796
|
for node in nodes:
|
|
737
797
|
for text in _referencing_text(node):
|
|
738
|
-
for m in
|
|
798
|
+
for m in _RX_VAR_REF_ANY.finditer(text):
|
|
739
799
|
seen.add(m.group(1).lstrip("$@&~#+").upper())
|
|
740
800
|
for m in _RX_VAR_TEST.finditer(text):
|
|
741
801
|
seen.add(m.group(1).lstrip("$@&~#+").upper())
|
|
@@ -826,14 +886,14 @@ def _lint_nodes(
|
|
|
826
886
|
|
|
827
887
|
# -- Variable references in SQL --
|
|
828
888
|
if isinstance(node, SqlStatement):
|
|
829
|
-
for
|
|
830
|
-
_check_var_ref(
|
|
889
|
+
for name in _unresolved_var_refs(node.text, defined_vars):
|
|
890
|
+
_check_var_ref(name, src, lno, defined_vars, issues)
|
|
831
891
|
|
|
832
892
|
# -- Metacommand checks --
|
|
833
893
|
elif isinstance(node, MetaCommandStatement):
|
|
834
894
|
_check_metacommand(node, issues)
|
|
835
|
-
for
|
|
836
|
-
_check_var_ref(
|
|
895
|
+
for name in _unresolved_var_refs(node.command, defined_vars):
|
|
896
|
+
_check_var_ref(name, src, lno, defined_vars, issues)
|
|
837
897
|
|
|
838
898
|
# -- IncludeDirective checks --
|
|
839
899
|
elif isinstance(node, IncludeDirective):
|
|
@@ -17,6 +17,7 @@ on every node).
|
|
|
17
17
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
|
+
import os
|
|
20
21
|
from pathlib import Path
|
|
21
22
|
|
|
22
23
|
import pytest
|
|
@@ -716,6 +717,78 @@ class TestUnusedVariables:
|
|
|
716
717
|
unused = [i for i in issues if i.code == "V002"]
|
|
717
718
|
assert unused and unused[0].line == 2, unused
|
|
718
719
|
|
|
720
|
+
def test_a_reference_inside_another_name_counts(self, tmp_path):
|
|
721
|
+
body = "-- !x! SUB grp east\n-- !x! SUB N_east_CHECKS 12\nSELECT !!N_!!grp!!_CHECKS!!;\n"
|
|
722
|
+
unused = [i.message for i in _lint(tmp_path, body) if i.code == "V002"]
|
|
723
|
+
assert not any("grp" in m for m in unused), unused
|
|
724
|
+
|
|
725
|
+
|
|
726
|
+
class TestSubIniDefinitions:
|
|
727
|
+
"""SUB_INI defines the keys of a section in an INI file that lint can read."""
|
|
728
|
+
|
|
729
|
+
@staticmethod
|
|
730
|
+
def _undefined(tmp_path, ini_name):
|
|
731
|
+
body = f"-- !x! SUB_INI FILE {ini_name} SECTION vars\nSELECT !!region!!;\n"
|
|
732
|
+
return [i.message for i in _lint(tmp_path, body) if i.code == "V001"]
|
|
733
|
+
|
|
734
|
+
def test_keys_of_the_section_are_defined(self, tmp_path):
|
|
735
|
+
(tmp_path / "vars.ini").write_text("[vars]\nregion = north\n", encoding="utf-8")
|
|
736
|
+
assert self._undefined(tmp_path, "vars.ini") == []
|
|
737
|
+
|
|
738
|
+
def test_a_missing_file_defines_nothing(self, tmp_path):
|
|
739
|
+
assert self._undefined(tmp_path, "missing.ini") == ["undefined variable !!region!!"]
|
|
740
|
+
|
|
741
|
+
def test_a_file_that_is_not_ini_defines_nothing(self, tmp_path):
|
|
742
|
+
(tmp_path / "vars.ini").write_text("region = north\n", encoding="utf-8") # no section header
|
|
743
|
+
assert self._undefined(tmp_path, "vars.ini") == ["undefined variable !!region!!"]
|
|
744
|
+
|
|
745
|
+
def test_an_oversized_file_is_not_read(self, tmp_path, monkeypatch):
|
|
746
|
+
import execsql.cli.lint as lint_module
|
|
747
|
+
|
|
748
|
+
(tmp_path / "vars.ini").write_text("[vars]\nregion = north\n", encoding="utf-8")
|
|
749
|
+
monkeypatch.setattr(lint_module, "_MAX_INI_BYTES", 8)
|
|
750
|
+
assert self._undefined(tmp_path, "vars.ini") == ["undefined variable !!region!!"]
|
|
751
|
+
|
|
752
|
+
@pytest.mark.skipif(not hasattr(os, "mkfifo"), reason="needs os.mkfifo")
|
|
753
|
+
def test_a_fifo_is_not_opened(self, tmp_path):
|
|
754
|
+
os.mkfifo(tmp_path / "vars.ini") # opening it would block until a writer appears
|
|
755
|
+
assert self._undefined(tmp_path, "vars.ini") == ["undefined variable !!region!!"]
|
|
756
|
+
|
|
757
|
+
|
|
758
|
+
class TestNestedVariableNames:
|
|
759
|
+
"""``!!N_!!GROUP!!_CHECKS!!`` names the variable N_<value of GROUP>_CHECKS; execsql substitutes the inner one first."""
|
|
760
|
+
|
|
761
|
+
@staticmethod
|
|
762
|
+
def _undefined(tmp_path, body):
|
|
763
|
+
return [i.message for i in _lint(tmp_path, body) if i.code == "V001"]
|
|
764
|
+
|
|
765
|
+
def test_a_defined_inner_variable_is_not_reported(self, tmp_path):
|
|
766
|
+
body = (
|
|
767
|
+
"-- !x! SUB grp east\n"
|
|
768
|
+
"-- !x! SUB N_!!grp!!_CHECKS 12\n"
|
|
769
|
+
"-- !x! WRITE !!N_!!grp!!_CHECKS!!\n"
|
|
770
|
+
"SELECT !!N_!!grp!!_CHECKS!!;\n"
|
|
771
|
+
)
|
|
772
|
+
assert self._undefined(tmp_path, body) == []
|
|
773
|
+
|
|
774
|
+
def test_an_undefined_inner_variable_is_reported_not_the_fragments(self, tmp_path):
|
|
775
|
+
assert self._undefined(tmp_path, "SELECT !!N_!!nogrp!!_CHECKS!!;\n") == ["undefined variable !!nogrp!!"]
|
|
776
|
+
|
|
777
|
+
def test_three_levels(self, tmp_path):
|
|
778
|
+
assert self._undefined(tmp_path, "-- !x! SUB c X\nSELECT !!A_!!B_!!c!!_D!!_E!!;\n") == []
|
|
779
|
+
|
|
780
|
+
def test_a_system_variable_inside_a_name(self, tmp_path):
|
|
781
|
+
assert self._undefined(tmp_path, "SELECT !!N_!!$counter_1!!_X!!;\n") == []
|
|
782
|
+
|
|
783
|
+
def test_adjacent_references_are_each_checked(self, tmp_path):
|
|
784
|
+
assert self._undefined(tmp_path, "-- !x! SUB a 1\nSELECT !!a!!!!b!!;\n") == ["undefined variable !!b!!"]
|
|
785
|
+
|
|
786
|
+
def test_a_plain_undefined_variable_is_still_reported(self, tmp_path):
|
|
787
|
+
assert self._undefined(tmp_path, "SELECT !!a!!, !!b!!;\n") == [
|
|
788
|
+
"undefined variable !!a!!",
|
|
789
|
+
"undefined variable !!b!!",
|
|
790
|
+
]
|
|
791
|
+
|
|
719
792
|
|
|
720
793
|
class TestTheProjectsOwnScriptsStayQuiet:
|
|
721
794
|
"""A rule that fires on correct scripts is worse than no rule.
|
|
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.25.0 → execsql2-2.25.1}/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
|