plsqlwks 0.1.9.3__tar.gz → 0.2.0__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.1.9.3 → plsqlwks-0.2.0}/PKG-INFO +178 -1
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/README.md +177 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/doc/API.md +67 -3
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/doc/COMPATIBILITY.md +46 -17
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/doc/PLUGINS.md +18 -0
- plsqlwks-0.2.0/doc/PLUGIN_CATALOG.md +193 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/__init__.py +1 -1
- plsqlwks-0.2.0/plsqlwks/db/dependencies.py +151 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/execution.py +33 -3
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/models.py +3 -0
- plsqlwks-0.2.0/plsqlwks/db/timestamps.py +131 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/plugins/api.py +13 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/app.py +49 -2
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/buffer.py +6 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/commands.py +1 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/constants.py +79 -8
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/db_operations.py +4 -3
- plsqlwks-0.2.0/plsqlwks/ui/dependency_walker.py +290 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/display.py +34 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/errors.py +1 -1
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/key_reader.py +51 -7
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/keys.py +59 -61
- plsqlwks-0.2.0/plsqlwks/ui/output_selection.py +163 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/plugin_host.py +18 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/renderer.py +50 -22
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/result_controller.py +42 -0
- plsqlwks-0.2.0/plsqlwks/ui/sqlplus.py +182 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/state.py +2 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/viewport.py +28 -4
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks.egg-info/SOURCES.txt +16 -1
- plsqlwks-0.2.0/plugins/dependencies-walker/install.plw +7 -0
- plsqlwks-0.2.0/plugins/dependencies-walker/payload/plugin.py +22 -0
- plsqlwks-0.2.0/plugins/packages/dependencies-walker-0.1.0.plwgn +0 -0
- plsqlwks-0.2.0/plugins/packages/sqlplus-0.1.0.plwgn +0 -0
- plsqlwks-0.2.0/plugins/sqlplus/install.plw +7 -0
- plsqlwks-0.2.0/plugins/sqlplus/payload/__init__.py +0 -0
- plsqlwks-0.2.0/plugins/sqlplus/payload/plugin.py +22 -0
- plsqlwks-0.2.0/plugins/xlsx-export/payload/__init__.py +0 -0
- plsqlwks-0.2.0/tools/putty_keys.ps1 +286 -0
- plsqlwks-0.2.0/tools/windows_keys.cmd +4 -0
- plsqlwks-0.1.9.3/doc/PLUGIN_CATALOG.md +0 -100
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/doc/ARCHITECTURE.md +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/doc/QUICKSTART.html +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/doc/QUICKSTART.md +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/license.txt +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/__main__.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/cli.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/config/__init__.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/config/loader.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/config/models.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/config/paths.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/config/session.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/config/settings.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/__init__.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/editing.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/explain.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/health.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/identifiers.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/metadata.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/session.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/sql_analysis.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/db/transactions.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/exporting.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/plugins/__init__.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/plugins/loader.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/plugins/management.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/sqlbinds.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/sqlsplit.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/__init__.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/application_controller.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/browser.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/catalog.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/clipboard.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/code_generation.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/command_dispatcher.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/completion.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/db_session.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/db_worker.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/dialogs.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/documents.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/editor_controller.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/help.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/input_controller.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/menu.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/ports.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/query_controller.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/result_export.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/result_presenter.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/results.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/sql.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/ui/syntax.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plsqlwks/workspace.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/csv-export/install.plw +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/csv-export/payload/__init__.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/csv-export/payload/plugin.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/csv-export/payload/support.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/csv-export/payload/writer.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/csv2oratab/install.plw +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/csv2oratab/payload/__init__.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/csv2oratab/payload/csv2oratab.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/csv2oratab/payload/plugin.py +0 -0
- {plsqlwks-0.1.9.3/plugins/html-export → plsqlwks-0.2.0/plugins/dependencies-walker}/payload/__init__.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/html-export/install.plw +0 -0
- {plsqlwks-0.1.9.3/plugins/xlsx-export → plsqlwks-0.2.0/plugins/html-export}/payload/__init__.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/html-export/payload/html_exporting.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/html-export/payload/plugin.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/html-export/payload/support.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/html-export/payload/writer.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/packages/csv-export-1.0.0.plwgn +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/packages/csv2oratab-0.1.0.plwgn +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/packages/html-export-1.0.0.plwgn +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/packages/xlsx-export-1.0.0.plwgn +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/xlsx-export/install.plw +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/xlsx-export/payload/plugin.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/xlsx-export/payload/support.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/plugins/xlsx-export/payload/xlsx_exporting.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/pyproject.toml +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/pytest.ini +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/rchar.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/requirements.txt +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/setup.cfg +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/tests/conftest.py +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/tests/fixtures/config_exports.txt +0 -0
- {plsqlwks-0.1.9.3 → plsqlwks-0.2.0}/tests/fixtures/ui_exports.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plsqlwks
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: An ncurses SQL and PL/SQL workspace for Oracle databases.
|
|
5
5
|
Author: unu2000
|
|
6
6
|
License-Expression: LicenseRef-plsqlwks-Donationware
|
|
@@ -488,6 +488,149 @@ plsqlwks and asks whether to overwrite it, save under another name, or cancel.
|
|
|
488
488
|
Undo and redo update the unsaved-change marker by comparing the current content
|
|
489
489
|
with the last successful save.
|
|
490
490
|
|
|
491
|
+
## Windows PuTTY keyboard setup
|
|
492
|
+
|
|
493
|
+
For Windows PuTTY 0.83 and 0.85, use a saved session with these settings before
|
|
494
|
+
starting plsqlwks on the Linux/Unix host:
|
|
495
|
+
|
|
496
|
+
| PuTTY panel | Setting |
|
|
497
|
+
| --- | --- |
|
|
498
|
+
| Connection → Data | Terminal-type string: `xterm-256color` |
|
|
499
|
+
| Window → Translation | Remote character set: `UTF-8` |
|
|
500
|
+
| Terminal → Keyboard | Backspace: `Control-? (127)`; Home/End: `Standard` |
|
|
501
|
+
| Terminal → Keyboard | Function keys and keypad: `Xterm 216+` |
|
|
502
|
+
| Terminal → Keyboard | Shifted arrow keys: `xterm-style bitmap` |
|
|
503
|
+
| Terminal → Keyboard | Keep **Control-Alt is different from AltGr** enabled |
|
|
504
|
+
| Terminal → Features | Enable **Disable application cursor keys mode** and **Disable application keypad mode** |
|
|
505
|
+
| Terminal → Features | Leave **Disable bracketed paste mode** unchecked |
|
|
506
|
+
| Terminal | Local echo and local line editing: `Force off` |
|
|
507
|
+
|
|
508
|
+
Save the session and use a UTF-8 locale on the host. Disabling application cursor
|
|
509
|
+
keys is necessary because curses enables that mode, and PuTTY otherwise drops
|
|
510
|
+
arrow modifiers even when bitmap mode is selected.
|
|
511
|
+
|
|
512
|
+
### Exact Ctrl shortcuts with the Windows helper
|
|
513
|
+
|
|
514
|
+
Stock Windows PuTTY does not send Ctrl-Home/End, Ctrl-Shift-Home/End, or
|
|
515
|
+
Ctrl-Delete at all, and consumes modified PageUp/PageDown for scrollback.
|
|
516
|
+
Use the optional [Windows helper](tools/putty_keys.ps1) to make the original
|
|
517
|
+
shortcuts work. Run it on the **Windows computer running PuTTY**; from a checkout:
|
|
518
|
+
|
|
519
|
+
```powershell
|
|
520
|
+
powershell.exe -NoProfile -File .\tools\putty_keys.ps1
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
Focus the PuTTY window running plsqlwks, then press **Ctrl-Alt-F12** to enable
|
|
524
|
+
remapping for that window. The helper console confirms activation. It remaps
|
|
525
|
+
one selected PuTTY window while the helper is running. Press Ctrl-Alt-F12 again
|
|
526
|
+
to disable it before using another program in that terminal, or press Ctrl-C
|
|
527
|
+
in the helper console to stop it. Enabling a different PuTTY window switches
|
|
528
|
+
the selection to that window.
|
|
529
|
+
|
|
530
|
+
With the helper enabled, `Ctrl-Home` / `Ctrl-End` move to the beginning/end of
|
|
531
|
+
the editor buffer or the first/last result row. `Ctrl-Shift-Home` /
|
|
532
|
+
`Ctrl-Shift-End` select to buffer boundaries. The helper also restores
|
|
533
|
+
`Ctrl-Delete`, `Ctrl-Backspace`, `Ctrl-Enter`, `Ctrl-PageUp` / `Ctrl-PageDown`,
|
|
534
|
+
`Shift-PageUp` / `Shift-PageDown`, and `Ctrl+=`. Plain Enter and Backspace keep
|
|
535
|
+
their normal meaning. The helper requires only Windows PowerShell and its
|
|
536
|
+
included .NET runtime; it requires no administrator rights or installation.
|
|
537
|
+
Run the same command with `-SelfTest` to check its mappings without enabling it.
|
|
538
|
+
|
|
539
|
+
### Alternatives without the helper
|
|
540
|
+
|
|
541
|
+
Some physical combinations cannot reach plsqlwks distinctly in stock Windows
|
|
542
|
+
PuTTY. Use the following alternatives; they also work in terminals that send
|
|
543
|
+
these sequences, and the original bindings remain available elsewhere:
|
|
544
|
+
|
|
545
|
+
| Existing shortcut | PuTTY alternative | Action |
|
|
546
|
+
| --- | --- | --- |
|
|
547
|
+
| `Ctrl-Home` / `Ctrl-End` | `Alt-Home` / `Alt-End` | Editor buffer start/end; first/last result row |
|
|
548
|
+
| `Ctrl-Shift-Home` / `Ctrl-Shift-End` | `Alt-Shift-Home` / `Alt-Shift-End` | Select to editor buffer boundaries |
|
|
549
|
+
| `Ctrl-Delete` | `Alt-Delete` | Delete next word |
|
|
550
|
+
| `Ctrl-Enter` | `F5` or `Alt-X` | Execute selection/current statement |
|
|
551
|
+
| `Ctrl-PageUp` / `Ctrl-PageDown` | `Alt-PageUp` / `Alt-PageDown` | Page focused results; otherwise switch file tabs |
|
|
552
|
+
| `Shift-PageUp` / `Shift-PageDown` | `Ctrl-Shift-Up` / `Ctrl-Shift-Down` | Extend editor selection by page |
|
|
553
|
+
| `Ctrl-Backspace` | `Alt-Backspace` | Delete previous word |
|
|
554
|
+
| `Ctrl+=` | `Alt-O` → **Database** → **Reconnect** | Reconnect |
|
|
555
|
+
|
|
556
|
+
PuTTY sends the same carriage return for Enter and Ctrl-Enter, and the same
|
|
557
|
+
DEL byte for Backspace and Ctrl-Backspace. plsqlwks preserves newline and
|
|
558
|
+
single-character deletion for those bytes. PuTTY consumes Ctrl/Shift-PageUp
|
|
559
|
+
and PageDown for its own scrollback; changing the function-key setting does
|
|
560
|
+
not free them. See the [PuTTY keyboard settings](https://the.earth.li/~sgtatham/putty/0.85/htmldoc/Chapter4.html#config-keyboard)
|
|
561
|
+
and [scrollback shortcuts](https://the.earth.li/~sgtatham/putty/0.85/htmldoc/Chapter3.html#using-scrollback).
|
|
562
|
+
|
|
563
|
+
Use left Alt for application shortcuts; AltGr remains available for characters
|
|
564
|
+
on international keyboards. Shortcut digits and symbols refer to the character
|
|
565
|
+
on the active Windows layout: for example, Czech top-row digits need Shift,
|
|
566
|
+
so Alt-1 is typed with Alt-Shift-1. Use the layout's `+` or `=` character for
|
|
567
|
+
autocomplete refresh. `Ctrl-C`, `Ctrl-X`, and `Ctrl-V` operate on the
|
|
568
|
+
application/host clipboard with the existing internal fallback. SSH does not
|
|
569
|
+
make that the Windows clipboard. Use PuTTY's native paste (`Shift-Insert` or
|
|
570
|
+
right-click) to insert Windows clipboard text as bracketed paste, and PuTTY
|
|
571
|
+
mouse selection to copy to Windows. Leave plsqlwks' Ctrl-letter shortcuts
|
|
572
|
+
available to the server when customizing PuTTY clipboard settings.
|
|
573
|
+
|
|
574
|
+
For troubleshooting, run `python3 rchar.py` from the checkout in the same PuTTY
|
|
575
|
+
session to capture a key's actual bytes. Verify the session settings above
|
|
576
|
+
before reporting a shortcut failure.
|
|
577
|
+
|
|
578
|
+
## Windows Command Prompt keyboard setup
|
|
579
|
+
|
|
580
|
+
Use plsqlwks through `ssh.exe` or WSL inside **Command Prompt (`cmd.exe`)**.
|
|
581
|
+
The helper supports both the classic Windows console and Command Prompt hosted
|
|
582
|
+
by Windows Terminal. plsqlwks itself runs on the Linux/Unix host or inside WSL,
|
|
583
|
+
where Python provides curses.
|
|
584
|
+
|
|
585
|
+
In one Command Prompt window, connect to the host or start WSL:
|
|
586
|
+
|
|
587
|
+
```bat
|
|
588
|
+
ssh user@host
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
or:
|
|
592
|
+
|
|
593
|
+
```bat
|
|
594
|
+
wsl.exe
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
Then run the installed application in that Linux/Unix shell:
|
|
598
|
+
|
|
599
|
+
```sh
|
|
600
|
+
TERM=xterm-256color plsqlwks
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
In a **second Command Prompt window**, start the Windows helper from the checkout:
|
|
604
|
+
|
|
605
|
+
```bat
|
|
606
|
+
tools\windows_keys.cmd
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
Keep that helper window open. Focus the terminal running plsqlwks and press
|
|
610
|
+
**Ctrl-Alt-F12**; the helper confirms activation. The original shortcuts now
|
|
611
|
+
reach the application, including **Ctrl-Home/End**, **Ctrl-Shift-Home/End**,
|
|
612
|
+
modified arrows, word deletion, execution, paging, and `Ctrl+=`. `F11` executes
|
|
613
|
+
the script instead of switching Windows Terminal to fullscreen.
|
|
614
|
+
|
|
615
|
+
Use a dedicated terminal window for plsqlwks. The helper selects a window, so
|
|
616
|
+
disable it with Ctrl-Alt-F12 before switching that window to another tab, pane,
|
|
617
|
+
or program. Press Ctrl-C in the helper window to stop it. Left Alt is used for
|
|
618
|
+
shortcuts; AltGr remains available for typing. Leave the classic console's
|
|
619
|
+
**Use legacy console** option off. Use a UTF-8 locale on the Linux/Unix host.
|
|
620
|
+
|
|
621
|
+
For Windows Terminal, set `"altGrAliasing": false` in the Command Prompt
|
|
622
|
+
profile in its JSON settings. This keeps left Ctrl-Alt-C/R available for
|
|
623
|
+
commit/rollback on international keyboards while preserving the real AltGr
|
|
624
|
+
key. See Microsoft's [AltGr aliasing setting](https://learn.microsoft.com/en-us/windows/terminal/customize-settings/profile-advanced#altgr-aliasing).
|
|
625
|
+
|
|
626
|
+
The `.cmd` launcher uses the included Windows PowerShell runtime and applies
|
|
627
|
+
its script execution policy only to that helper process. No administrator
|
|
628
|
+
rights, installation, or permanent policy change is needed. Keep
|
|
629
|
+
`windows_keys.cmd` and `putty_keys.ps1` together when copying them elsewhere.
|
|
630
|
+
Run `tools\windows_keys.cmd -SelfTest` to check the helper without enabling it.
|
|
631
|
+
The original `powershell.exe -NoProfile -File .\tools\putty_keys.ps1` command
|
|
632
|
+
also works from Command Prompt and continues to support PuTTY.
|
|
633
|
+
|
|
491
634
|
## Keys
|
|
492
635
|
|
|
493
636
|
### Global
|
|
@@ -716,6 +859,19 @@ current Thin driver.
|
|
|
716
859
|
Displayed CLOB and BLOB values are limited to the first 65,536 characters or
|
|
717
860
|
bytes and include a truncation marker with the full size. Truncated LOB cells
|
|
718
861
|
cannot be edited safely. Schema-browser DDL is always read in full.
|
|
862
|
+
To copy DBMS_OUTPUT, show it with **F6** and focus it with **Tab**. Use
|
|
863
|
+
**Shift+navigation** to select text and **Ctrl+C** to copy; **Ctrl+A** selects
|
|
864
|
+
all output. **Alt-O -> Results -> Copy all DBMS_OUTPUT** also copies the whole
|
|
865
|
+
buffer while another pane is focused. Tab/Esc returns to the editor. Home/End
|
|
866
|
+
move within a displayed line; Ctrl+Home/End move to the output boundaries.
|
|
867
|
+
|
|
868
|
+
Copying preserves the stored text, whitespace, blank lines, and statement
|
|
869
|
+
headings, without screen wrapping or padding. The existing system clipboard
|
|
870
|
+
providers are used when available, with the internal clipboard as a fallback
|
|
871
|
+
(including remote PuTTY sessions). Ctrl+C still cancels a running operation
|
|
872
|
+
before performing a copy. Selection belongs to its file tab, survives appended
|
|
873
|
+
output and resizing, and resets when execution replaces the output.
|
|
874
|
+
|
|
719
875
|
DBMS_OUTPUT is collected after each statement and after every fetched result
|
|
720
876
|
page without replacing a real query grid. Output-read or cursor-cleanup failures
|
|
721
877
|
are displayed as warnings while preserving successfully fetched rows. PL/SQL
|
|
@@ -980,6 +1136,27 @@ lifecycle change requires a restart. See the
|
|
|
980
1136
|
[managed-package guide](https://gitlab.com/unununu/plsqlwks/-/blob/main/doc/PLUGINS.md#managed-plugin-packages)
|
|
981
1137
|
for the exact manifest, source layout, validation, replacement, and trust rules.
|
|
982
1138
|
|
|
1139
|
+
### Dependencies walker
|
|
1140
|
+
|
|
1141
|
+
Install the optional dependency browser and restart PLSQLWKS:
|
|
1142
|
+
|
|
1143
|
+
```bash
|
|
1144
|
+
plsqlwks plugin install plugins/packages/dependencies-walker-0.1.0.plwgn
|
|
1145
|
+
```
|
|
1146
|
+
|
|
1147
|
+
Choose **Alt-O -> Database -> Dependencies walker** and enter an object name,
|
|
1148
|
+
optionally qualified by schema. Expand with Enter/Right, collapse with Left,
|
|
1149
|
+
and use **D** (Depends on) or **U** (Used by) to follow the selected object in
|
|
1150
|
+
either direction. Backspace restores the previous tree; **R** refreshes and
|
|
1151
|
+
Esc closes. Packages combine specification/body relationships with labels.
|
|
1152
|
+
|
|
1153
|
+
The walker reads only visible Oracle-recorded dependencies, loads branches
|
|
1154
|
+
on demand, marks cycles, and leaves database-link references unexpanded.
|
|
1155
|
+
Dynamic SQL and foreign-key graphs are outside this view. See the
|
|
1156
|
+
[plugin catalog](https://gitlab.com/unununu/plsqlwks/-/blob/main/doc/PLUGIN_CATALOG.md#dependencies-walker)
|
|
1157
|
+
for all controls and installation details. No additional runtime dependency is
|
|
1158
|
+
required.
|
|
1159
|
+
|
|
983
1160
|
### Maintained csv2oratab integration
|
|
984
1161
|
|
|
985
1162
|
The maintained `csv2oratab-0.1.0.plwgn` catalog package adds **Alt-O -> Data ->
|
|
@@ -454,6 +454,149 @@ plsqlwks and asks whether to overwrite it, save under another name, or cancel.
|
|
|
454
454
|
Undo and redo update the unsaved-change marker by comparing the current content
|
|
455
455
|
with the last successful save.
|
|
456
456
|
|
|
457
|
+
## Windows PuTTY keyboard setup
|
|
458
|
+
|
|
459
|
+
For Windows PuTTY 0.83 and 0.85, use a saved session with these settings before
|
|
460
|
+
starting plsqlwks on the Linux/Unix host:
|
|
461
|
+
|
|
462
|
+
| PuTTY panel | Setting |
|
|
463
|
+
| --- | --- |
|
|
464
|
+
| Connection → Data | Terminal-type string: `xterm-256color` |
|
|
465
|
+
| Window → Translation | Remote character set: `UTF-8` |
|
|
466
|
+
| Terminal → Keyboard | Backspace: `Control-? (127)`; Home/End: `Standard` |
|
|
467
|
+
| Terminal → Keyboard | Function keys and keypad: `Xterm 216+` |
|
|
468
|
+
| Terminal → Keyboard | Shifted arrow keys: `xterm-style bitmap` |
|
|
469
|
+
| Terminal → Keyboard | Keep **Control-Alt is different from AltGr** enabled |
|
|
470
|
+
| Terminal → Features | Enable **Disable application cursor keys mode** and **Disable application keypad mode** |
|
|
471
|
+
| Terminal → Features | Leave **Disable bracketed paste mode** unchecked |
|
|
472
|
+
| Terminal | Local echo and local line editing: `Force off` |
|
|
473
|
+
|
|
474
|
+
Save the session and use a UTF-8 locale on the host. Disabling application cursor
|
|
475
|
+
keys is necessary because curses enables that mode, and PuTTY otherwise drops
|
|
476
|
+
arrow modifiers even when bitmap mode is selected.
|
|
477
|
+
|
|
478
|
+
### Exact Ctrl shortcuts with the Windows helper
|
|
479
|
+
|
|
480
|
+
Stock Windows PuTTY does not send Ctrl-Home/End, Ctrl-Shift-Home/End, or
|
|
481
|
+
Ctrl-Delete at all, and consumes modified PageUp/PageDown for scrollback.
|
|
482
|
+
Use the optional [Windows helper](tools/putty_keys.ps1) to make the original
|
|
483
|
+
shortcuts work. Run it on the **Windows computer running PuTTY**; from a checkout:
|
|
484
|
+
|
|
485
|
+
```powershell
|
|
486
|
+
powershell.exe -NoProfile -File .\tools\putty_keys.ps1
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
Focus the PuTTY window running plsqlwks, then press **Ctrl-Alt-F12** to enable
|
|
490
|
+
remapping for that window. The helper console confirms activation. It remaps
|
|
491
|
+
one selected PuTTY window while the helper is running. Press Ctrl-Alt-F12 again
|
|
492
|
+
to disable it before using another program in that terminal, or press Ctrl-C
|
|
493
|
+
in the helper console to stop it. Enabling a different PuTTY window switches
|
|
494
|
+
the selection to that window.
|
|
495
|
+
|
|
496
|
+
With the helper enabled, `Ctrl-Home` / `Ctrl-End` move to the beginning/end of
|
|
497
|
+
the editor buffer or the first/last result row. `Ctrl-Shift-Home` /
|
|
498
|
+
`Ctrl-Shift-End` select to buffer boundaries. The helper also restores
|
|
499
|
+
`Ctrl-Delete`, `Ctrl-Backspace`, `Ctrl-Enter`, `Ctrl-PageUp` / `Ctrl-PageDown`,
|
|
500
|
+
`Shift-PageUp` / `Shift-PageDown`, and `Ctrl+=`. Plain Enter and Backspace keep
|
|
501
|
+
their normal meaning. The helper requires only Windows PowerShell and its
|
|
502
|
+
included .NET runtime; it requires no administrator rights or installation.
|
|
503
|
+
Run the same command with `-SelfTest` to check its mappings without enabling it.
|
|
504
|
+
|
|
505
|
+
### Alternatives without the helper
|
|
506
|
+
|
|
507
|
+
Some physical combinations cannot reach plsqlwks distinctly in stock Windows
|
|
508
|
+
PuTTY. Use the following alternatives; they also work in terminals that send
|
|
509
|
+
these sequences, and the original bindings remain available elsewhere:
|
|
510
|
+
|
|
511
|
+
| Existing shortcut | PuTTY alternative | Action |
|
|
512
|
+
| --- | --- | --- |
|
|
513
|
+
| `Ctrl-Home` / `Ctrl-End` | `Alt-Home` / `Alt-End` | Editor buffer start/end; first/last result row |
|
|
514
|
+
| `Ctrl-Shift-Home` / `Ctrl-Shift-End` | `Alt-Shift-Home` / `Alt-Shift-End` | Select to editor buffer boundaries |
|
|
515
|
+
| `Ctrl-Delete` | `Alt-Delete` | Delete next word |
|
|
516
|
+
| `Ctrl-Enter` | `F5` or `Alt-X` | Execute selection/current statement |
|
|
517
|
+
| `Ctrl-PageUp` / `Ctrl-PageDown` | `Alt-PageUp` / `Alt-PageDown` | Page focused results; otherwise switch file tabs |
|
|
518
|
+
| `Shift-PageUp` / `Shift-PageDown` | `Ctrl-Shift-Up` / `Ctrl-Shift-Down` | Extend editor selection by page |
|
|
519
|
+
| `Ctrl-Backspace` | `Alt-Backspace` | Delete previous word |
|
|
520
|
+
| `Ctrl+=` | `Alt-O` → **Database** → **Reconnect** | Reconnect |
|
|
521
|
+
|
|
522
|
+
PuTTY sends the same carriage return for Enter and Ctrl-Enter, and the same
|
|
523
|
+
DEL byte for Backspace and Ctrl-Backspace. plsqlwks preserves newline and
|
|
524
|
+
single-character deletion for those bytes. PuTTY consumes Ctrl/Shift-PageUp
|
|
525
|
+
and PageDown for its own scrollback; changing the function-key setting does
|
|
526
|
+
not free them. See the [PuTTY keyboard settings](https://the.earth.li/~sgtatham/putty/0.85/htmldoc/Chapter4.html#config-keyboard)
|
|
527
|
+
and [scrollback shortcuts](https://the.earth.li/~sgtatham/putty/0.85/htmldoc/Chapter3.html#using-scrollback).
|
|
528
|
+
|
|
529
|
+
Use left Alt for application shortcuts; AltGr remains available for characters
|
|
530
|
+
on international keyboards. Shortcut digits and symbols refer to the character
|
|
531
|
+
on the active Windows layout: for example, Czech top-row digits need Shift,
|
|
532
|
+
so Alt-1 is typed with Alt-Shift-1. Use the layout's `+` or `=` character for
|
|
533
|
+
autocomplete refresh. `Ctrl-C`, `Ctrl-X`, and `Ctrl-V` operate on the
|
|
534
|
+
application/host clipboard with the existing internal fallback. SSH does not
|
|
535
|
+
make that the Windows clipboard. Use PuTTY's native paste (`Shift-Insert` or
|
|
536
|
+
right-click) to insert Windows clipboard text as bracketed paste, and PuTTY
|
|
537
|
+
mouse selection to copy to Windows. Leave plsqlwks' Ctrl-letter shortcuts
|
|
538
|
+
available to the server when customizing PuTTY clipboard settings.
|
|
539
|
+
|
|
540
|
+
For troubleshooting, run `python3 rchar.py` from the checkout in the same PuTTY
|
|
541
|
+
session to capture a key's actual bytes. Verify the session settings above
|
|
542
|
+
before reporting a shortcut failure.
|
|
543
|
+
|
|
544
|
+
## Windows Command Prompt keyboard setup
|
|
545
|
+
|
|
546
|
+
Use plsqlwks through `ssh.exe` or WSL inside **Command Prompt (`cmd.exe`)**.
|
|
547
|
+
The helper supports both the classic Windows console and Command Prompt hosted
|
|
548
|
+
by Windows Terminal. plsqlwks itself runs on the Linux/Unix host or inside WSL,
|
|
549
|
+
where Python provides curses.
|
|
550
|
+
|
|
551
|
+
In one Command Prompt window, connect to the host or start WSL:
|
|
552
|
+
|
|
553
|
+
```bat
|
|
554
|
+
ssh user@host
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
or:
|
|
558
|
+
|
|
559
|
+
```bat
|
|
560
|
+
wsl.exe
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
Then run the installed application in that Linux/Unix shell:
|
|
564
|
+
|
|
565
|
+
```sh
|
|
566
|
+
TERM=xterm-256color plsqlwks
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
In a **second Command Prompt window**, start the Windows helper from the checkout:
|
|
570
|
+
|
|
571
|
+
```bat
|
|
572
|
+
tools\windows_keys.cmd
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
Keep that helper window open. Focus the terminal running plsqlwks and press
|
|
576
|
+
**Ctrl-Alt-F12**; the helper confirms activation. The original shortcuts now
|
|
577
|
+
reach the application, including **Ctrl-Home/End**, **Ctrl-Shift-Home/End**,
|
|
578
|
+
modified arrows, word deletion, execution, paging, and `Ctrl+=`. `F11` executes
|
|
579
|
+
the script instead of switching Windows Terminal to fullscreen.
|
|
580
|
+
|
|
581
|
+
Use a dedicated terminal window for plsqlwks. The helper selects a window, so
|
|
582
|
+
disable it with Ctrl-Alt-F12 before switching that window to another tab, pane,
|
|
583
|
+
or program. Press Ctrl-C in the helper window to stop it. Left Alt is used for
|
|
584
|
+
shortcuts; AltGr remains available for typing. Leave the classic console's
|
|
585
|
+
**Use legacy console** option off. Use a UTF-8 locale on the Linux/Unix host.
|
|
586
|
+
|
|
587
|
+
For Windows Terminal, set `"altGrAliasing": false` in the Command Prompt
|
|
588
|
+
profile in its JSON settings. This keeps left Ctrl-Alt-C/R available for
|
|
589
|
+
commit/rollback on international keyboards while preserving the real AltGr
|
|
590
|
+
key. See Microsoft's [AltGr aliasing setting](https://learn.microsoft.com/en-us/windows/terminal/customize-settings/profile-advanced#altgr-aliasing).
|
|
591
|
+
|
|
592
|
+
The `.cmd` launcher uses the included Windows PowerShell runtime and applies
|
|
593
|
+
its script execution policy only to that helper process. No administrator
|
|
594
|
+
rights, installation, or permanent policy change is needed. Keep
|
|
595
|
+
`windows_keys.cmd` and `putty_keys.ps1` together when copying them elsewhere.
|
|
596
|
+
Run `tools\windows_keys.cmd -SelfTest` to check the helper without enabling it.
|
|
597
|
+
The original `powershell.exe -NoProfile -File .\tools\putty_keys.ps1` command
|
|
598
|
+
also works from Command Prompt and continues to support PuTTY.
|
|
599
|
+
|
|
457
600
|
## Keys
|
|
458
601
|
|
|
459
602
|
### Global
|
|
@@ -682,6 +825,19 @@ current Thin driver.
|
|
|
682
825
|
Displayed CLOB and BLOB values are limited to the first 65,536 characters or
|
|
683
826
|
bytes and include a truncation marker with the full size. Truncated LOB cells
|
|
684
827
|
cannot be edited safely. Schema-browser DDL is always read in full.
|
|
828
|
+
To copy DBMS_OUTPUT, show it with **F6** and focus it with **Tab**. Use
|
|
829
|
+
**Shift+navigation** to select text and **Ctrl+C** to copy; **Ctrl+A** selects
|
|
830
|
+
all output. **Alt-O -> Results -> Copy all DBMS_OUTPUT** also copies the whole
|
|
831
|
+
buffer while another pane is focused. Tab/Esc returns to the editor. Home/End
|
|
832
|
+
move within a displayed line; Ctrl+Home/End move to the output boundaries.
|
|
833
|
+
|
|
834
|
+
Copying preserves the stored text, whitespace, blank lines, and statement
|
|
835
|
+
headings, without screen wrapping or padding. The existing system clipboard
|
|
836
|
+
providers are used when available, with the internal clipboard as a fallback
|
|
837
|
+
(including remote PuTTY sessions). Ctrl+C still cancels a running operation
|
|
838
|
+
before performing a copy. Selection belongs to its file tab, survives appended
|
|
839
|
+
output and resizing, and resets when execution replaces the output.
|
|
840
|
+
|
|
685
841
|
DBMS_OUTPUT is collected after each statement and after every fetched result
|
|
686
842
|
page without replacing a real query grid. Output-read or cursor-cleanup failures
|
|
687
843
|
are displayed as warnings while preserving successfully fetched rows. PL/SQL
|
|
@@ -946,6 +1102,27 @@ lifecycle change requires a restart. See the
|
|
|
946
1102
|
[managed-package guide](https://gitlab.com/unununu/plsqlwks/-/blob/main/doc/PLUGINS.md#managed-plugin-packages)
|
|
947
1103
|
for the exact manifest, source layout, validation, replacement, and trust rules.
|
|
948
1104
|
|
|
1105
|
+
### Dependencies walker
|
|
1106
|
+
|
|
1107
|
+
Install the optional dependency browser and restart PLSQLWKS:
|
|
1108
|
+
|
|
1109
|
+
```bash
|
|
1110
|
+
plsqlwks plugin install plugins/packages/dependencies-walker-0.1.0.plwgn
|
|
1111
|
+
```
|
|
1112
|
+
|
|
1113
|
+
Choose **Alt-O -> Database -> Dependencies walker** and enter an object name,
|
|
1114
|
+
optionally qualified by schema. Expand with Enter/Right, collapse with Left,
|
|
1115
|
+
and use **D** (Depends on) or **U** (Used by) to follow the selected object in
|
|
1116
|
+
either direction. Backspace restores the previous tree; **R** refreshes and
|
|
1117
|
+
Esc closes. Packages combine specification/body relationships with labels.
|
|
1118
|
+
|
|
1119
|
+
The walker reads only visible Oracle-recorded dependencies, loads branches
|
|
1120
|
+
on demand, marks cycles, and leaves database-link references unexpanded.
|
|
1121
|
+
Dynamic SQL and foreign-key graphs are outside this view. See the
|
|
1122
|
+
[plugin catalog](https://gitlab.com/unununu/plsqlwks/-/blob/main/doc/PLUGIN_CATALOG.md#dependencies-walker)
|
|
1123
|
+
for all controls and installation details. No additional runtime dependency is
|
|
1124
|
+
required.
|
|
1125
|
+
|
|
949
1126
|
### Maintained csv2oratab integration
|
|
950
1127
|
|
|
951
1128
|
The maintained `csv2oratab-0.1.0.plwgn` catalog package adds **Alt-O -> Data ->
|
|
@@ -189,6 +189,8 @@ class PluginContext(Protocol):
|
|
|
189
189
|
def get_suggested_table(self) -> str: ...
|
|
190
190
|
def start_result_export(self, request: ResultExportRequest) -> None: ...
|
|
191
191
|
def start_code_generation(self, request: CodeGenerationRequest) -> None: ...
|
|
192
|
+
def start_dependency_walk(self) -> None: ...
|
|
193
|
+
def start_sqlplus(self, executable: str = "sqlplus") -> None: ...
|
|
192
194
|
```
|
|
193
195
|
|
|
194
196
|
- `results_dir` is the configured result-file directory.
|
|
@@ -216,6 +218,12 @@ class PluginContext(Protocol):
|
|
|
216
218
|
default and must still be validated through a host-managed request.
|
|
217
219
|
- `start_result_export()` and `start_code_generation()` transfer work to the
|
|
218
220
|
workflows below.
|
|
221
|
+
- `start_dependency_walk()` opens the host-managed dependency walker described
|
|
222
|
+
below. It takes no database objects or callbacks and returns immediately after
|
|
223
|
+
the initial object prompt, before asynchronous metadata work completes.
|
|
224
|
+
- `start_sqlplus(executable="sqlplus")` runs the host-managed interactive
|
|
225
|
+
SQL*Plus launcher described below. It returns after SQL*Plus exits and the
|
|
226
|
+
user presses a key to return to PLSQLWKS.
|
|
219
227
|
|
|
220
228
|
Context properties and synchronous UI methods belong to the handler/UI thread.
|
|
221
229
|
Do not call a saved context from an export writer or another plugin-created
|
|
@@ -524,6 +532,27 @@ def generate_select(context: PluginContext) -> None:
|
|
|
524
532
|
ordinary exceptions are also reported through the plugin error UI. The exact
|
|
525
533
|
wording of either presentation is not part of the API.
|
|
526
534
|
|
|
535
|
+
## Dependency walking
|
|
536
|
+
|
|
537
|
+
`PluginContext.start_dependency_walk()` is an additive API v1 capability. The
|
|
538
|
+
host prompts for `OBJECT` or `SCHEMA.OBJECT`, suggests the selected schema-browser
|
|
539
|
+
object when available, resolves quoted identifiers and ambiguous types, then
|
|
540
|
+
opens a keyboard-driven dependency tree. Metadata reads use the initiating
|
|
541
|
+
tab's session and its normal worker/cancellation mechanism. Closing the walker
|
|
542
|
+
preserves the editor, result table, and output; no transaction is committed or
|
|
543
|
+
rolled back by the walker.
|
|
544
|
+
|
|
545
|
+
The tree follows visible `ALL_DEPENDENCIES` relationships in either direction.
|
|
546
|
+
Package specifications and bodies share a node with labeled edges. Expansion
|
|
547
|
+
loads one page at a time; cycles and remote references are leaves. The host
|
|
548
|
+
does not expose SQL, cursors, or a general-purpose job or UI interface to the
|
|
549
|
+
plugin. See the [catalog guide](PLUGIN_CATALOG.md#dependencies-walker) for keys,
|
|
550
|
+
visibility limits, and installation.
|
|
551
|
+
|
|
552
|
+
A plugin using this added public method may check whether it is callable and
|
|
553
|
+
report an upgrade requirement on older hosts. Existing API v1 plugins need no
|
|
554
|
+
changes.
|
|
555
|
+
|
|
527
556
|
## Managed packages and lifecycle
|
|
528
557
|
|
|
529
558
|
Managed packages provide offline distribution for the same API-v1 factories.
|
|
@@ -619,17 +648,52 @@ access process data, perform I/O, and otherwise act with the user's authority.
|
|
|
619
648
|
Review source and verify provenance before installing, and keep secrets out of
|
|
620
649
|
plugin settings when code from another publisher can run in the same process.
|
|
621
650
|
|
|
651
|
+
## SQL*Plus launching
|
|
652
|
+
|
|
653
|
+
`PluginContext.start_sqlplus(executable="sqlplus")` is an additive API v1
|
|
654
|
+
capability. The host requires a connected active session and no database
|
|
655
|
+
operation running in any tab. It reads the loaded configuration's username,
|
|
656
|
+
DSN, and password file, then launches the selected executable directly, without
|
|
657
|
+
a shell, in the workspace directory. An executable name is resolved through
|
|
658
|
+
`PATH`; a path selects a particular client. Credentials never enter the plugin
|
|
659
|
+
context or process arguments. A private temporary symlink gives SQL*Plus access
|
|
660
|
+
to a startup script through an inherited pipe; no password-bearing regular
|
|
661
|
+
file is created.
|
|
662
|
+
|
|
663
|
+
The host suspends curses and keyboard reporting, leaves SQL*Plus in control of
|
|
664
|
+
the terminal, and handles Ctrl+C without closing PLSQLWKS. After SQL*Plus exits,
|
|
665
|
+
including on login failure, its output remains visible until a fresh keypress
|
|
666
|
+
(no Enter needed). Terminal modes and the workspace display are restored on
|
|
667
|
+
exit and failure. Pre-launch errors use the normal host UI.
|
|
668
|
+
|
|
669
|
+
The child has an independent database session. Host transactions, results,
|
|
670
|
+
and editor state are preserved; host read-only, autocommit, and other session
|
|
671
|
+
settings are not applied to SQL*Plus. Launching is allowed in read-only mode.
|
|
672
|
+
The password file is reread each time, preserving spaces and removing only
|
|
673
|
+
final CR/LF, as with normal host connection setup. This is not a transfer of
|
|
674
|
+
the existing Oracle connection or its session state.
|
|
675
|
+
|
|
676
|
+
This capability requires a POSIX terminal, `/dev/fd`, and an installed SQL*Plus
|
|
677
|
+
client. Connection fields must be nonempty, contain no control characters or
|
|
678
|
+
embedded double quotes, and produce a CONNECT line of at most 2400 UTF-8
|
|
679
|
+
bytes (also subject to the platform pipe limit). Explicitly quoted usernames
|
|
680
|
+
are supported. Unsupported values are rejected without displaying credentials.
|
|
681
|
+
Older hosts can be detected with `getattr(context, "start_sqlplus", None)`;
|
|
682
|
+
the maintained plugin reports an upgrade requirement when unavailable.
|
|
683
|
+
|
|
622
684
|
## Compatibility boundary
|
|
623
685
|
|
|
624
686
|
API v1 supports command registration, immutable loaded-result snapshots,
|
|
625
687
|
plugin-scoped string settings, host-managed export, and metadata-only current-
|
|
626
|
-
schema code generation
|
|
688
|
+
schema code generation, host-managed dependency walking, and SQL*Plus launching.
|
|
689
|
+
It does not promise internal module names, status
|
|
627
690
|
wording, curses layout, database/session objects, mutable grid state, event
|
|
628
691
|
hooks, lifecycle callbacks, arbitrary shortcuts, arbitrary queries or jobs,
|
|
629
692
|
workspace-local Python-file discovery, or hot reload.
|
|
630
693
|
|
|
631
|
-
Authors
|
|
632
|
-
must not probe host internals to extend this
|
|
694
|
+
Authors may check their own optional dependencies and explicitly documented
|
|
695
|
+
additive public capabilities; they must not probe host internals to extend this
|
|
696
|
+
surface. A future incompatible
|
|
633
697
|
contract requires a different `PLUGIN_API_VERSION`; factories and managed
|
|
634
698
|
manifests with a nonmatching version are rejected instead of being loaded
|
|
635
699
|
partially.
|
|
@@ -57,22 +57,42 @@ zone of `TIMESTAMP WITH TIME ZONE` and `TIMESTAMP WITH LOCAL TIME ZONE` values,
|
|
|
57
57
|
and it truncates precision beyond Python microseconds. Returning the resulting
|
|
58
58
|
naive datetime would falsely imply a lossless value.
|
|
59
59
|
|
|
60
|
-
For
|
|
61
|
-
|
|
60
|
+
For ordinary `SELECT` and `WITH` queries, PLSQLWKS describes the result without
|
|
61
|
+
executing it and formats zoned columns on Oracle before fetching them. The grid,
|
|
62
|
+
cell viewer, clipboard, and exports receive the same readable strings:
|
|
63
|
+
|
|
64
|
+
- `2026-01-17 10:11:12.123456789 GMT+05:45`
|
|
65
|
+
- `2026-07-17 10:11:12 GMT+02:00 [EUROPE/PRAGUE]`
|
|
66
|
+
|
|
67
|
+
Significant fractional digits are preserved through nanosecond precision;
|
|
68
|
+
trailing zeroes are omitted. `TIMESTAMP WITH TIME ZONE` retains its stored
|
|
69
|
+
numeric offset or named region, including the offset at that date.
|
|
70
|
+
`TIMESTAMP WITH LOCAL TIME ZONE` follows `SESSIONTIMEZONE` captured when the
|
|
71
|
+
query starts, including when later pages are fetched after a session-zone change.
|
|
72
|
+
Original headings, bind values, ordering, row limits, and timestamp metadata
|
|
73
|
+
are preserved. Zoned cells remain read-only; neighboring editable columns are
|
|
74
|
+
unaffected. Plain `DATE` and `TIMESTAMP` behavior is unchanged.
|
|
75
|
+
|
|
76
|
+
The projection is parsed before executing the user query, which executes once.
|
|
77
|
+
Special forms such as `SELECT FOR UPDATE`, inline `WITH FUNCTION/PROCEDURE`, and
|
|
78
|
+
results containing LONG, REF CURSOR, or object columns use the existing native
|
|
79
|
+
fetch path. If Oracle cannot describe a bound expression without its values,
|
|
80
|
+
or rejects the projection's syntax or types, the original query runs instead.
|
|
81
|
+
Non-null zoned cells on this fallback path retain a warning
|
|
82
|
+
and these fail-safe display/export values:
|
|
62
83
|
|
|
63
84
|
- `<TIMESTAMP WITH TIME ZONE: lossless Thin-mode fetch unavailable; use TO_CHAR>`
|
|
64
85
|
- `<TIMESTAMP WITH LOCAL TIME ZONE: lossless Thin-mode fetch unavailable; use TO_CHAR>`
|
|
65
86
|
|
|
66
|
-
|
|
67
|
-
|
|
87
|
+
Named-zone values on that native fallback path can still raise Thin-mode
|
|
88
|
+
`DPY-3022`. Select a lossless companion string explicitly for these query forms:
|
|
68
89
|
|
|
69
90
|
```sql
|
|
70
|
-
to_char(zoned_timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF9 TZH:TZM')
|
|
91
|
+
to_char(zoned_timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF9 TZH:TZM TZR')
|
|
71
92
|
```
|
|
72
93
|
|
|
73
94
|
For a local-time-zone column, first cast it at the required precision to
|
|
74
95
|
`TIMESTAMP(9) WITH TIME ZONE`; its rendered value follows `SESSIONTIMEZONE`.
|
|
75
|
-
Named-zone timestamp fetches remain an explicit Thin-mode limitation.
|
|
76
96
|
|
|
77
97
|
### Experimental connection matrices
|
|
78
98
|
|
|
@@ -94,11 +114,10 @@ compulsory on protected pipelines and independently meeting the same ten-run,
|
|
|
94
114
|
30-day evidence rule.
|
|
95
115
|
|
|
96
116
|
The schema browser and metadata completion deliberately enumerate the current
|
|
97
|
-
login schema.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
qualified cross-schema results are viewable but not grid-editable.
|
|
117
|
+
login schema. The mandatory matrix does not claim DML-only, read-only, or
|
|
118
|
+
cross-schema UI behavior. ROWID-backed grid editing and insertion remain
|
|
119
|
+
limited to one base table in the current schema. Exact quoted and Unicode
|
|
120
|
+
table/column names are covered.
|
|
102
121
|
|
|
103
122
|
## Fail-closed safety gate
|
|
104
123
|
|
|
@@ -122,7 +141,7 @@ preflight performs all of these checks:
|
|
|
122
141
|
assigned to each distinct account below; restricted schemas own no objects,
|
|
123
142
|
every grant option is `NO`, and DBA,
|
|
124
143
|
user-administration, `ANY`, unlimited-tablespace, and public mutation paths
|
|
125
|
-
are rejected;
|
|
144
|
+
on non-Oracle-maintained schemas are rejected;
|
|
126
145
|
- on 26ai, both effective and directly received schema privileges are empty.
|
|
127
146
|
- the developer's effective `CONNECT_TIME` and `IDLE_TIME` profile limits are
|
|
128
147
|
both `UNLIMITED`, so they cannot terminate and roll back the guard session.
|
|
@@ -160,8 +179,8 @@ what rejects DML and DDL.
|
|
|
160
179
|
|
|
161
180
|
When profile names share an Oracle account, the harness validates that account
|
|
162
181
|
against the strongest assigned contract (`developer`, then DML-only, then
|
|
163
|
-
read-only).
|
|
164
|
-
for
|
|
182
|
+
read-only). The live suite does not attempt a weaker database privilege boundary
|
|
183
|
+
for an aliased profile because one Oracle session user cannot simultaneously
|
|
165
184
|
have and lack the same privilege. Endpoint, identity, version, direct-grant,
|
|
166
185
|
guard-token, and guard-lock checks remain active. A one-account run therefore
|
|
167
186
|
provides functional compatibility coverage, but it does not claim independent
|
|
@@ -202,8 +221,7 @@ For an account assigned to multiple profiles, provision the strongest of its
|
|
|
202
221
|
contracts in this order: developer, DML-only, read-only. In the common
|
|
203
222
|
single-license setup, all three variables name `<DEV_USER>`, all three password
|
|
204
223
|
file variables may name the same private file, and only the developer contract
|
|
205
|
-
is provisioned. The restricted-profile enforcement
|
|
206
|
-
skipped rather than misrepresented as tested.
|
|
224
|
+
is provisioned. The run does not claim restricted-profile enforcement coverage.
|
|
207
225
|
|
|
208
226
|
The effective rows from `SESSION_PRIVS` must be exactly:
|
|
209
227
|
|
|
@@ -225,7 +243,9 @@ by distinct restricted accounts; no grant is made to the owner itself, and a
|
|
|
225
243
|
shared DML/read-only account receives the stronger DML grant set once. The
|
|
226
244
|
developer must have no outgoing column grants, no grant on the guard table, and
|
|
227
245
|
no grant to `PUBLIC`. The preflight also rejects any effective public
|
|
228
|
-
table/column mutation privilege visible to a profile
|
|
246
|
+
table/column mutation privilege visible to a profile on a non-Oracle-maintained
|
|
247
|
+
schema. Oracle-supplied grants on owners reported by `ALL_USERS` with
|
|
248
|
+
`ORACLE_MAINTAINED = 'Y'` are treated as part of the database baseline.
|
|
229
249
|
|
|
230
250
|
Assign the developer a dedicated profile whose `CONNECT_TIME` and `IDLE_TIME`
|
|
231
251
|
are both `UNLIMITED`; the preflight verifies the effective values through
|
|
@@ -264,6 +284,15 @@ grant select on sys.v_$sql_plan_statistics_all to <DEV_USER>;
|
|
|
264
284
|
grant select on sys.v_$session to <DEV_USER>;
|
|
265
285
|
```
|
|
266
286
|
|
|
287
|
+
Oracle grants `INHERIT PRIVILEGES` on a newly created user to `PUBLIC` by
|
|
288
|
+
default. The matrix outgoing-grant contract intentionally rejects that path.
|
|
289
|
+
As the provisioning DBA, run the following once for each distinct developer,
|
|
290
|
+
DML-only, and read-only account (only once when profiles share an account):
|
|
291
|
+
|
|
292
|
+
```sql
|
|
293
|
+
revoke inherit privileges on user <PROFILE_USER> from public;
|
|
294
|
+
```
|
|
295
|
+
|
|
267
296
|
These are exact allowlists, not minimums. An additional direct system or object
|
|
268
297
|
grant, an admin/grant option, or any received role makes preflight fail.
|
|
269
298
|
|
|
@@ -159,6 +159,24 @@ and reported as a startup warning rather than preventing PLSQLWKS from
|
|
|
159
159
|
starting. An ordinary exception raised by a command is reported through the UI
|
|
160
160
|
instead of terminating the application.
|
|
161
161
|
|
|
162
|
+
## SQL*Plus launcher package
|
|
163
|
+
|
|
164
|
+
`sqlplus-0.1.0.plwgn` adds **Database -> Open SQL*Plus** through the public
|
|
165
|
+
`PluginContext.start_sqlplus()` capability. The host supplies the connection
|
|
166
|
+
credentials, suspends the terminal UI, and waits for a fresh keypress after
|
|
167
|
+
SQL*Plus exits before restoring PLSQLWKS. SQL*Plus has its own session and
|
|
168
|
+
transaction settings, including when launched from a read-only host. Install
|
|
169
|
+
and configuration instructions are in the [catalog](PLUGIN_CATALOG.md#sqlplus-launcher).
|
|
170
|
+
|
|
171
|
+
## Dependencies walker package
|
|
172
|
+
|
|
173
|
+
`dependencies-walker-0.1.0.plwgn` adds **Database -> Dependencies walker** through
|
|
174
|
+
the public `PluginContext.start_dependency_walk()` capability. The host owns
|
|
175
|
+
the lazy forward/reverse tree, metadata queries, cancellation, and keyboard UI.
|
|
176
|
+
The plugin does not receive a connection or import private UI/database modules.
|
|
177
|
+
It needs no dependency extra. See the [catalog instructions](PLUGIN_CATALOG.md#dependencies-walker)
|
|
178
|
+
for installation, controls, package grouping, and visibility limits.
|
|
179
|
+
|
|
162
180
|
## Maintained csv2oratab package
|
|
163
181
|
|
|
164
182
|
The catalog's `csv2oratab-0.1.0.plwgn` package registers **Alt-O -> Data ->
|