diff runtime/autoload/sqlcomplete.vim @ 819:23f82b5d2814 v7.0c10

updated for version 7.0c10
author vimboss
date Wed, 05 Apr 2006 20:41:53 +0000
parents 1f929f3ca806
children 2c885fab04e3
line wrap: on
line diff
--- a/runtime/autoload/sqlcomplete.vim
+++ b/runtime/autoload/sqlcomplete.vim
@@ -1,8 +1,8 @@
 " Vim completion script
 " Language:    SQL
 " Maintainer:  David Fishburn <fishburn@ianywhere.com>
-" Version:     1.0
-" Last Change: Tue Mar 28 2006 4:39:49 PM
+" Version:     2.0
+" Last Change: Mon Apr 03 2006 10:21:36 PM
 
 " Set completion with CTRL-X CTRL-O to autoloaded function.
 " This check is in place in case this script is
@@ -21,20 +21,20 @@ endif
 let g:loaded_sql_completion = 1
 
 " Maintains filename of dictionary
-let s:sql_file_table             = ""
-let s:sql_file_procedure         = ""
-let s:sql_file_view              = ""
+let s:sql_file_table        = ""
+let s:sql_file_procedure    = ""
+let s:sql_file_view         = ""
 
 " Define various arrays to be used for caching
-let s:tbl_name                   = []
-let s:tbl_alias                  = []
-let s:tbl_cols                   = []
-let s:syn_list                   = []
-let s:syn_value                  = []
+let s:tbl_name              = []
+let s:tbl_alias             = []
+let s:tbl_cols              = []
+let s:syn_list              = []
+let s:syn_value             = []
  
 " Used in conjunction with the syntaxcomplete plugin
-let s:save_inc = ""
-let s:save_exc = ""
+let s:save_inc              = ""
+let s:save_exc              = ""
 if exists('g:omni_syntax_group_include_sql')
     let s:save_inc = g:omni_syntax_group_include_sql
 endif
