*sql.txt*   For Vim version 7.0aa.  Last change: Fri Jan 06 2006 8:09:25 AM

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|

==============================================================================
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, indicies,
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. 




vim:tw=78:ts=8:ft=help:norl:ff=unix:
