Skip to content

Commit

Permalink
Fix: Add compatibility with Oracle pre-12c
Browse files Browse the repository at this point in the history
  • Loading branch information
azratul committed Jul 3, 2024
1 parent 2527310 commit 964d4be
Showing 1 changed file with 39 additions and 7 deletions.
46 changes: 39 additions & 7 deletions autoload/db_ui/schemas.vim
Original file line number Diff line number Diff line change
Expand Up @@ -116,16 +116,37 @@ let s:oracle_args = join(
\ ],
\ ";\n"
\ ).';'
let s:oracle_foreign_key_query = "

function! s:get_oracle_queries()
let common_condition = ""
let legacy = 0

if exists('g:is_oracle_legacy')
let legacy = g:is_oracle_legacy
endif

if !legacy
let common_condition = "AND U.common = 'NO'"
endif

let foreign_key_query = "
\SELECT /*csv*/ DISTINCT RFRD.table_name, RFRD.column_name, RFRD.owner
\ FROM all_cons_columns RFRD
\ JOIN all_constraints CON ON RFRD.constraint_name = CON.r_constraint_name
\ JOIN all_cons_columns RFRING ON CON.constraint_name = RFRING.constraint_name
\ JOIN all_users U ON CON.owner = U.username
\ WHERE CON.constraint_type = 'R'
\ AND U.common = 'NO'
\ " . common_condition . "
\ AND RFRING.column_name = '{col_name}'"
let s:oracle_schemes_tables_query = "

let schemes_query = "
\SELECT /*csv*/ username
\ FROM all_users U
\ WHERE 1 = 1
\ " . common_condition . "
\ ORDER BY username"

let schemes_tables_query = "
\SELECT /*csv*/ T.owner, T.table_name
\ FROM (
\ SELECT owner, table_name
Expand All @@ -134,21 +155,32 @@ let s:oracle_schemes_tables_query = "
\ FROM all_views
\ ) T
\ JOIN all_users U ON T.owner = U.username
\ WHERE U.common = 'NO'
\ WHERE 1 = 1
\ " . common_condition . "
\ ORDER BY T.table_name"

return {
\ 'foreign_key_query': printf(s:oracle_args, foreign_key_query),
\ 'schemes_query': printf(s:oracle_args, schemes_query),
\ 'schemes_tables_query': printf(s:oracle_args, schemes_tables_query),
\ }
endfunction

let oracle_queries = s:get_oracle_queries()

let s:oracle = {
\ 'callable': 'filter',
\ 'cell_line_number': 1,
\ 'cell_line_pattern': '^-\+\( \+-\+\)*',
\ 'default_scheme': '',
\ 'foreign_key_query': printf(s:oracle_args, s:oracle_foreign_key_query),
\ 'foreign_key_query': oracle_queries.foreign_key_query,
\ 'has_virtual_results': v:true,
\ 'parse_results': {results, min_len -> s:results_parser(results[3:], '\s\s\+', min_len)},
\ 'parse_virtual_results': {results, min_len -> s:results_parser(results[3:], '\s\s\+', min_len)},
\ 'requires_stdin': v:true,
\ 'quote': v:true,
\ 'schemes_query': printf(s:oracle_args, "SELECT /*csv*/ username FROM all_users WHERE common = 'NO' ORDER BY username"),
\ 'schemes_tables_query': printf(s:oracle_args, s:oracle_schemes_tables_query),
\ 'schemes_query': oracle_queries.schemes_query,
\ 'schemes_tables_query': oracle_queries.schemes_tables_query,
\ 'select_foreign_key_query': printf(s:oracle_args, 'SELECT /*csv*/ * FROM "%s"."%s" WHERE "%s" = %s'),
\ 'filetype': 'plsql',
\ }
Expand Down

0 comments on commit 964d4be

Please sign in to comment.