mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	docs: fix/remove invalid URLs
(cherry picked from commit ec1e71109c)
Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
		
	
		
			
				
	
	
		
			777 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			777 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
*ft_sql.txt*	Nvim
 | 
						|
 | 
						|
by David Fishburn
 | 
						|
 | 
						|
This is a filetype plugin to work with SQL files.
 | 
						|
 | 
						|
The Structured Query Language (SQL) is a standard which specifies statements
 | 
						|
that allow a user to interact with a relational database.  Vim includes
 | 
						|
features for navigation, indentation and syntax highlighting.
 | 
						|
 | 
						|
1. Navigation					|sql-navigation|
 | 
						|
    1.1 Matchit					|sql-matchit|
 | 
						|
    1.2 Text Object Motions			|sql-object-motions|
 | 
						|
    1.3 Predefined Object Motions		|sql-predefined-objects|
 | 
						|
    1.4 Macros					|sql-macros|
 | 
						|
2. SQL Dialects					|sql-dialects|
 | 
						|
    2.1 SQLSetType				|SQLSetType|
 | 
						|
    2.2 SQLGetType				|SQLGetType|
 | 
						|
    2.3 SQL Dialect Default			|sql-type-default|
 | 
						|
3. Adding new SQL Dialects			|sql-adding-dialects|
 | 
						|
4. OMNI SQL Completion				|sql-completion|
 | 
						|
    4.1 Static mode				|sql-completion-static|
 | 
						|
    4.2 Dynamic mode				|sql-completion-dynamic|
 | 
						|
    4.3 Tutorial				|sql-completion-tutorial|
 | 
						|
	4.3.1 Complete Tables			|sql-completion-tables|
 | 
						|
	4.3.2 Complete Columns			|sql-completion-columns|
 | 
						|
	4.3.3 Complete Procedures		|sql-completion-procedures|
 | 
						|
	4.3.4 Complete Views			|sql-completion-views|
 | 
						|
    4.4 Completion Customization		|sql-completion-customization|
 | 
						|
    4.5 SQL Maps				|sql-completion-maps|
 | 
						|
    4.6 Using with other filetypes		|sql-completion-filetypes|
 | 
						|
 | 
						|
==============================================================================
 | 
						|
1. Navigation					*sql-navigation*
 | 
						|
 | 
						|
The SQL ftplugin provides a number of options to assist with file
 | 
						|
navigation.
 | 
						|
 | 
						|
 | 
						|
1.1 Matchit					*sql-matchit*
 | 
						|
-----------
 | 
						|
The matchit plugin (https://www.vim.org/scripts/script.php?script_id=39)
 | 
						|
provides many additional features and can be customized for different
 | 
						|
languages.  The matchit plugin is configured by defining a local
 | 
						|
buffer variable, b:match_words.  Pressing the % key while on various
 | 
						|
keywords will move the cursor to its match.  For example, if the cursor
 | 
						|
is on an "if", pressing % will cycle between the "else", "elseif" and
 | 
						|
"end if" keywords.
 | 
						|
 | 
						|
The following keywords are supported: >
 | 
						|
    if
 | 
						|
    elseif | elsif
 | 
						|
    else [if]
 | 
						|
    end if
 | 
						|
 | 
						|
    [while condition] loop
 | 
						|
	leave
 | 
						|
	break
 | 
						|
	continue
 | 
						|
	exit
 | 
						|
    end loop
 | 
						|
 | 
						|
    for
 | 
						|
	leave
 | 
						|
	break
 | 
						|
	continue
 | 
						|
	exit
 | 
						|
    end loop
 | 
						|
 | 
						|
    do
 | 
						|
	statements
 | 
						|
    doend
 | 
						|
 | 
						|
    case
 | 
						|
    when
 | 
						|
    when
 | 
						|
    default
 | 
						|
    end case
 | 
						|
 | 
						|
    merge
 | 
						|
    when not matched
 | 
						|
    when matched
 | 
						|
 | 
						|
    create[ or replace] procedure|function|event
 | 
						|
    returns
 | 
						|
 | 
						|
 | 
						|
1.2 Text Object Motions				*sql-object-motions*
 | 
						|
-----------------------
 | 
						|
Vim has a number of predefined keys for working with text |object-motions|.
 | 
						|
This filetype plugin attempts to translate these keys to maps which make sense
 | 
						|
for the SQL language.
 | 
						|
 | 
						|
The following |Normal| mode and |Visual| mode maps exist (when you edit a SQL
 | 
						|
file): >
 | 
						|
    ]]		    move forward to the next 'begin'
 | 
						|
    [[		    move backwards to the previous 'begin'
 | 
						|
    ][		    move forward to the next 'end'
 | 
						|
    []		    move backwards to the previous 'end'
 | 
						|
 | 
						|
 | 
						|
1.3 Predefined Object Motions			*sql-predefined-objects*
 | 
						|
-----------------------------
 | 
						|
Most relational databases support various standard features, tables, indices,
 | 
						|
triggers and stored procedures.  Each vendor also has a variety of proprietary
 | 
						|
objects.  The next set of maps have been created to help move between these
 | 
						|
objects.  Depends on which database vendor you are using, the list of objects
 | 
						|
must be configurable.  The filetype plugin attempts to define many of the
 | 
						|
standard objects, plus many additional ones.  In order to make this as
 | 
						|
flexible as possible, you can override the list of objects from within your
 | 
						|
|vimrc| with the following: >
 | 
						|
    let g:ftplugin_sql_objects = 'function,procedure,event,table,trigger' ..
 | 
						|
		\ ',schema,service,publication,database,datatype,domain' ..
 | 
						|
		\ ',index,subscription,synchronization,view,variable'
 | 
						|
 | 
						|
The following |Normal| mode and |Visual| mode maps have been created which use
 | 
						|
the above list: >
 | 
						|
    ]}		    move forward to the next 'create <object name>'
 | 
						|
    [{		    move backward to the previous 'create <object name>'
 | 
						|
 | 
						|
Repeatedly pressing ]} will cycle through each of these create statements: >
 | 
						|
    create table t1 (
 | 
						|
	...
 | 
						|
    );
 | 
						|
 | 
						|
    create procedure p1
 | 
						|
    begin
 | 
						|
	...
 | 
						|
    end;
 | 
						|
 | 
						|
    create index i1 on t1 (c1);
 | 
						|
 | 
						|
