plsqlwks 0.2.4__tar.gz → 0.2.5__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.
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/PKG-INFO +78 -15
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/README.md +77 -14
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/doc/PLUGIN_CATALOG.md +1 -1
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/__init__.py +1 -1
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/metadata.py +59 -13
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/session.py +43 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/__init__.py +5 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/app.py +3 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/browser.py +9 -4
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/catalog.py +104 -25
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/clipboard.py +3 -3
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/commands.py +8 -2
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/constants.py +23 -5
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/db_session.py +29 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/dialogs.py +59 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/input_controller.py +15 -1
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/keys.py +12 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/ports.py +2 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/renderer.py +10 -1
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/state.py +3 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/viewport.py +16 -2
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/tests/fixtures/ui_exports.txt +5 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/tools/putty_keys.ps1 +22 -1
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/doc/API.md +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/doc/ARCHITECTURE.md +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/doc/COMPATIBILITY.md +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/doc/PLUGINS.md +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/doc/QUICKSTART.html +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/doc/QUICKSTART.md +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/license.txt +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/__main__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/cli.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/config/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/config/loader.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/config/models.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/config/paths.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/config/session.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/config/settings.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/ddl_remap.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/dependencies.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/editing.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/execution.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/explain.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/health.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/identifiers.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/models.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/schema_compare.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/schema_diagram.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/sql_analysis.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/table_export.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/table_export_catalog.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/timestamps.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/db/transactions.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/exporting.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/plugins/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/plugins/api.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/plugins/loader.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/plugins/management.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/sqlbinds.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/sqlsplit.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/application_controller.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/buffer.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/code_generation.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/command_dispatcher.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/completion.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/db_operations.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/db_worker.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/dependency_walker.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/display.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/documents.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/editor_controller.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/errors.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/help.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/key_reader.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/menu.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/output_selection.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/plugin_host.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/query_controller.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/result_controller.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/result_export.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/result_presenter.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/results.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/schema_compare.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/schema_diagram.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/sql.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/sqlplus.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/syntax.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/ui/table_export.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks/workspace.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plsqlwks.egg-info/SOURCES.txt +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/csv-export/install.plw +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/csv-export/payload/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/csv-export/payload/plugin.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/csv-export/payload/support.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/csv-export/payload/writer.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/csv2oratab/install.plw +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/csv2oratab/payload/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/csv2oratab/payload/csv2oratab.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/csv2oratab/payload/plugin.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/dependencies-walker/install.plw +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/dependencies-walker/payload/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/dependencies-walker/payload/plugin.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/er-diagram/install.plw +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/er-diagram/payload/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/er-diagram/payload/plugin.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/er-diagram/payload/writer.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/html-export/install.plw +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/html-export/payload/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/html-export/payload/html_exporting.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/html-export/payload/plugin.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/html-export/payload/support.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/html-export/payload/writer.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/packages/csv-export-1.0.0.plwgn +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/packages/csv2oratab-0.1.0.plwgn +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/packages/dependencies-walker-0.1.0.plwgn +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/packages/er-diagram-0.1.3.plwgn +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/packages/html-export-1.0.0.plwgn +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/packages/schema-compare-0.1.0.plwgn +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/packages/sqlplus-0.1.0.plwgn +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/packages/table-ddl-export-0.1.1.plwgn +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/packages/xlsx-export-1.0.0.plwgn +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/schema-compare/install.plw +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/schema-compare/payload/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/schema-compare/payload/plugin.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/schema-compare/payload/writer.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/sqlplus/install.plw +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/sqlplus/payload/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/sqlplus/payload/plugin.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/table-ddl-export/install.plw +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/table-ddl-export/payload/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/table-ddl-export/payload/plugin.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/xlsx-export/install.plw +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/xlsx-export/payload/__init__.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/xlsx-export/payload/plugin.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/xlsx-export/payload/support.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/plugins/xlsx-export/payload/xlsx_exporting.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/pyproject.toml +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/pytest.ini +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/rchar.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/requirements.txt +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/setup.cfg +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/tests/conftest.py +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/tests/fixtures/config_exports.txt +0 -0
- {plsqlwks-0.2.4 → plsqlwks-0.2.5}/tools/windows_keys.cmd +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plsqlwks
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: An ncurses SQL and PL/SQL workspace for Oracle databases.
|
|
5
5
|
Author: unu2000
|
|
6
6
|
License-Expression: LicenseRef-plsqlwks-Donationware
|
|
@@ -619,7 +619,7 @@ Use left Alt for application shortcuts; AltGr remains available for characters
|
|
|
619
619
|
on international keyboards. Shortcut digits and symbols refer to the character
|
|
620
620
|
on the active Windows layout: for example, Czech top-row digits need Shift,
|
|
621
621
|
so Alt-1 is typed with Alt-Shift-1. Use the layout's `+` or `=` character for
|
|
622
|
-
autocomplete refresh. Ctrl-C/Ctrl-P copy/paste internally, Ctrl-Shift-C/Ctrl-Shift-P
|
|
622
|
+
autocomplete refresh. Ctrl-C/Ctrl-Alt-P copy/paste internally, Ctrl-Shift-C/Ctrl-Shift-P
|
|
623
623
|
use the Windows system clipboard, and Alt-Shift-C/Alt-Shift-P use the Linux
|
|
624
624
|
clipboard. Ctrl-V and Ctrl-Shift-V retain their configured paste sources;
|
|
625
625
|
Ctrl-Shift-V defaults to internal paste. SSH does not expose the Windows clipboard to the host. Use
|
|
@@ -698,12 +698,14 @@ two external methods may access shared contents.
|
|
|
698
698
|
| --- | --- | --- |
|
|
699
699
|
| System (Windows) | `Ctrl-Shift-C` | `Ctrl-Shift-P` |
|
|
700
700
|
| WSL/Linux | `Alt-Shift-C` | `Alt-Shift-P` |
|
|
701
|
-
| Internal | `Ctrl-C` | `Ctrl-P` |
|
|
701
|
+
| Internal | `Ctrl-C` | `Ctrl-Alt-P` |
|
|
702
702
|
|
|
703
703
|
Each fixed shortcut uses only its assigned target. Copying externally leaves
|
|
704
704
|
the internal clipboard unchanged. `Ctrl-C` interrupts a running database
|
|
705
705
|
operation first; otherwise it copies internally. `Ctrl-Alt-C` still commits or
|
|
706
|
-
applies the active insert draft, and `Ctrl-Alt-R` rolls back.
|
|
706
|
+
applies the active insert draft, and `Ctrl-Alt-R` rolls back. `Ctrl-P` finds the
|
|
707
|
+
previous occurrence of the last search string, retaining case sensitivity and
|
|
708
|
+
wrapping at the start of the worksheet.
|
|
707
709
|
The copy shortcuts work for editor selections, result cells/ranges,
|
|
708
710
|
DBMS_OUTPUT selections and schema-browser object names. Paste works in the
|
|
709
711
|
worksheet, paste-enabled prompts and editable cell text dialogs.
|
|
@@ -741,7 +743,8 @@ entries to `actions`, keeping the other actions:
|
|
|
741
743
|
|
|
742
744
|
```json
|
|
743
745
|
{ "command": { "action": "sendInput", "input": "\u0003" }, "id": "User.PlsqlwksInternalCopy" },
|
|
744
|
-
{ "command": { "action": "sendInput", "input": "\
|
|
746
|
+
{ "command": { "action": "sendInput", "input": "\u001b[112;7u" }, "id": "User.PlsqlwksInternalPaste" },
|
|
747
|
+
{ "command": { "action": "sendInput", "input": "\u0010" }, "id": "User.PlsqlwksPreviousMatch" },
|
|
745
748
|
{ "command": { "action": "sendInput", "input": "\u001b[99;6u" }, "id": "User.PlsqlwksSystemCopy" },
|
|
746
749
|
{ "command": { "action": "sendInput", "input": "\u001b[112;6u" }, "id": "User.PlsqlwksSystemPaste" },
|
|
747
750
|
{ "command": { "action": "sendInput", "input": "\u001b[99;4u" }, "id": "User.PlsqlwksWslCopy" },
|
|
@@ -755,7 +758,8 @@ the entries below, keeping the other keybindings:
|
|
|
755
758
|
|
|
756
759
|
```json
|
|
757
760
|
{ "id": "User.PlsqlwksInternalCopy", "keys": "ctrl+c" },
|
|
758
|
-
{ "id": "User.PlsqlwksInternalPaste", "keys": "ctrl+p" },
|
|
761
|
+
{ "id": "User.PlsqlwksInternalPaste", "keys": "ctrl+alt+p" },
|
|
762
|
+
{ "id": "User.PlsqlwksPreviousMatch", "keys": "ctrl+p" },
|
|
759
763
|
{ "id": "User.PlsqlwksSystemCopy", "keys": "ctrl+shift+c" },
|
|
760
764
|
{ "id": "User.PlsqlwksSystemPaste", "keys": "ctrl+shift+p" },
|
|
761
765
|
{ "id": "User.PlsqlwksWslCopy", "keys": "alt+shift+c" },
|
|
@@ -793,11 +797,14 @@ See Microsoft's [send input action](https://learn.microsoft.com/en-us/windows/te
|
|
|
793
797
|
| Key | Action |
|
|
794
798
|
| --- | --- |
|
|
795
799
|
| `Alt-O` | Open the top-left commands menu |
|
|
800
|
+
| `Alt-I` | Show connection information for the active tab |
|
|
796
801
|
| `F1` | Help |
|
|
797
802
|
| `F6` | Switch between DBMS_OUTPUT and normal results |
|
|
798
803
|
| `F7` | Cycle fullscreen grid, fullscreen editor, and 2/3 editor + 1/3 grid |
|
|
799
804
|
| `F8` | Toggle result grid / row-detail output |
|
|
800
805
|
| `F9` | Show/focus/hide schema browser |
|
|
806
|
+
| `Shift-F9` | Toggle Schema Browser between normal and half-screen width |
|
|
807
|
+
| `Shift-Alt-F9` | Toggle Schema Browser between full-screen and its previous width |
|
|
801
808
|
| `F12` | Choose autocommit or manual transaction mode |
|
|
802
809
|
| `Ctrl-Up` / `Ctrl-Down` | Scroll the focused pane or visible DBMS_OUTPUT by one line |
|
|
803
810
|
| `Ctrl-W` | Close current file tab |
|
|
@@ -808,6 +815,25 @@ See Microsoft's [send input action](https://learn.microsoft.com/en-us/windows/te
|
|
|
808
815
|
| `Ctrl-Alt-C` | Insert the active result-grid draft, or commit when no draft is active |
|
|
809
816
|
| `Ctrl-Alt-R` | Roll back the current transaction |
|
|
810
817
|
|
|
818
|
+
### Connection information
|
|
819
|
+
|
|
820
|
+
Press `Alt-I`, or choose **Alt-O → Database → Connection information**, from the
|
|
821
|
+
editor, results or schema browser. A centered dialog shows the connected user,
|
|
822
|
+
current schema, service, database and unique database name, container, instance,
|
|
823
|
+
server host, session SID, server timestamp with fractional seconds and timezone,
|
|
824
|
+
database/session time zones, Oracle version, driver version and Thin/Thick mode,
|
|
825
|
+
autocommit and read-only mode. The information is refreshed from the active tab's
|
|
826
|
+
existing session without changing worksheet results, transactions or unread
|
|
827
|
+
DBMS_OUTPUT. A busy active session uses the existing operation-running feedback;
|
|
828
|
+
a disconnected session shows `Not connected` without reconnecting.
|
|
829
|
+
|
|
830
|
+
The dialog keeps **[ OK ]** visible. Press Enter or Space to accept, or Esc/Ctrl-Q
|
|
831
|
+
to close. Use Up/Down, PageUp/PageDown or Home/End to scroll long details; resize
|
|
832
|
+
the terminal to change the layout. Requests cancelled or completed after switching
|
|
833
|
+
away from their tab do not open a late dialog. The Windows keyboard helper forwards
|
|
834
|
+
Alt-I; a Windows Terminal profile that consumes it can forward `\u001bi` with a
|
|
835
|
+
`sendInput` action bound to `alt+i`.
|
|
836
|
+
|
|
811
837
|
### Editor
|
|
812
838
|
|
|
813
839
|
| Key | Action |
|
|
@@ -845,10 +871,10 @@ See Microsoft's [send input action](https://learn.microsoft.com/en-us/windows/te
|
|
|
845
871
|
| `Alt-O` -> **Editor** -> **Replace text** | Open Find/Replace at the replacement field |
|
|
846
872
|
| `Ctrl-G` | Go to line |
|
|
847
873
|
| `Ctrl-N` | Move to the next search occurrence |
|
|
848
|
-
| `Alt-O → Editor → Previous search match` | Move to the previous search occurrence |
|
|
874
|
+
| `Ctrl-P` / `Alt-O → Editor → Previous search match` | Move to the previous search occurrence |
|
|
849
875
|
| `Ctrl-U` | Uppercase selected SQL code |
|
|
850
876
|
| `Ctrl-L` | Lowercase selected SQL code |
|
|
851
|
-
| `Ctrl-C` / `Ctrl-P` | Copy/paste internally |
|
|
877
|
+
| `Ctrl-C` / `Ctrl-Alt-P` | Copy/paste internally |
|
|
852
878
|
| `Ctrl-Shift-C` / `Ctrl-Shift-P` | Copy/paste the System (Windows) clipboard |
|
|
853
879
|
| `Alt-Shift-C` / `Alt-Shift-P` | Copy/paste the WSL/Linux clipboard |
|
|
854
880
|
| `Ctrl-X` | Cut selected text |
|
|
@@ -889,9 +915,9 @@ The dialog provides `Find next`, `Replace`, `Replace all`, and `Cancel` actions.
|
|
|
889
915
|
and lowercase letters. `Replace` changes the selected matching occurrence, or
|
|
890
916
|
the next match from the cursor, and then selects the following match. `Replace
|
|
891
917
|
all` changes every match in the current buffer. Either replacement operation is
|
|
892
|
-
recorded as one undoable edit. `Ctrl-N` repeats the last search forward
|
|
893
|
-
|
|
894
|
-
|
|
918
|
+
recorded as one undoable edit. `Ctrl-N` repeats the last search forward and
|
|
919
|
+
`Ctrl-P` repeats it backward. Both retain the case setting and wrap around.
|
|
920
|
+
**Alt-O → Editor → Previous search match** provides the same backward search.
|
|
895
921
|
|
|
896
922
|
Editor paste expands every tab character to two spaces and keeps multiline
|
|
897
923
|
text in one undoable edit. This applies to all fixed and configured paste shortcuts and
|
|
@@ -1212,7 +1238,28 @@ validate this opt-in mode with the applications in use.
|
|
|
1212
1238
|
|
|
1213
1239
|
### Schema Browser
|
|
1214
1240
|
|
|
1215
|
-
|
|
1241
|
+
Press `F9` to open or focus Schema Browser. While it is focused, `F9` closes it
|
|
1242
|
+
and returns to the SQL buffer. Press `Tab` to keep the browser open and focus
|
|
1243
|
+
the SQL buffer, so you can edit SQL beside the tree; press `F9` to return to it.
|
|
1244
|
+
Filters, selected objects, expanded branches and cached metadata are retained.
|
|
1245
|
+
|
|
1246
|
+
`Shift-F9` opens/focuses the browser and toggles its normal width with a left
|
|
1247
|
+
half-screen pane; the SQL buffer and results stay on the right. `Shift-Alt-F9`
|
|
1248
|
+
opens/focuses a full-screen browser with its filter header and status line, and
|
|
1249
|
+
pressing it again restores the previous normal or half-screen width. From a
|
|
1250
|
+
full-screen browser, Tab, returning to the editor with Esc, or loading/inserting
|
|
1251
|
+
SQL also restores that previous width. Shift-F9 switches a full-screen browser
|
|
1252
|
+
to half-screen. Closing it with F9 retains the side-by-side width for reopening.
|
|
1253
|
+
Browser sizes last for the current application session.
|
|
1254
|
+
|
|
1255
|
+
Opening/focusing the browser exits an incompatible F7 editor/grid fullscreen
|
|
1256
|
+
view, restoring the saved SQL/results split or the two-thirds-editor layout.
|
|
1257
|
+
F7 retains its existing editor/grid layout cycle. A terminal that consumes the
|
|
1258
|
+
new shortcuts can forward `\u001b[20;2~` for Shift-F9 and `\u001b[20;4~` for
|
|
1259
|
+
Shift-Alt-F9 with Windows Terminal `sendInput` actions. The Windows keyboard
|
|
1260
|
+
helper forwards both shortcuts while preserving AltGr combinations.
|
|
1261
|
+
|
|
1262
|
+
The `F9` schema browser groups tables, views, procedures, functions, package specifications, package bodies, types, type bodies, triggers, sequences, indexes, and private synonyms from the current schema. Type while the browser is focused to filter object names with a case-insensitive substring match; groups without matches are hidden and matching groups expand automatically without changing their saved expansion state. Exact quoted and mixed-case names are preserved when columns, routines or definitions are loaded, with Oracle-safe quoting applied to metadata requests.
|
|
1216
1263
|
|
|
1217
1264
|
Press `Enter` on a table or view to choose `Insert SELECT` (the default), `Load DDL`, or `Copy object name`. `Insert SELECT` adds a `select *` statement for the SQL-safe, unqualified object name to the current buffer and focuses the editor; it does not execute the query. `Copy object name` places that SQL-ready, unqualified identifier on the clipboard. For standalone procedures, functions and other object types, `Enter` offers `Load DDL` (the default) and `Copy object name`.
|
|
1218
1265
|
|
|
@@ -1237,6 +1284,18 @@ Edit the input values before running it. Insertion does not execute or compile
|
|
|
1237
1284
|
the call. Unsupported or incomplete signatures report a reason and leave the
|
|
1238
1285
|
buffer unchanged.
|
|
1239
1286
|
|
|
1287
|
+
Press `Space` on a standalone procedure or function to expand its callable
|
|
1288
|
+
signature with parameter directions, types and the function return type. Press
|
|
1289
|
+
`Enter` on the signature to insert the same owner-qualified call template as for
|
|
1290
|
+
package routines. The parent object's Enter menu still offers Load DDL and Copy
|
|
1291
|
+
object name. Signatures load asynchronously and are cached until refresh.
|
|
1292
|
+
|
|
1293
|
+
The **Types** group includes object and collection types; **Type bodies** lists
|
|
1294
|
+
their implementations separately. Enter offers Load DDL or Copy object name.
|
|
1295
|
+
Loading a type fetches its specification only; loading a type body fetches its
|
|
1296
|
+
body only, with owner-qualified DDL and a single slash terminator. Type attributes
|
|
1297
|
+
and methods do not expand into child rows.
|
|
1298
|
+
|
|
1240
1299
|
Press `Space` on a table or view to expand or collapse its column subtree,
|
|
1241
1300
|
including while filtering. Column names appear in database order and are loaded
|
|
1242
1301
|
in the background on first expansion, then cached. Columns are informational
|
|
@@ -1253,8 +1312,12 @@ object branches, retaining the filter and group expansion state.
|
|
|
1253
1312
|
| `Esc` | Clear a nonempty filter, or return to the editor when the filter is empty |
|
|
1254
1313
|
| `Up` / `Down` | Move through browser entries |
|
|
1255
1314
|
| `PageUp` / `PageDown` | Move through browser entries by page |
|
|
1256
|
-
| `
|
|
1257
|
-
| `
|
|
1315
|
+
| `Tab` | Focus the SQL buffer, keeping the browser open |
|
|
1316
|
+
| `F9` | Close the browser and focus the SQL buffer |
|
|
1317
|
+
| `Shift-F9` | Toggle normal/half-screen width and focus the browser |
|
|
1318
|
+
| `Shift-Alt-F9` | Toggle full-screen/previous width and focus the browser |
|
|
1319
|
+
| `Enter` | Expand a group, choose an object action, or insert a routine call |
|
|
1320
|
+
| `Space` | Expand/collapse table/view columns, package routines or standalone signatures; on groups, expand/collapse with an empty filter or add a space to an active filter |
|
|
1258
1321
|
| `Ctrl-F` | Edit the object-name filter, including spaces |
|
|
1259
1322
|
| `Ctrl-R` | Refresh database objects/statuses and clear column/routine subtrees and caches |
|
|
1260
1323
|
|
|
@@ -1268,7 +1331,7 @@ object branches, retaining the filter and group expansion state.
|
|
|
1268
1331
|
| `PageUp` / `PageDown` | Scroll cell text by page |
|
|
1269
1332
|
| `Home` / `End` | Move to the first/last cell-viewer line |
|
|
1270
1333
|
| `Ctrl-S` (editor) | Save the multiline edit |
|
|
1271
|
-
| `Ctrl-P` / `Ctrl-Shift-P` / `Alt-Shift-P` / configured V keys / terminal paste (editor) | Paste exact clipboard text as one undoable edit |
|
|
1334
|
+
| `Ctrl-Alt-P` / `Ctrl-Shift-P` / `Alt-Shift-P` / configured V keys / terminal paste (editor) | Paste exact clipboard text as one undoable edit |
|
|
1272
1335
|
| `Enter` (editor) | Insert a newline |
|
|
1273
1336
|
| `F10` / `Esc` / `Ctrl-Q` (editor) | Cancel the multiline edit |
|
|
1274
1337
|
|
|
@@ -583,7 +583,7 @@ Use left Alt for application shortcuts; AltGr remains available for characters
|
|
|
583
583
|
on international keyboards. Shortcut digits and symbols refer to the character
|
|
584
584
|
on the active Windows layout: for example, Czech top-row digits need Shift,
|
|
585
585
|
so Alt-1 is typed with Alt-Shift-1. Use the layout's `+` or `=` character for
|
|
586
|
-
autocomplete refresh. Ctrl-C/Ctrl-P copy/paste internally, Ctrl-Shift-C/Ctrl-Shift-P
|
|
586
|
+
autocomplete refresh. Ctrl-C/Ctrl-Alt-P copy/paste internally, Ctrl-Shift-C/Ctrl-Shift-P
|
|
587
587
|
use the Windows system clipboard, and Alt-Shift-C/Alt-Shift-P use the Linux
|
|
588
588
|
clipboard. Ctrl-V and Ctrl-Shift-V retain their configured paste sources;
|
|
589
589
|
Ctrl-Shift-V defaults to internal paste. SSH does not expose the Windows clipboard to the host. Use
|
|
@@ -662,12 +662,14 @@ two external methods may access shared contents.
|
|
|
662
662
|
| --- | --- | --- |
|
|
663
663
|
| System (Windows) | `Ctrl-Shift-C` | `Ctrl-Shift-P` |
|
|
664
664
|
| WSL/Linux | `Alt-Shift-C` | `Alt-Shift-P` |
|
|
665
|
-
| Internal | `Ctrl-C` | `Ctrl-P` |
|
|
665
|
+
| Internal | `Ctrl-C` | `Ctrl-Alt-P` |
|
|
666
666
|
|
|
667
667
|
Each fixed shortcut uses only its assigned target. Copying externally leaves
|
|
668
668
|
the internal clipboard unchanged. `Ctrl-C` interrupts a running database
|
|
669
669
|
operation first; otherwise it copies internally. `Ctrl-Alt-C` still commits or
|
|
670
|
-
applies the active insert draft, and `Ctrl-Alt-R` rolls back.
|
|
670
|
+
applies the active insert draft, and `Ctrl-Alt-R` rolls back. `Ctrl-P` finds the
|
|
671
|
+
previous occurrence of the last search string, retaining case sensitivity and
|
|
672
|
+
wrapping at the start of the worksheet.
|
|
671
673
|
The copy shortcuts work for editor selections, result cells/ranges,
|
|
672
674
|
DBMS_OUTPUT selections and schema-browser object names. Paste works in the
|
|
673
675
|
worksheet, paste-enabled prompts and editable cell text dialogs.
|
|
@@ -705,7 +707,8 @@ entries to `actions`, keeping the other actions:
|
|
|
705
707
|
|
|
706
708
|
```json
|
|
707
709
|
{ "command": { "action": "sendInput", "input": "\u0003" }, "id": "User.PlsqlwksInternalCopy" },
|
|
708
|
-
{ "command": { "action": "sendInput", "input": "\
|
|
710
|
+
{ "command": { "action": "sendInput", "input": "\u001b[112;7u" }, "id": "User.PlsqlwksInternalPaste" },
|
|
711
|
+
{ "command": { "action": "sendInput", "input": "\u0010" }, "id": "User.PlsqlwksPreviousMatch" },
|
|
709
712
|
{ "command": { "action": "sendInput", "input": "\u001b[99;6u" }, "id": "User.PlsqlwksSystemCopy" },
|
|
710
713
|
{ "command": { "action": "sendInput", "input": "\u001b[112;6u" }, "id": "User.PlsqlwksSystemPaste" },
|
|
711
714
|
{ "command": { "action": "sendInput", "input": "\u001b[99;4u" }, "id": "User.PlsqlwksWslCopy" },
|
|
@@ -719,7 +722,8 @@ the entries below, keeping the other keybindings:
|
|
|
719
722
|
|
|
720
723
|
```json
|
|
721
724
|
{ "id": "User.PlsqlwksInternalCopy", "keys": "ctrl+c" },
|
|
722
|
-
{ "id": "User.PlsqlwksInternalPaste", "keys": "ctrl+p" },
|
|
725
|
+
{ "id": "User.PlsqlwksInternalPaste", "keys": "ctrl+alt+p" },
|
|
726
|
+
{ "id": "User.PlsqlwksPreviousMatch", "keys": "ctrl+p" },
|
|
723
727
|
{ "id": "User.PlsqlwksSystemCopy", "keys": "ctrl+shift+c" },
|
|
724
728
|
{ "id": "User.PlsqlwksSystemPaste", "keys": "ctrl+shift+p" },
|
|
725
729
|
{ "id": "User.PlsqlwksWslCopy", "keys": "alt+shift+c" },
|
|
@@ -757,11 +761,14 @@ See Microsoft's [send input action](https://learn.microsoft.com/en-us/windows/te
|
|
|
757
761
|
| Key | Action |
|
|
758
762
|
| --- | --- |
|
|
759
763
|
| `Alt-O` | Open the top-left commands menu |
|
|
764
|
+
| `Alt-I` | Show connection information for the active tab |
|
|
760
765
|
| `F1` | Help |
|
|
761
766
|
| `F6` | Switch between DBMS_OUTPUT and normal results |
|
|
762
767
|
| `F7` | Cycle fullscreen grid, fullscreen editor, and 2/3 editor + 1/3 grid |
|
|
763
768
|
| `F8` | Toggle result grid / row-detail output |
|
|
764
769
|
| `F9` | Show/focus/hide schema browser |
|
|
770
|
+
| `Shift-F9` | Toggle Schema Browser between normal and half-screen width |
|
|
771
|
+
| `Shift-Alt-F9` | Toggle Schema Browser between full-screen and its previous width |
|
|
765
772
|
| `F12` | Choose autocommit or manual transaction mode |
|
|
766
773
|
| `Ctrl-Up` / `Ctrl-Down` | Scroll the focused pane or visible DBMS_OUTPUT by one line |
|
|
767
774
|
| `Ctrl-W` | Close current file tab |
|
|
@@ -772,6 +779,25 @@ See Microsoft's [send input action](https://learn.microsoft.com/en-us/windows/te
|
|
|
772
779
|
| `Ctrl-Alt-C` | Insert the active result-grid draft, or commit when no draft is active |
|
|
773
780
|
| `Ctrl-Alt-R` | Roll back the current transaction |
|
|
774
781
|
|
|
782
|
+
### Connection information
|
|
783
|
+
|
|
784
|
+
Press `Alt-I`, or choose **Alt-O → Database → Connection information**, from the
|
|
785
|
+
editor, results or schema browser. A centered dialog shows the connected user,
|
|
786
|
+
current schema, service, database and unique database name, container, instance,
|
|
787
|
+
server host, session SID, server timestamp with fractional seconds and timezone,
|
|
788
|
+
database/session time zones, Oracle version, driver version and Thin/Thick mode,
|
|
789
|
+
autocommit and read-only mode. The information is refreshed from the active tab's
|
|
790
|
+
existing session without changing worksheet results, transactions or unread
|
|
791
|
+
DBMS_OUTPUT. A busy active session uses the existing operation-running feedback;
|
|
792
|
+
a disconnected session shows `Not connected` without reconnecting.
|
|
793
|
+
|
|
794
|
+
The dialog keeps **[ OK ]** visible. Press Enter or Space to accept, or Esc/Ctrl-Q
|
|
795
|
+
to close. Use Up/Down, PageUp/PageDown or Home/End to scroll long details; resize
|
|
796
|
+
the terminal to change the layout. Requests cancelled or completed after switching
|
|
797
|
+
away from their tab do not open a late dialog. The Windows keyboard helper forwards
|
|
798
|
+
Alt-I; a Windows Terminal profile that consumes it can forward `\u001bi` with a
|
|
799
|
+
`sendInput` action bound to `alt+i`.
|
|
800
|
+
|
|
775
801
|
### Editor
|
|
776
802
|
|
|
777
803
|
| Key | Action |
|
|
@@ -809,10 +835,10 @@ See Microsoft's [send input action](https://learn.microsoft.com/en-us/windows/te
|
|
|
809
835
|
| `Alt-O` -> **Editor** -> **Replace text** | Open Find/Replace at the replacement field |
|
|
810
836
|
| `Ctrl-G` | Go to line |
|
|
811
837
|
| `Ctrl-N` | Move to the next search occurrence |
|
|
812
|
-
| `Alt-O → Editor → Previous search match` | Move to the previous search occurrence |
|
|
838
|
+
| `Ctrl-P` / `Alt-O → Editor → Previous search match` | Move to the previous search occurrence |
|
|
813
839
|
| `Ctrl-U` | Uppercase selected SQL code |
|
|
814
840
|
| `Ctrl-L` | Lowercase selected SQL code |
|
|
815
|
-
| `Ctrl-C` / `Ctrl-P` | Copy/paste internally |
|
|
841
|
+
| `Ctrl-C` / `Ctrl-Alt-P` | Copy/paste internally |
|
|
816
842
|
| `Ctrl-Shift-C` / `Ctrl-Shift-P` | Copy/paste the System (Windows) clipboard |
|
|
817
843
|
| `Alt-Shift-C` / `Alt-Shift-P` | Copy/paste the WSL/Linux clipboard |
|
|
818
844
|
| `Ctrl-X` | Cut selected text |
|
|
@@ -853,9 +879,9 @@ The dialog provides `Find next`, `Replace`, `Replace all`, and `Cancel` actions.
|
|
|
853
879
|
and lowercase letters. `Replace` changes the selected matching occurrence, or
|
|
854
880
|
the next match from the cursor, and then selects the following match. `Replace
|
|
855
881
|
all` changes every match in the current buffer. Either replacement operation is
|
|
856
|
-
recorded as one undoable edit. `Ctrl-N` repeats the last search forward
|
|
857
|
-
|
|
858
|
-
|
|
882
|
+
recorded as one undoable edit. `Ctrl-N` repeats the last search forward and
|
|
883
|
+
`Ctrl-P` repeats it backward. Both retain the case setting and wrap around.
|
|
884
|
+
**Alt-O → Editor → Previous search match** provides the same backward search.
|
|
859
885
|
|
|
860
886
|
Editor paste expands every tab character to two spaces and keeps multiline
|
|
861
887
|
text in one undoable edit. This applies to all fixed and configured paste shortcuts and
|
|
@@ -1176,7 +1202,28 @@ validate this opt-in mode with the applications in use.
|
|
|
1176
1202
|
|
|
1177
1203
|
### Schema Browser
|
|
1178
1204
|
|
|
1179
|
-
|
|
1205
|
+
Press `F9` to open or focus Schema Browser. While it is focused, `F9` closes it
|
|
1206
|
+
and returns to the SQL buffer. Press `Tab` to keep the browser open and focus
|
|
1207
|
+
the SQL buffer, so you can edit SQL beside the tree; press `F9` to return to it.
|
|
1208
|
+
Filters, selected objects, expanded branches and cached metadata are retained.
|
|
1209
|
+
|
|
1210
|
+
`Shift-F9` opens/focuses the browser and toggles its normal width with a left
|
|
1211
|
+
half-screen pane; the SQL buffer and results stay on the right. `Shift-Alt-F9`
|
|
1212
|
+
opens/focuses a full-screen browser with its filter header and status line, and
|
|
1213
|
+
pressing it again restores the previous normal or half-screen width. From a
|
|
1214
|
+
full-screen browser, Tab, returning to the editor with Esc, or loading/inserting
|
|
1215
|
+
SQL also restores that previous width. Shift-F9 switches a full-screen browser
|
|
1216
|
+
to half-screen. Closing it with F9 retains the side-by-side width for reopening.
|
|
1217
|
+
Browser sizes last for the current application session.
|
|
1218
|
+
|
|
1219
|
+
Opening/focusing the browser exits an incompatible F7 editor/grid fullscreen
|
|
1220
|
+
view, restoring the saved SQL/results split or the two-thirds-editor layout.
|
|
1221
|
+
F7 retains its existing editor/grid layout cycle. A terminal that consumes the
|
|
1222
|
+
new shortcuts can forward `\u001b[20;2~` for Shift-F9 and `\u001b[20;4~` for
|
|
1223
|
+
Shift-Alt-F9 with Windows Terminal `sendInput` actions. The Windows keyboard
|
|
1224
|
+
helper forwards both shortcuts while preserving AltGr combinations.
|
|
1225
|
+
|
|
1226
|
+
The `F9` schema browser groups tables, views, procedures, functions, package specifications, package bodies, types, type bodies, triggers, sequences, indexes, and private synonyms from the current schema. Type while the browser is focused to filter object names with a case-insensitive substring match; groups without matches are hidden and matching groups expand automatically without changing their saved expansion state. Exact quoted and mixed-case names are preserved when columns, routines or definitions are loaded, with Oracle-safe quoting applied to metadata requests.
|
|
1180
1227
|
|
|
1181
1228
|
Press `Enter` on a table or view to choose `Insert SELECT` (the default), `Load DDL`, or `Copy object name`. `Insert SELECT` adds a `select *` statement for the SQL-safe, unqualified object name to the current buffer and focuses the editor; it does not execute the query. `Copy object name` places that SQL-ready, unqualified identifier on the clipboard. For standalone procedures, functions and other object types, `Enter` offers `Load DDL` (the default) and `Copy object name`.
|
|
1182
1229
|
|
|
@@ -1201,6 +1248,18 @@ Edit the input values before running it. Insertion does not execute or compile
|
|
|
1201
1248
|
the call. Unsupported or incomplete signatures report a reason and leave the
|
|
1202
1249
|
buffer unchanged.
|
|
1203
1250
|
|
|
1251
|
+
Press `Space` on a standalone procedure or function to expand its callable
|
|
1252
|
+
signature with parameter directions, types and the function return type. Press
|
|
1253
|
+
`Enter` on the signature to insert the same owner-qualified call template as for
|
|
1254
|
+
package routines. The parent object's Enter menu still offers Load DDL and Copy
|
|
1255
|
+
object name. Signatures load asynchronously and are cached until refresh.
|
|
1256
|
+
|
|
1257
|
+
The **Types** group includes object and collection types; **Type bodies** lists
|
|
1258
|
+
their implementations separately. Enter offers Load DDL or Copy object name.
|
|
1259
|
+
Loading a type fetches its specification only; loading a type body fetches its
|
|
1260
|
+
body only, with owner-qualified DDL and a single slash terminator. Type attributes
|
|
1261
|
+
and methods do not expand into child rows.
|
|
1262
|
+
|
|
1204
1263
|
Press `Space` on a table or view to expand or collapse its column subtree,
|
|
1205
1264
|
including while filtering. Column names appear in database order and are loaded
|
|
1206
1265
|
in the background on first expansion, then cached. Columns are informational
|
|
@@ -1217,8 +1276,12 @@ object branches, retaining the filter and group expansion state.
|
|
|
1217
1276
|
| `Esc` | Clear a nonempty filter, or return to the editor when the filter is empty |
|
|
1218
1277
|
| `Up` / `Down` | Move through browser entries |
|
|
1219
1278
|
| `PageUp` / `PageDown` | Move through browser entries by page |
|
|
1220
|
-
| `
|
|
1221
|
-
| `
|
|
1279
|
+
| `Tab` | Focus the SQL buffer, keeping the browser open |
|
|
1280
|
+
| `F9` | Close the browser and focus the SQL buffer |
|
|
1281
|
+
| `Shift-F9` | Toggle normal/half-screen width and focus the browser |
|
|
1282
|
+
| `Shift-Alt-F9` | Toggle full-screen/previous width and focus the browser |
|
|
1283
|
+
| `Enter` | Expand a group, choose an object action, or insert a routine call |
|
|
1284
|
+
| `Space` | Expand/collapse table/view columns, package routines or standalone signatures; on groups, expand/collapse with an empty filter or add a space to an active filter |
|
|
1222
1285
|
| `Ctrl-F` | Edit the object-name filter, including spaces |
|
|
1223
1286
|
| `Ctrl-R` | Refresh database objects/statuses and clear column/routine subtrees and caches |
|
|
1224
1287
|
|
|
@@ -1232,7 +1295,7 @@ object branches, retaining the filter and group expansion state.
|
|
|
1232
1295
|
| `PageUp` / `PageDown` | Scroll cell text by page |
|
|
1233
1296
|
| `Home` / `End` | Move to the first/last cell-viewer line |
|
|
1234
1297
|
| `Ctrl-S` (editor) | Save the multiline edit |
|
|
1235
|
-
| `Ctrl-P` / `Ctrl-Shift-P` / `Alt-Shift-P` / configured V keys / terminal paste (editor) | Paste exact clipboard text as one undoable edit |
|
|
1298
|
+
| `Ctrl-Alt-P` / `Ctrl-Shift-P` / `Alt-Shift-P` / configured V keys / terminal paste (editor) | Paste exact clipboard text as one undoable edit |
|
|
1236
1299
|
| `Enter` (editor) | Insert a newline |
|
|
1237
1300
|
| `F10` / `Esc` / `Ctrl-Q` (editor) | Cancel the multiline edit |
|
|
1238
1301
|
|
|
@@ -65,7 +65,7 @@ plsqlwks plugin install plugins/packages/schema-compare-0.1.0.plwgn
|
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
The `xlsx` extra is optional when only CSV/HTML are needed. From a local source
|
|
68
|
-
archive, use `python3 -m pip install './plsqlwks-0.2.
|
|
68
|
+
archive, use `python3 -m pip install './plsqlwks-0.2.5.tar.gz[xlsx]'` in the
|
|
69
69
|
application environment; use `--force-reinstall` when replacing a build with
|
|
70
70
|
the same version. Installing the extra does not install the managed plugin.
|
|
71
71
|
No other exporter plugins need to be installed.
|
|
@@ -16,6 +16,8 @@ SCHEMA_OBJECT_TYPES = (
|
|
|
16
16
|
"FUNCTION",
|
|
17
17
|
"PACKAGE",
|
|
18
18
|
"PACKAGE BODY",
|
|
19
|
+
"TYPE",
|
|
20
|
+
"TYPE BODY",
|
|
19
21
|
"TRIGGER",
|
|
20
22
|
"SEQUENCE",
|
|
21
23
|
"INDEX",
|
|
@@ -66,7 +68,7 @@ class PackageArgument:
|
|
|
66
68
|
@dataclass(frozen=True)
|
|
67
69
|
class PackageRoutine:
|
|
68
70
|
owner: str
|
|
69
|
-
package_name: str
|
|
71
|
+
package_name: str | None
|
|
70
72
|
name: str
|
|
71
73
|
subprogram_id: int
|
|
72
74
|
overload: str | None
|
|
@@ -86,6 +88,8 @@ class MetadataPort(Protocol):
|
|
|
86
88
|
|
|
87
89
|
def list_package_routines(self, package_name: str) -> tuple[PackageRoutine, ...]: ...
|
|
88
90
|
|
|
91
|
+
def list_standalone_routines(self, object_type: str, object_name: str) -> tuple[PackageRoutine, ...]: ...
|
|
92
|
+
|
|
89
93
|
def get_table_generation_metadata(self, object_name: str) -> TableGenerationMetadata | None: ...
|
|
90
94
|
|
|
91
95
|
def get_column_max(self, object_name: str, column_name: str) -> object | None: ...
|
|
@@ -108,7 +112,7 @@ class MetadataService:
|
|
|
108
112
|
from user_objects
|
|
109
113
|
where object_type in (
|
|
110
114
|
'TABLE', 'VIEW', 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY',
|
|
111
|
-
'TRIGGER', 'SEQUENCE', 'INDEX', 'SYNONYM'
|
|
115
|
+
'TYPE', 'TYPE BODY', 'TRIGGER', 'SEQUENCE', 'INDEX', 'SYNONYM'
|
|
112
116
|
)
|
|
113
117
|
order by
|
|
114
118
|
case object_type
|
|
@@ -118,10 +122,12 @@ class MetadataService:
|
|
|
118
122
|
when 'FUNCTION' then 4
|
|
119
123
|
when 'PACKAGE' then 5
|
|
120
124
|
when 'PACKAGE BODY' then 6
|
|
121
|
-
when '
|
|
122
|
-
when '
|
|
123
|
-
when '
|
|
124
|
-
when '
|
|
125
|
+
when 'TYPE' then 7
|
|
126
|
+
when 'TYPE BODY' then 8
|
|
127
|
+
when 'TRIGGER' then 9
|
|
128
|
+
when 'SEQUENCE' then 10
|
|
129
|
+
when 'INDEX' then 11
|
|
130
|
+
when 'SYNONYM' then 12
|
|
125
131
|
else 99
|
|
126
132
|
end,
|
|
127
133
|
object_name
|
|
@@ -150,7 +156,10 @@ class MetadataService:
|
|
|
150
156
|
return terminate_plsql_ddl(spec)
|
|
151
157
|
ddl_type = metadata_object_type(normalized_type)
|
|
152
158
|
ddl = fetch_ddl(cursor, ddl_type, normalized_name)
|
|
153
|
-
if normalized_type in {
|
|
159
|
+
if normalized_type in {
|
|
160
|
+
"PROCEDURE", "FUNCTION", "TRIGGER", "PACKAGE_SPEC", "PACKAGE_BODY", "PACKAGE BODY",
|
|
161
|
+
"TYPE", "TYPE_SPEC", "TYPE_BODY", "TYPE BODY",
|
|
162
|
+
}:
|
|
154
163
|
return terminate_plsql_ddl(ddl)
|
|
155
164
|
return ensure_sql_terminator(ddl)
|
|
156
165
|
finally:
|
|
@@ -171,23 +180,50 @@ class MetadataService:
|
|
|
171
180
|
name = normalize_identifier(package_name)
|
|
172
181
|
if name is None:
|
|
173
182
|
raise ValueError("Invalid Oracle package identifier")
|
|
183
|
+
return self._list_routines('PACKAGE', name)
|
|
184
|
+
|
|
185
|
+
def list_standalone_routines(self, object_type: str, object_name: str) -> tuple[PackageRoutine, ...]:
|
|
186
|
+
if object_type not in {'PROCEDURE', 'FUNCTION'}:
|
|
187
|
+
raise ValueError("Unsupported standalone routine type")
|
|
188
|
+
name = normalize_identifier(object_name)
|
|
189
|
+
if name is None:
|
|
190
|
+
raise ValueError("Invalid Oracle routine identifier")
|
|
191
|
+
return self._list_routines(object_type, name)
|
|
192
|
+
|
|
193
|
+
def _list_routines(self, object_type: str, name: str) -> tuple[PackageRoutine, ...]:
|
|
174
194
|
cursor = self._ensure_connected().cursor()
|
|
175
195
|
try:
|
|
176
|
-
|
|
196
|
+
if object_type == 'PACKAGE':
|
|
197
|
+
cursor.execute("""
|
|
177
198
|
select user, procedure_name, subprogram_id, overload, pipelined, aggregate
|
|
178
199
|
from user_procedures
|
|
179
200
|
where object_name = :package_name and object_type = 'PACKAGE'
|
|
180
201
|
and procedure_name is not null
|
|
181
202
|
order by procedure_name, subprogram_id
|
|
182
|
-
|
|
203
|
+
""", package_name=name)
|
|
204
|
+
else:
|
|
205
|
+
cursor.execute("""
|
|
206
|
+
select user, object_name, subprogram_id, overload, pipelined, aggregate
|
|
207
|
+
from user_procedures
|
|
208
|
+
where object_name = :object_name and object_type = :object_type
|
|
209
|
+
and procedure_name is null
|
|
210
|
+
order by subprogram_id
|
|
211
|
+
""", object_name=name, object_type=object_type)
|
|
183
212
|
procedures = list(cursor)
|
|
184
|
-
|
|
213
|
+
argument_filter = 'package_name = :package_name' if object_type == 'PACKAGE' else (
|
|
214
|
+
'package_name is null and object_name = :object_name'
|
|
215
|
+
)
|
|
216
|
+
argument_query = f"""
|
|
185
217
|
select subprogram_id, overload, argument_name, position, in_out, data_type,
|
|
186
218
|
type_owner, type_name, type_subname, type_object_type, pls_type, char_length, defaulted
|
|
187
219
|
from user_arguments
|
|
188
|
-
where
|
|
220
|
+
where {argument_filter} and data_level = 0
|
|
189
221
|
order by subprogram_id, sequence
|
|
190
|
-
"""
|
|
222
|
+
"""
|
|
223
|
+
if object_type == 'PACKAGE':
|
|
224
|
+
cursor.execute(argument_query, package_name=name)
|
|
225
|
+
else:
|
|
226
|
+
cursor.execute(argument_query, object_name=name)
|
|
191
227
|
arguments: dict[tuple[int, str | None], list[tuple[int, PackageArgument]]] = {}
|
|
192
228
|
for row in cursor:
|
|
193
229
|
(subprogram_id, overload, argument_name, position, mode, data_type,
|
|
@@ -202,11 +238,14 @@ class MetadataService:
|
|
|
202
238
|
for owner, routine_name, subprogram_id, overload, pipelined, aggregate in procedures:
|
|
203
239
|
signature = arguments.get((int(subprogram_id), overload), [])
|
|
204
240
|
return_argument = next((arg for position, arg in signature if position == 0), None)
|
|
241
|
+
if object_type == 'FUNCTION' and return_argument is None:
|
|
242
|
+
return_argument = PackageArgument(None, 'OUT', 'UNKNOWN', None)
|
|
205
243
|
parameters = tuple(arg for position, arg in signature if position > 0)
|
|
206
244
|
reason = "This SQL-only function cannot be called by an ordinary PL/SQL block" if (
|
|
207
245
|
pipelined == 'YES' or aggregate == 'YES'
|
|
208
246
|
) else None
|
|
209
|
-
routines.append(PackageRoutine(str(owner), name
|
|
247
|
+
routines.append(PackageRoutine(str(owner), name if object_type == 'PACKAGE' else None,
|
|
248
|
+
str(routine_name), int(subprogram_id), overload,
|
|
210
249
|
parameters, return_argument, reason))
|
|
211
250
|
return tuple(routines)
|
|
212
251
|
finally:
|
|
@@ -375,6 +414,9 @@ class MetadataMixin:
|
|
|
375
414
|
def list_package_routines(self, package_name: str) -> tuple[PackageRoutine, ...]:
|
|
376
415
|
return self._metadata_service().list_package_routines(package_name)
|
|
377
416
|
|
|
417
|
+
def list_standalone_routines(self, object_type: str, object_name: str) -> tuple[PackageRoutine, ...]:
|
|
418
|
+
return self._metadata_service().list_standalone_routines(object_type, object_name)
|
|
419
|
+
|
|
378
420
|
def get_table_generation_metadata(self, object_name: str) -> TableGenerationMetadata | None:
|
|
379
421
|
return self._metadata_service().get_table_generation_metadata(object_name)
|
|
380
422
|
|
|
@@ -401,6 +443,10 @@ def configure_metadata_transform(cursor: oracledb.Cursor) -> None:
|
|
|
401
443
|
|
|
402
444
|
|
|
403
445
|
def metadata_object_type(object_type: str) -> str:
|
|
446
|
+
if object_type in {'TYPE', 'TYPE_SPEC'}:
|
|
447
|
+
return 'TYPE_SPEC'
|
|
448
|
+
if object_type in {'TYPE BODY', 'TYPE_BODY'}:
|
|
449
|
+
return 'TYPE_BODY'
|
|
404
450
|
if object_type in {"PACKAGE_SPEC", "PACKAGE_BODY", "PACKAGE BODY"}:
|
|
405
451
|
return object_type.replace(' ', '_')
|
|
406
452
|
if object_type not in SCHEMA_OBJECT_TYPES:
|
|
@@ -173,6 +173,49 @@ class OracleWorkspace(
|
|
|
173
173
|
def list_package_routines(self, package_name: str) -> tuple[PackageRoutine, ...]:
|
|
174
174
|
return self._metadata.list_package_routines(package_name)
|
|
175
175
|
|
|
176
|
+
def list_standalone_routines(self, object_type: str, object_name: str) -> tuple[PackageRoutine, ...]:
|
|
177
|
+
return self._metadata.list_standalone_routines(object_type, object_name)
|
|
178
|
+
|
|
179
|
+
def get_connection_info(self) -> tuple[tuple[str, str], ...]:
|
|
180
|
+
"""Inspect the current connection without connecting or changing session state."""
|
|
181
|
+
conn = self.connection
|
|
182
|
+
if conn is None or not self.connection_is_healthy():
|
|
183
|
+
raise RuntimeError("Not connected; reconnect before requesting connection information")
|
|
184
|
+
cursor = conn.cursor()
|
|
185
|
+
try:
|
|
186
|
+
cursor.execute("""
|
|
187
|
+
select user,
|
|
188
|
+
sys_context('USERENV', 'CURRENT_SCHEMA'),
|
|
189
|
+
sys_context('USERENV', 'SERVICE_NAME'),
|
|
190
|
+
sys_context('USERENV', 'DB_NAME'),
|
|
191
|
+
sys_context('USERENV', 'DB_UNIQUE_NAME'),
|
|
192
|
+
sys_context('USERENV', 'CON_NAME'),
|
|
193
|
+
sys_context('USERENV', 'INSTANCE_NAME'),
|
|
194
|
+
sys_context('USERENV', 'SERVER_HOST'),
|
|
195
|
+
sys_context('USERENV', 'SID'),
|
|
196
|
+
to_char(systimestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF9 TZH:TZM'),
|
|
197
|
+
dbtimezone, sessiontimezone
|
|
198
|
+
from dual
|
|
199
|
+
""")
|
|
200
|
+
row = cursor.fetchone()
|
|
201
|
+
if row is None:
|
|
202
|
+
raise RuntimeError("Connection information query returned no row")
|
|
203
|
+
labels = (
|
|
204
|
+
'Connected user', 'Current schema', 'Service', 'Database', 'Unique database name',
|
|
205
|
+
'Container', 'Instance', 'Server host', 'Session SID', 'Server time',
|
|
206
|
+
'Database time zone', 'Session time zone',
|
|
207
|
+
)
|
|
208
|
+
fields = tuple((label, str(value) if value is not None else 'Not available')
|
|
209
|
+
for label, value in zip(labels, row, strict=True))
|
|
210
|
+
return fields + (
|
|
211
|
+
('Oracle version', conn.version), ('Driver version', oracledb.__version__),
|
|
212
|
+
('Driver mode', 'Thin' if conn.thin else 'Thick'),
|
|
213
|
+
('Autocommit', 'On' if self.autocommit else 'Off'),
|
|
214
|
+
('Read-only mode', 'On' if self.read_only else 'Off'),
|
|
215
|
+
)
|
|
216
|
+
finally:
|
|
217
|
+
cursor.close()
|
|
218
|
+
|
|
176
219
|
def get_table_generation_metadata(self, object_name: str) -> TableGenerationMetadata | None:
|
|
177
220
|
return self._metadata.get_table_generation_metadata(object_name)
|
|
178
221
|
|
|
@@ -42,6 +42,7 @@ from .syntax import * # type: ignore[assignment] # reason: compatibility facad
|
|
|
42
42
|
|
|
43
43
|
__all__ = (
|
|
44
44
|
"ALT_G_SEQUENCES",
|
|
45
|
+
"ALT_I_SEQUENCES",
|
|
45
46
|
"ALT_O_SEQUENCES",
|
|
46
47
|
"ALT_PLUS_SEQUENCES",
|
|
47
48
|
"ALT_R_SEQUENCES",
|
|
@@ -174,13 +175,16 @@ __all__ = (
|
|
|
174
175
|
"INSERT_SEQUENCES",
|
|
175
176
|
"KEY_ALT_DIGIT_BASE",
|
|
176
177
|
"KEY_ALT_G",
|
|
178
|
+
"KEY_ALT_I",
|
|
177
179
|
"KEY_ALT_O",
|
|
178
180
|
"KEY_ALT_PLUS",
|
|
179
181
|
"KEY_ALT_R",
|
|
180
182
|
"KEY_ALT_SHIFT_C",
|
|
183
|
+
"KEY_ALT_SHIFT_F9",
|
|
181
184
|
"KEY_ALT_SHIFT_P",
|
|
182
185
|
"KEY_ALT_X",
|
|
183
186
|
"KEY_CTRL_ALT_C",
|
|
187
|
+
"KEY_CTRL_ALT_P",
|
|
184
188
|
"KEY_CTRL_ALT_R",
|
|
185
189
|
"KEY_CTRL_BACKSPACE",
|
|
186
190
|
"KEY_CTRL_DELETE",
|
|
@@ -203,6 +207,7 @@ __all__ = (
|
|
|
203
207
|
"KEY_CTRL_UP",
|
|
204
208
|
"KEY_SHIFT_DOWN",
|
|
205
209
|
"KEY_SHIFT_END",
|
|
210
|
+
"KEY_SHIFT_F9",
|
|
206
211
|
"KEY_SHIFT_HOME",
|
|
207
212
|
"KEY_SHIFT_LEFT",
|
|
208
213
|
"KEY_SHIFT_PAGEDOWN",
|