feat(database): Oracle data source support (#1510)

Adds Oracle as a data source through rust-oracle (ODPI-C), which loads the user's
Oracle Instant Client at runtime; the client is not bundled. The Options tab takes
the Instant Client directory (empty: ORACLE_HOME or the system library path).
Covers connecting, the schema tree, consoles with PL/SQL blocks, table editing,
Generate DDL (DBMS_METADATA), Explain Plan (PLAN_TABLE), Oracle-specific SQL
generation and completion, and jdbc:oracle:thin URLs.

Review fixes: PL/SQL units keep their closing END; (the server rejects a block
without it), a subprogram's declarations no longer split it, and packages end at
a / line; LOB cells are read through locators (they showed as null and broke
Generate DDL); ORA-01005 prompts for a password; the Instant Client directory is
optional in the dialog.

Co-authored-by: boenkkk <[email protected]>
Цей коміт міститься в:
Budi Santosoтаboenkkk authored and GitHub committed 2026-11-06 09:57:03 +08:00
1 джерело b753d3f536
коміт 9069c322e8
29 files changed
+1735 -45

No files matched your search

+6 -3
Переглянути файл
@@ -68,9 +68,12 @@ export function quoteIdent(name: string, driver: DbDriver): string {
const plain =
driver === "postgres"
? /^[a-z_][a-z0-9_$]*$/
: driver === "clickhouse"
? /^[A-Za-z_][A-Za-z0-9_]*$/
: /^[A-Za-z_][A-Za-z0-9_$]*$/;
: // Oracle folds unquoted names to upper case; a lower-case name must stay quoted.
driver === "oracle"
? /^[A-Z_][A-Z0-9_$]*$/
: driver === "clickhouse"
? /^[A-Za-z_][A-Za-z0-9_]*$/
: /^[A-Za-z_][A-Za-z0-9_$]*$/;
if (plain.test(name) && !isReserved(name)) return name;
if (driver === "clickhouse") return `"${name.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
const q = driver === "mysql" ? "`" : '"';