*sql.txt*	For Vim version 7.0.  Last change: Wed Apr 26 2006 3:05:33 PM

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 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 (http://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 |vimrc| 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* *postgress* *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 |vimrc|.


2.1 SQLSetType					*sqlsettype* *SQLSetType*
--------------
For the people that work with many different databases, it would be 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|.  If you have turned
off Vi's compatibility mode, |'compatible'|, 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 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 |vimrc|: >
    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 |vimrc|: >
    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 http://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
	~/.vim/syntax/sqlite.vim
	~/.vim/indent/sqlite.vim
    Windows
	$VIM/vimfiles/syntax/sqlite.vim
	$VIM/vimfiles/indent/sqlite.vim

No changes are necessary to the SQLSetType function.  It will automatically
pickup 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 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>

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
    )<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, (http://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

     Windows platform only  - When viewing a popup window displaying the list
			      of tables, you can press <C-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 <C-Left>, this will
			      replace the column list with the list of tables.
			    - This allows you to quickly drill down into a
			      table to view it's columns and back again.

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 (http://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 trigger via <C-C>c.

NOTE: The following example uses <C-Right> to trigger a column list while
the popup window is active.  This map is only available on the Windows
platforms since *nix does not recognize CTRL and the right arrow held down
together.  If you wish to enable this functionality on a *nix platform choose
a key and create one of these mappings (see |sql-completion-maps| for further
details on where to create this imap): >
    imap <buffer> <your_keystroke> <C-R>=sqlcomplete#DrillIntoTable()<CR>
    imap <buffer> <your_keystroke> <C-Y><C-\><C-O>:call sqlcomplete#Map('column')<CR><C-X><C-O>

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 <C-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 <C-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 <C-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: <C-Right> and <C-Left> have been designed to work while the
       completion window is active.  If the completion popup window is
       not active, a normal <C-Right> or <C-Left> will be executed.

Lets look 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 <C-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 |vimrc|: >
    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 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. >
    <C-Right>
<	- Displays a list of columns for the table currently highlighted in
	  the completion window.  <C-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. >
    <C-Left>
<	- Displays the list of tables.
	  <C-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 |vimrc|: >
    let g:omni_sql_no_default_maps = 1

Do no 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 as well as 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:ft=help:norl:
