plsqlwks 0.1.9.3__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/PKG-INFO +244 -7
  2. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/README.md +243 -6
  3. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/doc/API.md +93 -3
  4. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/doc/ARCHITECTURE.md +10 -0
  5. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/doc/COMPATIBILITY.md +88 -28
  6. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/doc/PLUGINS.md +27 -0
  7. plsqlwks-0.2.1/doc/PLUGIN_CATALOG.md +307 -0
  8. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/doc/QUICKSTART.html +125 -94
  9. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/doc/QUICKSTART.md +25 -0
  10. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/__init__.py +1 -1
  11. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/config/loader.py +5 -0
  12. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/config/models.py +5 -0
  13. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/config/settings.py +18 -0
  14. plsqlwks-0.2.1/plsqlwks/db/ddl_remap.py +132 -0
  15. plsqlwks-0.2.1/plsqlwks/db/dependencies.py +151 -0
  16. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/execution.py +45 -7
  17. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/models.py +3 -0
  18. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/session.py +32 -0
  19. plsqlwks-0.2.1/plsqlwks/db/table_export.py +464 -0
  20. plsqlwks-0.2.1/plsqlwks/db/timestamps.py +169 -0
  21. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/plugins/api.py +17 -0
  22. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/app.py +84 -4
  23. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/buffer.py +6 -0
  24. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/commands.py +1 -0
  25. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/constants.py +79 -8
  26. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/db_operations.py +7 -4
  27. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/db_session.py +2 -1
  28. plsqlwks-0.2.1/plsqlwks/ui/dependency_walker.py +290 -0
  29. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/display.py +34 -0
  30. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/documents.py +6 -1
  31. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/errors.py +1 -1
  32. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/key_reader.py +51 -7
  33. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/keys.py +59 -61
  34. plsqlwks-0.2.1/plsqlwks/ui/output_selection.py +163 -0
  35. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/plugin_host.py +27 -0
  36. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/renderer.py +50 -22
  37. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/result_controller.py +42 -0
  38. plsqlwks-0.2.1/plsqlwks/ui/sqlplus.py +182 -0
  39. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/state.py +2 -0
  40. plsqlwks-0.2.1/plsqlwks/ui/table_export.py +242 -0
  41. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/viewport.py +28 -4
  42. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks.egg-info/SOURCES.txt +23 -1
  43. plsqlwks-0.2.1/plugins/dependencies-walker/install.plw +7 -0
  44. plsqlwks-0.2.1/plugins/dependencies-walker/payload/plugin.py +22 -0
  45. plsqlwks-0.2.1/plugins/packages/dependencies-walker-0.1.0.plwgn +0 -0
  46. plsqlwks-0.2.1/plugins/packages/sqlplus-0.1.0.plwgn +0 -0
  47. plsqlwks-0.2.1/plugins/packages/table-ddl-export-0.1.1.plwgn +0 -0
  48. plsqlwks-0.2.1/plugins/sqlplus/install.plw +7 -0
  49. plsqlwks-0.2.1/plugins/sqlplus/payload/__init__.py +0 -0
  50. plsqlwks-0.2.1/plugins/sqlplus/payload/plugin.py +22 -0
  51. plsqlwks-0.2.1/plugins/table-ddl-export/install.plw +7 -0
  52. plsqlwks-0.2.1/plugins/table-ddl-export/payload/__init__.py +0 -0
  53. plsqlwks-0.2.1/plugins/table-ddl-export/payload/plugin.py +21 -0
  54. plsqlwks-0.2.1/plugins/xlsx-export/payload/__init__.py +0 -0
  55. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/tests/conftest.py +5 -0
  56. plsqlwks-0.2.1/tools/putty_keys.ps1 +286 -0
  57. plsqlwks-0.2.1/tools/windows_keys.cmd +4 -0
  58. plsqlwks-0.1.9.3/doc/PLUGIN_CATALOG.md +0 -100
  59. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/license.txt +0 -0
  60. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/__main__.py +0 -0
  61. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/cli.py +0 -0
  62. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/config/__init__.py +0 -0
  63. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/config/paths.py +0 -0
  64. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/config/session.py +0 -0
  65. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/__init__.py +0 -0
  66. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/editing.py +0 -0
  67. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/explain.py +0 -0
  68. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/health.py +0 -0
  69. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/identifiers.py +0 -0
  70. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/metadata.py +0 -0
  71. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/sql_analysis.py +0 -0
  72. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/db/transactions.py +0 -0
  73. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/exporting.py +0 -0
  74. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/plugins/__init__.py +0 -0
  75. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/plugins/loader.py +0 -0
  76. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/plugins/management.py +0 -0
  77. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/sqlbinds.py +0 -0
  78. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/sqlsplit.py +0 -0
  79. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/__init__.py +0 -0
  80. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/application_controller.py +0 -0
  81. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/browser.py +0 -0
  82. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/catalog.py +0 -0
  83. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/clipboard.py +0 -0
  84. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/code_generation.py +0 -0
  85. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/command_dispatcher.py +0 -0
  86. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/completion.py +0 -0
  87. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/db_worker.py +0 -0
  88. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/dialogs.py +0 -0
  89. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/editor_controller.py +0 -0
  90. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/help.py +0 -0
  91. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/input_controller.py +0 -0
  92. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/menu.py +0 -0
  93. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/ports.py +0 -0
  94. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/query_controller.py +0 -0
  95. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/result_export.py +0 -0
  96. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/result_presenter.py +0 -0
  97. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/results.py +0 -0
  98. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/sql.py +0 -0
  99. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/ui/syntax.py +0 -0
  100. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plsqlwks/workspace.py +0 -0
  101. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/csv-export/install.plw +0 -0
  102. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/csv-export/payload/__init__.py +0 -0
  103. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/csv-export/payload/plugin.py +0 -0
  104. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/csv-export/payload/support.py +0 -0
  105. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/csv-export/payload/writer.py +0 -0
  106. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/csv2oratab/install.plw +0 -0
  107. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/csv2oratab/payload/__init__.py +0 -0
  108. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/csv2oratab/payload/csv2oratab.py +0 -0
  109. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/csv2oratab/payload/plugin.py +0 -0
  110. {plsqlwks-0.1.9.3/plugins/html-export → plsqlwks-0.2.1/plugins/dependencies-walker}/payload/__init__.py +0 -0
  111. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/html-export/install.plw +0 -0
  112. {plsqlwks-0.1.9.3/plugins/xlsx-export → plsqlwks-0.2.1/plugins/html-export}/payload/__init__.py +0 -0
  113. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/html-export/payload/html_exporting.py +0 -0
  114. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/html-export/payload/plugin.py +0 -0
  115. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/html-export/payload/support.py +0 -0
  116. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/html-export/payload/writer.py +0 -0
  117. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/packages/csv-export-1.0.0.plwgn +0 -0
  118. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/packages/csv2oratab-0.1.0.plwgn +0 -0
  119. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/packages/html-export-1.0.0.plwgn +0 -0
  120. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/packages/xlsx-export-1.0.0.plwgn +0 -0
  121. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/xlsx-export/install.plw +0 -0
  122. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/xlsx-export/payload/plugin.py +0 -0
  123. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/xlsx-export/payload/support.py +0 -0
  124. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/plugins/xlsx-export/payload/xlsx_exporting.py +0 -0
  125. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/pyproject.toml +0 -0
  126. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/pytest.ini +0 -0
  127. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/rchar.py +0 -0
  128. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/requirements.txt +0 -0
  129. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/setup.cfg +0 -0
  130. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/tests/fixtures/config_exports.txt +0 -0
  131. {plsqlwks-0.1.9.3 → plsqlwks-0.2.1}/tests/fixtures/ui_exports.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plsqlwks