The default setting for g:ftplugin_sql_objects is: >
 | 
						|
    let g:ftplugin_sql_objects = 'function,procedure,event,' ..
 | 
						|
		\ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' ..
 | 
						|
		\ 'table,trigger' ..
 | 
						|
		\ ',schema,service,publication,database,datatype,domain' ..
 | 
						|
		\ ',index,subscription,synchronization,view,variable'
 | 
						|
 | 
						|
The above will also handle these cases: >
 | 
						|
    create table t1 (
 | 
						|
	...
 | 
						|
    );
 | 
						|
    create existing table t2 (
 | 
						|
	...
 | 
						|
    );
 | 
						|
    create global temporary table t3 (
 | 
						|
	...
 | 
						|
    );
 | 
						|
 | 
						|
By default, the ftplugin only searches for CREATE statements.  You can also
 | 
						|
override this via your |init.vim| with the following: >
 | 
						|
    let g:ftplugin_sql_statements = 'create,alter'
 | 
						|
 | 
						|
The filetype plugin defines three types of comments: >
 | 
						|
    1.  --
 | 
						|
    2.  //
 | 
						|
    3.  /*
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
 | 
						|
The following |Normal| mode and |Visual| mode maps have been created to work
 | 
						|
with comments: >
 | 
						|
    ]"		    move forward to the beginning of a comment
 | 
						|
    ["		    move forward to the end of a comment
 | 
						|
 | 
						|
 | 
						|
 | 
						|
1.4 Macros					   *sql-macros*
 | 
						|
----------
 | 
						|
Vim's feature to find macro definitions, |'define'|, is supported using this
 | 
						|
regular expression: >
 | 
						|
    \c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\>
 | 
						|
 | 
						|
This addresses the following code: >
 | 
						|
    CREATE VARIABLE myVar1 INTEGER;
 | 
						|
 | 
						|
    CREATE PROCEDURE sp_test(
 | 
						|
	IN myVar2 INTEGER,
 | 
						|
	OUT myVar3 CHAR(30),
 | 
						|
	INOUT myVar4 NUMERIC(20,0)
 | 
						|
    )
 | 
						|
    BEGIN
 | 
						|
	DECLARE myVar5 INTEGER;
 | 
						|
 | 
						|
	SELECT c1, c2, c3
 | 
						|
	  INTO myVar2, myVar3, myVar4
 | 
						|
	  FROM T1
 | 
						|
	 WHERE c4 = myVar1;
 | 
						|
    END;
 | 
						|
 | 
						|
Place your cursor on "myVar1" on this line: >
 | 
						|
	 WHERE c4 = myVar1;
 | 
						|
		     ^
 | 
						|
 | 
						|
Press any of the following keys: >
 | 
						|
    [d
 | 
						|
    [D
 | 
						|
    [CTRL-D
 | 
						|
 | 
						|
 | 
						|
==============================================================================
 | 
						|
2. SQL Dialects					*sql-dialects* *sql-types*
 | 
						|
						*sybase* *TSQL* *Transact-SQL*
 | 
						|
						*sqlanywhere*
 | 
						|
						*oracle* *plsql* *sqlj*
 | 
						|
						*sqlserver*
 | 
						|
						*mysql* *postgresql* *psql*
 | 
						|
						*informix*
 | 
						|
 | 
						|
All relational databases support SQL.  There is a portion of SQL that is
 | 
						|
portable across vendors (ex. CREATE TABLE, CREATE INDEX), but there is a
 | 
						|
great deal of vendor specific extensions to SQL.  Oracle supports the
 | 
						|
"CREATE OR REPLACE" syntax, column defaults specified in the CREATE TABLE
 | 
						|
statement and the procedural language (for stored procedures and triggers).
 | 
						|
 | 
						|
The default Vim distribution ships with syntax highlighting based on Oracle's
 | 
						|
PL/SQL.  The default SQL indent script works for Oracle and SQL Anywhere.
 | 
						|
The default filetype plugin works for all vendors and should remain vendor
 | 
						|
neutral, but extendable.
 | 
						|
 | 
						|
Vim currently has support for a variety of different vendors, currently this
 | 
						|
is via syntax scripts. Unfortunately, to flip between different syntax rules
 | 
						|
you must either create:
 | 
						|
    1.  New filetypes
 | 
						|
    2.  Custom autocmds
 | 
						|
    3.  Manual steps / commands
 | 
						|
 | 
						|
The majority of people work with only one vendor's database product, it would
 | 
						|
be nice to specify a default in your |init.vim|.
 | 
						|
 | 
						|
 | 
						|
2.1 SQLSetType					*sqlsettype* *SQLSetType*
 | 
						|
--------------
 | 
						|
For the people that work with many different databases, it is nice to be
 | 
						|
able to flip between the various vendors rules (indent, syntax) on a per
 | 
						|
buffer basis, at any time.  The ftplugin/sql.vim file defines this function: >
 | 
						|
    SQLSetType
 | 
						|
 | 
						|
Executing this function without any parameters will set the indent and syntax
 | 
						|
scripts back to their defaults, see |sql-type-default|.  You can use the <Tab>
 | 
						|
key to complete the optional parameter.
 | 
						|
 | 
						|
After typing the function name and a space, you can use the completion to
 | 
						|
supply a parameter.  The function takes the name of the Vim script you want to
 | 
						|
source.  Using the |cmdline-completion| feature, the SQLSetType function will
 | 
						|
search the |'runtimepath'| for all Vim scripts with a name containing "sql".
 | 
						|
This takes the guess work out of the spelling of the names.  The following are
 | 
						|
examples: >
 | 
						|
    :SQLSetType
 | 
						|
    :SQLSetType sqloracle
 | 
						|
    :SQLSetType sqlanywhere
 | 
						|
    :SQLSetType sqlinformix
 | 
						|
    :SQLSetType mysql
 | 
						|
 | 
						|
The easiest approach is to the use <Tab> character which will first complete
 | 
						|
the command name (SQLSetType), after a space and another <Tab>, display a list
 | 
						|
of available Vim script names: >
 | 
						|
    :SQL<Tab><space><Tab>
 | 
						|
 | 
						|
 | 
						|
2.2 SQLGetType					*sqlgettype* *SQLGetType*
 | 
						|
--------------
 | 
						|
At anytime you can determine which SQL dialect you are using by calling the
 | 
						|
SQLGetType command.  The ftplugin/sql.vim file defines this function: >
 | 
						|
    SQLGetType
 | 
						|
 | 
						|
This will echo: >
 | 
						|
    Current SQL dialect in use:sqlanywhere
 | 
						|
 | 
						|
 | 
						|
2.3 SQL Dialect Default				*sql-type-default*
 | 
						|
-----------------------
 | 
						|
As mentioned earlier, the default syntax rules for Vim is based on Oracle
 | 
						|
(PL/SQL).  You can override this default by placing one of the following in
 | 
						|
your |init.vim|: >
 | 
						|
    let g:sql_type_default = 'sqlanywhere'
 | 
						|
    let g:sql_type_default = 'sqlinformix'
 | 
						|
    let g:sql_type_default = 'mysql'
 | 
						|
 | 
						|
If you added the following to your |init.vim|: >
 | 
						|
    let g:sql_type_default = 'sqlinformix'
 | 
						|
 | 
						|
The next time edit a SQL file the following scripts will be automatically
 | 
						|
loaded by Vim: >
 | 
						|
    ftplugin/sql.vim
 | 
						|
    syntax/sqlinformix.vim
 | 
						|
    indent/sql.vim
 | 
						|
>
 | 
						|
Notice indent/sqlinformix.sql was not loaded.  There is no indent file
 | 
						|
for Informix, Vim loads the default files if the specified files does not
 | 
						|
exist.
 | 
						|
 | 
						|
 | 
						|
==============================================================================
 | 
						|
3. Adding new SQL Dialects			*sql-adding-dialects*
 | 
						|
 | 
						|
If you begin working with a SQL dialect which does not have any customizations
 | 
						|
available with the default Vim distribution you can check https://www.vim.org
 | 
						|
to see if any customization currently exist.  If not, you can begin by cloning
 | 
						|
an existing script.  Read |filetype-plugins| for more details.
 | 
						|
 | 
						|
To help identify these scripts, try to create the files with a "sql" prefix.
 | 
						|
If you decide you wish to create customizations for the SQLite database, you
 | 
						|
can create any of the following: >
 | 
						|
    Unix
 | 
						|
	~/.config/nvim/syntax/sqlite.vim
 | 
						|
	~/.config/nvim/indent/sqlite.vim
 | 
						|
 | 
						|
No changes are necessary to the SQLSetType function.  It will automatically
 | 
						|
pick up the new SQL files and load them when you issue the SQLSetType command.
 | 
						|
 | 
						|
 | 
						|
==============================================================================
 | 
						|
4. OMNI SQL Completion				*sql-completion*
 | 
						|
						*omni-sql-completion*
 | 
						|
 | 
						|
Vim 7 includes a code completion interface and functions which allows plugin
 | 
						|
developers to build in code completion for any language.  Vim 7 includes
 | 
						|
code completion for the SQL language.
 | 
						|
 | 
						|
There are two modes to the SQL completion plugin, static and dynamic.  The
 | 
						|
static mode populates the popups with the data generated from current syntax
 | 
						|
highlight rules.  The dynamic mode populates the popups with data retrieved
 | 
						|
directly from a database.  This includes, table lists, column lists,
 | 
						|
procedures names and more.
 | 
						|
 | 
						|
4.1 Static Mode					*sql-completion-static*
 | 
						|
---------------
 | 
						|
The static popups created contain items defined by the active syntax rules
 | 
						|
while editing a file with a filetype of SQL.  The plugin defines (by default)
 | 
						|
various maps to help the user refine the list of items to be displayed.
 | 
						|
The defaults static maps are: >
 | 
						|
    imap <buffer> <C-C>a <C-\><C-O>:call sqlcomplete#Map('syntax')<CR><C-X><C-O>
 | 
						|
    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
 | 
						|
    imap <buffer> <C-C>f <C-\><C-O>:call sqlcomplete#Map('sqlFunction')<CR><C-X><C-O>
 | 
						|
    imap <buffer> <C-C>o <C-\><C-O>:call sqlcomplete#Map('sqlOption')<CR><C-X><C-O>
 | 
						|
    imap <buffer> <C-C>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O>
 | 
						|
    imap <buffer> <C-C>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O>
 | 
						|
 | 
						|
The use of "<C-C>" can be user chosen by using the following in your |init.vim|
 | 
						|
as it may not work properly on all platforms: >
 | 
						|
    let g:ftplugin_sql_omni_key = '<C-C>'
 | 
						|
>
 | 
						|
The static maps (which are based on the syntax highlight groups) follow this
 | 
						|
format: >
 | 
						|
    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
 | 
						|
    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword\w*')<CR><C-X><C-O>
 | 
						|
 | 
						|
This command breaks down as: >
 | 
						|
    imap		   - Create an insert map
 | 
						|
    <buffer>		   - Only for this buffer
 | 
						|
    <C-C>k		   - Your choice of key map
 | 
						|
    <C-\><C-O>		   - Execute one command, return to Insert mode
 | 
						|
    :call sqlcomplete#Map( - Allows the SQL completion plugin to perform some
 | 
						|
			     housekeeping functions to allow it to be used in
 | 
						|
			     conjunction with other completion plugins.
 | 
						|
			     Indicate which item you want the SQL completion
 | 
						|
			     plugin to complete.
 | 
						|
			     In this case we are asking the plugin to display
 | 
						|
			     items from the syntax highlight group
 | 
						|
			     'sqlKeyword'.
 | 
						|
			     You can view a list of highlight group names to
 | 
						|
			     choose from by executing the
 | 
						|
				 :syntax list
 | 
						|
			     command while editing a SQL file.
 | 
						|
    'sqlKeyword'	   - Display the items for the sqlKeyword highlight
 | 
						|
			     group
 | 
						|
    'sqlKeyword\w*'	   - A second option available with Vim 7.4 which
 | 
						|
                             uses a regular expression to determine which
 | 
						|
			     syntax groups to use
 | 
						|
    )<CR>		   - Execute the :let command
 | 
						|
    <C-X><C-O>		   - Trigger the standard omni completion key stroke.
 | 
						|
			     Passing in 'sqlKeyword' instructs the SQL
 | 
						|
			     completion plugin to populate the popup with
 | 
						|
			     items from the sqlKeyword highlight group.  The
 | 
						|
			     plugin will also cache this result until Vim is
 | 
						|
			     restarted.  The syntax list is retrieved using
 | 
						|
			     the syntaxcomplete plugin.
 | 
						|
 | 
						|
Using the 'syntax' keyword is a special case.  This instructs the
 | 
						|
syntaxcomplete plugin to retrieve all syntax items.  So this will effectively
 | 
						|
work for any of Vim's SQL syntax files.  At the time of writing this includes
 | 
						|
10 different syntax files for the different dialects of SQL (see section 3
 | 
						|
above, |sql-dialects|).
 | 
						|
 | 
						|
Here are some examples of the entries which are pulled from the syntax files: >
 | 
						|
     All
 | 
						|
	 - Contains the contents of all syntax highlight groups
 | 
						|
     Statements
 | 
						|
	 - Select, Insert, Update, Delete, Create, Alter, ...
 | 
						|
     Functions
 | 
						|
	 - Min, Max, Trim, Round, Date, ...
 | 
						|
     Keywords
 | 
						|
	 - Index, Database, Having, Group, With
 | 
						|
     Options
 | 
						|
	 - Isolation_level, On_error, Qualify_owners, Fire_triggers, ...
 | 
						|
     Types
 | 
						|
	 - Integer, Char, Varchar, Date, DateTime, Timestamp, ...
 | 
						|
 | 
						|
 | 
						|
4.2 Dynamic Mode				*sql-completion-dynamic*
 | 
						|
----------------
 | 
						|
Dynamic mode populates the popups with data directly from a database.  In
 | 
						|
order for the dynamic feature to be enabled you must have the dbext.vim
 | 
						|
plugin installed, (https://vim.sourceforge.net/script.php?script_id=356).
 | 
						|
 | 
						|
Dynamic mode is used by several features of the SQL completion plugin.
 | 
						|
After installing the dbext plugin see the dbext-tutorial for additional
 | 
						|
configuration and usage.  The dbext plugin allows the SQL completion plugin
 | 
						|
to display a list of tables, procedures, views and columns. >
 | 
						|
     Table List
 | 
						|
	 - All tables for all schema owners
 | 
						|
     Procedure List
 | 
						|
	 - All stored procedures for all schema owners
 | 
						|
     View List
 | 
						|
	 - All stored procedures for all schema owners
 | 
						|
     Column List
 | 
						|
	 - For the selected table, the columns that are part of the table
 | 
						|
 | 
						|
To enable the popup, while in INSERT mode, use the following key combinations
 | 
						|
for each group (where <C-C> means hold the CTRL key down while pressing
 | 
						|
the space bar):
 | 
						|
     Table List		   - <C-C>t
 | 
						|
			   - <C-X><C-O> (the default map assumes tables)
 | 
						|
     Stored Procedure List - <C-C>p
 | 
						|
     View List		   - <C-C>v
 | 
						|
     Column List	   - <C-C>c
 | 
						|
 | 
						|
     Drilling In / Out     - When viewing a popup window displaying the list
 | 
						|
			     of tables, you can press <Right>, this will
 | 
						|
			     replace the table currently highlighted with
 | 
						|
			     the column list for that table.
 | 
						|
			   - When viewing a popup window displaying the list
 | 
						|
			     of columns, you can press <Left>, this will
 | 
						|
			     replace the column list with the list of tables.
 | 
						|
			   - This allows you to quickly drill down into a
 | 
						|
			     table to view its columns and back again.
 | 
						|
			   - <Right> and <Left> can also be chosen via
 | 
						|
			     your |init.vim| >
 | 
						|
                                let g:ftplugin_sql_omni_key_right = '<Right>'
 | 
						|
                                let g:ftplugin_sql_omni_key_left  = '<Left>'
 | 
						|
 | 
						|
The SQL completion plugin caches various lists that are displayed in
 | 
						|
the popup window.  This makes the re-displaying of these lists very
 | 
						|
fast.  If new tables or columns are added to the database it may become
 | 
						|
necessary to clear the plugins cache.  The default map for this is: >
 | 
						|
    imap <buffer> <C-C>R <C-\><C-O>:call sqlcomplete#Map('ResetCache')<CR><C-X><C-O>
 | 
						|
 | 
						|
 | 
						|
4.3 SQL Tutorial				*sql-completion-tutorial*
 | 
						|
----------------
 | 
						|
 | 
						|
This tutorial is designed to take you through the common features of the SQL
 | 
						|
completion plugin so that: >
 | 
						|
     a) You gain familiarity with the plugin
 | 
						|
     b) You are introduced to some of the more common features
 | 
						|
     c) Show how to customize it to your preferences
 | 
						|
     d) Demonstrate "Best of Use" of the plugin (easiest way to configure).
 | 
						|
 | 
						|
First, create a new buffer: >
 | 
						|
     :e tutorial.sql
 | 
						|
 | 
						|
 | 
						|
Static features
 | 
						|
---------------
 | 
						|
To take you through the various lists, simply enter insert mode, hit:
 | 
						|
    <C-C>s   (show SQL statements)
 | 
						|
At this point, you can page down through the list until you find "select".
 | 
						|
If you are familiar with the item you are looking for, for example you know
 | 
						|
the statement begins with the letter "s".  You can type ahead (without the
 | 
						|
quotes) "se" then press:
 | 
						|
    <C-Space>t
 | 
						|
Assuming "select" is highlighted in the popup list press <Enter> to choose
 | 
						|
the entry.  Now type:
 | 
						|
    * fr<C-C>a (show all syntax items)
 | 
						|
choose "from" from the popup list.
 | 
						|
 | 
						|
When writing stored procedures using the "type" list is useful.  It contains
 | 
						|
a list of all the database supported types.  This may or may not be true
 | 
						|
depending on the syntax file you are using.  The SQL Anywhere syntax file
 | 
						|
(sqlanywhere.vim) has support for this: >
 | 
						|
     BEGIN
 | 
						|
	DECLARE customer_id <C-C>T <-- Choose a type from the list
 | 
						|
 | 
						|
 | 
						|
Dynamic features
 | 
						|
----------------
 | 
						|
To take advantage of the dynamic features you must first install the
 | 
						|
dbext.vim plugin (https://vim.sourceforge.net/script.php?script_id=356).  It
 | 
						|
also comes with a tutorial.  From the SQL completion plugin's perspective,
 | 
						|
the main feature dbext provides is a connection to a database.  dbext
 | 
						|
connection profiles are the most efficient mechanism to define connection
 | 
						|
information.  Once connections have been setup, the SQL completion plugin
 | 
						|
uses the features of dbext in the background to populate the popups.
 | 
						|
 | 
						|
What follows assumes dbext.vim has been correctly configured, a simple test
 | 
						|
is to run the command, :DBListTable.  If a list of tables is shown, you know
 | 
						|
dbext.vim is working as expected.  If not, please consult the dbext.txt
 | 
						|
documentation.
 | 
						|
 | 
						|
Assuming you have followed the dbext-tutorial you can press <C-C>t to
 | 
						|
display a list of tables.  There is a delay while dbext is creating the table
 | 
						|
list.  After the list is displayed press <C-W>.  This will remove both the
 | 
						|
popup window and the table name already chosen when the list became active.
 | 
						|
 | 
						|
 4.3.1 Table Completion:			*sql-completion-tables*
 | 
						|
 | 
						|
Press <C-C>t to display a list of tables from within the database you
 | 
						|
have connected via the dbext plugin.
 | 
						|
NOTE: All of the SQL completion popups support typing a prefix before pressing
 | 
						|
the key map.  This will limit the contents of the popup window to just items
 | 
						|
beginning with those characters.
 | 
						|
 | 
						|
 4.3.2 Column Completion:			*sql-completion-columns*
 | 
						|
 | 
						|
The SQL completion plugin can also display a list of columns for particular
 | 
						|
tables.  The column completion is triggered via <C-C>c.
 | 
						|
 | 
						|
NOTE: The following example uses <Right> to trigger a column list while
 | 
						|
      the popup window is active.
 | 
						|
 | 
						|
Example of using column completion:
 | 
						|
     - Press <C-C>t again to display the list of tables.
 | 
						|
     - When the list is displayed in the completion window, press <Right>,
 | 
						|
       this will replace the list of tables, with a list of columns for the
 | 
						|
       table highlighted (after the same short delay).
 | 
						|
     - If you press <Left>, this will again replace the column list with the
 | 
						|
       list of tables.  This allows you to drill into tables and column lists
 | 
						|
       very quickly.
 | 
						|
     - Press <Right> again while the same table is highlighted.  You will
 | 
						|
       notice there is no delay since the column list has been cached.  If you
 | 
						|
       change the schema of a cached table you can press <C-C>R, which
 | 
						|
       clears the SQL completion cache.
 | 
						|
     - NOTE: <Right> and <Left> have been designed to work while the
 | 
						|
       completion window is active.  If the completion popup window is
 | 
						|
       not active, a normal <Right> or <Left> will be executed.
 | 
						|
 | 
						|
Let's look at how we can build a SQL statement dynamically.  A select statement
 | 
						|
requires a list of columns.  There are two ways to build a column list using
 | 
						|
the SQL completion plugin. >
 | 
						|
    One column at a time:
 | 
						|
<       1. After typing SELECT press <C-C>t to display a list of tables.
 | 
						|
	2. Choose a table from the list.
 | 
						|
	3. Press <Right> to display a list of columns.
 | 
						|
	4. Choose the column from the list and press enter.
 | 
						|
	5. Enter a "," and press <C-C>c.  Generating a column list
 | 
						|
	   generally requires having the cursor on a table name.  The plugin
 | 
						|
	   uses this name to determine what table to retrieve the column list.
 | 
						|
	   In this step, since we are pressing <C-C>c without the cursor
 | 
						|
	   on a table name the column list displayed will be for the previous
 | 
						|
	   table.  Choose a different column and move on.
 | 
						|
	6. Repeat step 5 as often as necessary. >
 | 
						|
    All columns for a table:
 | 
						|
<	1. After typing SELECT press <C-C>t to display a list of tables.
 | 
						|
	2. Highlight the table you need the column list for.
 | 
						|
	3. Press <Enter> to choose the table from the list.
 | 
						|
	4. Press <C-C>l to request a comma-separated list of all columns
 | 
						|
	   for this table.
 | 
						|
	5. Based on the table name chosen in step 3, the plugin attempts to
 | 
						|
	   decide on a reasonable table alias.	You are then prompted to
 | 
						|
	   either accept of change the alias.  Press OK.
 | 
						|
	6. The table name is replaced with the column list of the table is
 | 
						|
	   replaced with the comma separate list of columns with the alias
 | 
						|
	   prepended to each of the columns.
 | 
						|
	7. Step 3 and 4 can be replaced by pressing <C-C>L, which has
 | 
						|
	   a <C-Y> embedded in the map to choose the currently highlighted
 | 
						|
	   table in the list.
 | 
						|
 | 
						|
There is a special provision when writing select statements.  Consider the
 | 
						|
following statement: >
 | 
						|
     select *
 | 
						|
       from customer c,
 | 
						|
	    contact cn,
 | 
						|
	    department as dp,
 | 
						|
	    employee e,
 | 
						|
	    site_options so
 | 
						|
      where c.
 | 
						|
 | 
						|
In INSERT mode after typing the final "c." which is an alias for the
 | 
						|
"customer" table, you can press either <C-C>c or <C-X><C-O>.  This will
 | 
						|
popup a list of columns for the customer table.  It does this by looking back
 | 
						|
to the beginning of the select statement and finding a list of the tables
 | 
						|
specified in the FROM clause.  In this case it notes that in the string
 | 
						|
"customer c", "c" is an alias for the customer table.  The optional "AS"
 | 
						|
keyword is also supported, "customer AS c".
 | 
						|
 | 
						|
 | 
						|
 4.3.3 Procedure Completion:			*sql-completion-procedures*
 | 
						|
 | 
						|
Similar to the table list, <C-C>p, will display a list of stored
 | 
						|
procedures stored within the database.
 | 
						|
 | 
						|
 4.3.4 View Completion:				*sql-completion-views*
 | 
						|
 | 
						|
Similar to the table list, <C-C>v, will display a list of views in the
 | 
						|
database.
 | 
						|
 | 
						|
 | 
						|
4.4 Completion Customization			*sql-completion-customization*
 | 
						|
----------------------------
 | 
						|
 | 
						|
The SQL completion plugin can be customized through various options set in
 | 
						|
your |init.vim|: >
 | 
						|
    omni_sql_no_default_maps
 | 
						|
<       - Default: This variable is not defined
 | 
						|
	- If this variable is defined, no maps are created for OMNI
 | 
						|
	  completion.  See |sql-completion-maps| for further discussion.
 | 
						|
>
 | 
						|
    omni_sql_use_tbl_alias
 | 
						|
<	- Default: a
 | 
						|
	- This setting is only used when generating a comma-separated
 | 
						|
	  column list.	By default the map is <C-C>l.  When generating
 | 
						|
	  a column list, an alias can be prepended to the beginning of each
 | 
						|
	  column, for example:	e.emp_id, e.emp_name.  This option has three
 | 
						|
	  settings: >
 | 
						|
		n - do not use an alias
 | 
						|
		d - use the default (calculated) alias
 | 
						|
		a - ask to confirm the alias name
 | 
						|
<
 | 
						|
	  An alias is determined following a few rules:
 | 
						|
	       1.  If the table name has an '_', then use it as a separator: >
 | 
						|
		   MY_TABLE_NAME --> MTN
 | 
						|
		   my_table_name --> mtn
 | 
						|
		   My_table_NAME --> MtN
 | 
						|
<	       2.  If the table name does NOT contain an '_', but DOES use
 | 
						|
		   mixed case then the case is used as a separator: >
 | 
						|
		   MyTableName --> MTN
 | 
						|
<	       3.  If the table name does NOT contain an '_', and does NOT
 | 
						|
		   use mixed case then the first letter of the table is used: >
 | 
						|
		   mytablename --> m
 | 
						|
		   MYTABLENAME --> M
 | 
						|
 | 
						|
    omni_sql_ignorecase
 | 
						|
<	- Default: Current setting for 'ignorecase'
 | 
						|
	- Valid settings are 0 or 1.
 | 
						|
	- When entering a few letters before initiating completion, the list
 | 
						|
	  will be filtered to display only the entries which begin with the
 | 
						|
	  list of characters.  When this option is set to 0, the list will be
 | 
						|
	  filtered using case sensitivity. >
 | 
						|
 | 
						|
    omni_sql_include_owner
 | 
						|
<	- Default: 0, unless dbext.vim 3.00 has been installed
 | 
						|
	- Valid settings are 0 or 1.
 | 
						|
	- When completing tables, procedure or views and using dbext.vim 3.00
 | 
						|
	  or higher the list of objects will also include the owner name.
 | 
						|
	  When completing these objects and omni_sql_include_owner is enabled
 | 
						|
	  the owner name will be replaced. >
 | 
						|
 | 
						|
    omni_sql_precache_syntax_groups
 | 
						|
<	- Default:
 | 
						|
	  ['syntax','sqlKeyword','sqlFunction','sqlOption','sqlType','sqlStatement']
 | 
						|
	- sqlcomplete can be used in conjunction with other completion
 | 
						|
	  plugins.  This is outlined at |sql-completion-filetypes|.  When the
 | 
						|
	  filetype is changed temporarily to SQL, the sqlcompletion plugin
 | 
						|
	  will cache the syntax groups listed in the List specified in this
 | 
						|
	  option.
 | 
						|
>
 | 
						|
 | 
						|
4.5 SQL Maps					*sql-completion-maps*
 | 
						|
------------
 | 
						|
 | 
						|
The default SQL maps have been described in other sections of this document in
 | 
						|
greater detail.  Here is a list of the maps with a brief description of each.
 | 
						|
 | 
						|
Static Maps
 | 
						|
-----------
 | 
						|
These are maps which use populate the completion list using Vim's syntax
 | 
						|
highlighting rules. >
 | 
						|
    <C-C>a
 | 
						|
<       - Displays all SQL syntax items. >
 | 
						|
    <C-C>k
 | 
						|
<       - Displays all SQL syntax items defined as 'sqlKeyword'. >
 | 
						|
    <C-C>f
 | 
						|
<       - Displays all SQL syntax items defined as 'sqlFunction. >
 | 
						|
    <C-C>o
 | 
						|
<       - Displays all SQL syntax items defined as 'sqlOption'. >
 | 
						|
    <C-C>T
 | 
						|
<       - Displays all SQL syntax items defined as 'sqlType'. >
 | 
						|
    <C-C>s
 | 
						|
<       - Displays all SQL syntax items defined as 'sqlStatement'. >
 | 
						|
 | 
						|
Dynamic Maps
 | 
						|
------------
 | 
						|
These are maps which use populate the completion list using the dbext.vim
 | 
						|
plugin. >
 | 
						|
    <C-C>t
 | 
						|
<       - Displays a list of tables. >
 | 
						|
    <C-C>p
 | 
						|
<       - Displays a list of procedures. >
 | 
						|
    <C-C>v
 | 
						|
<       - Displays a list of views. >
 | 
						|
    <C-C>c
 | 
						|
<       - Displays a list of columns for a specific table. >
 | 
						|
    <C-C>l
 | 
						|
<       - Displays a comma-separated list of columns for a specific table. >
 | 
						|
    <C-C>L
 | 
						|
<       - Displays a comma-separated list of columns for a specific table.
 | 
						|
	  This should only be used when the completion window is active. >
 | 
						|
    <Right>
 | 
						|
<	- Displays a list of columns for the table currently highlighted in
 | 
						|
	  the completion window.  <Right> is not recognized on most Unix
 | 
						|
	  systems, so this maps is only created on the Windows platform.
 | 
						|
	  If you would like the same feature on Unix, choose a different key
 | 
						|
	  and make the same map in your vimrc. >
 | 
						|
    <Left>
 | 
						|
<	- Displays the list of tables.
 | 
						|
	  <Left> is not recognized on most Unix systems, so this maps is
 | 
						|
	  only created on the Windows platform.  If you would like the same
 | 
						|
	  feature on Unix, choose a different key and make the same map in
 | 
						|
	  your vimrc. >
 | 
						|
    <C-C>R
 | 
						|
<	- This maps removes all cached items and forces the SQL completion
 | 
						|
	  to regenerate the list of items.
 | 
						|
 | 
						|
Customizing Maps
 | 
						|
----------------
 | 
						|
You can create as many additional key maps as you like.  Generally, the maps
 | 
						|
will be specifying different syntax highlight groups.
 | 
						|
 | 
						|
If you do not wish the default maps created or the key choices do not work on
 | 
						|
your platform (often a case on *nix) you define the following variable in
 | 
						|
your |init.vim|: >
 | 
						|
    let g:omni_sql_no_default_maps = 1
 | 
						|
 | 
						|
Do not edit ftplugin/sql.vim directly!  If you change this file your changes
 | 
						|
will be over written on future updates.  Vim has a special directory structure
 | 
						|
which allows you to make customizations without changing the files that are
 | 
						|
included with the Vim distribution.  If you wish to customize the maps
 | 
						|
create an after/ftplugin/sql.vim (see |after-directory|) and place the same
 | 
						|
maps from the ftplugin/sql.vim in it using your own key strokes.  <C-C> was
 | 
						|
chosen since it will work on both Windows and *nix platforms.  On the windows
 | 
						|
platform you can also use <C-Space> or ALT keys.
 | 
						|
 | 
						|
 | 
						|
4.6 Using with other filetypes			*sql-completion-filetypes*
 | 
						|
------------------------------
 | 
						|
 | 
						|
Many times SQL can be used with different filetypes.  For example Perl, Java,
 | 
						|
PHP, Javascript can all interact with a database.  Often you need both the SQL
 | 
						|
completion and the completion capabilities for the current language you are
 | 
						|
editing.
 | 
						|
 | 
						|
This can be enabled easily with the following steps (assuming a Perl file): >
 | 
						|
    1.  :e test.pl
 | 
						|
    2.  :set filetype=sql
 | 
						|
    3.  :set ft=perl
 | 
						|
 | 
						|
Step 1
 | 
						|
------
 | 
						|
Begins by editing a Perl file.  Vim automatically sets the filetype to
 | 
						|
"perl".  By default, Vim runs the appropriate filetype file
 | 
						|
ftplugin/perl.vim.  If you are using the syntax completion plugin by following
 | 
						|
the directions at |ft-syntax-omni| then the |'omnifunc'| option has been set to
 | 
						|
"syntax#Complete".  Pressing <C-X><C-O> will display the omni popup containing
 | 
						|
the syntax items for Perl.
 | 
						|
 | 
						|
Step 2
 | 
						|
------
 | 
						|
Manually setting the filetype to "sql" will also fire the appropriate filetype
 | 
						|
files ftplugin/sql.vim.  This file will define a number of buffer specific
 | 
						|
maps for SQL completion, see |sql-completion-maps|.  Now these maps have
 | 
						|
been created and the SQL completion plugin has been initialized.  All SQL
 | 
						|
syntax items have been cached in preparation.  The SQL filetype script detects
 | 
						|
we are attempting to use two different completion plugins.  Since the SQL maps
 | 
						|
begin with <C-C>, the maps will toggle the |'omnifunc'| when in use.  So you
 | 
						|
can use <C-X><C-O> to continue using the completion for Perl (using the syntax
 | 
						|
completion plugin) and <C-C> to use the SQL completion features.
 | 
						|
 | 
						|
Step 3
 | 
						|
------
 | 
						|
Setting the filetype back to Perl sets all the usual "perl" related items back
 | 
						|
as they were.
 | 
						|
 | 
						|
 | 
						|
vim:tw=78:ts=8:noet:ft=help:norl:
 |