From 964d4be52de15e4cbcc757ad0f9daa9a42ee0cfa Mon Sep 17 00:00:00 2001 From: Claudio Lepin Date: Wed, 3 Jul 2024 14:37:55 -0400 Subject: [PATCH 1/2] Fix: Add compatibility with Oracle pre-12c --- autoload/db_ui/schemas.vim | 46 ++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/autoload/db_ui/schemas.vim b/autoload/db_ui/schemas.vim index 1f58019..69e8c77 100644 --- a/autoload/db_ui/schemas.vim +++ b/autoload/db_ui/schemas.vim @@ -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 @@ -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', \ } From 693471f747ad0acf5b286f6265639e0e7deaef28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claudio=20Lep=C3=ADn=20Mena?= Date: Thu, 4 Jul 2024 20:39:44 -0400 Subject: [PATCH 2/2] Refactor: Move global variable to new location in line with plugin structure --- autoload/db_ui/schemas.vim | 7 +------ plugin/db_ui.vim | 1 + 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/autoload/db_ui/schemas.vim b/autoload/db_ui/schemas.vim index 69e8c77..81732d8 100644 --- a/autoload/db_ui/schemas.vim +++ b/autoload/db_ui/schemas.vim @@ -119,13 +119,8 @@ let s:oracle_args = join( 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 + if !g:db_ui_is_oracle_legacy let common_condition = "AND U.common = 'NO'" endif diff --git a/plugin/db_ui.vim b/plugin/db_ui.vim index 21e5b48..57744ff 100644 --- a/plugin/db_ui.vim +++ b/plugin/db_ui.vim @@ -26,6 +26,7 @@ let g:Db_ui_buffer_name_generator = get(g:, 'Db_ui_buffer_name_generator', 0) let g:db_ui_debug = get(g:, 'db_ui_debug', 0) let g:db_ui_hide_schemas = get(g:, 'db_ui_hide_schemas', []) let g:db_ui_bind_param_pattern = get(g: , 'db_ui_bind_param_pattern', ':\w\+') +let g:db_ui_is_oracle_legacy = get(g:, 'db_ui_is_oracle_legacy', 0) let s:dbui_icons = get(g:, 'db_ui_icons', {}) let s:expanded_icon = get(s:dbui_icons, 'expanded', '▾') let s:collapsed_icon = get(s:dbui_icons, 'collapsed', '▸')