utils 0.0.67 → 0.0.68
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/bin/edit +3 -1
- data/lib/utils/editor.rb +14 -0
- data/lib/utils/version.rb +1 -1
- data/utils.gemspec +3 -3
- metadata +3 -74
- data/lib/utils/config/vim/after/syntax/haml.vim +0 -9
- data/lib/utils/config/vim/after/syntax/html.vim +0 -11
- data/lib/utils/config/vim/autoload/Align.vim +0 -1029
- data/lib/utils/config/vim/autoload/AlignMaps.vim +0 -330
- data/lib/utils/config/vim/autoload/ctrlp/bookmarkdir.vim +0 -139
- data/lib/utils/config/vim/autoload/ctrlp/buffertag.vim +0 -238
- data/lib/utils/config/vim/autoload/ctrlp/changes.vim +0 -96
- data/lib/utils/config/vim/autoload/ctrlp/dir.vim +0 -90
- data/lib/utils/config/vim/autoload/ctrlp/line.vim +0 -63
- data/lib/utils/config/vim/autoload/ctrlp/mixed.vim +0 -83
- data/lib/utils/config/vim/autoload/ctrlp/mrufiles.vim +0 -119
- data/lib/utils/config/vim/autoload/ctrlp/quickfix.vim +0 -62
- data/lib/utils/config/vim/autoload/ctrlp/rtscript.vim +0 -49
- data/lib/utils/config/vim/autoload/ctrlp/tag.vim +0 -112
- data/lib/utils/config/vim/autoload/ctrlp/undo.vim +0 -154
- data/lib/utils/config/vim/autoload/ctrlp/utils.vim +0 -72
- data/lib/utils/config/vim/autoload/ctrlp.vim +0 -1772
- data/lib/utils/config/vim/autoload/rails.vim +0 -4570
- data/lib/utils/config/vim/autoload/rubycomplete.vim +0 -801
- data/lib/utils/config/vim/autoload/sqlcomplete.vim +0 -741
- data/lib/utils/config/vim/autoload/vimball.vim +0 -750
- data/lib/utils/config/vim/colors/flori.vim +0 -116
- data/lib/utils/config/vim/compiler/coffee.vim +0 -68
- data/lib/utils/config/vim/compiler/eruby.vim +0 -40
- data/lib/utils/config/vim/compiler/ruby.vim +0 -67
- data/lib/utils/config/vim/compiler/rubyunit.vim +0 -34
- data/lib/utils/config/vim/doc/Decho.txt +0 -372
- data/lib/utils/config/vim/doc/coffee-script.txt +0 -116
- data/lib/utils/config/vim/doc/ctrlp.txt +0 -1113
- data/lib/utils/config/vim/doc/fugitive.txt +0 -257
- data/lib/utils/config/vim/doc/rails.txt +0 -1022
- data/lib/utils/config/vim/doc/xml-plugin.txt +0 -226
- data/lib/utils/config/vim/ftdetect/coffee.vim +0 -8
- data/lib/utils/config/vim/ftdetect/eco.vim +0 -1
- data/lib/utils/config/vim/ftdetect/ragel.vim +0 -2
- data/lib/utils/config/vim/ftdetect/ruby.vim +0 -17
- data/lib/utils/config/vim/ftdetect/slim.vim +0 -2
- data/lib/utils/config/vim/ftplugin/coffee.vim +0 -221
- data/lib/utils/config/vim/ftplugin/eruby.vim +0 -100
- data/lib/utils/config/vim/ftplugin/ruby.vim +0 -260
- data/lib/utils/config/vim/ftplugin/xml.vim +0 -941
- data/lib/utils/config/vim/indent/IndentAnything_html.vim +0 -35
- data/lib/utils/config/vim/indent/coffee.vim +0 -338
- data/lib/utils/config/vim/indent/eruby.vim +0 -77
- data/lib/utils/config/vim/indent/javascript.vim +0 -116
- data/lib/utils/config/vim/indent/ruby.vim +0 -377
- data/lib/utils/config/vim/indent/slim.vim +0 -75
- data/lib/utils/config/vim/plugin/AlignMapsPlugin.vim +0 -242
- data/lib/utils/config/vim/plugin/AlignPlugin.vim +0 -41
- data/lib/utils/config/vim/plugin/Decho.vim +0 -592
- data/lib/utils/config/vim/plugin/IndentAnything.vim +0 -675
- data/lib/utils/config/vim/plugin/bufexplorer.vim +0 -1144
- data/lib/utils/config/vim/plugin/cecutil.vim +0 -508
- data/lib/utils/config/vim/plugin/ctrlp.vim +0 -61
- data/lib/utils/config/vim/plugin/fugitive.vim +0 -2041
- data/lib/utils/config/vim/plugin/lusty-explorer.vim +0 -1509
- data/lib/utils/config/vim/plugin/rails.vim +0 -339
- data/lib/utils/config/vim/plugin/rubyextra.vim +0 -193
- data/lib/utils/config/vim/plugin/surround.vim +0 -628
- data/lib/utils/config/vim/plugin/taglist.vim +0 -4546
- data/lib/utils/config/vim/plugin/test/IndentAnything/test.js +0 -131
- data/lib/utils/config/vim/plugin/vimballPlugin.vim +0 -40
- data/lib/utils/config/vim/syntax/Decho.vim +0 -101
- data/lib/utils/config/vim/syntax/coffee.vim +0 -217
- data/lib/utils/config/vim/syntax/eco.vim +0 -62
- data/lib/utils/config/vim/syntax/eruby.vim +0 -73
- data/lib/utils/config/vim/syntax/javascript.vim +0 -246
- data/lib/utils/config/vim/syntax/ragel.vim +0 -165
- data/lib/utils/config/vim/syntax/ruby.vim +0 -367
- data/lib/utils/config/vim/syntax/slim.vim +0 -117
- data/lib/utils/config/vimrc +0 -540
@@ -1,741 +0,0 @@
|
|
1
|
-
" Vim OMNI completion script for SQL
|
2
|
-
" Language: SQL
|
3
|
-
" Maintainer: David Fishburn <dfishburn dot vim at gmail dot com>
|
4
|
-
" Version: 9.0
|
5
|
-
" Last Change: 2010 May 13
|
6
|
-
" Usage: For detailed help
|
7
|
-
" ":help sql.txt"
|
8
|
-
" or ":help ft-sql-omni"
|
9
|
-
" or read $VIMRUNTIME/doc/sql.txt
|
10
|
-
|
11
|
-
" History
|
12
|
-
" Version 9.0
|
13
|
-
" This change removes some of the support for tables with spaces in their
|
14
|
-
" names in order to simplify the regexes used to pull out query table
|
15
|
-
" aliases for more robust table name and column name code completion.
|
16
|
-
" Full support for "table names with spaces" can be added in again
|
17
|
-
" after 7.3.
|
18
|
-
" Version 8.0
|
19
|
-
" Incorrectly re-executed the g:ftplugin_sql_omni_key_right and g:ftplugin_sql_omni_key_left
|
20
|
-
" when drilling in and out of a column list for a table.
|
21
|
-
" Version 7.0
|
22
|
-
" Better handling of object names
|
23
|
-
" Version 6.0
|
24
|
-
" Supports object names with spaces "my table name"
|
25
|
-
"
|
26
|
-
" Set completion with CTRL-X CTRL-O to autoloaded function.
|
27
|
-
" This check is in place in case this script is
|
28
|
-
" sourced directly instead of using the autoload feature.
|
29
|
-
if exists('&omnifunc')
|
30
|
-
" Do not set the option if already set since this
|
31
|
-
" results in an E117 warning.
|
32
|
-
if &omnifunc == ""
|
33
|
-
setlocal omnifunc=sqlcomplete#Complete
|
34
|
-
endif
|
35
|
-
endif
|
36
|
-
|
37
|
-
if exists('g:loaded_sql_completion')
|
38
|
-
finish
|
39
|
-
endif
|
40
|
-
let g:loaded_sql_completion = 70
|
41
|
-
|
42
|
-
" Maintains filename of dictionary
|
43
|
-
let s:sql_file_table = ""
|
44
|
-
let s:sql_file_procedure = ""
|
45
|
-
let s:sql_file_view = ""
|
46
|
-
|
47
|
-
" Define various arrays to be used for caching
|
48
|
-
let s:tbl_name = []
|
49
|
-
let s:tbl_alias = []
|
50
|
-
let s:tbl_cols = []
|
51
|
-
let s:syn_list = []
|
52
|
-
let s:syn_value = []
|
53
|
-
|
54
|
-
" Used in conjunction with the syntaxcomplete plugin
|
55
|
-
let s:save_inc = ""
|
56
|
-
let s:save_exc = ""
|
57
|
-
if exists('g:omni_syntax_group_include_sql')
|
58
|
-
let s:save_inc = g:omni_syntax_group_include_sql
|
59
|
-
endif
|
60
|
-
if exists('g:omni_syntax_group_exclude_sql')
|
61
|
-
let s:save_exc = g:omni_syntax_group_exclude_sql
|
62
|
-
endif
|
63
|
-
|
64
|
-
" Used with the column list
|
65
|
-
let s:save_prev_table = ""
|
66
|
-
|
67
|
-
" Default the option to verify table alias
|
68
|
-
if !exists('g:omni_sql_use_tbl_alias')
|
69
|
-
let g:omni_sql_use_tbl_alias = 'a'
|
70
|
-
endif
|
71
|
-
" Default syntax items to precache
|
72
|
-
if !exists('g:omni_sql_precache_syntax_groups')
|
73
|
-
let g:omni_sql_precache_syntax_groups = [
|
74
|
-
\ 'syntax',
|
75
|
-
\ 'sqlKeyword',
|
76
|
-
\ 'sqlFunction',
|
77
|
-
\ 'sqlOption',
|
78
|
-
\ 'sqlType',
|
79
|
-
\ 'sqlStatement'
|
80
|
-
\ ]
|
81
|
-
endif
|
82
|
-
" Set ignorecase to the ftplugin standard
|
83
|
-
if !exists('g:omni_sql_ignorecase')
|
84
|
-
let g:omni_sql_ignorecase = &ignorecase
|
85
|
-
endif
|
86
|
-
" During table completion, should the table list also
|
87
|
-
" include the owner name
|
88
|
-
if !exists('g:omni_sql_include_owner')
|
89
|
-
let g:omni_sql_include_owner = 0
|
90
|
-
if exists('g:loaded_dbext')
|
91
|
-
if g:loaded_dbext >= 300
|
92
|
-
" New to dbext 3.00, by default the table lists include the owner
|
93
|
-
" name of the table. This is used when determining how much of
|
94
|
-
" whatever has been typed should be replaced as part of the
|
95
|
-
" code replacement.
|
96
|
-
let g:omni_sql_include_owner = 1
|
97
|
-
endif
|
98
|
-
endif
|
99
|
-
endif
|
100
|
-
|
101
|
-
" This function is used for the 'omnifunc' option.
|
102
|
-
function! sqlcomplete#Complete(findstart, base)
|
103
|
-
|
104
|
-
" Default to table name completion
|
105
|
-
let compl_type = 'table'
|
106
|
-
" Allow maps to specify what type of object completion they want
|
107
|
-
if exists('b:sql_compl_type')
|
108
|
-
let compl_type = b:sql_compl_type
|
109
|
-
endif
|
110
|
-
|
111
|
-
" First pass through this function determines how much of the line should
|
112
|
-
" be replaced by whatever is chosen from the completion list
|
113
|
-
if a:findstart
|
114
|
-
" Locate the start of the item, including "."
|
115
|
-
let line = getline('.')
|
116
|
-
let start = col('.') - 1
|
117
|
-
let lastword = -1
|
118
|
-
let begindot = 0
|
119
|
-
" Check if the first character is a ".", for column completion
|
120
|
-
if line[start - 1] == '.'
|
121
|
-
let begindot = 1
|
122
|
-
endif
|
123
|
-
while start > 0
|
124
|
-
" Additional code was required to handle objects which
|
125
|
-
" can contain spaces like "my table name".
|
126
|
-
if line[start - 1] !~ '\(\w\|\.\)'
|
127
|
-
" If the previous character is not a period or word character
|
128
|
-
break
|
129
|
-
" elseif line[start - 1] =~ '\(\w\|\s\+\)'
|
130
|
-
" let start -= 1
|
131
|
-
elseif line[start - 1] =~ '\w'
|
132
|
-
" If the previous character is word character continue back
|
133
|
-
let start -= 1
|
134
|
-
elseif line[start - 1] =~ '\.' &&
|
135
|
-
\ compl_type =~ 'column\|table\|view\|procedure'
|
136
|
-
" If the previous character is a period and we are completing
|
137
|
-
" an object which can be specified with a period like this:
|
138
|
-
" table_name.column_name
|
139
|
-
" owner_name.table_name
|
140
|
-
|
141
|
-
" If lastword has already been set for column completion
|
142
|
-
" break from the loop, since we do not also want to pickup
|
143
|
-
" a table name if it was also supplied.
|
144
|
-
if lastword != -1 && compl_type == 'column'
|
145
|
-
break
|
146
|
-
endif
|
147
|
-
" If column completion was specified stop at the "." if
|
148
|
-
" a . was specified, otherwise, replace all the way up
|
149
|
-
" to the owner name (if included).
|
150
|
-
if lastword == -1 && compl_type == 'column' && begindot == 1
|
151
|
-
let lastword = start
|
152
|
-
endif
|
153
|
-
" If omni_sql_include_owner = 0, do not include the table
|
154
|
-
" name as part of the substitution, so break here
|
155
|
-
if lastword == -1 &&
|
156
|
-
\ compl_type =~ 'table\|view\|procedure\column_csv' &&
|
157
|
-
\ g:omni_sql_include_owner == 0
|
158
|
-
let lastword = start
|
159
|
-
break
|
160
|
-
endif
|
161
|
-
let start -= 1
|
162
|
-
else
|
163
|
-
break
|
164
|
-
endif
|
165
|
-
endwhile
|
166
|
-
|
167
|
-
" Return the column of the last word, which is going to be changed.
|
168
|
-
" Remember the text that comes before it in s:prepended.
|
169
|
-
if lastword == -1
|
170
|
-
let s:prepended = ''
|
171
|
-
return start
|
172
|
-
endif
|
173
|
-
let s:prepended = strpart(line, start, lastword - start)
|
174
|
-
return lastword
|
175
|
-
endif
|
176
|
-
|
177
|
-
" Second pass through this function will determine what data to put inside
|
178
|
-
" of the completion list
|
179
|
-
" s:prepended is set by the first pass
|
180
|
-
let base = s:prepended . a:base
|
181
|
-
|
182
|
-
" Default the completion list to an empty list
|
183
|
-
let compl_list = []
|
184
|
-
|
185
|
-
" Default to table name completion
|
186
|
-
let compl_type = 'table'
|
187
|
-
" Allow maps to specify what type of object completion they want
|
188
|
-
if exists('b:sql_compl_type')
|
189
|
-
let compl_type = b:sql_compl_type
|
190
|
-
unlet b:sql_compl_type
|
191
|
-
endif
|
192
|
-
|
193
|
-
if compl_type == 'tableReset'
|
194
|
-
let compl_type = 'table'
|
195
|
-
let base = ''
|
196
|
-
endif
|
197
|
-
|
198
|
-
if compl_type == 'table' ||
|
199
|
-
\ compl_type == 'procedure' ||
|
200
|
-
\ compl_type == 'view'
|
201
|
-
|
202
|
-
" This type of completion relies upon the dbext.vim plugin
|
203
|
-
if s:SQLCCheck4dbext() == -1
|
204
|
-
return []
|
205
|
-
endif
|
206
|
-
|
207
|
-
" Allow the user to override the dbext plugin to specify whether
|
208
|
-
" the owner/creator should be included in the list
|
209
|
-
if g:loaded_dbext >= 300
|
210
|
-
let saveSetting = DB_listOption('dict_show_owner')
|
211
|
-
exec 'DBSetOption dict_show_owner='.(g:omni_sql_include_owner==1?'1':'0')
|
212
|
-
endif
|
213
|
-
|
214
|
-
let compl_type_uc = substitute(compl_type, '\w\+', '\u&', '')
|
215
|
-
" Same call below, no need to do it twice
|
216
|
-
" if s:sql_file_{compl_type} == ""
|
217
|
-
" let s:sql_file_{compl_type} = DB_getDictionaryName(compl_type_uc)
|
218
|
-
" endif
|
219
|
-
let s:sql_file_{compl_type} = DB_getDictionaryName(compl_type_uc)
|
220
|
-
if s:sql_file_{compl_type} != ""
|
221
|
-
if filereadable(s:sql_file_{compl_type})
|
222
|
-
let compl_list = readfile(s:sql_file_{compl_type})
|
223
|
-
endif
|
224
|
-
endif
|
225
|
-
|
226
|
-
if g:loaded_dbext > 300
|
227
|
-
exec 'DBSetOption dict_show_owner='.saveSetting
|
228
|
-
endif
|
229
|
-
elseif compl_type =~? 'column'
|
230
|
-
|
231
|
-
" This type of completion relies upon the dbext.vim plugin
|
232
|
-
if s:SQLCCheck4dbext() == -1
|
233
|
-
return []
|
234
|
-
endif
|
235
|
-
|
236
|
-
if base == ""
|
237
|
-
" The last time we displayed a column list we stored
|
238
|
-
" the table name. If the user selects a column list
|
239
|
-
" without a table name of alias present, assume they want
|
240
|
-
" the previous column list displayed.
|
241
|
-
let base = s:save_prev_table
|
242
|
-
endif
|
243
|
-
|
244
|
-
let owner = ''
|
245
|
-
let column = ''
|
246
|
-
|
247
|
-
if base =~ '\.'
|
248
|
-
" Check if the owner/creator has been specified
|
249
|
-
let owner = matchstr( base, '^\zs.*\ze\..*\..*' )
|
250
|
-
let table = matchstr( base, '^\(.*\.\)\?\zs.*\ze\..*' )
|
251
|
-
let column = matchstr( base, '.*\.\zs.*' )
|
252
|
-
|
253
|
-
" It is pretty well impossible to determine if the user
|
254
|
-
" has entered:
|
255
|
-
" owner.table
|
256
|
-
" table.column_prefix
|
257
|
-
" So there are a couple of things we can do to mitigate
|
258
|
-
" this issue.
|
259
|
-
" 1. Check if the dbext plugin has the option turned
|
260
|
-
" on to even allow owners
|
261
|
-
" 2. Based on 1, if the user is showing a table list
|
262
|
-
" and the DrillIntoTable (using <Right>) then
|
263
|
-
" this will be owner.table. In this case, we can
|
264
|
-
" check to see the table.column exists in the
|
265
|
-
" cached table list. If it does, then we have
|
266
|
-
" determined the user has actually chosen
|
267
|
-
" owner.table, not table.column_prefix.
|
268
|
-
let found = -1
|
269
|
-
if g:omni_sql_include_owner == 1 && owner == ''
|
270
|
-
if filereadable(s:sql_file_table)
|
271
|
-
let tbl_list = readfile(s:sql_file_table)
|
272
|
-
let found = index( tbl_list, ((table != '')?(table.'.'):'').column)
|
273
|
-
endif
|
274
|
-
endif
|
275
|
-
" If the table.column was found in the table list, we can safely assume
|
276
|
-
" the owner was not provided and shift the items appropriately.
|
277
|
-
" OR
|
278
|
-
" If the user has indicated not to use table owners at all and
|
279
|
-
" the base ends in a '.' we know they are not providing a column
|
280
|
-
" name, so we can shift the items appropriately.
|
281
|
-
if found != -1 || (g:omni_sql_include_owner == 0 && base !~ '\.$')
|
282
|
-
let owner = table
|
283
|
-
let table = column
|
284
|
-
let column = ''
|
285
|
-
endif
|
286
|
-
else
|
287
|
-
let table = base
|
288
|
-
endif
|
289
|
-
|
290
|
-
" Get anything after the . and consider this the table name
|
291
|
-
" If an owner has been specified, then we must consider the
|
292
|
-
" base to be a partial column name
|
293
|
-
" let base = matchstr( base, '^\(.*\.\)\?\zs.*' )
|
294
|
-
|
295
|
-
if table != ""
|
296
|
-
let s:save_prev_table = base
|
297
|
-
let list_type = ''
|
298
|
-
|
299
|
-
if compl_type == 'column_csv'
|
300
|
-
" Return one array element, with a comma separated
|
301
|
-
" list of values instead of multiple array entries
|
302
|
-
" for each column in the table.
|
303
|
-
let list_type = 'csv'
|
304
|
-
endif
|
305
|
-
|
306
|
-
let compl_list = s:SQLCGetColumns(table, list_type)
|
307
|
-
if column != ''
|
308
|
-
" If no column prefix has been provided and the table
|
309
|
-
" name was provided, append it to each of the items
|
310
|
-
" returned.
|
311
|
-
let compl_list = map(compl_list, "table.'.'.v:val")
|
312
|
-
if owner != ''
|
313
|
-
" If an owner has been provided append it to each of the
|
314
|
-
" items returned.
|
315
|
-
let compl_list = map(compl_list, "owner.'.'.v:val")
|
316
|
-
endif
|
317
|
-
else
|
318
|
-
let base = ''
|
319
|
-
endif
|
320
|
-
|
321
|
-
if compl_type == 'column_csv'
|
322
|
-
" Join the column array into 1 single element array
|
323
|
-
" but make the columns column separated
|
324
|
-
let compl_list = [join(compl_list, ', ')]
|
325
|
-
endif
|
326
|
-
endif
|
327
|
-
elseif compl_type == 'resetCache'
|
328
|
-
" Reset all cached items
|
329
|
-
let s:tbl_name = []
|
330
|
-
let s:tbl_alias = []
|
331
|
-
let s:tbl_cols = []
|
332
|
-
let s:syn_list = []
|
333
|
-
let s:syn_value = []
|
334
|
-
|
335
|
-
let msg = "All SQL cached items have been removed."
|
336
|
-
call s:SQLCWarningMsg(msg)
|
337
|
-
" Leave time for the user to read the error message
|
338
|
-
:sleep 2
|
339
|
-
else
|
340
|
-
let compl_list = s:SQLCGetSyntaxList(compl_type)
|
341
|
-
endif
|
342
|
-
|
343
|
-
if base != ''
|
344
|
-
" Filter the list based on the first few characters the user entered.
|
345
|
-
" Check if the text matches at the beginning
|
346
|
-
" or
|
347
|
-
" Match to a owner.table or alias.column type match
|
348
|
-
" or
|
349
|
-
" Handle names with spaces "my table name"
|
350
|
-
let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|^\\(\\w\\+\\.\\)\\?'.base.'\\)"'
|
351
|
-
" let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\)"'
|
352
|
-
" let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\(\\.\\)\\?'.base.'\\)"'
|
353
|
-
" let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\([^.]*\\)\\?'.base.'\\)"'
|
354
|
-
let compl_list = filter(deepcopy(compl_list), expr)
|
355
|
-
endif
|
356
|
-
|
357
|
-
if exists('b:sql_compl_savefunc') && b:sql_compl_savefunc != ""
|
358
|
-
let &omnifunc = b:sql_compl_savefunc
|
359
|
-
endif
|
360
|
-
|
361
|
-
return compl_list
|
362
|
-
endfunc
|
363
|
-
|
364
|
-
function! sqlcomplete#PreCacheSyntax(...)
|
365
|
-
let syn_group_arr = []
|
366
|
-
if a:0 > 0
|
367
|
-
let syn_group_arr = a:1
|
368
|
-
else
|
369
|
-
let syn_group_arr = g:omni_sql_precache_syntax_groups
|
370
|
-
endif
|
371
|
-
" For each group specified in the list, precache all
|
372
|
-
" the sytnax items.
|
373
|
-
if !empty(syn_group_arr)
|
374
|
-
for group_name in syn_group_arr
|
375
|
-
call s:SQLCGetSyntaxList(group_name)
|
376
|
-
endfor
|
377
|
-
endif
|
378
|
-
endfunction
|
379
|
-
|
380
|
-
function! sqlcomplete#Map(type)
|
381
|
-
" Tell the SQL plugin what you want to complete
|
382
|
-
let b:sql_compl_type=a:type
|
383
|
-
" Record previous omnifunc, if the SQL completion
|
384
|
-
" is being used in conjunction with other filetype
|
385
|
-
" completion plugins
|
386
|
-
if &omnifunc != "" && &omnifunc != 'sqlcomplete#Complete'
|
387
|
-
" Record the previous omnifunc, the plugin
|
388
|
-
" will automatically set this back so that it
|
389
|
-
" does not interfere with other ftplugins settings
|
390
|
-
let b:sql_compl_savefunc=&omnifunc
|
391
|
-
endif
|
392
|
-
" Set the OMNI func for the SQL completion plugin
|
393
|
-
let &omnifunc='sqlcomplete#Complete'
|
394
|
-
endfunction
|
395
|
-
|
396
|
-
function! sqlcomplete#DrillIntoTable()
|
397
|
-
" If the omni popup window is visible
|
398
|
-
if pumvisible()
|
399
|
-
call sqlcomplete#Map('column')
|
400
|
-
" C-Y, makes the currently highlighted entry active
|
401
|
-
" and trigger the omni popup to be redisplayed
|
402
|
-
call feedkeys("\<C-Y>\<C-X>\<C-O>", 'n')
|
403
|
-
else
|
404
|
-
" If the popup is not visible, simple perform the normal
|
405
|
-
" key behaviour.
|
406
|
-
" Must use exec since they key must be preceeded by "\"
|
407
|
-
" or feedkeys will simply push each character of the string
|
408
|
-
" rather than the "key press".
|
409
|
-
exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_right.'", "n")'
|
410
|
-
endif
|
411
|
-
return ""
|
412
|
-
endfunction
|
413
|
-
|
414
|
-
function! sqlcomplete#DrillOutOfColumns()
|
415
|
-
" If the omni popup window is visible
|
416
|
-
if pumvisible()
|
417
|
-
call sqlcomplete#Map('tableReset')
|
418
|
-
" Trigger the omni popup to be redisplayed
|
419
|
-
call feedkeys("\<C-X>\<C-O>")
|
420
|
-
else
|
421
|
-
" If the popup is not visible, simple perform the normal
|
422
|
-
" key behaviour.
|
423
|
-
" Must use exec since they key must be preceeded by "\"
|
424
|
-
" or feedkeys will simply push each character of the string
|
425
|
-
" rather than the "key press".
|
426
|
-
exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_left.'", "n")'
|
427
|
-
endif
|
428
|
-
return ""
|
429
|
-
endfunction
|
430
|
-
|
431
|
-
function! s:SQLCWarningMsg(msg)
|
432
|
-
echohl WarningMsg
|
433
|
-
echomsg a:msg
|
434
|
-
echohl None
|
435
|
-
endfunction
|
436
|
-
|
437
|
-
function! s:SQLCErrorMsg(msg)
|
438
|
-
echohl ErrorMsg
|
439
|
-
echomsg a:msg
|
440
|
-
echohl None
|
441
|
-
endfunction
|
442
|
-
|
443
|
-
function! s:SQLCGetSyntaxList(syn_group)
|
444
|
-
let syn_group = a:syn_group
|
445
|
-
let compl_list = []
|
446
|
-
|
447
|
-
" Check if we have already cached the syntax list
|
448
|
-
let list_idx = index(s:syn_list, syn_group, 0, &ignorecase)
|
449
|
-
if list_idx > -1
|
450
|
-
" Return previously cached value
|
451
|
-
let compl_list = s:syn_value[list_idx]
|
452
|
-
else
|
453
|
-
" Request the syntax list items from the
|
454
|
-
" syntax completion plugin
|
455
|
-
if syn_group == 'syntax'
|
456
|
-
" Handle this special case. This allows the user
|
457
|
-
" to indicate they want all the syntax items available,
|
458
|
-
" so do not specify a specific include list.
|
459
|
-
let g:omni_syntax_group_include_sql = ''
|
460
|
-
else
|
461
|
-
" The user has specified a specific syntax group
|
462
|
-
let g:omni_syntax_group_include_sql = syn_group
|
463
|
-
endif
|
464
|
-
let g:omni_syntax_group_exclude_sql = ''
|
465
|
-
let syn_value = OmniSyntaxList()
|
466
|
-
let g:omni_syntax_group_include_sql = s:save_inc
|
467
|
-
let g:omni_syntax_group_exclude_sql = s:save_exc
|
468
|
-
" Cache these values for later use
|
469
|
-
let s:syn_list = add( s:syn_list, syn_group )
|
470
|
-
let s:syn_value = add( s:syn_value, syn_value )
|
471
|
-
let compl_list = syn_value
|
472
|
-
endif
|
473
|
-
|
474
|
-
return compl_list
|
475
|
-
endfunction
|
476
|
-
|
477
|
-
function! s:SQLCCheck4dbext()
|
478
|
-
if !exists('g:loaded_dbext')
|
479
|
-
let msg = "The dbext plugin must be loaded for dynamic SQL completion"
|
480
|
-
call s:SQLCErrorMsg(msg)
|
481
|
-
" Leave time for the user to read the error message
|
482
|
-
:sleep 2
|
483
|
-
return -1
|
484
|
-
elseif g:loaded_dbext < 600
|
485
|
-
let msg = "The dbext plugin must be at least version 5.30 " .
|
486
|
-
\ " for dynamic SQL completion"
|
487
|
-
call s:SQLCErrorMsg(msg)
|
488
|
-
" Leave time for the user to read the error message
|
489
|
-
:sleep 2
|
490
|
-
return -1
|
491
|
-
endif
|
492
|
-
return 1
|
493
|
-
endfunction
|
494
|
-
|
495
|
-
function! s:SQLCAddAlias(table_name, table_alias, cols)
|
496
|
-
" Strip off the owner if included
|
497
|
-
let table_name = matchstr(a:table_name, '\%(.\{-}\.\)\?\zs\(.*\)' )
|
498
|
-
let table_alias = a:table_alias
|
499
|
-
let cols = a:cols
|
500
|
-
|
501
|
-
if g:omni_sql_use_tbl_alias != 'n'
|
502
|
-
if table_alias == ''
|
503
|
-
if 'da' =~? g:omni_sql_use_tbl_alias
|
504
|
-
if table_name =~ '_'
|
505
|
-
" Treat _ as separators since people often use these
|
506
|
-
" for word separators
|
507
|
-
let save_keyword = &iskeyword
|
508
|
-
setlocal iskeyword-=_
|
509
|
-
|
510
|
-
" Get the first letter of each word
|
511
|
-
" [[:alpha:]] is used instead of \w
|
512
|
-
" to catch extended accented characters
|
513
|
-
"
|
514
|
-
let table_alias = substitute(
|
515
|
-
\ table_name,
|
516
|
-
\ '\<[[:alpha:]]\+\>_\?',
|
517
|
-
\ '\=strpart(submatch(0), 0, 1)',
|
518
|
-
\ 'g'
|
519
|
-
\ )
|
520
|
-
" Restore original value
|
521
|
-
let &iskeyword = save_keyword
|
522
|
-
elseif table_name =~ '\u\U'
|
523
|
-
let table_alias = substitute(
|
524
|
-
\ table_name, '\(\u\)\U*', '\1', 'g')
|
525
|
-
else
|
526
|
-
let table_alias = strpart(table_name, 0, 1)
|
527
|
-
endif
|
528
|
-
endif
|
529
|
-
endif
|
530
|
-
if table_alias != ''
|
531
|
-
" Following a word character, make sure there is a . and no spaces
|
532
|
-
let table_alias = substitute(table_alias, '\w\zs\.\?\s*$', '.', '')
|
533
|
-
if 'a' =~? g:omni_sql_use_tbl_alias && a:table_alias == ''
|
534
|
-
let table_alias = inputdialog("Enter table alias:", table_alias)
|
535
|
-
endif
|
536
|
-
endif
|
537
|
-
if table_alias != ''
|
538
|
-
let cols = substitute(cols, '\<\w', table_alias.'&', 'g')
|
539
|
-
endif
|
540
|
-
endif
|
541
|
-
|
542
|
-
return cols
|
543
|
-
endfunction
|
544
|
-
|
545
|
-
function! s:SQLCGetObjectOwner(object)
|
546
|
-
" The owner regex matches a word at the start of the string which is
|
547
|
-
" followed by a dot, but doesn't include the dot in the result.
|
548
|
-
" ^ - from beginning of line
|
549
|
-
" \("\|\[\)\? - ignore any quotes
|
550
|
-
" \zs - start the match now
|
551
|
-
" .\{-} - get owner name
|
552
|
-
" \ze - end the match
|
553
|
-
" \("\|\[\)\? - ignore any quotes
|
554
|
-
" \. - must by followed by a .
|
555
|
-
" let owner = matchstr( a:object, '^\s*\zs.*\ze\.' )
|
556
|
-
let owner = matchstr( a:object, '^\("\|\[\)\?\zs\.\{-}\ze\("\|\]\)\?\.' )
|
557
|
-
return owner
|
558
|
-
endfunction
|
559
|
-
|
560
|
-
function! s:SQLCGetColumns(table_name, list_type)
|
561
|
-
" Check if the table name was provided as part of the column name
|
562
|
-
let table_name = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
|
563
|
-
let table_cols = []
|
564
|
-
let table_alias = ''
|
565
|
-
let move_to_top = 1
|
566
|
-
|
567
|
-
let table_name = substitute(table_name, '\s*\(.\{-}\)\s*$', '\1', 'g')
|
568
|
-
|
569
|
-
" If the table name was given as:
|
570
|
-
" where c.
|
571
|
-
let table_name = substitute(table_name, '^\c\(WHERE\|AND\|OR\)\s\+', '', '')
|
572
|
-
if g:loaded_dbext >= 300
|
573
|
-
let saveSettingAlias = DB_listOption('use_tbl_alias')
|
574
|
-
exec 'DBSetOption use_tbl_alias=n'
|
575
|
-
endif
|
576
|
-
|
577
|
-
let table_name_stripped = substitute(table_name, '["\[\]]*', '', 'g')
|
578
|
-
|
579
|
-
" Check if we have already cached the column list for this table
|
580
|
-
" by its name
|
581
|
-
let list_idx = index(s:tbl_name, table_name_stripped, 0, &ignorecase)
|
582
|
-
if list_idx > -1
|
583
|
-
let table_cols = split(s:tbl_cols[list_idx], '\n')
|
584
|
-
else
|
585
|
-
" Check if we have already cached the column list for this table
|
586
|
-
" by its alias, assuming the table_name provided was actually
|
587
|
-
" the alias for the table instead
|
588
|
-
" select *
|
589
|
-
" from area a
|
590
|
-
" where a.
|
591
|
-
let list_idx = index(s:tbl_alias, table_name_stripped, 0, &ignorecase)
|
592
|
-
if list_idx > -1
|
593
|
-
let table_alias = table_name_stripped
|
594
|
-
let table_name = s:tbl_name[list_idx]
|
595
|
-
let table_cols = split(s:tbl_cols[list_idx], '\n')
|
596
|
-
endif
|
597
|
-
endif
|
598
|
-
|
599
|
-
" If we have not found a cached copy of the table
|
600
|
-
" And the table ends in a "." or we are looking for a column list
|
601
|
-
" if list_idx == -1 && (a:table_name =~ '\.' || b:sql_compl_type =~ 'column')
|
602
|
-
" if list_idx == -1 && (a:table_name =~ '\.' || a:list_type =~ 'csv')
|
603
|
-
if list_idx == -1
|
604
|
-
let saveY = @y
|
605
|
-
let saveSearch = @/
|
606
|
-
let saveWScan = &wrapscan
|
607
|
-
let curline = line(".")
|
608
|
-
let curcol = col(".")
|
609
|
-
|
610
|
-
" Do not let searchs wrap
|
611
|
-
setlocal nowrapscan
|
612
|
-
" If . was entered, look at the word just before the .
|
613
|
-
" We are looking for something like this:
|
614
|
-
" select *
|
615
|
-
" from customer c
|
616
|
-
" where c.
|
617
|
-
" So when . is pressed, we need to find 'c'
|
618
|
-
"
|
619
|
-
|
620
|
-
" Search backwards to the beginning of the statement
|
621
|
-
" and do NOT wrap
|
622
|
-
" exec 'silent! normal! v?\<\(select\|update\|delete\|;\)\>'."\n".'"yy'
|
623
|
-
exec 'silent! normal! ?\<\c\(select\|update\|delete\|;\)\>'."\n"
|
624
|
-
|
625
|
-
" Start characterwise visual mode
|
626
|
-
" Advance right one character
|
627
|
-
" Search foward until one of the following:
|
628
|
-
" 1. Another select/update/delete statement
|
629
|
-
" 2. A ; at the end of a line (the delimiter)
|
630
|
-
" 3. The end of the file (incase no delimiter)
|
631
|
-
" Yank the visually selected text into the "y register.
|
632
|
-
exec 'silent! normal! vl/\c\(\<select\>\|\<update\>\|\<delete\>\|;\s*$\|\%$\)'."\n".'"yy'
|
633
|
-
|
634
|
-
let query = @y
|
635
|
-
let query = substitute(query, "\n", ' ', 'g')
|
636
|
-
let found = 0
|
637
|
-
|
638
|
-
" if query =~? '^\c\(select\)'
|
639
|
-
if query =~? '^\(select\|update\|delete\)'
|
640
|
-
let found = 1
|
641
|
-
" \(\(\<\w\+\>\)\.\)\? -
|
642
|
-
" '\c\(from\|join\|,\).\{-}' - Starting at the from clause (case insensitive)
|
643
|
-
" '\zs\(\(\<\w\+\>\)\.\)\?' - Get the owner name (optional)
|
644
|
-
" '\<\w\+\>\ze' - Get the table name
|
645
|
-
" '\s\+\<'.table_name.'\>' - Followed by the alias
|
646
|
-
" '\s*\.\@!.*' - Cannot be followed by a .
|
647
|
-
" '\(\<where\>\|$\)' - Must be followed by a WHERE clause
|
648
|
-
" '.*' - Exclude the rest of the line in the match
|
649
|
-
" let table_name_new = matchstr(@y,
|
650
|
-
" \ '\c\(from\|join\|,\).\{-}'.
|
651
|
-
" \ '\zs\(\("\|\[\)\?.\{-}\("\|\]\)\.\)\?'.
|
652
|
-
" \ '\("\|\[\)\?.\{-}\("\|\]\)\?\ze'.
|
653
|
-
" \ '\s\+\%(as\s\+\)\?\<'.
|
654
|
-
" \ matchstr(table_name, '.\{-}\ze\.\?$').
|
655
|
-
" \ '\>'.
|
656
|
-
" \ '\s*\.\@!.*'.
|
657
|
-
" \ '\(\<where\>\|$\)'.
|
658
|
-
" \ '.*'
|
659
|
-
" \ )
|
660
|
-
let table_name_new = matchstr(@y,
|
661
|
-
\ '\c\(\<from\>\|\<join\>\|,\)\s*'.
|
662
|
-
\ '\zs\(\("\|\[\)\?\w\+\("\|\]\)\?\.\)\?'.
|
663
|
-
\ '\("\|\[\)\?\w\+\("\|\]\)\?\ze'.
|
664
|
-
\ '\s\+\%(as\s\+\)\?\<'.
|
665
|
-
\ matchstr(table_name, '.\{-}\ze\.\?$').
|
666
|
-
\ '\>'.
|
667
|
-
\ '\s*\.\@!.*'.
|
668
|
-
\ '\(\<where\>\|$\)'.
|
669
|
-
\ '.*'
|
670
|
-
\ )
|
671
|
-
|
672
|
-
if table_name_new != ''
|
673
|
-
let table_alias = table_name
|
674
|
-
let table_name = matchstr( table_name_new, '^\(.*\.\)\?\zs.*\ze' )
|
675
|
-
|
676
|
-
let list_idx = index(s:tbl_name, table_name, 0, &ignorecase)
|
677
|
-
if list_idx > -1
|
678
|
-
let table_cols = split(s:tbl_cols[list_idx])
|
679
|
-
let s:tbl_name[list_idx] = table_name
|
680
|
-
let s:tbl_alias[list_idx] = table_alias
|
681
|
-
else
|
682
|
-
let list_idx = index(s:tbl_alias, table_name, 0, &ignorecase)
|
683
|
-
if list_idx > -1
|
684
|
-
let table_cols = split(s:tbl_cols[list_idx])
|
685
|
-
let s:tbl_name[list_idx] = table_name
|
686
|
-
let s:tbl_alias[list_idx] = table_alias
|
687
|
-
endif
|
688
|
-
endif
|
689
|
-
|
690
|
-
endif
|
691
|
-
else
|
692
|
-
" Simply assume it is a table name provided with a . on the end
|
693
|
-
let found = 1
|
694
|
-
endif
|
695
|
-
|
696
|
-
let @y = saveY
|
697
|
-
let @/ = saveSearch
|
698
|
-
let &wrapscan = saveWScan
|
699
|
-
|
700
|
-
" Return to previous location
|
701
|
-
call cursor(curline, curcol)
|
702
|
-
|
703
|
-
if found == 0
|
704
|
-
if g:loaded_dbext > 300
|
705
|
-
exec 'DBSetOption use_tbl_alias='.saveSettingAlias
|
706
|
-
endif
|
707
|
-
|
708
|
-
" Not a SQL statement, do not display a list
|
709
|
-
return []
|
710
|
-
endif
|
711
|
-
endif
|
712
|
-
|
713
|
-
if empty(table_cols)
|
714
|
-
" Specify silent mode, no messages to the user (tbl, 1)
|
715
|
-
" Specify do not comma separate (tbl, 1, 1)
|
716
|
-
let table_cols_str = DB_getListColumn(table_name, 1, 1)
|
717
|
-
|
718
|
-
if table_cols_str != ""
|
719
|
-
let s:tbl_name = add( s:tbl_name, table_name )
|
720
|
-
let s:tbl_alias = add( s:tbl_alias, table_alias )
|
721
|
-
let s:tbl_cols = add( s:tbl_cols, table_cols_str )
|
722
|
-
let table_cols = split(table_cols_str, '\n')
|
723
|
-
endif
|
724
|
-
|
725
|
-
endif
|
726
|
-
|
727
|
-
if g:loaded_dbext > 300
|
728
|
-
exec 'DBSetOption use_tbl_alias='.saveSettingAlias
|
729
|
-
endif
|
730
|
-
|
731
|
-
" If the user has asked for a comma separate list of column
|
732
|
-
" values, ask the user if they want to prepend each column
|
733
|
-
" with a tablename alias.
|
734
|
-
if a:list_type == 'csv' && !empty(table_cols)
|
735
|
-
let cols = join(table_cols, ', ')
|
736
|
-
let cols = s:SQLCAddAlias(table_name, table_alias, cols)
|
737
|
-
let table_cols = [cols]
|
738
|
-
endif
|
739
|
-
|
740
|
-
return table_cols
|
741
|
-
endfunction
|