3
- Version: 0.1.9.3
3
+ Version: 0.2.1
4
4
  Summary: An ncurses SQL and PL/SQL workspace for Oracle databases.
5
5
  Author: unu2000
6
6
  License-Expression: LicenseRef-plsqlwks-Donationware
@@ -98,6 +98,55 @@ protect it with `chmod 600`.
98
98
  `PLSQLWKS_ARRAYSIZE` sets the Oracle cursor array size. Both values must be
99
99
  positive integers.
100
100
 
101
+ ### Oracle Thin and Thick modes
102
+
103
+ Thin mode is the default and needs no Oracle Client installation. To use an
104
+ installed Oracle Client, start with `plsqlwks --thick`. Use `plsqlwks --thin` to
105
+ override a workspace's thick preference for one invocation. The flags are
106
+ mutually exclusive and are never saved to configuration.
107
+
108
+ For a persistent preference, edit the selected workspace's `config.ini` (or the
109
+ platform configuration file when using the default workspace):
110
+
111
+ ```ini
112
+ [database]
113
+ thick_mode = no
114
+ oracle_client_lib_dir =
115
+ oracle_client_config_dir =
116
+ ```
117
+
118
+ Set `thick_mode = yes` to enable Thick mode. Invalid boolean values are errors.
119
+ Both optional directories expand `~`; relative paths are resolved from the
120
+ configuration file's directory. Blank values use Oracle's normal discovery.
121
+ The directory settings are used only in Thick mode. All tabs and reconnects
122
+ share one driver mode; restart after changing mode or client settings.
123
+
124
+ Install an Oracle Instant Client **Basic** or **Basic Light** package compatible
125
+ with your Python architecture, python-oracledb version, and database. Libraries
126
+ are installed separately and are not bundled with PLSQLWKS. On Linux, normally
127
+ leave `oracle_client_lib_dir` blank and configure `ldconfig` or `LD_LIBRARY_PATH`
128
+ **before** launching Python. Setting that directory alone does not configure
129
+ Linux's dependent-library search path. On macOS, an explicit library directory
130
+ can be useful. When running through SSH or WSL, install the libraries where the
131
+ Python process runs. For a full Oracle Client installation, configure its
132
+ Oracle environment before launch.
133
+
134
+ `oracle_client_config_dir` selects the directory containing Oracle network
135
+ configuration such as `sqlnet.ora` and `tnsnames.ora`; when blank, Oracle uses
136
+ its normal lookup, including `TNS_ADMIN`. Native network encryption is configured
137
+ through Oracle Client's `sqlnet.ora` and the server's matching requirements.
138
+ The existing `ORACLE_USER`, `ORACLE_DSN`, and password-file authentication remain
139
+ in use. See the [Oracle Client initialization guide](https://python-oracledb.readthedocs.io/en/v3.4.2/user_guide/initialization.html)
140
+ for platform setup and the [compatibility contract](doc/COMPATIBILITY.md) for
141
+ validated combinations.
142
+
143
+ Client-loading failures such as `DPI-1047` stop startup before the terminal UI,
144
+ with no automatic fallback. Check library architecture, required system
145
+ libraries, and the pre-launch library search path. Mode conflicts or changed
146
+ initialization arguments require a process restart. Successful connection status
147
+ includes `Thin mode` or `Thick mode`. Help, version, and plugin management commands
148
+ do not initialize Oracle Client libraries.
149
+
101
150
  ## Install
102
151
 
103
152
  Python 3.10 or newer is required, along with a compatible terminal and a Python
@@ -488,6 +537,149 @@ plsqlwks and asks whether to overwrite it, save under another name, or cancel.
488
537
  Undo and redo update the unsaved-change marker by comparing the current content
489
538
  with the last successful save.
490
539
 
540
+ ## Windows PuTTY keyboard setup
541
+
542
+ For Windows PuTTY 0.83 and 0.85, use a saved session with these settings before
543
+ starting plsqlwks on the Linux/Unix host:
544
+
545
+ | PuTTY panel | Setting |
546
+ | --- | --- |
547
+ | Connection → Data | Terminal-type string: `xterm-256color` |
548
+ | Window → Translation | Remote character set: `UTF-8` |
549
+ | Terminal → Keyboard | Backspace: `Control-? (127)`; Home/End: `Standard` |
550
+ | Terminal → Keyboard | Function keys and keypad: `Xterm 216+` |
551
+ | Terminal → Keyboard | Shifted arrow keys: `xterm-style bitmap` |
552
+ | Terminal → Keyboard | Keep **Control-Alt is different from AltGr** enabled |
553
+ | Terminal → Features | Enable **Disable application cursor keys mode** and **Disable application keypad mode** |
554
+ | Terminal → Features | Leave **Disable bracketed paste mode** unchecked |
555
+ | Terminal | Local echo and local line editing: `Force off` |
556
+
557
+ Save the session and use a UTF-8 locale on the host. Disabling application cursor
558
+ keys is necessary because curses enables that mode, and PuTTY otherwise drops
559
+ arrow modifiers even when bitmap mode is selected.
560
+
561
+ ### Exact Ctrl shortcuts with the Windows helper
562
+
563
+ Stock Windows PuTTY does not send Ctrl-Home/End, Ctrl-Shift-Home/End, or
564
+ Ctrl-Delete at all, and consumes modified PageUp/PageDown for scrollback.
565
+ Use the optional [Windows helper](tools/putty_keys.ps1) to make the original
566
+ shortcuts work. Run it on the **Windows computer running PuTTY**; from a checkout:
567
+
568
+ ```powershell
569
+ powershell.exe -NoProfile -File .\tools\putty_keys.ps1
570
+ ```
571
+
572
+ Focus the PuTTY window running plsqlwks, then press **Ctrl-Alt-F12** to enable
573
+ remapping for that window. The helper console confirms activation. It remaps
574
+ one selected PuTTY window while the helper is running. Press Ctrl-Alt-F12 again
575
+ to disable it before using another program in that terminal, or press Ctrl-C
576
+ in the helper console to stop it. Enabling a different PuTTY window switches
577
+ the selection to that window.
578
+
579
+ With the helper enabled, `Ctrl-Home` / `Ctrl-End` move to the beginning/end of
580
+ the editor buffer or the first/last result row. `Ctrl-Shift-Home` /
581
+ `Ctrl-Shift-End` select to buffer boundaries. The helper also restores
582
+ `Ctrl-Delete`, `Ctrl-Backspace`, `Ctrl-Enter`, `Ctrl-PageUp` / `Ctrl-PageDown`,
583
+ `Shift-PageUp` / `Shift-PageDown`, and `Ctrl+=`. Plain Enter and Backspace keep
584
+ their normal meaning. The helper requires only Windows PowerShell and its
585
+ included .NET runtime; it requires no administrator rights or installation.
586
+ Run the same command with `-SelfTest` to check its mappings without enabling it.
587
+
588
+ ### Alternatives without the helper
589
+
590
+ Some physical combinations cannot reach plsqlwks distinctly in stock Windows
591
+ PuTTY. Use the following alternatives; they also work in terminals that send
592
+ these sequences, and the original bindings remain available elsewhere:
593
+
594
+ | Existing shortcut | PuTTY alternative | Action |
595
+ | --- | --- | --- |
596
+ | `Ctrl-Home` / `Ctrl-End` | `Alt-Home` / `Alt-End` | Editor buffer start/end; first/last result row |
597
+ | `Ctrl-Shift-Home` / `Ctrl-Shift-End` | `Alt-Shift-Home` / `Alt-Shift-End` | Select to editor buffer boundaries |
598
+ | `Ctrl-Delete` | `Alt-Delete` | Delete next word |
599
+ | `Ctrl-Enter` | `F5` or `Alt-X` | Execute selection/current statement |
600
+ | `Ctrl-PageUp` / `Ctrl-PageDown` | `Alt-PageUp` / `Alt-PageDown` | Page focused results; otherwise switch file tabs |
601
+ | `Shift-PageUp` / `Shift-PageDown` | `Ctrl-Shift-Up` / `Ctrl-Shift-Down` | Extend editor selection by page |
602
+ | `Ctrl-Backspace` | `Alt-Backspace` | Delete previous word |
603
+ | `Ctrl+=` | `Alt-O` → **Database** → **Reconnect** | Reconnect |
604
+
605
+ PuTTY sends the same carriage return for Enter and Ctrl-Enter, and the same
606
+ DEL byte for Backspace and Ctrl-Backspace. plsqlwks preserves newline and
607
+ single-character deletion for those bytes. PuTTY consumes Ctrl/Shift-PageUp
608
+ and PageDown for its own scrollback; changing the function-key setting does
609
+ not free them. See the [PuTTY keyboard settings](https://the.earth.li/~sgtatham/putty/0.85/htmldoc/Chapter4.html#config-keyboard)
610
+ and [scrollback shortcuts](https://the.earth.li/~sgtatham/putty/0.85/htmldoc/Chapter3.html#using-scrollback).
611
+
612
+ Use left Alt for application shortcuts; AltGr remains available for characters
613
+ on international keyboards. Shortcut digits and symbols refer to the character
614
+ on the active Windows layout: for example, Czech top-row digits need Shift,
615
+ so Alt-1 is typed with Alt-Shift-1. Use the layout's `+` or `=` character for
616
+ autocomplete refresh. `Ctrl-C`, `Ctrl-X`, and `Ctrl-V` operate on the
617
+ application/host clipboard with the existing internal fallback. SSH does not
618
+ make that the Windows clipboard. Use PuTTY's native paste (`Shift-Insert` or
619
+ right-click) to insert Windows clipboard text as bracketed paste, and PuTTY
620
+ mouse selection to copy to Windows. Leave plsqlwks' Ctrl-letter shortcuts
621
+ available to the server when customizing PuTTY clipboard settings.
622
+
623
+ For troubleshooting, run `python3 rchar.py` from the checkout in the same PuTTY
624
+ session to capture a key's actual bytes. Verify the session settings above
625
+ before reporting a shortcut failure.
626
+
627
+ ## Windows Command Prompt keyboard setup
628
+
629
+ Use plsqlwks through `ssh.exe` or WSL inside **Command Prompt (`cmd.exe`)**.
630
+ The helper supports both the classic Windows console and Command Prompt hosted
631
+ by Windows Terminal. plsqlwks itself runs on the Linux/Unix host or inside WSL,
632
+ where Python provides curses.
633
+
634
+ In one Command Prompt window, connect to the host or start WSL:
635
+
636
+ ```bat
637
+ ssh user@host
638
+ ```
639
+
640
+ or:
641
+
642
+ ```bat
643
+ wsl.exe
644
+ ```
645
+
646
+ Then run the installed application in that Linux/Unix shell:
647
+
648
+ ```sh
649
+ TERM=xterm-256color plsqlwks
650
+ ```
651
+
652
+ In a **second Command Prompt window**, start the Windows helper from the checkout:
653
+
654
+ ```bat
655
+ tools\windows_keys.cmd
656
+ ```
657
+
658
+ Keep that helper window open. Focus the terminal running plsqlwks and press
659
+ **Ctrl-Alt-F12**; the helper confirms activation. The original shortcuts now
660
+ reach the application, including **Ctrl-Home/End**, **Ctrl-Shift-Home/End**,
661
+ modified arrows, word deletion, execution, paging, and `Ctrl+=`. `F11` executes
662
+ the script instead of switching Windows Terminal to fullscreen.
663
+
664
+ Use a dedicated terminal window for plsqlwks. The helper selects a window, so
665
+ disable it with Ctrl-Alt-F12 before switching that window to another tab, pane,
666
+ or program. Press Ctrl-C in the helper window to stop it. Left Alt is used for
667
+ shortcuts; AltGr remains available for typing. Leave the classic console's
668
+ **Use legacy console** option off. Use a UTF-8 locale on the Linux/Unix host.
669
+
670
+ For Windows Terminal, set `"altGrAliasing": false` in the Command Prompt
671
+ profile in its JSON settings. This keeps left Ctrl-Alt-C/R available for
672
+ commit/rollback on international keyboards while preserving the real AltGr
673
+ key. See Microsoft's [AltGr aliasing setting](https://learn.microsoft.com/en-us/windows/terminal/customize-settings/profile-advanced#altgr-aliasing).
674
+
675
+ The `.cmd` launcher uses the included Windows PowerShell runtime and applies
676
+ its script execution policy only to that helper process. No administrator
677
+ rights, installation, or permanent policy change is needed. Keep
678
+ `windows_keys.cmd` and `putty_keys.ps1` together when copying them elsewhere.
679
+ Run `tools\windows_keys.cmd -SelfTest` to check the helper without enabling it.
680
+ The original `powershell.exe -NoProfile -File .\tools\putty_keys.ps1` command
681
+ also works from Command Prompt and continues to support PuTTY.
682
+
491
683
  ## Keys
492
684
 
493
685
  ### Global
@@ -707,15 +899,27 @@ period; DATE and TIMESTAMP input uses ISO
707
899
  Character and CLOB input is preserved as entered. Types that cannot be compared
708
900
  without losing information, including time-zone timestamps and timestamps with
709
901
  precision above six, are read-only in the grid.
710
- In python-oracledb Thin mode, non-null `TIMESTAMP WITH TIME ZONE` and
711
- `TIMESTAMP WITH LOCAL TIME ZONE` values are shown and exported as explicit
712
- lossless-fetch-unavailable markers instead of misleading naive datetimes. Use
713
- an explicit `TO_CHAR` expression with the required precision and zone fields
714
- when the exact value is needed; named-zone timestamps are not supported by the
715
- current Thin driver.
902
+ In both driver modes, ordinary SELECT/WITH queries format zoned timestamps on
903
+ Oracle to preserve their zone and fractional precision. Query forms that cannot
904
+ use this projection show explicit lossless-fetch-unavailable markers for
905
+ non-null zoned values on the native fetch path. Use an explicit `TO_CHAR`
906
+ expression with the required precision and zone fields for those query forms.
716
907
  Displayed CLOB and BLOB values are limited to the first 65,536 characters or
717
908
  bytes and include a truncation marker with the full size. Truncated LOB cells
718
909
  cannot be edited safely. Schema-browser DDL is always read in full.
910
+ To copy DBMS_OUTPUT, show it with **F6** and focus it with **Tab**. Use
911
+ **Shift+navigation** to select text and **Ctrl+C** to copy; **Ctrl+A** selects
912
+ all output. **Alt-O -> Results -> Copy all DBMS_OUTPUT** also copies the whole
913
+ buffer while another pane is focused. Tab/Esc returns to the editor. Home/End
914
+ move within a displayed line; Ctrl+Home/End move to the output boundaries.
915
+
916
+ Copying preserves the stored text, whitespace, blank lines, and statement
917
+ headings, without screen wrapping or padding. The existing system clipboard
918
+ providers are used when available, with the internal clipboard as a fallback
919
+ (including remote PuTTY sessions). Ctrl+C still cancels a running operation
920
+ before performing a copy. Selection belongs to its file tab, survives appended
921
+ output and resizing, and resets when execution replaces the output.
922
+
719
923
  DBMS_OUTPUT is collected after each statement and after every fetched result
720
924
  page without replacing a real query grid. Output-read or cursor-cleanup failures
721
925
  are displayed as warnings while preserving successfully fetched rows. PL/SQL
@@ -980,6 +1184,39 @@ lifecycle change requires a restart. See the
980
1184
  [managed-package guide](https://gitlab.com/unununu/plsqlwks/-/blob/main/doc/PLUGINS.md#managed-plugin-packages)
981
1185
  for the exact manifest, source layout, validation, replacement, and trust rules.
982
1186
 
1187
+ ### Table DDL Export
1188
+
1189
+ Install `plugins/packages/table-ddl-export-0.1.1.plwgn` with
1190
+ `plsqlwks plugin install` and restart. **Alt-O -> Database -> Export table DDL**
1191
+ lets you choose a schema, filter table names as you type, select tables, and
1192
+ optionally remap them to another schema. It automatically includes related
1193
+ sequences and directly referencing packages, functions, procedures, and views, and follows
1194
+ required source-schema tables and views recursively. Definitions, constraints, indexes,
1195
+ foreign keys and triggers are ordered by creation dependencies in a new
1196
+ unsaved SQL tab for review. Generation activates that tab and focuses its editor.
1197
+ See the [selection keys and remapping details](doc/PLUGIN_CATALOG.md#table-ddl-export).
1198
+
1199
+ ### Dependencies walker
1200
+
1201
+ Install the optional dependency browser and restart PLSQLWKS:
1202
+
1203
+ ```bash
1204
+ plsqlwks plugin install plugins/packages/dependencies-walker-0.1.0.plwgn
1205
+ ```
1206
+
1207
+ Choose **Alt-O -> Database -> Dependencies walker** and enter an object name,
1208
+ optionally qualified by schema. Expand with Enter/Right, collapse with Left,
1209
+ and use **D** (Depends on) or **U** (Used by) to follow the selected object in
1210
+ either direction. Backspace restores the previous tree; **R** refreshes and
1211
+ Esc closes. Packages combine specification/body relationships with labels.
1212
+
1213
+ The walker reads only visible Oracle-recorded dependencies, loads branches
1214
+ on demand, marks cycles, and leaves database-link references unexpanded.
1215
+ Dynamic SQL and foreign-key graphs are outside this view. See the
1216
+ [plugin catalog](https://gitlab.com/unununu/plsqlwks/-/blob/main/doc/PLUGIN_CATALOG.md#dependencies-walker)
1217
+ for all controls and installation details. No additional runtime dependency is
1218
+ required.
1219
+
983
1220
  ### Maintained csv2oratab integration
984
1221
 
985
1222
  The maintained `csv2oratab-0.1.0.plwgn` catalog package adds **Alt-O -> Data ->
@@ -64,6 +64,55 @@ protect it with `chmod 600`.
64
64
  `PLSQLWKS_ARRAYSIZE` sets the Oracle cursor array size. Both values must be
65
65
  positive integers.
66
66
 
67
+ ### Oracle Thin and Thick modes
68
+
69
+ Thin mode is the default and needs no Oracle Client installation. To use an
70
+ installed Oracle Client, start with `plsqlwks --thick`. Use `plsqlwks --thin` to
71
+ override a workspace's thick preference for one invocation. The flags are
72
+ mutually exclusive and are never saved to configuration.
73
+
74
+ For a persistent preference, edit the selected workspace's `config.ini` (or the
75
+ platform configuration file when using the default workspace):
76
+
77
+ ```ini
78
+ [database]
79
+ thick_mode = no
80
+ oracle_client_lib_dir =
81
+ oracle_client_config_dir =
82
+ ```
83
+
84
+ Set `thick_mode = yes` to enable Thick mode. Invalid boolean values are errors.
85
+ Both optional directories expand `~`; relative paths are resolved from the
86
+ configuration file's directory. Blank values use Oracle's normal discovery.
87
+ The directory settings are used only in Thick mode. All tabs and reconnects
88
+ share one driver mode; restart after changing mode or client settings.
89
+
90
+ Install an Oracle Instant Client **Basic** or **Basic Light** package compatible
91
+ with your Python architecture, python-oracledb version, and database. Libraries
92
+ are installed separately and are not bundled with PLSQLWKS. On Linux, normally
93
+ leave `oracle_client_lib_dir` blank and configure `ldconfig` or `LD_LIBRARY_PATH`
94
+ **before** launching Python. Setting that directory alone does not configure
95
+ Linux's dependent-library search path. On macOS, an explicit library directory
96
+ can be useful. When running through SSH or WSL, install the libraries where the
97
+ Python process runs. For a full Oracle Client installation, configure its
98
+ Oracle environment before launch.
99
+
100
+ `oracle_client_config_dir` selects the directory containing Oracle network
101
+ configuration such as `sqlnet.ora` and `tnsnames.ora`; when blank, Oracle uses
102
+ its normal lookup, including `TNS_ADMIN`. Native network encryption is configured
103
+ through Oracle Client's `sqlnet.ora` and the server's matching requirements.
104
+ The existing `ORACLE_USER`, `ORACLE_DSN`, and password-file authentication remain
105
+ in use. See the [Oracle Client initialization guide](https://python-oracledb.readthedocs.io/en/v3.4.2/user_guide/initialization.html)
106
+ for platform setup and the [compatibility contract](doc/COMPATIBILITY.md) for
107
+ validated combinations.
108
+
109
+ Client-loading failures such as `DPI-1047` stop startup before the terminal UI,
110
+ with no automatic fallback. Check library architecture, required system
111
+ libraries, and the pre-launch library search path. Mode conflicts or changed
112
+ initialization arguments require a process restart. Successful connection status
113
+ includes `Thin mode` or `Thick mode`. Help, version, and plugin management commands
114
+ do not initialize Oracle Client libraries.
115
+
67
116
  ## Install
68
117
 
69
118
  Python 3.10 or newer is required, along with a compatible terminal and a Python
@@ -454,6 +503,149 @@ plsqlwks and asks whether to overwrite it, save under another name, or cancel.
454
503
  Undo and redo update the unsaved-change marker by comparing the current content
455
504
  with the last successful save.
456
505
 
506
+ ## Windows PuTTY keyboard setup
507
+
508
+ For Windows PuTTY 0.83 and 0.85, use a saved session with these settings before
509
+ starting plsqlwks on the Linux/Unix host:
510
+
511
+ | PuTTY panel | Setting |
512
+ | --- | --- |
513
+ | Connection → Data | Terminal-type string: `xterm-256color` |
514
+ | Window → Translation | Remote character set: `UTF-8` |
515
+ | Terminal → Keyboard | Backspace: `Control-? (127)`; Home/End: `Standard` |
516
+ | Terminal → Keyboard | Function keys and keypad: `Xterm 216+` |
517
+ | Terminal → Keyboard | Shifted arrow keys: `xterm-style bitmap` |
518
+ | Terminal → Keyboard | Keep **Control-Alt is different from AltGr** enabled |
519
+ | Terminal → Features | Enable **Disable application cursor keys mode** and **Disable application keypad mode** |
520
+ | Terminal → Features | Leave **Disable bracketed paste mode** unchecked |
521
+ | Terminal | Local echo and local line editing: `Force off` |
522
+
523
+ Save the session and use a UTF-8 locale on the host. Disabling application cursor
524
+ keys is necessary because curses enables that mode, and PuTTY otherwise drops
525
+ arrow modifiers even when bitmap mode is selected.
526
+
527
+ ### Exact Ctrl shortcuts with the Windows helper
528
+
529
+ Stock Windows PuTTY does not send Ctrl-Home/End, Ctrl-Shift-Home/End, or
530
+ Ctrl-Delete at all, and consumes modified PageUp/PageDown for scrollback.
531
+ Use the optional [Windows helper](tools/putty_keys.ps1) to make the original
532
+ shortcuts work. Run it on the **Windows computer running PuTTY**; from a checkout:
533
+
534
+ ```powershell
535
+ powershell.exe -NoProfile -File .\tools\putty_keys.ps1
536
+ ```
537
+
538
+ Focus the PuTTY window running plsqlwks, then press **Ctrl-Alt-F12** to enable
539
+ remapping for that window. The helper console confirms activation. It remaps
540
+ one selected PuTTY window while the helper is running. Press Ctrl-Alt-F12 again
541
+ to disable it before using another program in that terminal, or press Ctrl-C
542
+ in the helper console to stop it. Enabling a different PuTTY window switches
543
+ the selection to that window.
544
+
545
+ With the helper enabled, `Ctrl-Home` / `Ctrl-End` move to the beginning/end of
546
+ the editor buffer or the first/last result row. `Ctrl-Shift-Home` /
547
+ `Ctrl-Shift-End` select to buffer boundaries. The helper also restores
548
+ `Ctrl-Delete`, `Ctrl-Backspace`, `Ctrl-Enter`, `Ctrl-PageUp` / `Ctrl-PageDown`,
549
+ `Shift-PageUp` / `Shift-PageDown`, and `Ctrl+=`. Plain Enter and Backspace keep
550
+ their normal meaning. The helper requires only Windows PowerShell and its
551
+ included .NET runtime; it requires no administrator rights or installation.
552
+ Run the same command with `-SelfTest` to check its mappings without enabling it.
553
+
554
+ ### Alternatives without the helper
555
+
556
+ Some physical combinations cannot reach plsqlwks distinctly in stock Windows
557
+ PuTTY. Use the following alternatives; they also work in terminals that send
558
+ these sequences, and the original bindings remain available elsewhere:
559
+
560
+ | Existing shortcut | PuTTY alternative | Action |
561
+ | --- | --- | --- |
562
+ | `Ctrl-Home` / `Ctrl-End` | `Alt-Home` / `Alt-End` | Editor buffer start/end; first/last result row |
563
+ | `Ctrl-Shift-Home` / `Ctrl-Shift-End` | `Alt-Shift-Home` / `Alt-Shift-End` | Select to editor buffer boundaries |
564
+ | `Ctrl-Delete` | `Alt-Delete` | Delete next word |
565
+ | `Ctrl-Enter` | `F5` or `Alt-X` | Execute selection/current statement |
566
+ | `Ctrl-PageUp` / `Ctrl-PageDown` | `Alt-PageUp` / `Alt-PageDown` | Page focused results; otherwise switch file tabs |
567
+ | `Shift-PageUp` / `Shift-PageDown` | `Ctrl-Shift-Up` / `Ctrl-Shift-Down` | Extend editor selection by page |
568
+ | `Ctrl-Backspace` | `Alt-Backspace` | Delete previous word |
569
+ | `Ctrl+=` | `Alt-O` → **Database** → **Reconnect** | Reconnect |
570
+
571
+ PuTTY sends the same carriage return for Enter and Ctrl-Enter, and the same
572
+ DEL byte for Backspace and Ctrl-Backspace. plsqlwks preserves newline and
573
+ single-character deletion for those bytes. PuTTY consumes Ctrl/Shift-PageUp
574
+ and PageDown for its own scrollback; changing the function-key setting does
575
+ not free them. See the [PuTTY keyboard settings](https://the.earth.li/~sgtatham/putty/0.85/htmldoc/Chapter4.html#config-keyboard)
576
+ and [scrollback shortcuts](https://the.earth.li/~sgtatham/putty/0.85/htmldoc/Chapter3.html#using-scrollback).
577
+
578
+ Use left Alt for application shortcuts; AltGr remains available for characters
579
+ on international keyboards. Shortcut digits and symbols refer to the character
580
+ on the active Windows layout: for example, Czech top-row digits need Shift,
581
+ so Alt-1 is typed with Alt-Shift-1. Use the layout's `+` or `=` character for
582
+ autocomplete refresh. `Ctrl-C`, `Ctrl-X`, and `Ctrl-V` operate on the
583
+ application/host clipboard with the existing internal fallback. SSH does not
584
+ make that the Windows clipboard. Use PuTTY's native paste (`Shift-Insert` or
585
+ right-click) to insert Windows clipboard text as bracketed paste, and PuTTY
586
+ mouse selection to copy to Windows. Leave plsqlwks' Ctrl-letter shortcuts
587
+ available to the server when customizing PuTTY clipboard settings.
588
+
589
+ For troubleshooting, run `python3 rchar.py` from the checkout in the same PuTTY
590
+ session to capture a key's actual bytes. Verify the session settings above
591
+ before reporting a shortcut failure.
592
+
593
+ ## Windows Command Prompt keyboard setup
594
+
595
+ Use plsqlwks through `ssh.exe` or WSL inside **Command Prompt (`cmd.exe`)**.
596
+ The helper supports both the classic Windows console and Command Prompt hosted
597
+ by Windows Terminal. plsqlwks itself runs on the Linux/Unix host or inside WSL,
598
+ where Python provides curses.
599
+
600
+ In one Command Prompt window, connect to the host or start WSL:
601
+
602
+ ```bat
603
+ ssh user@host
604
+ ```
605
+
606
+ or:
607
+
608
+ ```bat
609
+ wsl.exe
610
+ ```
611
+
612
+ Then run the installed application in that Linux/Unix shell:
613
+
614
+ ```sh
615
+ TERM=xterm-256color plsqlwks
616
+ ```
617
+
618
+ In a **second Command Prompt window**, start the Windows helper from the checkout:
619
+
620
+ ```bat
621
+ tools\windows_keys.cmd
622
+ ```
623
+
624
+ Keep that helper window open. Focus the terminal running plsqlwks and press
625
+ **Ctrl-Alt-F12**; the helper confirms activation. The original shortcuts now
626
+ reach the application, including **Ctrl-Home/End**, **Ctrl-Shift-Home/End**,
627
+ modified arrows, word deletion, execution, paging, and `Ctrl+=`. `F11` executes
628
+ the script instead of switching Windows Terminal to fullscreen.
629
+
630
+ Use a dedicated terminal window for plsqlwks. The helper selects a window, so
631
+ disable it with Ctrl-Alt-F12 before switching that window to another tab, pane,
632
+ or program. Press Ctrl-C in the helper window to stop it. Left Alt is used for
633
+ shortcuts; AltGr remains available for typing. Leave the classic console's
634
+ **Use legacy console** option off. Use a UTF-8 locale on the Linux/Unix host.
635
+
636
+ For Windows Terminal, set `"altGrAliasing": false` in the Command Prompt
637
+ profile in its JSON settings. This keeps left Ctrl-Alt-C/R available for
638
+ commit/rollback on international keyboards while preserving the real AltGr
639
+ key. See Microsoft's [AltGr aliasing setting](https://learn.microsoft.com/en-us/windows/terminal/customize-settings/profile-advanced#altgr-aliasing).
640
+
641
+ The `.cmd` launcher uses the included Windows PowerShell runtime and applies
642
+ its script execution policy only to that helper process. No administrator
643
+ rights, installation, or permanent policy change is needed. Keep
644
+ `windows_keys.cmd` and `putty_keys.ps1` together when copying them elsewhere.
645
+ Run `tools\windows_keys.cmd -SelfTest` to check the helper without enabling it.
646
+ The original `powershell.exe -NoProfile -File .\tools\putty_keys.ps1` command
647
+ also works from Command Prompt and continues to support PuTTY.
648
+
457
649
  ## Keys
458
650
 
459
651
  ### Global
@@ -673,15 +865,27 @@ period; DATE and TIMESTAMP input uses ISO
673
865
  Character and CLOB input is preserved as entered. Types that cannot be compared
674
866
  without losing information, including time-zone timestamps and timestamps with
675
867
  precision above six, are read-only in the grid.
676
- In python-oracledb Thin mode, non-null `TIMESTAMP WITH TIME ZONE` and
677
- `TIMESTAMP WITH LOCAL TIME ZONE` values are shown and exported as explicit
678
- lossless-fetch-unavailable markers instead of misleading naive datetimes. Use
679
- an explicit `TO_CHAR` expression with the required precision and zone fields
680
- when the exact value is needed; named-zone timestamps are not supported by the
681
- current Thin driver.
868
+ In both driver modes, ordinary SELECT/WITH queries format zoned timestamps on
869
+ Oracle to preserve their zone and fractional precision. Query forms that cannot
870
+ use this projection show explicit lossless-fetch-unavailable markers for
871
+ non-null zoned values on the native fetch path. Use an explicit `TO_CHAR`
872
+ expression with the required precision and zone fields for those query forms.
682
873
  Displayed CLOB and BLOB values are limited to the first 65,536 characters or
683
874
  bytes and include a truncation marker with the full size. Truncated LOB cells
684
875
  cannot be edited safely. Schema-browser DDL is always read in full.
876
+ To copy DBMS_OUTPUT, show it with **F6** and focus it with **Tab**. Use
877
+ **Shift+navigation** to select text and **Ctrl+C** to copy; **Ctrl+A** selects
878
+ all output. **Alt-O -> Results -> Copy all DBMS_OUTPUT** also copies the whole
879
+ buffer while another pane is focused. Tab/Esc returns to the editor. Home/End
880
+ move within a displayed line; Ctrl+Home/End move to the output boundaries.
881
+
882
+ Copying preserves the stored text, whitespace, blank lines, and statement
883
+ headings, without screen wrapping or padding. The existing system clipboard
884
+ providers are used when available, with the internal clipboard as a fallback
885
+ (including remote PuTTY sessions). Ctrl+C still cancels a running operation
886
+ before performing a copy. Selection belongs to its file tab, survives appended
887
+ output and resizing, and resets when execution replaces the output.
888
+
685
889
  DBMS_OUTPUT is collected after each statement and after every fetched result
686
890
  page without replacing a real query grid. Output-read or cursor-cleanup failures
687
891
  are displayed as warnings while preserving successfully fetched rows. PL/SQL
@@ -946,6 +1150,39 @@ lifecycle change requires a restart. See the
946
1150
  [managed-package guide](https://gitlab.com/unununu/plsqlwks/-/blob/main/doc/PLUGINS.md#managed-plugin-packages)
947
1151
  for the exact manifest, source layout, validation, replacement, and trust rules.
948
1152
 
1153
+ ### Table DDL Export
1154
+
1155
+ Install `plugins/packages/table-ddl-export-0.1.1.plwgn` with
1156
+ `plsqlwks plugin install` and restart. **Alt-O -> Database -> Export table DDL**
1157
+ lets you choose a schema, filter table names as you type, select tables, and
1158
+ optionally remap them to another schema. It automatically includes related
1159
+ sequences and directly referencing packages, functions, procedures, and views, and follows
1160
+ required source-schema tables and views recursively. Definitions, constraints, indexes,
1161
+ foreign keys and triggers are ordered by creation dependencies in a new
1162
+ unsaved SQL tab for review. Generation activates that tab and focuses its editor.
1163
+ See the [selection keys and remapping details](doc/PLUGIN_CATALOG.md#table-ddl-export).
1164
+
1165
+ ### Dependencies walker
1166
+
1167
+ Install the optional dependency browser and restart PLSQLWKS:
1168
+
1169
+ ```bash
1170
+ plsqlwks plugin install plugins/packages/dependencies-walker-0.1.0.plwgn
1171
+ ```
1172
+
1173
+ Choose **Alt-O -> Database -> Dependencies walker** and enter an object name,
1174
+ optionally qualified by schema. Expand with Enter/Right, collapse with Left,
1175
+ and use **D** (Depends on) or **U** (Used by) to follow the selected object in
1176
+ either direction. Backspace restores the previous tree; **R** refreshes and
1177
+ Esc closes. Packages combine specification/body relationships with labels.
1178
+
1179
+ The walker reads only visible Oracle-recorded dependencies, loads branches
1180
+ on demand, marks cycles, and leaves database-link references unexpanded.
1181
+ Dynamic SQL and foreign-key graphs are outside this view. See the
1182
+ [plugin catalog](https://gitlab.com/unununu/plsqlwks/-/blob/main/doc/PLUGIN_CATALOG.md#dependencies-walker)
1183
+ for all controls and installation details. No additional runtime dependency is
1184
+ required.
1185
+
949
1186
  ### Maintained csv2oratab integration
950
1187
 
951
1188
  The maintained `csv2oratab-0.1.0.plwgn` catalog package adds **Alt-O -> Data ->