xref: /vim-8.2.3635/runtime/syntax/mysql.vim (revision 044b68f4)
1" Vim syntax file
2" Language:     mysql
3" Maintainer:   Kenneth J. Pronovici <[email protected]>
4" Last Change:  $Date$
5" Filenames:    *.mysql
6" URL:		ftp://cedar-solutions.com/software/mysql.vim
7" Note:		The definitions below are taken from the mysql user manual as of April 2002, for version 3.23
8
9" For version 5.x: Clear all syntax items
10" For version 6.x: Quit when a syntax file was already loaded
11if version < 600
12  syntax clear
13elseif exists("b:current_syntax")
14  finish
15endif
16
17" Always ignore case
18syn case ignore
19
20" General keywords which don't fall into other categories
21syn keyword mysqlKeyword	 action add after aggregate all alter as asc auto_increment avg avg_row_length
22syn keyword mysqlKeyword	 both by
23syn keyword mysqlKeyword	 cascade change character check checksum column columns comment constraint create cross
24syn keyword mysqlKeyword	 current_date current_time current_timestamp
25syn keyword mysqlKeyword	 data database databases day day_hour day_minute day_second
26syn keyword mysqlKeyword	 default delayed delay_key_write delete desc describe distinct distinctrow drop
27syn keyword mysqlKeyword	 enclosed escape escaped explain
28syn keyword mysqlKeyword	 fields file first flush for foreign from full function
29syn keyword mysqlKeyword	 global grant grants group
30syn keyword mysqlKeyword	 having heap high_priority hosts hour hour_minute hour_second
31syn keyword mysqlKeyword	 identified ignore index infile inner insert insert_id into isam
32syn keyword mysqlKeyword	 join
33syn keyword mysqlKeyword	 key keys kill last_insert_id leading left limit lines load local lock logs long
34syn keyword mysqlKeyword	 low_priority
35syn keyword mysqlKeyword	 match max_rows middleint min_rows minute minute_second modify month myisam
36syn keyword mysqlKeyword	 natural no
37syn keyword mysqlKeyword	 on optimize option optionally order outer outfile
38syn keyword mysqlKeyword	 pack_keys partial password primary privileges procedure process processlist
39syn keyword mysqlKeyword	 read references reload rename replace restrict returns revoke row rows
40syn keyword mysqlKeyword	 second select show shutdown soname sql_big_result sql_big_selects sql_big_tables sql_log_off
41syn keyword mysqlKeyword	 sql_log_update sql_low_priority_updates sql_select_limit sql_small_result sql_warnings starting
42syn keyword mysqlKeyword	 status straight_join string
43syn keyword mysqlKeyword	 table tables temporary terminated to trailing type
44syn keyword mysqlKeyword	 unique unlock unsigned update usage use using
45syn keyword mysqlKeyword	 values varbinary variables varying
46syn keyword mysqlKeyword	 where with write
47syn keyword mysqlKeyword	 year_month
48syn keyword mysqlKeyword	 zerofill
49
50" Special values
51syn keyword mysqlSpecial	 false null true
52
53" Strings (single- and double-quote)
54syn region mysqlString		 start=+"+  skip=+\\\\\|\\"+  end=+"+
55syn region mysqlString		 start=+'+  skip=+\\\\\|\\'+  end=+'+
56
57" Numbers and hexidecimal values
58syn match mysqlNumber		 "-\=\<[0-9]*\>"
59syn match mysqlNumber		 "-\=\<[0-9]*\.[0-9]*\>"
60syn match mysqlNumber		 "-\=\<[0-9]*e[+-]\=[0-9]*\>"
61syn match mysqlNumber		 "-\=\<[0-9]*\.[0-9]*e[+-]\=[0-9]*\>"
62syn match mysqlNumber		 "\<0x[abcdefABCDEF0-9]*\>"
63
64" User variables
65syn match mysqlVariable		 "@\a*[A-Za-z0-9]*[._]*[A-Za-z0-9]*"
66
67" Comments (c-style, mysql-style and modified sql-style)
68syn region mysqlComment		 start="/\*"  end="\*/"
69syn match mysqlComment		 "#.*"
70syn match mysqlComment		 "-- .*"
71syn sync ccomment mysqlComment
72
73" Column types
74"
75" This gets a bit ugly.  There are two different problems we have to
76" deal with.
77"
78" The first problem is that some keywoards like 'float' can be used
79" both with and without specifiers, i.e. 'float', 'float(1)' and
80" 'float(@var)' are all valid.  We have to account for this and we
81" also have to make sure that garbage like floatn or float_(1) is not
82" highlighted.
83"
84" The second problem is that some of these keywords are included in
85" function names.  For instance, year() is part of the name of the
86" dayofyear() function, and the dec keyword (no parenthesis) is part of
87" the name of the decode() function.
88
89syn keyword mysqlType		 tinyint smallint mediumint int integer bigint
90syn keyword mysqlType		 date datetime time bit bool
91syn keyword mysqlType		 tinytext mediumtext longtext text
92syn keyword mysqlType		 tinyblob mediumblob longblob blob
93syn region mysqlType		 start="float\W" end="."me=s-1
94syn region mysqlType		 start="float$" end="."me=s-1
95syn region mysqlType		 start="float(" end=")" contains=mysqlNumber,mysqlVariable
96syn region mysqlType		 start="double\W" end="."me=s-1
97syn region mysqlType		 start="double$" end="."me=s-1
98syn region mysqlType		 start="double(" end=")" contains=mysqlNumber,mysqlVariable
99syn region mysqlType		 start="double precision\W" end="."me=s-1
100syn region mysqlType		 start="double precision$" end="."me=s-1
101syn region mysqlType		 start="double precision(" end=")" contains=mysqlNumber,mysqlVariable
102syn region mysqlType		 start="real\W" end="."me=s-1
103syn region mysqlType		 start="real$" end="."me=s-1
104syn region mysqlType		 start="real(" end=")" contains=mysqlNumber,mysqlVariable
105syn region mysqlType		 start="numeric(" end=")" contains=mysqlNumber,mysqlVariable
106syn region mysqlType		 start="dec\W" end="."me=s-1
107syn region mysqlType		 start="dec$" end="."me=s-1
108syn region mysqlType		 start="dec(" end=")" contains=mysqlNumber,mysqlVariable
109syn region mysqlType		 start="decimal\W" end="."me=s-1
110syn region mysqlType		 start="decimal$" end="."me=s-1
111syn region mysqlType		 start="decimal(" end=")" contains=mysqlNumber,mysqlVariable
112syn region mysqlType		 start="\Wtimestamp\W" end="."me=s-1
113syn region mysqlType		 start="\Wtimestamp$" end="."me=s-1
114syn region mysqlType		 start="\Wtimestamp(" end=")" contains=mysqlNumber,mysqlVariable
115syn region mysqlType		 start="^timestamp\W" end="."me=s-1
116syn region mysqlType		 start="^timestamp$" end="."me=s-1
117syn region mysqlType		 start="^timestamp(" end=")" contains=mysqlNumber,mysqlVariable
118syn region mysqlType		 start="\Wyear(" end=")" contains=mysqlNumber,mysqlVariable
119syn region mysqlType		 start="^year(" end=")" contains=mysqlNumber,mysqlVariable
120syn region mysqlType		 start="char(" end=")" contains=mysqlNumber,mysqlVariable
121syn region mysqlType		 start="varchar(" end=")" contains=mysqlNumber,mysqlVariable
122syn region mysqlType		 start="enum(" end=")" contains=mysqlString,mysqlVariable
123syn region mysqlType		 start="\Wset(" end=")" contains=mysqlString,mysqlVariable
124syn region mysqlType		 start="^set(" end=")" contains=mysqlString,mysqlVariable
125
126" Logical, string and  numeric operators
127syn keyword mysqlOperator	 between not and or is in like regexp rlike binary exists
128syn region mysqlOperator	 start="isnull(" end=")" contains=ALL
129syn region mysqlOperator	 start="coalesce(" end=")" contains=ALL
130syn region mysqlOperator	 start="interval(" end=")" contains=ALL
131
132" Control flow functions
133syn keyword mysqlFlow		 case when then else end
134syn region mysqlFlow		 start="ifnull("   end=")"  contains=ALL
135syn region mysqlFlow		 start="nullif("   end=")"  contains=ALL
136syn region mysqlFlow		 start="if("	   end=")"  contains=ALL
137
138" General Functions
139"
140" I'm leery of just defining keywords for functions, since according to the MySQL manual:
141"
142"     Function names do not clash with table or column names. For example, ABS is a
143"     valid column name. The only restriction is that for a function call, no spaces
144"     are allowed between the function name and the `(' that follows it.
145"
146" This means that if I want to highlight function names properly, I have to use a
147" region to define them, not just a keyword.  This will probably cause the syntax file
148" to load more slowly, but at least it will be 'correct'.
149
150syn region mysqlFunction	 start="abs(" end=")" contains=ALL
151syn region mysqlFunction	 start="acos(" end=")" contains=ALL
152syn region mysqlFunction	 start="adddate(" end=")" contains=ALL
153syn region mysqlFunction	 start="ascii(" end=")" contains=ALL
154syn region mysqlFunction	 start="asin(" end=")" contains=ALL
155syn region mysqlFunction	 start="atan(" end=")" contains=ALL
156syn region mysqlFunction	 start="atan2(" end=")" contains=ALL
157syn region mysqlFunction	 start="benchmark(" end=")" contains=ALL
158syn region mysqlFunction	 start="bin(" end=")" contains=ALL
159syn region mysqlFunction	 start="bit_and(" end=")" contains=ALL
160syn region mysqlFunction	 start="bit_count(" end=")" contains=ALL
161syn region mysqlFunction	 start="bit_or(" end=")" contains=ALL
162syn region mysqlFunction	 start="ceiling(" end=")" contains=ALL
163syn region mysqlFunction	 start="character_length(" end=")" contains=ALL
164syn region mysqlFunction	 start="char_length(" end=")" contains=ALL
165syn region mysqlFunction	 start="concat(" end=")" contains=ALL
166syn region mysqlFunction	 start="concat_ws(" end=")" contains=ALL
167syn region mysqlFunction	 start="connection_id(" end=")" contains=ALL
168syn region mysqlFunction	 start="conv(" end=")" contains=ALL
169syn region mysqlFunction	 start="cos(" end=")" contains=ALL
170syn region mysqlFunction	 start="cot(" end=")" contains=ALL
171syn region mysqlFunction	 start="count(" end=")" contains=ALL
172syn region mysqlFunction	 start="curdate(" end=")" contains=ALL
173syn region mysqlFunction	 start="curtime(" end=")" contains=ALL
174syn region mysqlFunction	 start="date_add(" end=")" contains=ALL
175syn region mysqlFunction	 start="date_format(" end=")" contains=ALL
176syn region mysqlFunction	 start="date_sub(" end=")" contains=ALL
177syn region mysqlFunction	 start="dayname(" end=")" contains=ALL
178syn region mysqlFunction	 start="dayofmonth(" end=")" contains=ALL
179syn region mysqlFunction	 start="dayofweek(" end=")" contains=ALL
180syn region mysqlFunction	 start="dayofyear(" end=")" contains=ALL
181syn region mysqlFunction	 start="decode(" end=")" contains=ALL
182syn region mysqlFunction	 start="degrees(" end=")" contains=ALL
183syn region mysqlFunction	 start="elt(" end=")" contains=ALL
184syn region mysqlFunction	 start="encode(" end=")" contains=ALL
185syn region mysqlFunction	 start="encrypt(" end=")" contains=ALL
186syn region mysqlFunction	 start="exp(" end=")" contains=ALL
187syn region mysqlFunction	 start="export_set(" end=")" contains=ALL
188syn region mysqlFunction	 start="extract(" end=")" contains=ALL
189syn region mysqlFunction	 start="field(" end=")" contains=ALL
190syn region mysqlFunction	 start="find_in_set(" end=")" contains=ALL
191syn region mysqlFunction	 start="floor(" end=")" contains=ALL
192syn region mysqlFunction	 start="format(" end=")" contains=ALL
193syn region mysqlFunction	 start="from_days(" end=")" contains=ALL
194syn region mysqlFunction	 start="from_unixtime(" end=")" contains=ALL
195syn region mysqlFunction	 start="get_lock(" end=")" contains=ALL
196syn region mysqlFunction	 start="greatest(" end=")" contains=ALL
197syn region mysqlFunction	 start="group_unique_users(" end=")" contains=ALL
198syn region mysqlFunction	 start="hex(" end=")" contains=ALL
199syn region mysqlFunction	 start="inet_aton(" end=")" contains=ALL
200syn region mysqlFunction	 start="inet_ntoa(" end=")" contains=ALL
201syn region mysqlFunction	 start="instr(" end=")" contains=ALL
202syn region mysqlFunction	 start="lcase(" end=")" contains=ALL
203syn region mysqlFunction	 start="least(" end=")" contains=ALL
204syn region mysqlFunction	 start="length(" end=")" contains=ALL
205syn region mysqlFunction	 start="load_file(" end=")" contains=ALL
206syn region mysqlFunction	 start="locate(" end=")" contains=ALL
207syn region mysqlFunction	 start="log(" end=")" contains=ALL
208syn region mysqlFunction	 start="log10(" end=")" contains=ALL
209syn region mysqlFunction	 start="lower(" end=")" contains=ALL
210syn region mysqlFunction	 start="lpad(" end=")" contains=ALL
211syn region mysqlFunction	 start="ltrim(" end=")" contains=ALL
212syn region mysqlFunction	 start="make_set(" end=")" contains=ALL
213syn region mysqlFunction	 start="master_pos_wait(" end=")" contains=ALL
214syn region mysqlFunction	 start="max(" end=")" contains=ALL
215syn region mysqlFunction	 start="md5(" end=")" contains=ALL
216syn region mysqlFunction	 start="mid(" end=")" contains=ALL
217syn region mysqlFunction	 start="min(" end=")" contains=ALL
218syn region mysqlFunction	 start="mod(" end=")" contains=ALL
219syn region mysqlFunction	 start="monthname(" end=")" contains=ALL
220syn region mysqlFunction	 start="now(" end=")" contains=ALL
221syn region mysqlFunction	 start="oct(" end=")" contains=ALL
222syn region mysqlFunction	 start="octet_length(" end=")" contains=ALL
223syn region mysqlFunction	 start="ord(" end=")" contains=ALL
224syn region mysqlFunction	 start="period_add(" end=")" contains=ALL
225syn region mysqlFunction	 start="period_diff(" end=")" contains=ALL
226syn region mysqlFunction	 start="pi(" end=")" contains=ALL
227syn region mysqlFunction	 start="position(" end=")" contains=ALL
228syn region mysqlFunction	 start="pow(" end=")" contains=ALL
229syn region mysqlFunction	 start="power(" end=")" contains=ALL
230syn region mysqlFunction	 start="quarter(" end=")" contains=ALL
231syn region mysqlFunction	 start="radians(" end=")" contains=ALL
232syn region mysqlFunction	 start="rand(" end=")" contains=ALL
233syn region mysqlFunction	 start="release_lock(" end=")" contains=ALL
234syn region mysqlFunction	 start="repeat(" end=")" contains=ALL
235syn region mysqlFunction	 start="reverse(" end=")" contains=ALL
236syn region mysqlFunction	 start="round(" end=")" contains=ALL
237syn region mysqlFunction	 start="rpad(" end=")" contains=ALL
238syn region mysqlFunction	 start="rtrim(" end=")" contains=ALL
239syn region mysqlFunction	 start="sec_to_time(" end=")" contains=ALL
240syn region mysqlFunction	 start="session_user(" end=")" contains=ALL
241syn region mysqlFunction	 start="sign(" end=")" contains=ALL
242syn region mysqlFunction	 start="sin(" end=")" contains=ALL
243syn region mysqlFunction	 start="soundex(" end=")" contains=ALL
244syn region mysqlFunction	 start="space(" end=")" contains=ALL
245syn region mysqlFunction	 start="sqrt(" end=")" contains=ALL
246syn region mysqlFunction	 start="std(" end=")" contains=ALL
247syn region mysqlFunction	 start="stddev(" end=")" contains=ALL
248syn region mysqlFunction	 start="strcmp(" end=")" contains=ALL
249syn region mysqlFunction	 start="subdate(" end=")" contains=ALL
250syn region mysqlFunction	 start="substring(" end=")" contains=ALL
251syn region mysqlFunction	 start="substring_index(" end=")" contains=ALL
252syn region mysqlFunction	 start="subtime(" end=")" contains=ALL
253syn region mysqlFunction	 start="sum(" end=")" contains=ALL
254syn region mysqlFunction	 start="sysdate(" end=")" contains=ALL
255syn region mysqlFunction	 start="system_user(" end=")" contains=ALL
256syn region mysqlFunction	 start="tan(" end=")" contains=ALL
257syn region mysqlFunction	 start="time_format(" end=")" contains=ALL
258syn region mysqlFunction	 start="time_to_sec(" end=")" contains=ALL
259syn region mysqlFunction	 start="to_days(" end=")" contains=ALL
260syn region mysqlFunction	 start="trim(" end=")" contains=ALL
261syn region mysqlFunction	 start="ucase(" end=")" contains=ALL
262syn region mysqlFunction	 start="unique_users(" end=")" contains=ALL
263syn region mysqlFunction	 start="unix_timestamp(" end=")" contains=ALL
264syn region mysqlFunction	 start="upper(" end=")" contains=ALL
265syn region mysqlFunction	 start="user(" end=")" contains=ALL
266syn region mysqlFunction	 start="version(" end=")" contains=ALL
267syn region mysqlFunction	 start="week(" end=")" contains=ALL
268syn region mysqlFunction	 start="weekday(" end=")" contains=ALL
269syn region mysqlFunction	 start="yearweek(" end=")" contains=ALL
270
271" Define the default highlighting.
272" For version 5.7 and earlier: only when not done already
273" For version 5.8 and later: only when an item doesn't have highlighting yet
274if version >= 508 || !exists("did_mysql_syn_inits")
275  if version < 508
276    let did_mysql_syn_inits = 1
277    command -nargs=+ HiLink hi link <args>
278  else
279    command -nargs=+ HiLink hi def link <args>
280  endif
281
282  HiLink mysqlKeyword		 Statement
283  HiLink mysqlSpecial		 Special
284  HiLink mysqlString		 String
285  HiLink mysqlNumber		 Number
286  HiLink mysqlVariable		 Identifier
287  HiLink mysqlComment		 Comment
288  HiLink mysqlType		 Type
289  HiLink mysqlOperator		 Statement
290  HiLink mysqlFlow		 Statement
291  HiLink mysqlFunction		 Function
292
293  delcommand HiLink
294endif
295
296let b:current_syntax = "mysql"
297
298