execsql2 2.17.0__tar.gz → 2.17.2__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.17.0 → execsql2-2.17.2}/.github/workflows/ci-cd.yml +90 -2
- execsql2-2.17.2/CHANGELOG.md +2477 -0
- execsql2-2.17.2/NOTICE +11 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/PKG-INFO +42 -36
- {execsql2-2.17.0 → execsql2-2.17.2}/README.md +38 -35
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/about/divergence.md +58 -105
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/api/cli.md +4 -4
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/api/exporters.md +2 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/api/metacommands.md +13 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/dev/adding_db_adapters.md +8 -6
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/dev/adding_exporters.md +3 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/dev/adding_importers.md +6 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/dev/adding_metacommands.md +15 -13
- execsql2-2.17.2/docs/dev/architecture.md +335 -0
- execsql2-2.17.2/docs/getting-started/installation.md +42 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/getting-started/requirements.md +1 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/getting-started/syntax.md +34 -35
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/guides/debugging.md +19 -20
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/guides/documentation.md +1 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/guides/encoding.md +1 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/guides/formatter.md +11 -71
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/guides/logging.md +21 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/guides/sql_syntax.md +3 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/guides/usage.md +13 -63
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/guides/using_scripts.md +1 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/index.md +15 -15
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/reference/configuration.md +12 -32
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/reference/metacommands.md +62 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/reference/security.md +7 -59
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/reference/substitution_vars.md +26 -27
- execsql2-2.17.2/examples/prompt_map_demo.sql +68 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/extras/vscode-execsql/syntaxes/execsql.tmLanguage.json +25 -25
- {execsql2-2.17.0 → execsql2-2.17.2}/pyproject.toml +6 -17
- {execsql2-2.17.0 → execsql2-2.17.2}/scripts/generate_vscode_grammar.py +57 -55
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/__init__.py +6 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/api.py +25 -6
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/cli/__init__.py +5 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/cli/lint.py +30 -34
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/cli/run.py +10 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/config.py +145 -92
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/access.py +54 -40
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/base.py +33 -6
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/firebird.py +3 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/mysql.py +4 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/oracle.py +36 -14
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/postgres.py +8 -6
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/sqlite.py +5 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/sqlserver.py +8 -6
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/debug/repl.py +59 -21
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exceptions.py +19 -4
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/base.py +3 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/delimited.py +2 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/feather.py +3 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/ods.py +1 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/xls.py +12 -4
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/xlsx.py +1 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/gui/desktop.py +129 -15
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/importers/__init__.py +1 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/importers/ods.py +1 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/importers/xls.py +1 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/__init__.py +34 -5
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/conditions.py +26 -14
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/connect.py +21 -14
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/control.py +55 -68
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/data.py +25 -9
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/debug.py +132 -77
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/io_export.py +14 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/io_import.py +11 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/io_write.py +113 -11
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/prompt.py +46 -32
- execsql2-2.17.2/src/execsql/metacommands/script_ext.py +95 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/system.py +4 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/script/__init__.py +28 -37
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/script/ast.py +7 -7
- execsql2-2.17.2/src/execsql/script/control.py +67 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/script/engine.py +37 -251
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/script/executor.py +181 -222
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/script/parser.py +1 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/script/variables.py +8 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/state.py +125 -37
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/errors.py +0 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/fileio.py +47 -3
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/mail.py +3 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/strings.py +5 -5
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/cli/test_profile.py +14 -12
- execsql2-2.17.2/tests/db/test_access_windows.py +233 -0
- execsql2-2.17.2/tests/db/test_db_adapters_mocked_extra.py +403 -0
- execsql2-2.17.2/tests/db/test_mysql_inprocess.py +399 -0
- execsql2-2.17.2/tests/db/test_postgres_inprocess.py +583 -0
- execsql2-2.17.2/tests/db/test_sqlserver_inprocess.py +378 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_base.py +8 -6
- execsql2-2.17.2/tests/exporters/test_ods_export.py +316 -0
- execsql2-2.17.2/tests/gui/test_backends_extended.py +479 -0
- execsql2-2.17.2/tests/gui/test_desktop_dialogs.py +584 -0
- execsql2-2.17.2/tests/gui/test_tui_pilot.py +353 -0
- execsql2-2.17.2/tests/gui/test_tui_pilot_complex.py +279 -0
- execsql2-2.17.2/tests/gui/test_utils_gui_extended.py +467 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_breakpoint.py +6 -6
- execsql2-2.17.2/tests/metacommands/test_conditions_extra.py +251 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands.py +3 -5
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands_data.py +12 -20
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands_extended.py +100 -329
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands_io.py +1 -5
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands_io_write_extra.py +166 -27
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands_script_ext.py +71 -70
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands_system.py +6 -24
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands_system_extra.py +2 -2
- execsql2-2.17.2/tests/metacommands/test_prompt.py +956 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_row_count.py +3 -5
- execsql2-2.17.2/tests/test_api_extended.py +186 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_debug_repl.py +7 -5
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_engine.py +29 -161
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_error_messages.py +5 -172
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_executor.py +23 -0
- execsql2-2.17.2/tests/test_executor_inprocess.py +463 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_package.py +1 -1
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_script.py +10 -119
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_state.py +11 -90
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_errors_extra.py +2 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/uv.lock +222 -2
- {execsql2-2.17.0 → execsql2-2.17.2}/zensical.toml +5 -0
- execsql2-2.17.0/CHANGELOG.md +0 -2795
- execsql2-2.17.0/NOTICE +0 -10
- execsql2-2.17.0/docs/dev/architecture.md +0 -429
- execsql2-2.17.0/docs/getting-started/installation.md +0 -39
- execsql2-2.17.0/src/execsql/metacommands/script_ext.py +0 -66
- execsql2-2.17.0/src/execsql/script/control.py +0 -164
- {execsql2-2.17.0 → execsql2-2.17.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/.gitignore +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/.pre-commit-config.yaml +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/.pre-commit-hooks.yaml +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/.python-version +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/.readthedocs.yaml +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/CONTRIBUTING.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/LICENSE.txt +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/SECURITY.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/about/contributors.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/about/copyright.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/api/db.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/api/importers.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/api/index.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/guides/examples.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/Compare_planets.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/actions.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/actions2.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/checkboxes.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/connect.b64 +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/connect.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/create_conf.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/data_error1_screenshot.jpg +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/entry_form.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/execsql_console.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/execsql_logo_01.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/fatals.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/logo_small.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/pause_terminal.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/pause_terminal_sm.b64 +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/pause_terminal_sm.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/prompt_compare.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/set_build_commands.jpg +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/unit_conversions.b64 +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/unit_conversions_029.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/unmatched.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/docs/images/vim_execsql_highlight.png +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/extras/plugin-template/README.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/extras/plugin-template/pyproject.toml +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/extras/plugin-template/src/execsql_plugin_YOURNAME/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/extras/plugin-template/tests/test_plugin.py.example +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/extras/vscode-execsql/README.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/extras/vscode-execsql/package.json +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/justfile +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/__main__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/cli/dsn.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/cli/help.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/cli/lint_ast.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/data/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/data/execsql.conf.template +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/dsn.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/duckdb.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/db/factory.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/debug/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/duckdb.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/html.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/json.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/latex.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/markdown.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/parquet.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/pretty.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/protocol.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/raw.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/sqlite.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/templates.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/values.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/xml.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/yaml.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/exporters/zip.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/format.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/gui/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/gui/base.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/gui/console.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/gui/tui.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/importers/base.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/importers/csv.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/importers/feather.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/importers/json.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/dispatch.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/io.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/io_fileops.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/metacommands/upsert.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/models.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/parser.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/plugins.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/py.typed +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/types.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/auth.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/crypto.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/datetime.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/gui.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/numeric.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/regex.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/src/execsql/utils/timer.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/README.md +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/config_settings.sqlite +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/example_config_prompt.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/execsql.conf +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/make_config_db.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/md_compare.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/md_glossary.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/md_upsert.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/pg_compare.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/pg_glossary.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/pg_upsert.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/script_template.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/ss_compare.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/ss_glossary.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/templates/ss_upsert.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/cli/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/cli/test_cli.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/cli/test_cli_e2e.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/cli/test_cli_run.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/cli/test_lint.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/cli/test_ping.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/conftest.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/db/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/db/test_base.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/db/test_db_adapters_mocked.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/db/test_dsn.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/db/test_duckdb.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/db/test_factory.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/db/test_postgres.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/db/test_sqlite.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/db/test_sqlite_extra.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_db.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_delimited.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_duckdb_exporter.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_exporters.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_feather.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_html_extended.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_html_latex.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_json.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_json_extended.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_latex_extended.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_markdown.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_ods.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_parquet.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_pretty_extended.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_raw_extended.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_sqlite_exporter.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_templates.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_templates_extended.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_values_extended.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_xls_xlsx.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_xlsx.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_xml.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_yaml.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/exporters/test_zip.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/gui/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/gui/test_backends.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/gui/test_compare_stats.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/gui/test_compute_row_diffs.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/importers/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/importers/test_base_extended.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/importers/test_csv_edge_cases.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/importers/test_csv_importer.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/importers/test_feather_importer.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/importers/test_json_importer.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/importers/test_ods_importer.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/importers/test_xls_importer.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/integration/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/integration/conftest.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/integration/test_dsn.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/integration/test_duckdb.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/integration/test_mysql.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/integration/test_postgres.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/integration/test_sqlite.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_assert.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_connect.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_io_export.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_io_import.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands_connect.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_metacommands_fileops_extra.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_pg_upsert.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/metacommands/test_show_scripts.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/scripts/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/scripts/fixtures/control_flow.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/scripts/fixtures/io_roundtrip.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/scripts/fixtures/parse_only/parse_tree.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/scripts/fixtures/smoke.sql +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/scripts/test_sql_scripts.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_api.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_ast.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_ast_parser.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_config.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_config_data.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_config_extended.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_exceptions.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_format.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_mail.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_models.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_parser.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_parser_params.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_plugins.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_registry.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/test_types.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/__init__.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_auth.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_auth_extra.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_crypto.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_datetime.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_errors.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_fileio.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_fileio_extra.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_numeric.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_regex.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_strings.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_timer.py +0 -0
- {execsql2-2.17.0 → execsql2-2.17.2}/tests/utils/test_timer_extra.py +0 -0
|
@@ -69,9 +69,19 @@ jobs:
|
|
|
69
69
|
- name: Install tkinter (Ubuntu)
|
|
70
70
|
if: runner.os == 'Linux'
|
|
71
71
|
run: sudo apt-get install -y python3-tk
|
|
72
|
+
- name: Install unixodbc (macOS)
|
|
73
|
+
# tox installs the [all] extra which pulls in pyodbc; pyodbc's
|
|
74
|
+
# native .so depends on libodbc.2.dylib from the unixodbc
|
|
75
|
+
# package, otherwise importing it fails and any DSN test bails.
|
|
76
|
+
if: runner.os == 'macOS'
|
|
77
|
+
run: brew install unixodbc
|
|
72
78
|
- name: Test with tox
|
|
73
79
|
env:
|
|
74
80
|
DISPLAY: ""
|
|
81
|
+
# Ubuntu finishes in ~9 min and Windows in ~16 min; 30 leaves
|
|
82
|
+
# ample headroom. Step-level timeout fails the step (not the
|
|
83
|
+
# job), so continue-on-error can mask it on macOS.
|
|
84
|
+
timeout-minutes: 30
|
|
75
85
|
run: |
|
|
76
86
|
tox -e py
|
|
77
87
|
- name: Upload coverage to Codecov
|
|
@@ -115,6 +125,18 @@ jobs:
|
|
|
115
125
|
options: >-
|
|
116
126
|
--health-cmd "mysqladmin ping" --health-interval 10s
|
|
117
127
|
--health-timeout 5s --health-retries 5
|
|
128
|
+
sqlserver:
|
|
129
|
+
image: mcr.microsoft.com/mssql/server:2022-latest
|
|
130
|
+
env:
|
|
131
|
+
ACCEPT_EULA: "Y"
|
|
132
|
+
MSSQL_SA_PASSWORD: "ExecSql_Test123!"
|
|
133
|
+
MSSQL_PID: "Developer"
|
|
134
|
+
ports:
|
|
135
|
+
- 1433:1433
|
|
136
|
+
options: >-
|
|
137
|
+
--health-cmd "/opt/mssql-tools18/bin/sqlcmd
|
|
138
|
+
-S localhost -U sa -P 'ExecSql_Test123!' -Q 'SELECT 1' -No || exit 1"
|
|
139
|
+
--health-interval 10s --health-timeout 5s --health-retries 20
|
|
118
140
|
steps:
|
|
119
141
|
- name: Check out repository code
|
|
120
142
|
uses: actions/checkout@v6
|
|
@@ -122,13 +144,79 @@ jobs:
|
|
|
122
144
|
uses: actions/setup-python@v6
|
|
123
145
|
with:
|
|
124
146
|
python-version: ${{ matrix.python-version }}
|
|
147
|
+
- name: Install tkinter (Ubuntu)
|
|
148
|
+
run: sudo apt-get update && sudo apt-get install -y python3-tk
|
|
149
|
+
- name: Install Microsoft ODBC Driver 18 for SQL Server
|
|
150
|
+
run: |
|
|
151
|
+
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc > /dev/null
|
|
152
|
+
curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
|
|
153
|
+
sudo apt-get update
|
|
154
|
+
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev
|
|
155
|
+
odbcinst -j
|
|
156
|
+
odbcinst -q -d
|
|
125
157
|
- name: Install dependencies
|
|
126
158
|
run: |
|
|
127
159
|
python -m pip install --upgrade pip
|
|
128
|
-
python -m pip install ".[dev,postgres,mysql]"
|
|
129
|
-
- name: Run integration tests
|
|
160
|
+
python -m pip install ".[dev,postgres,mysql,mssql]"
|
|
161
|
+
- name: Run subprocess integration tests
|
|
130
162
|
run: |
|
|
131
163
|
python -m pytest tests/integration/test_postgres.py tests/integration/test_mysql.py -v --override-ini="addopts="
|
|
164
|
+
- name: Run in-process DB adapter tests with 86% coverage floor
|
|
165
|
+
env:
|
|
166
|
+
DISPLAY: ""
|
|
167
|
+
run: |
|
|
168
|
+
python -m pytest --cov=execsql --cov-branch --cov-report=xml --cov-fail-under=86
|
|
169
|
+
- name: Upload coverage to Codecov
|
|
170
|
+
uses: codecov/codecov-action@v6
|
|
171
|
+
with:
|
|
172
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
173
|
+
files: coverage.xml
|
|
174
|
+
|
|
175
|
+
access-tests-windows:
|
|
176
|
+
name: access-tests-windows
|
|
177
|
+
runs-on: windows-latest
|
|
178
|
+
# Best-effort: Access Database Engine install can be flaky on hosted
|
|
179
|
+
# runners. Failures don't gate the rest of the pipeline.
|
|
180
|
+
continue-on-error: true
|
|
181
|
+
strategy:
|
|
182
|
+
fail-fast: false
|
|
183
|
+
matrix:
|
|
184
|
+
python-version:
|
|
185
|
+
- "3.13"
|
|
186
|
+
permissions:
|
|
187
|
+
contents: read
|
|
188
|
+
steps:
|
|
189
|
+
- uses: actions/checkout@v6
|
|
190
|
+
- uses: actions/setup-python@v6
|
|
191
|
+
with:
|
|
192
|
+
python-version: ${{ matrix.python-version }}
|
|
193
|
+
- name: Install Microsoft Access Database Engine 2016 (x64)
|
|
194
|
+
# The chocolatey `accessdatabaseengine-x64` package was removed
|
|
195
|
+
# from the community feed; download the redistributable directly
|
|
196
|
+
# from Microsoft and run it silently instead.
|
|
197
|
+
run: |
|
|
198
|
+
$ErrorActionPreference = 'Stop'
|
|
199
|
+
$url = 'https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/AccessDatabaseEngine_X64.exe'
|
|
200
|
+
$dst = Join-Path $env:RUNNER_TEMP 'AccessDatabaseEngine_X64.exe'
|
|
201
|
+
Write-Host "Downloading $url"
|
|
202
|
+
Invoke-WebRequest -Uri $url -OutFile $dst -UseBasicParsing
|
|
203
|
+
Write-Host "Installing $dst"
|
|
204
|
+
$proc = Start-Process -FilePath $dst -ArgumentList '/quiet','/norestart' -Wait -PassThru
|
|
205
|
+
Write-Host "Installer exit code: $($proc.ExitCode)"
|
|
206
|
+
# 0 = success, 3010 = success but reboot pending. Anything else is a failure.
|
|
207
|
+
if ($proc.ExitCode -ne 0 -and $proc.ExitCode -ne 3010) { exit $proc.ExitCode }
|
|
208
|
+
shell: pwsh
|
|
209
|
+
- name: Install Python dependencies
|
|
210
|
+
run: |
|
|
211
|
+
python -m pip install --upgrade pip
|
|
212
|
+
python -m pip install ".[dev,odbc]" pywin32
|
|
213
|
+
shell: pwsh
|
|
214
|
+
- name: Run Access real-driver tests
|
|
215
|
+
env:
|
|
216
|
+
DISPLAY: ""
|
|
217
|
+
run: |
|
|
218
|
+
python -m pytest tests/db/test_access_windows.py -v --override-ini="addopts="
|
|
219
|
+
shell: pwsh
|
|
132
220
|
|
|
133
221
|
build:
|
|
134
222
|
name: Build distribution 📦
|