1*ft_sql.txt*	For Vim version 7.3.  Last change: 2010 Jul 20
2
3by David Fishburn
4
5This is a filetype plugin to work with SQL files.
6
7The Structured Query Language (SQL) is a standard which specifies statements
8that allow a user to interact with a relational database.  Vim includes
9features for navigation, indentation and syntax highlighting.
10
111. Navigation					|sql-navigation|
12    1.1 Matchit					|sql-matchit|
13    1.2 Text Object Motions			|sql-object-motions|
14    1.3 Predefined Object Motions		|sql-predefined-objects|
15    1.4 Macros					|sql-macros|
162. SQL Dialects					|sql-dialects|
17    2.1 SQLSetType				|SQLSetType|
18    2.2 SQLGetType				|SQLGetType|
19    2.3 SQL Dialect Default			|sql-type-default|
203. Adding new SQL Dialects			|sql-adding-dialects|
214. OMNI SQL Completion				|sql-completion|
22    4.1 Static mode				|sql-completion-static|
23    4.2 Dynamic mode				|sql-completion-dynamic|
24    4.3 Tutorial				|sql-completion-tutorial|
25	4.3.1 Complete Tables			|sql-completion-tables|
26	4.3.2 Complete Columns			|sql-completion-columns|
27	4.3.3 Complete Procedures		|sql-completion-procedures|
28	4.3.4 Complete Views			|sql-completion-views|
29    4.4 Completion Customization		|sql-completion-customization|
30    4.5 SQL Maps				|sql-completion-maps|
31    4.6 Using with other filetypes		|sql-completion-filetypes|
32
33==============================================================================
341. Navigation					*sql-navigation*
35
36The SQL ftplugin provides a number of options to assist with file
37navigation.
38
39
401.1 Matchit					*sql-matchit*
41-----------
42The matchit plugin (http://www.vim.org/scripts/script.php?script_id=39)
43provides many additional features and can be customized for different
44languages.  The matchit plugin is configured by defining a local
45buffer variable, b:match_words.  Pressing the % key while on various
46keywords will move the cursor to its match.  For example, if the cursor
47is on an "if", pressing % will cycle between the "else", "elseif" and
48"end if" keywords.
49
50The following keywords are supported: >
51    if
52    elseif | elsif
53    else [if]
54    end if
55
56    [while condition] loop
57	leave
58	break
59	continue
60	exit
61    end loop
62
63    for
64	leave
65	break
66	continue
67	exit
68    end loop
69
70    do
71	statements
72    doend
73
74    case
75    when
76    when
77    default
78    end case
79
80    merge
81    when not matched
82    when matched
83
84    create[ or replace] procedure|function|event
85    returns
86
87
881.2 Text Object Motions				*sql-object-motions*
89-----------------------
90Vim has a number of predefined keys for working with text |object-motions|.
91This filetype plugin attempts to translate these keys to maps which make sense
92for the SQL language.
93
94The following |Normal| mode and |Visual| mode maps exist (when you edit a SQL
95file): >
96    ]]		    move forward to the next 'begin'
97    [[		    move backwards to the previous 'begin'
98    ][		    move forward to the next 'end'
99    []		    move backwards to the previous 'end'
100
101
1021.3 Predefined Object Motions			*sql-predefined-objects*
103-----------------------------
104Most relational databases support various standard features, tables, indices,
105triggers and stored procedures.  Each vendor also has a variety of proprietary
106objects.  The next set of maps have been created to help move between these
107objects.  Depends on which database vendor you are using, the list of objects
108must be configurable.  The filetype plugin attempts to define many of the
109standard objects, plus many additional ones.  In order to make this as
110flexible as possible, you can override the list of objects from within your
111|vimrc| with the following: >
112    let g:ftplugin_sql_objects = 'function,procedure,event,table,trigger' .
113		\ ',schema,service,publication,database,datatype,domain' .
114		\ ',index,subscription,synchronization,view,variable'
115
116The following |Normal| mode and |Visual| mode maps have been created which use
117the above list: >
118    ]}		    move forward to the next 'create <object name>'
119    [{		    move backward to the previous 'create <object name>'
120
121Repeatedly pressing ]} will cycle through each of these create statements: >
122    create table t1 (
123	...
124    );
125
126    create procedure p1
127    begin
128	...
129    end;
130
131    create index i1 on t1 (c1);
132
133The default setting for g:ftplugin_sql_objects is: >
134    let g:ftplugin_sql_objects = 'function,procedure,event,' .
135		\ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .
136		\ 'table,trigger' .
137		\ ',schema,service,publication,database,datatype,domain' .
138		\ ',index,subscription,synchronization,view,variable'
139
140The above will also handle these cases: >
141    create table t1 (
142	...
143    );
144    create existing table t2 (
145	...
146    );
147    create global temporary table t3 (
148	...
149    );
150
151By default, the ftplugin only searches for CREATE statements.  You can also
152override this via your |vimrc| with the following: >
153    let g:ftplugin_sql_statements = 'create,alter'
154
155The filetype plugin defines three types of comments: >
156    1.  --
157    2.  //
158    3.  /*
159	 *
160	 */
161
162The following |Normal| mode and |Visual| mode maps have been created to work
163with comments: >
164    ]"		    move forward to the beginning of a comment
165    ["		    move forward to the end of a comment
166
167
168
1691.4 Macros					   *sql-macros*
170----------
171Vim's feature to find macro definitions, |'define'|, is supported using this
172regular expression: >
173    \c\<\(VARIABLE\|DECLARE\|IN\|OUT\|INOUT\)\>
174
175This addresses the following code: >
176    CREATE VARIABLE myVar1 INTEGER;
177
178    CREATE PROCEDURE sp_test(
179	IN myVar2 INTEGER,
180	OUT myVar3 CHAR(30),
181	INOUT myVar4 NUMERIC(20,0)
182    )
183    BEGIN
184	DECLARE myVar5 INTEGER;
185
186	SELECT c1, c2, c3
187	  INTO myVar2, myVar3, myVar4
188	  FROM T1
189	 WHERE c4 = myVar1;
190    END;
191
192Place your cursor on "myVar1" on this line: >
193	 WHERE c4 = myVar1;
194		     ^
195
196Press any of the following keys: >
197    [d
198    [D
199    [CTRL-D
200
201
202==============================================================================
2032. SQL Dialects					*sql-dialects* *sql-types*
204						*sybase* *TSQL* *Transact-SQL*
205						*sqlanywhere*
206						*oracle* *plsql* *sqlj*
207						*sqlserver*
208						*mysql* *postgresql* *psql*
209						*informix*
210
211All relational databases support SQL.  There is a portion of SQL that is
212portable across vendors (ex. CREATE TABLE, CREATE INDEX), but there is a
213great deal of vendor specific extensions to SQL.  Oracle supports the
214"CREATE OR REPLACE" syntax, column defaults specified in the CREATE TABLE
215statement and the procedural language (for stored procedures and triggers).
216
217The default Vim distribution ships with syntax highlighting based on Oracle's
218PL/SQL.  The default SQL indent script works for Oracle and SQL Anywhere.
219The default filetype plugin works for all vendors and should remain vendor
220neutral, but extendable.
221
222Vim currently has support for a variety of different vendors, currently this
223is via syntax scripts. Unfortunately, to flip between different syntax rules
224you must either create:
225    1.  New filetypes
226    2.  Custom autocmds
227    3.  Manual steps / commands
228
229The majority of people work with only one vendor's database product, it would
230be nice to specify a default in your |vimrc|.
231
232
2332.1 SQLSetType					*sqlsettype* *SQLSetType*
234--------------
235For the people that work with many different databases, it is nice to be
236able to flip between the various vendors rules (indent, syntax) on a per
237buffer basis, at any time.  The ftplugin/sql.vim file defines this function: >
238    SQLSetType
239
240Executing this function without any parameters will set the indent and syntax
241scripts back to their defaults, see |sql-type-default|.  If you have turned
242off Vi's compatibility mode, |'compatible'|, you can use the <Tab> key to
243complete the optional parameter.
244
245After typing the function name and a space, you can use the completion to
246supply a parameter.  The function takes the name of the Vim script you want to
247source.  Using the |cmdline-completion| feature, the SQLSetType function will
248search the |'runtimepath'| for all Vim scripts with a name containing 'sql'.
249This takes the guess work out of the spelling of the names.  The following are
250examples: >
251    :SQLSetType
252    :SQLSetType sqloracle
253    :SQLSetType sqlanywhere
254    :SQLSetType sqlinformix
255    :SQLSetType mysql
256
257The easiest approach is to the use <Tab> character which will first complete
258the command name (SQLSetType), after a space and another <Tab>, display a list
259of available Vim script names: >
260    :SQL<Tab><space><Tab>
261
262
2632.2 SQLGetType					*sqlgettype* *SQLGetType*
264--------------
265At anytime you can determine which SQL dialect you are using by calling the
266SQLGetType command.  The ftplugin/sql.vim file defines this function: >
267    SQLGetType
268
269This will echo: >
270    Current SQL dialect in use:sqlanywhere
271
272
2732.3 SQL Dialect Default				*sql-type-default*
274-----------------------
275As mentioned earlier, the default syntax rules for Vim is based on Oracle
276(PL/SQL).  You can override this default by placing one of the following in
277your |vimrc|: >
278    let g:sql_type_default = 'sqlanywhere'
279    let g:sql_type_default = 'sqlinformix'
280    let g:sql_type_default = 'mysql'
281
282If you added the following to your |vimrc|: >
283    let g:sql_type_default = 'sqlinformix'
284
285The next time edit a SQL file the following scripts will be automatically
286loaded by Vim: >
287    ftplugin/sql.vim
288    syntax/sqlinformix.vim
289    indent/sql.vim
290>
291Notice indent/sqlinformix.sql was not loaded.  There is no indent file
292for Informix, Vim loads the default files if the specified files does not
293exist.
294
295
296==============================================================================
2973. Adding new SQL Dialects			*sql-adding-dialects*
298
299If you begin working with a SQL dialect which does not have any customizations
300available with the default Vim distribution you can check http://www.vim.org
301to see if any customization currently exist.  If not, you can begin by cloning
302an existing script.  Read |filetype-plugins| for more details.
303
304To help identify these scripts, try to create the files with a "sql" prefix.
305If you decide you wish to create customizations for the SQLite database, you
306can create any of the following: >
307    Unix
308	~/.vim/syntax/sqlite.vim
309	~/.vim/indent/sqlite.vim
310    Windows
311	$VIM/vimfiles/syntax/sqlite.vim
312	$VIM/vimfiles/indent/sqlite.vim
313
314No changes are necessary to the SQLSetType function.  It will automatically
315pickup the new SQL files and load them when you issue the SQLSetType command.
316
317
318==============================================================================
3194. OMNI SQL Completion				*sql-completion*
320						*omni-sql-completion*
321
322Vim 7 includes a code completion interface and functions which allows plugin
323developers to build in code completion for any language.  Vim 7 includes
324code completion for the SQL language.
325
326There are two modes to the SQL completion plugin, static and dynamic.  The
327static mode populates the popups with the data generated from current syntax
328highlight rules.  The dynamic mode populates the popups with data retrieved
329directly from a database.  This includes, table lists, column lists,
330procedures names and more.
331
3324.1 Static Mode					*sql-completion-static*
333---------------
334The static popups created contain items defined by the active syntax rules
335while editing a file with a filetype of SQL.  The plugin defines (by default)
336various maps to help the user refine the list of items to be displayed.
337The defaults static maps are: >
338    imap <buffer> <C-C>a <C-\><C-O>:call sqlcomplete#Map('syntax')<CR><C-X><C-O>
339    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
340    imap <buffer> <C-C>f <C-\><C-O>:call sqlcomplete#Map('sqlFunction')<CR><C-X><C-O>
341    imap <buffer> <C-C>o <C-\><C-O>:call sqlcomplete#Map('sqlOption')<CR><C-X><C-O>
342    imap <buffer> <C-C>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O>
343    imap <buffer> <C-C>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O>
344
345The use of "<C-C>" can be user chosen by using the following in your |.vimrc| as it 
346may not work properly on all platforms: >
347    let g:ftplugin_sql_omni_key = '<C-C>'
348>
349The static maps (which are based on the syntax highlight groups) follow this
350format: >
351    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
352
353This command breaks down as: >
354    imap		   - Create an insert map
355    <buffer>		   - Only for this buffer
356    <C-C>k		   - Your choice of key map
357    <C-\><C-O>		   - Execute one command, return to Insert mode
358    :call sqlcomplete#Map( - Allows the SQL completion plugin to perform some
359			     housekeeping functions to allow it to be used in
360			     conjunction with other completion plugins.
361			     Indicate which item you want the SQL completion
362			     plugin to complete.
363			     In this case we are asking the plugin to display
364			     items from the syntax highlight group
365			     'sqlKeyword'.
366			     You can view a list of highlight group names to
367			     choose from by executing the
368				 :syntax list
369			     command while editing a SQL file.
370    'sqlKeyword'	   - Display the items for the sqlKeyword highlight
371			     group
372    )<CR>		   - Execute the :let command
373    <C-X><C-O>		   - Trigger the standard omni completion key stroke.
374			     Passing in 'sqlKeyword' instructs the SQL
375			     completion plugin to populate the popup with
376			     items from the sqlKeyword highlight group.  The
377			     plugin will also cache this result until Vim is
378			     restarted.  The syntax list is retrieved using
379			     the syntaxcomplete plugin.
380
381Using the 'syntax' keyword is a special case.  This instructs the
382syntaxcomplete plugin to retrieve all syntax items.  So this will effectively
383work for any of Vim's SQL syntax files.  At the time of writing this includes
38410 different syntax files for the different dialects of SQL (see section 3
385above, |sql-dialects|).
386
387Here are some examples of the entries which are pulled from the syntax files: >
388     All
389	 - Contains the contents of all syntax highlight groups
390     Statements
391	 - Select, Insert, Update, Delete, Create, Alter, ...
392     Functions
393	 - Min, Max, Trim, Round, Date, ...
394     Keywords
395	 - Index, Database, Having, Group, With
396     Options
397	 - Isolation_level, On_error, Qualify_owners, Fire_triggers, ...
398     Types
399	 - Integer, Char, Varchar, Date, DateTime, Timestamp, ...
400
401
4024.2 Dynamic Mode				*sql-completion-dynamic*
403----------------
404Dynamic mode populates the popups with data directly from a database.  In
405order for the dynamic feature to be enabled you must have the dbext.vim
406plugin installed, (http://vim.sourceforge.net/script.php?script_id=356).
407
408Dynamic mode is used by several features of the SQL completion plugin.
409After installing the dbext plugin see the dbext-tutorial for additional
410configuration and usage.  The dbext plugin allows the SQL completion plugin
411to display a list of tables, procedures, views and columns. >
412     Table List
413	 - All tables for all schema owners
414     Procedure List
415	 - All stored procedures for all schema owners
416     View List
417	 - All stored procedures for all schema owners
418     Column List
419	 - For the selected table, the columns that are part of the table
420
421To enable the popup, while in INSERT mode, use the following key combinations
422for each group (where <C-C> means hold the CTRL key down while pressing
423the space bar):
424     Table List		   - <C-C>t
425			   - <C-X><C-O> (the default map assumes tables)
426     Stored Procedure List - <C-C>p
427     View List		   - <C-C>v
428     Column List	   - <C-C>c
429
430     Drilling In / Out     - When viewing a popup window displaying the list
431			     of tables, you can press <Right>, this will
432			     replace the table currently highlighted with
433			     the column list for that table.
434			   - When viewing a popup window displaying the list
435			     of columns, you can press <Left>, this will
436			     replace the column list with the list of tables.
437			   - This allows you to quickly drill down into a
438			     table to view it's columns and back again.
439			   - <Right> and <Left> can be also be chosen via
440			     your |.vimrc| >
441                                let g:ftplugin_sql_omni_key_right = '<Right>'
442                                let g:ftplugin_sql_omni_key_left  = '<Left>'
443
444The SQL completion plugin caches various lists that are displayed in
445the popup window.  This makes the re-displaying of these lists very
446fast.  If new tables or columns are added to the database it may become
447necessary to clear the plugins cache.  The default map for this is: >
448    imap <buffer> <C-C>R <C-\><C-O>:call sqlcomplete#Map('ResetCache')<CR><C-X><C-O>
449
450
4514.3 SQL Tutorial				*sql-completion-tutorial*
452----------------
453
454This tutorial is designed to take you through the common features of the SQL
455completion plugin so that: >
456     a) You gain familiarity with the plugin
457     b) You are introduced to some of the more common features
458     c) Show how to customize it to your preferences
459     d) Demonstrate "Best of Use" of the plugin (easiest way to configure).
460
461First, create a new buffer: >
462     :e tutorial.sql
463
464
465Static features
466---------------
467To take you through the various lists, simply enter insert mode, hit:
468    <C-C>s   (show SQL statements)
469At this point, you can page down through the list until you find "select".
470If you are familiar with the item you are looking for, for example you know
471the statement begins with the letter "s".  You can type ahead (without the
472quotes) "se" then press:
473    <C-Space>t
474Assuming "select" is highlighted in the popup list press <Enter> to choose
475the entry.  Now type:
476    * fr<C-C>a (show all syntax items)
477choose "from" from the popup list.
478
479When writing stored procedures using the "type" list is useful.  It contains
480a list of all the database supported types.  This may or may not be true
481depending on the syntax file you are using.  The SQL Anywhere syntax file
482(sqlanywhere.vim) has support for this: >
483     BEGIN
484	DECLARE customer_id <C-C>T <-- Choose a type from the list
485
486
487Dynamic features
488----------------
489To take advantage of the dynamic features you must first install the
490dbext.vim plugin (http://vim.sourceforge.net/script.php?script_id=356).  It
491also comes with a tutorial.  From the SQL completion plugin's perspective,
492the main feature dbext provides is a connection to a database.  dbext
493connection profiles are the most efficient mechanism to define connection
494information.  Once connections have been setup, the SQL completion plugin
495uses the features of dbext in the background to populate the popups.
496
497What follows assumes dbext.vim has been correctly configured, a simple test
498is to run the command, :DBListTable.  If a list of tables is shown, you know
499dbext.vim is working as expected.  If not, please consult the dbext.txt
500documentation.
501
502Assuming you have followed the dbext-tutorial you can press <C-C>t to
503display a list of tables.  There is a delay while dbext is creating the table
504list.  After the list is displayed press <C-W>.  This will remove both the
505popup window and the table name already chosen when the list became active. >
506
507 4.3.1 Table Completion:			*sql-completion-tables*
508
509Press <C-C>t to display a list of tables from within the database you
510have connected via the dbext plugin.
511NOTE: All of the SQL completion popups support typing a prefix before pressing
512the key map.  This will limit the contents of the popup window to just items
513beginning with those characters.  >
514
515 4.3.2 Column Completion:			*sql-completion-columns*
516
517The SQL completion plugin can also display a list of columns for particular
518tables.  The column completion is trigger via <C-C>c.
519
520NOTE: The following example uses <Right> to trigger a column list while
521      the popup window is active.  
522
523Example of using column completion:
524     - Press <C-C>t again to display the list of tables.
525     - When the list is displayed in the completion window, press <Right>,
526       this will replace the list of tables, with a list of columns for the
527       table highlighted (after the same short delay).
528     - If you press <Left>, this will again replace the column list with the
529       list of tables.  This allows you to drill into tables and column lists
530       very quickly.
531     - Press <Right> again while the same table is highlighted.  You will
532       notice there is no delay since the column list has been cached.  If you
533       change the schema of a cached table you can press <C-C>R, which
534       clears the SQL completion cache.
535     - NOTE: <Right> and <Left> have been designed to work while the
536       completion window is active.  If the completion popup window is
537       not active, a normal <Right> or <Left> will be executed.
538
539Let's look at how we can build a SQL statement dynamically.  A select statement
540requires a list of columns.  There are two ways to build a column list using
541the SQL completion plugin. >
542    One column at a time:
543<       1. After typing SELECT press <C-C>t to display a list of tables.
544	2. Choose a table from the list.
545	3. Press <Right> to display a list of columns.
546	4. Choose the column from the list and press enter.
547	5. Enter a "," and press <C-C>c.  Generating a column list
548	   generally requires having the cursor on a table name.  The plugin
549	   uses this name to determine what table to retrieve the column list.
550	   In this step, since we are pressing <C-C>c without the cursor
551	   on a table name the column list displayed will be for the previous
552	   table.  Choose a different column and move on.
553	6. Repeat step 5 as often as necessary. >
554    All columns for a table:
555<	1. After typing SELECT press <C-C>t to display a list of tables.
556	2. Highlight the table you need the column list for.
557	3. Press <Enter> to choose the table from the list.
558	4. Press <C-C>l to request a comma separated list of all columns
559	   for this table.
560	5. Based on the table name chosen in step 3, the plugin attempts to
561	   decide on a reasonable table alias.	You are then prompted to
562	   either accept of change the alias.  Press OK.
563	6. The table name is replaced with the column list of the table is
564	   replaced with the comma separate list of columns with the alias
565	   prepended to each of the columns.
566	7. Step 3 and 4 can be replaced by pressing <C-C>L, which has
567	   a <C-Y> embedded in the map to choose the currently highlighted
568	   table in the list.
569
570There is a special provision when writing select statements.  Consider the
571following statement: >
572     select *
573       from customer c,
574	    contact cn,
575	    department as dp,
576	    employee e,
577	    site_options so
578      where c.
579
580In INSERT mode after typing the final "c." which is an alias for the
581"customer" table, you can press either <C-C>c or <C-X><C-O>.  This will
582popup a list of columns for the customer table.  It does this by looking back
583to the beginning of the select statement and finding a list of the tables
584specified in the FROM clause.  In this case it notes that in the string
585"customer c", "c" is an alias for the customer table.  The optional "AS"
586keyword is also supported, "customer AS c". >
587
588
589 4.3.3 Procedure Completion:			*sql-completion-procedures*
590
591Similar to the table list, <C-C>p, will display a list of stored
592procedures stored within the database. >
593
594 4.3.4 View Completion:				*sql-completion-views*
595
596Similar to the table list, <C-C>v, will display a list of views in the
597database.
598
599
6004.4 Completion Customization			*sql-completion-customization*
601----------------------------
602
603The SQL completion plugin can be customized through various options set in
604your |vimrc|: >
605    omni_sql_no_default_maps
606<       - Default: This variable is not defined
607	- If this variable is defined, no maps are created for OMNI
608	  completion.  See |sql-completion-maps| for further discussion.
609>
610    omni_sql_use_tbl_alias
611<	- Default: a
612	- This setting is only used when generating a comma separated
613	  column list.	By default the map is <C-C>l.  When generating
614	  a column list, an alias can be prepended to the beginning of each
615	  column, for example:	e.emp_id, e.emp_name.  This option has three
616	  settings: >
617		n - do not use an alias
618		d - use the default (calculated) alias
619		a - ask to confirm the alias name
620<
621	  An alias is determined following a few rules:
622	       1.  If the table name has an '_', then use it as a separator: >
623		   MY_TABLE_NAME --> MTN
624		   my_table_name --> mtn
625		   My_table_NAME --> MtN
626<	       2.  If the table name does NOT contain an '_', but DOES use
627		   mixed case then the case is used as a separator: >
628		   MyTableName --> MTN
629<	       3.  If the table name does NOT contain an '_', and does NOT
630		   use mixed case then the first letter of the table is used: >
631		   mytablename --> m
632		   MYTABLENAME --> M
633
634    omni_sql_ignorecase
635<	- Default: Current setting for 'ignorecase'
636	- Valid settings are 0 or 1.
637	- When entering a few letters before initiating completion, the list
638	  will be filtered to display only the entries which begin with the
639	  list of characters.  When this option is set to 0, the list will be
640	  filtered using case sensitivity. >
641
642    omni_sql_include_owner
643<	- Default: 0, unless dbext.vim 3.00 has been installed
644	- Valid settings are 0 or 1.
645	- When completing tables, procedure or views and using dbext.vim 3.00
646	  or higher the list of objects will also include the owner name.
647	  When completing these objects and omni_sql_include_owner is enabled
648	  the owner name will be be replaced. >
649
650    omni_sql_precache_syntax_groups
651<	- Default:
652	  ['syntax','sqlKeyword','sqlFunction','sqlOption','sqlType','sqlStatement']
653	- sqlcomplete can be used in conjunction with other completion
654	  plugins.  This is outlined at |sql-completion-filetypes|.  When the
655	  filetype is changed temporarily to SQL, the sqlcompletion plugin
656	  will cache the syntax groups listed in the List specified in this
657	  option.
658>
659
6604.5 SQL Maps					*sql-completion-maps*
661------------
662
663The default SQL maps have been described in other sections of this document in
664greater detail.  Here is a list of the maps with a brief description of each.
665
666Static Maps
667-----------
668These are maps which use populate the completion list using Vim's syntax
669highlighting rules. >
670    <C-C>a
671<       - Displays all SQL syntax items. >
672    <C-C>k
673<       - Displays all SQL syntax items defined as 'sqlKeyword'. >
674    <C-C>f
675<       - Displays all SQL syntax items defined as 'sqlFunction. >
676    <C-C>o
677<       - Displays all SQL syntax items defined as 'sqlOption'. >
678    <C-C>T
679<       - Displays all SQL syntax items defined as 'sqlType'. >
680    <C-C>s
681<       - Displays all SQL syntax items defined as 'sqlStatement'. >
682
683Dynamic Maps
684------------
685These are maps which use populate the completion list using the dbext.vim
686plugin. >
687    <C-C>t
688<       - Displays a list of tables. >
689    <C-C>p
690<       - Displays a list of procedures. >
691    <C-C>v
692<       - Displays a list of views. >
693    <C-C>c
694<       - Displays a list of columns for a specific table. >
695    <C-C>l
696<       - Displays a comma separated list of columns for a specific table. >
697    <C-C>L
698<       - Displays a comma separated list of columns for a specific table.
699	  This should only be used when the completion window is active. >
700    <Right>
701<	- Displays a list of columns for the table currently highlighted in
702	  the completion window.  <Right> is not recognized on most Unix
703	  systems, so this maps is only created on the Windows platform.
704	  If you would like the same feature on Unix, choose a different key
705	  and make the same map in your vimrc. >
706    <Left>
707<	- Displays the list of tables.
708	  <Left> is not recognized on most Unix systems, so this maps is
709	  only created on the Windows platform.  If you would like the same
710	  feature on Unix, choose a different key and make the same map in
711	  your vimrc. >
712    <C-C>R
713<	- This maps removes all cached items and forces the SQL completion
714	  to regenerate the list of items.
715
716Customizing Maps
717----------------
718You can create as many additional key maps as you like.  Generally, the maps
719will be specifying different syntax highlight groups.
720
721If you do not wish the default maps created or the key choices do not work on
722your platform (often a case on *nix) you define the following variable in
723your |vimrc|: >
724    let g:omni_sql_no_default_maps = 1
725
726Do no edit ftplugin/sql.vim directly!  If you change this file your changes
727will be over written on future updates.  Vim has a special directory structure
728which allows you to make customizations without changing the files that are
729included with the Vim distribution.  If you wish to customize the maps
730create an after/ftplugin/sql.vim (see |after-directory|) and place the same
731maps from the ftplugin/sql.vim in it using your own key strokes.  <C-C> was
732chosen since it will work on both Windows and *nix platforms.  On the windows
733platform you can also use <C-Space> or ALT keys.
734
735
7364.6 Using with other filetypes			*sql-completion-filetypes*
737------------------------------
738
739Many times SQL can be used with different filetypes.  For example Perl, Java,
740PHP, Javascript can all interact with a database.  Often you need both the SQL
741completion and the completion capabilities for the current language you are
742editing.
743
744This can be enabled easily with the following steps (assuming a Perl file): >
745    1.  :e test.pl
746    2.  :set filetype=sql
747    3.  :set ft=perl
748
749Step 1
750------
751Begins by editing a Perl file.  Vim automatically sets the filetype to
752"perl".  By default, Vim runs the appropriate filetype file
753ftplugin/perl.vim.  If you are using the syntax completion plugin by following
754the directions at |ft-syntax-omni| then the |'omnifunc'| option has been set to
755"syntax#Complete".  Pressing <C-X><C-O> will display the omni popup containing
756the syntax items for Perl.
757
758Step 2
759------
760Manually setting the filetype to 'sql' will also fire the appropriate filetype
761files ftplugin/sql.vim.  This file will define a number of buffer specific
762maps for SQL completion, see |sql-completion-maps|.  Now these maps have
763been created and the SQL completion plugin has been initialized.  All SQL
764syntax items have been cached in preparation.  The SQL filetype script detects
765we are attempting to use two different completion plugins.  Since the SQL maps
766begin with <C-C>, the maps will toggle the |'omnifunc'| when in use.  So you
767can use <C-X><C-O> to continue using the completion for Perl (using the syntax
768completion plugin) and <C-C> to use the SQL completion features.
769
770Step 3
771------
772Setting the filetype back to Perl sets all the usual "perl" related items back
773as they were.
774
775
776vim:tw=78:ts=8:ft=help:norl:
777