1
1
" dbext.vim - Commn Database Utility
2
2
" Copyright (C) 2002-7, Peter Bagyinszki, David Fishburn
3
3
" ---------------------------------------------------------------
4
- " Version: 11.01
4
+ " Version: 12.00
5
5
" Maintainer: David Fishburn <dfishburn dot vim at gmail dot com>
6
6
" Authors: Peter Bagyinszki <petike1 at dpg dot hu>
7
7
" David Fishburn <dfishburn dot vim at gmail dot com>
8
- " Last Modified: 2009 Aug 27
8
+ " Last Modified: 2010 Jul 15
9
9
" Based On: sqlplus.vim (author: Jamis Buck)
10
10
" Created: 2002-05-24
11
11
" Homepage: http://vim.sourceforge.net/script.php?script_id=356
12
- " Contributors: Joerg Schoppet <joerg dot schoppet at web dot de>
13
- " Hari Krishna Dara <hari_vim at yahoo dot com>
12
+ " Contributors: Joerg Schoppet
13
+ " Hari Krishna Dara
14
14
" Ron Aaron
15
15
" Andi Stern
16
+ " Sergey Khorev
16
17
"
17
18
" Help: :h dbext.txt
18
19
"
@@ -37,7 +38,7 @@ if v:version < 700
37
38
echomsg " dbext: Version 4.00 or higher requires Vim7. Version 3.50 can stil be used with Vim6."
38
39
finish
39
40
endif
40
- let g: loaded_dbext_auto = 1101
41
+ let g: loaded_dbext_auto = 1200
41
42
42
43
" call confirm("Loaded dbext autoload", "&Ok")
43
44
" Script variable defaults, these are used internal and are never displayed
@@ -867,7 +868,7 @@ function! s:DB_getDefault(name)
867
868
elseif a: name == # " FIREBIRD_SQL_Top_sub" |return (exists (" g:dbext_default_FIREBIRD_SQL_Top_sub" )?g: dbext_default_FIREBIRD_SQL_Top_sub .' ' :' \1 FIRST @dbext_topX ' )
868
869
elseif a: name == # " ORA_bin" |return (exists (" g:dbext_default_ORA_bin" )?g: dbext_default_ORA_bin .' ' :' sqlplus' )
869
870
elseif a: name == # " ORA_cmd_header" |return (exists (" g:dbext_default_ORA_cmd_header" )?g: dbext_default_ORA_cmd_header .' ' :" " .
870
- \ " set pagesize 10000 \n " .
871
+ \ " set pagesize 50000 \n " .
871
872
\ " set wrap off\n " .
872
873
\ " set sqlprompt \"\" \n " .
873
874
\ " set linesize 10000\n " .
@@ -1391,7 +1392,6 @@ function! dbext#DB_checkModeline()
1391
1392
if rc > -1
1392
1393
call s: DB_validateBufferParameters ()
1393
1394
endif
1394
- break
1395
1395
else
1396
1396
if ( line (" ." ) < from_bottom_line )
1397
1397
silent exec ' normal! ' .from_bottom_line.' G' .col (" ." )." \<bar> "
@@ -1511,9 +1511,18 @@ function! dbext#DB_setMultipleOptions(multi_options, ...)
1511
1511
endif
1512
1512
1513
1513
" Special case due to regular expression syntax
1514
- if options_cs = ~ ' variable_def_regex'
1514
+ if options_cs = ~ ' \< variable_def_regex\> '
1515
1515
let opt_value = substitute (options_cs, ' variable_def_regex\s*=\s*' , ' ' , ' ' )
1516
- call s: DB_set (' variable_def_regex' , opt_value)
1516
+ if opt_value = ~ ' ^,'
1517
+ let l: variable_def_regex = s: DB_get (' variable_def_regex' )
1518
+ " if escape(','.l:variable_def_regex, '\\/.*$^~[]') !~ escape(opt_value, '\\/.*$^~[]')
1519
+ if ' ,' .l: variable_def_regex !~ escape (opt_value, ' \\/.*$^~[]' )
1520
+ " Append to existing values if not already present
1521
+ call s: DB_set (' variable_def_regex' , l: variable_def_regex .opt_value)
1522
+ endif
1523
+ else
1524
+ call s: DB_set (' variable_def_regex' , opt_value)
1525
+ endif
1517
1526
else
1518
1527
" Convert the comma separated list into a List
1519
1528
let options_mv = split (options_cs, ' :' )
@@ -2847,11 +2856,11 @@ function! s:DB_ORA_execSql(str)
2847
2856
" Added quit to the end of the command to exit SQLPLUS
2848
2857
if output !~ s: DB_escapeStr (terminator) .
2849
2858
\ ' [' ." \n " .' \t]*$'
2850
- let output = output . terminator
2859
+ let output = output . " \n " . terminator
2851
2860
endif
2852
2861
2853
2862
" Added quit to the end of the command to exit SQLPLUS
2854
- let output = output . " \n quit" .terminator
2863
+ let output = output . " \n quit"
2855
2864
2856
2865
exe ' redir! > ' . s: dbext_tempfile
2857
2866
silent echo output
@@ -2872,11 +2881,11 @@ function! s:DB_ORA_execSql(str)
2872
2881
endfunction
2873
2882
2874
2883
function ! s: DB_ORA_describeTable (table_name)
2875
- return s: DB_ORA_execSql (" desc " . a: table_name )
2884
+ return s: DB_ORA_execSql (" set linesize 100 \n desc " . a: table_name )
2876
2885
endfunction
2877
2886
2878
2887
function ! s: DB_ORA_describeProcedure (procedure_name)
2879
- return s: DB_ORA_execSql (" desc " . a: procedure_name )
2888
+ return s: DB_ORA_execSql (" set linesize 100 \n desc " . a: procedure_name )
2880
2889
endfunction
2881
2890
2882
2891
function ! s: DB_ORA_getListTable (table_prefix)
@@ -2897,16 +2906,39 @@ endfunction
2897
2906
function ! s: DB_ORA_getListProcedure (proc_prefix)
2898
2907
let owner = toupper (s: DB_getObjectOwner (a: proc_prefix ))
2899
2908
let obj_name = toupper (s: DB_getObjectName (a: proc_prefix ))
2900
- let query = " select object_name, owner " .
2901
- \ " from all_objects " .
2902
- \ " where object_type IN ('PROCEDURE', 'PACKAGE', 'FUNCTION') " .
2903
- \ " and object_name LIKE '" .obj_name." %' "
2904
- if strlen (owner) > 0
2905
- let query = query .
2906
- \ " and owner = '" .owner." ' "
2909
+ let pkg_name = s: DB_getObjectOwner (obj_name)
2910
+ if ! empty (pkg_name)
2911
+ let obj_name = s: DB_getObjectName (obj_name)
2912
+ endif
2913
+
2914
+ if ! empty (owner)
2915
+ if ! empty (pkg_name) " schema.package.procedure
2916
+ let query = " select procedure_name object_name, owner ||'.'|| object_name owner " .
2917
+ \ " from all_procedures " .
2918
+ \ " where object_type = 'PACKAGE' " .
2919
+ \ " and procedure_name LIKE '" .obj_name." %' " .
2920
+ \ " and owner = '" .owner." ' and object_name = '" .pkg_name." '"
2921
+ else " schema.procedureORpackage or package.procedure
2922
+ let query = " select object_name, owner " .
2923
+ \ " from all_objects " .
2924
+ \ " where object_type IN ('PROCEDURE', 'PACKAGE', 'FUNCTION') " .
2925
+ \ " and object_name LIKE '" .obj_name." %' " .
2926
+ \ " and owner = '" .owner." '" .
2927
+ \ " UNION ALL " .
2928
+ \ " select procedure_name, object_name " .
2929
+ \ " from all_procedures " .
2930
+ \ " where object_type = 'PACKAGE' " .
2931
+ \ " and object_name = '" .owner." '" .
2932
+ \ " and procedure_name LIKE '" .obj_name." %'"
2933
+ endif
2934
+ else " just a name
2935
+ let query = " select object_name, owner " .
2936
+ \ " from all_objects " .
2937
+ \ " where object_type IN ('PROCEDURE', 'PACKAGE', 'FUNCTION') " .
2938
+ \ " and object_name LIKE '" .obj_name." %' "
2907
2939
endif
2908
- let query = query .
2909
- \ " order by object_name "
2940
+
2941
+ let query .= " order by 1 "
2910
2942
return s: DB_ORA_execSql ( query )
2911
2943
endfunction
2912
2944
@@ -2920,8 +2952,7 @@ function! s:DB_ORA_getListView(view_prefix)
2920
2952
let query = query .
2921
2953
\ " and owner = '" .owner." ' "
2922
2954
endif
2923
- let query = query .
2924
- \ " order by view_name"
2955
+ let query .= " order by view_name"
2925
2956
return s: DB_ORA_execSql ( query )
2926
2957
endfunction
2927
2958
@@ -2931,19 +2962,17 @@ function! s:DB_ORA_getListColumn(table_name) "{{{
2931
2962
let query = " select column_name " .
2932
2963
\ " from ALL_TAB_COLUMNS " .
2933
2964
\ " where table_name = '" .table_name." ' "
2934
- if strlen (owner) > 0
2935
- let query = query .
2936
- \ " and owner = '" .owner." ' "
2965
+ if ! empty (owner)
2966
+ let query .= " and owner = '" .owner." ' "
2937
2967
endif
2938
- let query = query .
2939
- \ " order by column_id"
2968
+ let query .= " order by column_id"
2940
2969
let result = s: DB_ORA_execSql ( query )
2941
2970
return s: DB_ORA_stripHeaderFooter (result)
2942
2971
endfunction " }}}
2943
2972
2944
2973
function ! s: DB_ORA_stripHeaderFooter (result) " {{{
2945
2974
" Strip off column headers ending with a newline
2946
- let stripped = substitute ( a: result , ' \_.*-\s* ' . " [ \<C-J> ] " , ' ' , ' ' )
2975
+ let stripped = substitute ( a: result , ' ^ \_.\{-}[- ]\+\n ' , ' ' , ' g ' )
2947
2976
let g: dbext_rows_affected = matchstr (stripped, ' \zs\d\+\ze\s\+row' )
2948
2977
" Strip off query statistics
2949
2978
let stripped = substitute ( stripped, ' \d\+ rows\_.*' , ' ' , ' ' )
@@ -2957,6 +2986,7 @@ endfunction "}}}
2957
2986
2958
2987
function ! s: DB_ORA_getDictionaryTable () " {{{
2959
2988
let result = s: DB_ORA_execSql (
2989
+ \ " set pagesize 0\n " .
2960
2990
\ " select " .(s: DB_get (' dict_show_owner' )== 1 ?" owner||'.'||" :' ' )." table_name" .
2961
2991
\ " from ALL_ALL_TABLES " .
2962
2992
\ " order by " .(s: DB_get (' dict_show_owner' )== 1 ?" owner, " :' ' )." table_name "
@@ -2965,18 +2995,29 @@ function! s:DB_ORA_getDictionaryTable() "{{{
2965
2995
endfunction " }}}
2966
2996
2967
2997
function ! s: DB_ORA_getDictionaryProcedure () " {{{
2968
- let result = s: DB_ORA_execSql (
2969
- \ " select " .(s: DB_get (' dict_show_owner' )== 1 ?" owner||'.'||" :' ' )." object_name " .
2998
+ let query = " set pagesize 0 \n " .
2999
+ \" select " .(s:DB_get('dict_show_owner')==1?" owner|| ' .' || " :'')." object_name " .
2970
3000
\ " from all_objects " .
2971
3001
\ " where object_type IN " .
2972
3002
\ " ('PROCEDURE', 'PACKAGE', 'FUNCTION') " .
2973
- \ " order by " .(s: DB_get (' dict_show_owner' )== 1 ?" owner, " :' ' )." object_name "
2974
- \ )
3003
+ \ " UNION ALL " .
3004
+ \ " select " .(s: DB_get (' dict_show_owner' )== 1 ?" owner||'.'||object_name||'.'||" :' ' )." procedure_name " .
3005
+ \ " from all_procedures " .
3006
+ \ " where object_type = 'PACKAGE' and procedure_name is not null "
3007
+ if s: DB_get (' dict_show_owner' )== 1
3008
+ let query .= " UNION ALL " .
3009
+ \ " select object_name||'.'||procedure_name " .
3010
+ \ " from all_procedures " .
3011
+ \ " where object_type = 'PACKAGE' and procedure_name is not null "
3012
+ endif
3013
+ let query .= " order by 1"
3014
+ let result = s: DB_ORA_execSql (query)
2975
3015
return s: DB_ORA_stripHeaderFooter (result)
2976
3016
endfunction " }}}
2977
3017
2978
3018
function ! s: DB_ORA_getDictionaryView () " {{{
2979
3019
let result = s: DB_ORA_execSql (
3020
+ \ " set pagesize 0\n " .
2980
3021
\ " select " .(s: DB_get (' dict_show_owner' )== 1 ?" owner||'.'||" :' ' )." view_name " .
2981
3022
\ " from ALL_VIEWS " .
2982
3023
\ " order by " .(s: DB_get (' dict_show_owner' )== 1 ?" owner, " :' ' )." view_name "
@@ -3866,8 +3907,8 @@ function! s:DB_DBI_describeProcedure(procedure_name)
3866
3907
3867
3908
" The owner name can be optionally followed by a "." due to the syntax of
3868
3909
" some of the different databases (ASE and SQL Server)
3869
- let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_owner\.\?' , owner, ' ' )
3870
- let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_name' , object, ' ' )
3910
+ let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_owner\.\?' , owner, ' g ' )
3911
+ let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_name' , object, ' g ' )
3871
3912
3872
3913
let cmd = " perl db_query()"
3873
3914
exec cmd
@@ -4019,8 +4060,8 @@ function! s:DB_DBI_getListProcedure(proc_prefix)
4019
4060
return -1
4020
4061
endif
4021
4062
4022
- let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_owner' , owner, ' ' )
4023
- let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_name' , object, ' ' )
4063
+ let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_owner' , owner, ' g ' )
4064
+ let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_name' , object, ' g ' )
4024
4065
4025
4066
let cmd = " perl db_query()"
4026
4067
exec cmd
@@ -4433,8 +4474,8 @@ function! s:DB_ODBC_describeProcedure(procedure_name)
4433
4474
4434
4475
" The owner name can be optionally followed by a "." due to the syntax of
4435
4476
" some of the different databases (ASE and SQL Server)
4436
- let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_owner\.\?' , owner, ' ' )
4437
- let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_name' , object, ' ' )
4477
+ let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_owner\.\?' , owner, ' g ' )
4478
+ let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_name' , object, ' g ' )
4438
4479
4439
4480
let cmd = " perl db_query()"
4440
4481
exec cmd
@@ -4605,8 +4646,8 @@ function! s:DB_ODBC_getListProcedure(proc_prefix)
4605
4646
return -1
4606
4647
endif
4607
4648
4608
- let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_owner' , owner, ' ' )
4609
- let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_name' , object, ' ' )
4649
+ let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_owner' , owner, ' g ' )
4650
+ let g: dbext_dbi_sql = substitute (g: dbext_dbi_sql , ' dbext_replace_name' , object, ' g ' )
4610
4651
4611
4652
let cmd = " perl db_query()"
4612
4653
exec cmd
@@ -5481,7 +5522,7 @@ function! s:DB_getObjectOwner(object) "{{{
5481
5522
" \("\|\[\)\? - ignore any quotes
5482
5523
" \. - must by followed by a .
5483
5524
" let owner = matchstr( a:object, '^\s*\zs.*\ze\.' )
5484
- let owner = matchstr ( a: object , ' ^\("\|\[\)\?\zs\ .\{-}\ze\("\|\]\)\?\.' )
5525
+ let owner = matchstr ( a: object , ' ^\("\|\[\)\?\zs.\{-}\ze\("\|\]\)\?\.' )
5485
5526
return owner
5486
5527
endfunction " }}}
5487
5528
function ! s: DB_getObjectName (object) " {{{
@@ -7459,10 +7500,11 @@ function! s:DB_parsePerl(query)
7459
7500
7460
7501
" Prompt for the variables which are part of
7461
7502
" string concentations like this:
7462
- " "SELECT * FROM " + prefix+"product"
7463
- " "SELECT * FROM " + obj.method() +"product"
7503
+ " "SELECT * FROM " + $ prefix+"product"
7504
+ " "SELECT * FROM " + $ obj.method() +"product"
7464
7505
" "SELECT * FROM " . method() ."product"
7465
- let var_expr = ' "\s*\(+\|\.\)\s*\(.\{-}\)\s*\(+\|\.\)\s*"'
7506
+ " "SELECT * FROM product WHERE c1 = $mycol AND c2 = ".$cols[2];
7507
+ let var_expr = ' "\s*\(+\|\.\)\s*\(.\{-}\)\s*\(\(\(+\|\.\)\s*"\)\|;\|$\)'
7466
7508
" "\s* - Double quote followed any space
7467
7509
" \(+\|\.\) - A plus sign or period
7468
7510
" \s* - Any space
@@ -7472,6 +7514,12 @@ function! s:DB_parsePerl(query)
7472
7514
" \s*" - Any space followed by a double quote
7473
7515
let query = s: DB_searchReplace (query, var_expr, var_expr, 0 )
7474
7516
7517
+ " Prompt for $ variables
7518
+ " "SELECT * FROM product WHERE c1 = $mycol "
7519
+ let var_expr = ' \(\$\w\+\)'
7520
+ " \(\$\w\+\) - The variable / obj / method beginning with a $
7521
+ let query = s: DB_searchReplace (query, var_expr, var_expr, 0 )
7522
+
7475
7523
return query
7476
7524
endfunction
7477
7525
" }}}
@@ -7583,7 +7631,7 @@ function! s:DB_parseProfile(value)
7583
7631
let no_defaults = 0
7584
7632
let rc = s: DB_resetBufferParameters (no_defaults)
7585
7633
7586
- if profile_value = ~? ' profile'
7634
+ if profile_value = ~? ' \< profile\> '
7587
7635
let rc = -1
7588
7636
call s: DB_warningMsg (' dbext: Profiles cannot be nested' )
7589
7637
return -1
0 commit comments