@@ -43,12 +43,23 @@ if exists('g:omni_syntax_group_exclude_s
 endif
  
 " Used with the column list
-let s:save_prev_table = ""
+let s:save_prev_table       = ""
 
 " Default the option to verify table alias
 if !exists('g:omni_sql_use_tbl_alias')
     let g:omni_sql_use_tbl_alias = 'a'
 endif
+" Default syntax items to precache
+if !exists('g:omni_sql_precache_syntax_groups')
+    let g:omni_sql_precache_syntax_groups = [
+                \ 'syntax',
+                \ 'sqlKeyword',
+                \ 'sqlFunction',
+                \ 'sqlOption',
+                \ 'sqlType',
+                \ 'sqlStatement'
+                \ ]
+endif
 
 " This function is used for the 'omnifunc' option.
 function! sqlcomplete#Complete(findstart, base)
@@ -60,6 +71,8 @@ function! sqlcomplete#Complete(findstart
         let compl_type = b:sql_compl_type
     endif
 
+    " First pass through this function determines how much of the line should
+    " be replaced by whatever is chosen from the completion list
     if a:findstart
         " Locate the start of the item, including "."
         let line = getline('.')
@@ -68,15 +81,16 @@ function! sqlcomplete#Complete(findstart
         while start > 0
             if line[start - 1] =~ '\w'
                 let start -= 1
-            elseif line[start - 1] =~ '\.' && compl_type =~ 'column\|table'
-                " If the completion type is table or column
-                " Then assume we are looking for column completion
-                " column_type can be either 'column' or 'column_csv'
-                if lastword == -1
+            elseif line[start - 1] =~ '\.' && compl_type =~ 'column'
+                " If the completion type is column then assume we are looking
+                " for column completion column_type can be either 
+                " 'column' or 'column_csv'
+                if lastword == -1 && compl_type == 'column'
+                    " Do not replace the table name prefix or alias
+                    " if completing only a single column name
                     let lastword = start
                 endif
                 let start -= 1
-                let b:sql_compl_type = 'column'
             else
                 break
             endif
@@ -92,8 +106,12 @@ function! sqlcomplete#Complete(findstart
         return lastword
     endif
 
+    " Second pass through this function will determine what data to put inside
+    " of the completion list
+    " s:prepended is set by the first pass
     let base = s:prepended . a:base
 
+    " Default the completion list to an empty list
     let compl_list = []
 
     " Default to table name completion
@@ -178,36 +196,8 @@ function! sqlcomplete#Complete(findstart
         let s:tbl_cols  = []
         let s:syn_list  = []
         let s:syn_value = []
-        return []
     else
-        " Default to empty or not found
-        let compl_list = []
-        " Check if we have already cached the syntax list
-        let list_idx = index(s:syn_list, compl_type, 0, &ignorecase)
-        if list_idx > -1
-            " Return previously cached value
-            let compl_list = s:syn_value[list_idx]
-        else
-            " Request the syntax list items from the 
-            " syntax completion plugin
-            if compl_type == 'syntax'
-                " Handle this special case.  This allows the user
-                " to indicate they want all the syntax items available,
-                " so do not specify a specific include list.
-                let g:omni_syntax_group_include_sql = ''
-            else
-                " The user has specified a specific syntax group
-                let g:omni_syntax_group_include_sql = compl_type
-            endif
-            let g:omni_syntax_group_exclude_sql = ''
-            let syn_value                       = OmniSyntaxList()
-            let g:omni_syntax_group_include_sql = s:save_inc
-            let g:omni_syntax_group_exclude_sql = s:save_exc
-            " Cache these values for later use
-            let s:syn_list  = add( s:syn_list,  compl_type )
-            let s:syn_value = add( s:syn_value, syn_value )
-            let compl_list  = syn_value
-        endif
+        let compl_list = s:SQLCGetSyntaxList(compl_type)
     endif
 
     if base != ''
@@ -217,6 +207,10 @@ function! sqlcomplete#Complete(findstart
         let compl_list = filter(copy(compl_list), expr)
     endif
 
+    if exists('b:sql_compl_savefunc') && b:sql_compl_savefunc != ""
+        let &omnifunc = b:sql_compl_savefunc
+    endif
+
     return compl_list
 endfunc
 
@@ -232,6 +226,70 @@ function! s:SQLCErrorMsg(msg)
     echohl None
 endfunction
       
+function! sqlcomplete#PreCacheSyntax(...)
+    let syn_group_arr = []
+    if a:0 > 0 
+        let syn_group_arr = a:1
+    else
+        let syn_group_arr = g:omni_sql_precache_syntax_groups
+    endif
+    if !empty(syn_group_arr)
+        for group_name in syn_group_arr
+            call s:SQLCGetSyntaxList(group_name)
+        endfor
+    endif
+endfunction
+
+function! sqlcomplete#Map(type)
+    " Tell the SQL plugin what you want to complete
+    let b:sql_compl_type=a:type
+    " Record previous omnifunc, if the SQL completion
+    " is being used in conjunction with other filetype
+    " completion plugins
+    if &omnifunc != "" && &omnifunc != 'sqlcomplete#Complete'
+        " Record the previous omnifunc, the plugin
+        " will automatically set this back so that it
+        " does not interfere with other ftplugins settings
+        let b:sql_compl_savefunc=&omnifunc
+    endif
+    " Set the OMNI func for the SQL completion plugin
+    let &omnifunc='sqlcomplete#Complete'
+endfunction
+
+function! s:SQLCGetSyntaxList(syn_group)
+    let syn_group  = a:syn_group
+    let compl_list = []
+
+    " Check if we have already cached the syntax list
+    let list_idx = index(s:syn_list, syn_group, 0, &ignorecase)
+    if list_idx > -1
+        " Return previously cached value
+        let compl_list = s:syn_value[list_idx]
+    else
+        " Request the syntax list items from the 
+        " syntax completion plugin
+        if syn_group == 'syntax'
+            " Handle this special case.  This allows the user
+            " to indicate they want all the syntax items available,
+            " so do not specify a specific include list.
+            let g:omni_syntax_group_include_sql = ''
+        else
+            " The user has specified a specific syntax group
+            let g:omni_syntax_group_include_sql = syn_group
+        endif
+        let g:omni_syntax_group_exclude_sql = ''
+        let syn_value                       = OmniSyntaxList()
+        let g:omni_syntax_group_include_sql = s:save_inc
+        let g:omni_syntax_group_exclude_sql = s:save_exc
+        " Cache these values for later use
+        let s:syn_list  = add( s:syn_list,  syn_group )
+        let s:syn_value = add( s:syn_value, syn_value )
+        let compl_list  = syn_value
+    endif
+
+    return compl_list
+endfunction
+
 function! s:SQLCCheck4dbext()
     if !exists('g:loaded_dbext')
         let msg = "The dbext plugin must be loaded for dynamic SQL completion"