1" Vim syntax file 2" Language: mysql 3" Maintainer: Kenneth J. Pronovici <[email protected]> 4" Last Change: $LastChangedDate: 2016-04-11 10:31:04 -0500 (Mon, 11 Apr 2016) $ 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_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 right 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][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" Escaped column names 68syn match mysqlEscaped "`[^`]*`" 69 70" Comments (c-style, mysql-style and modified sql-style) 71syn region mysqlComment start="/\*" end="\*/" 72syn match mysqlComment "#.*" 73syn match mysqlComment "--\_s.*" 74syn sync ccomment mysqlComment 75 76" Column types 77" 78" This gets a bit ugly. There are two different problems we have to 79" deal with. 80" 81" The first problem is that some keywords like 'float' can be used 82" both with and without specifiers, i.e. 'float', 'float(1)' and 83" 'float(@var)' are all valid. We have to account for this and we 84" also have to make sure that garbage like floatn or float_(1) is not 85" highlighted. 86" 87" The second problem is that some of these keywords are included in 88" function names. For instance, year() is part of the name of the 89" dayofyear() function, and the dec keyword (no parenthesis) is part of 90" the name of the decode() function. 91 92syn keyword mysqlType tinyint smallint mediumint int integer bigint 93syn keyword mysqlType date datetime time bit bool 94syn keyword mysqlType tinytext mediumtext longtext text 95syn keyword mysqlType tinyblob mediumblob longblob blob 96syn region mysqlType start="float\W" end="."me=s-1 97syn region mysqlType start="float$" end="."me=s-1 98syn region mysqlType start="float(" end=")" contains=mysqlNumber,mysqlVariable 99syn region mysqlType start="double\W" end="."me=s-1 100syn region mysqlType start="double$" end="."me=s-1 101syn region mysqlType start="double(" end=")" contains=mysqlNumber,mysqlVariable 102syn region mysqlType start="double precision\W" end="."me=s-1 103syn region mysqlType start="double precision$" end="."me=s-1 104syn region mysqlType start="double precision(" end=")" contains=mysqlNumber,mysqlVariable 105syn region mysqlType start="real\W" end="."me=s-1 106syn region mysqlType start="real$" end="."me=s-1 107syn region mysqlType start="real(" end=")" contains=mysqlNumber,mysqlVariable 108syn region mysqlType start="numeric(" end=")" contains=mysqlNumber,mysqlVariable 109syn region mysqlType start="dec\W" end="."me=s-1 110syn region mysqlType start="dec$" end="."me=s-1 111syn region mysqlType start="dec(" end=")" contains=mysqlNumber,mysqlVariable 112syn region mysqlType start="decimal\W" end="."me=s-1 113syn region mysqlType start="decimal$" end="."me=s-1 114syn region mysqlType start="decimal(" end=")" contains=mysqlNumber,mysqlVariable 115syn region mysqlType start="\Wtimestamp\W" end="."me=s-1 116syn region mysqlType start="\Wtimestamp$" end="."me=s-1 117syn region mysqlType start="\Wtimestamp(" end=")" contains=mysqlNumber,mysqlVariable 118syn region mysqlType start="^timestamp\W" end="."me=s-1 119syn region mysqlType start="^timestamp$" end="."me=s-1 120syn region mysqlType start="^timestamp(" end=")" contains=mysqlNumber,mysqlVariable 121syn region mysqlType start="\Wyear(" end=")" contains=mysqlNumber,mysqlVariable 122syn region mysqlType start="^year(" end=")" contains=mysqlNumber,mysqlVariable 123syn region mysqlType start="char(" end=")" contains=mysqlNumber,mysqlVariable 124syn region mysqlType start="varchar(" end=")" contains=mysqlNumber,mysqlVariable 125syn region mysqlType start="enum(" end=")" contains=mysqlString,mysqlVariable 126syn region mysqlType start="\Wset(" end=")" contains=mysqlString,mysqlVariable 127syn region mysqlType start="^set(" end=")" contains=mysqlString,mysqlVariable 128 129" Logical, string and numeric operators 130syn keyword mysqlOperator between not and or is in like regexp rlike binary exists 131syn region mysqlOperator start="isnull(" end=")" contains=ALL 132syn region mysqlOperator start="coalesce(" end=")" contains=ALL 133syn region mysqlOperator start="interval(" end=")" contains=ALL 134 135" Control flow functions 136syn keyword mysqlFlow case when then else end 137syn region mysqlFlow start="ifnull(" end=")" contains=ALL 138syn region mysqlFlow start="nullif(" end=")" contains=ALL 139syn region mysqlFlow start="if(" end=")" contains=ALL 140 141" General Functions 142" 143" I'm leery of just defining keywords for functions, since according to the MySQL manual: 144" 145" Function names do not clash with table or column names. For example, ABS is a 146" valid column name. The only restriction is that for a function call, no spaces 147" are allowed between the function name and the `(' that follows it. 148" 149" This means that if I want to highlight function names properly, I have to use a 150" region to define them, not just a keyword. This will probably cause the syntax file 151" to load more slowly, but at least it will be 'correct'. 152 153syn region mysqlFunction start="abs(" end=")" contains=ALL 154syn region mysqlFunction start="acos(" end=")" contains=ALL 155syn region mysqlFunction start="adddate(" end=")" contains=ALL 156syn region mysqlFunction start="ascii(" end=")" contains=ALL 157syn region mysqlFunction start="asin(" end=")" contains=ALL 158syn region mysqlFunction start="atan(" end=")" contains=ALL 159syn region mysqlFunction start="atan2(" end=")" contains=ALL 160syn region mysqlFunction start="avg(" end=")" contains=ALL 161syn region mysqlFunction start="benchmark(" end=")" contains=ALL 162syn region mysqlFunction start="bin(" end=")" contains=ALL 163syn region mysqlFunction start="bit_and(" end=")" contains=ALL 164syn region mysqlFunction start="bit_count(" end=")" contains=ALL 165syn region mysqlFunction start="bit_or(" end=")" contains=ALL 166syn region mysqlFunction start="ceiling(" end=")" contains=ALL 167syn region mysqlFunction start="character_length(" end=")" contains=ALL 168syn region mysqlFunction start="char_length(" end=")" contains=ALL 169syn region mysqlFunction start="concat(" end=")" contains=ALL 170syn region mysqlFunction start="concat_ws(" end=")" contains=ALL 171syn region mysqlFunction start="connection_id(" end=")" contains=ALL 172syn region mysqlFunction start="conv(" end=")" contains=ALL 173syn region mysqlFunction start="cos(" end=")" contains=ALL 174syn region mysqlFunction start="cot(" end=")" contains=ALL 175syn region mysqlFunction start="count(" end=")" contains=ALL 176syn region mysqlFunction start="curdate(" end=")" contains=ALL 177syn region mysqlFunction start="curtime(" end=")" contains=ALL 178syn region mysqlFunction start="date_add(" end=")" contains=ALL 179syn region mysqlFunction start="date_format(" end=")" contains=ALL 180syn region mysqlFunction start="date_sub(" end=")" contains=ALL 181syn region mysqlFunction start="dayname(" end=")" contains=ALL 182syn region mysqlFunction start="dayofmonth(" end=")" contains=ALL 183syn region mysqlFunction start="dayofweek(" end=")" contains=ALL 184syn region mysqlFunction start="dayofyear(" end=")" contains=ALL 185syn region mysqlFunction start="decode(" end=")" contains=ALL 186syn region mysqlFunction start="degrees(" end=")" contains=ALL 187syn region mysqlFunction start="elt(" end=")" contains=ALL 188syn region mysqlFunction start="encode(" end=")" contains=ALL 189syn region mysqlFunction start="encrypt(" end=")" contains=ALL 190syn region mysqlFunction start="exp(" end=")" contains=ALL 191syn region mysqlFunction start="export_set(" end=")" contains=ALL 192syn region mysqlFunction start="extract(" end=")" contains=ALL 193syn region mysqlFunction start="field(" end=")" contains=ALL 194syn region mysqlFunction start="find_in_set(" end=")" contains=ALL 195syn region mysqlFunction start="floor(" end=")" contains=ALL 196syn region mysqlFunction start="format(" end=")" contains=ALL 197syn region mysqlFunction start="from_days(" end=")" contains=ALL 198syn region mysqlFunction start="from_unixtime(" end=")" contains=ALL 199syn region mysqlFunction start="get_lock(" end=")" contains=ALL 200syn region mysqlFunction start="greatest(" end=")" contains=ALL 201syn region mysqlFunction start="group_unique_users(" end=")" contains=ALL 202syn region mysqlFunction start="hex(" end=")" contains=ALL 203syn region mysqlFunction start="inet_aton(" end=")" contains=ALL 204syn region mysqlFunction start="inet_ntoa(" end=")" contains=ALL 205syn region mysqlFunction start="instr(" end=")" contains=ALL 206syn region mysqlFunction start="lcase(" end=")" contains=ALL 207syn region mysqlFunction start="least(" end=")" contains=ALL 208syn region mysqlFunction start="length(" end=")" contains=ALL 209syn region mysqlFunction start="load_file(" end=")" contains=ALL 210syn region mysqlFunction start="locate(" end=")" contains=ALL 211syn region mysqlFunction start="log(" end=")" contains=ALL 212syn region mysqlFunction start="log10(" end=")" contains=ALL 213syn region mysqlFunction start="lower(" end=")" contains=ALL 214syn region mysqlFunction start="lpad(" end=")" contains=ALL 215syn region mysqlFunction start="ltrim(" end=")" contains=ALL 216syn region mysqlFunction start="make_set(" end=")" contains=ALL 217syn region mysqlFunction start="master_pos_wait(" end=")" contains=ALL 218syn region mysqlFunction start="max(" end=")" contains=ALL 219syn region mysqlFunction start="md5(" end=")" contains=ALL 220syn region mysqlFunction start="mid(" end=")" contains=ALL 221syn region mysqlFunction start="min(" end=")" contains=ALL 222syn region mysqlFunction start="mod(" end=")" contains=ALL 223syn region mysqlFunction start="monthname(" end=")" contains=ALL 224syn region mysqlFunction start="now(" end=")" contains=ALL 225syn region mysqlFunction start="oct(" end=")" contains=ALL 226syn region mysqlFunction start="octet_length(" end=")" contains=ALL 227syn region mysqlFunction start="ord(" end=")" contains=ALL 228syn region mysqlFunction start="period_add(" end=")" contains=ALL 229syn region mysqlFunction start="period_diff(" end=")" contains=ALL 230syn region mysqlFunction start="pi(" end=")" contains=ALL 231syn region mysqlFunction start="position(" end=")" contains=ALL 232syn region mysqlFunction start="pow(" end=")" contains=ALL 233syn region mysqlFunction start="power(" end=")" contains=ALL 234syn region mysqlFunction start="quarter(" end=")" contains=ALL 235syn region mysqlFunction start="radians(" end=")" contains=ALL 236syn region mysqlFunction start="rand(" end=")" contains=ALL 237syn region mysqlFunction start="release_lock(" end=")" contains=ALL 238syn region mysqlFunction start="repeat(" end=")" contains=ALL 239syn region mysqlFunction start="reverse(" end=")" contains=ALL 240syn region mysqlFunction start="round(" end=")" contains=ALL 241syn region mysqlFunction start="rpad(" end=")" contains=ALL 242syn region mysqlFunction start="rtrim(" end=")" contains=ALL 243syn region mysqlFunction start="sec_to_time(" end=")" contains=ALL 244syn region mysqlFunction start="session_user(" end=")" contains=ALL 245syn region mysqlFunction start="sign(" end=")" contains=ALL 246syn region mysqlFunction start="sin(" end=")" contains=ALL 247syn region mysqlFunction start="soundex(" end=")" contains=ALL 248syn region mysqlFunction start="space(" end=")" contains=ALL 249syn region mysqlFunction start="sqrt(" end=")" contains=ALL 250syn region mysqlFunction start="std(" end=")" contains=ALL 251syn region mysqlFunction start="stddev(" end=")" contains=ALL 252syn region mysqlFunction start="strcmp(" end=")" contains=ALL 253syn region mysqlFunction start="subdate(" end=")" contains=ALL 254syn region mysqlFunction start="substring(" end=")" contains=ALL 255syn region mysqlFunction start="substring_index(" end=")" contains=ALL 256syn region mysqlFunction start="subtime(" end=")" contains=ALL 257syn region mysqlFunction start="sum(" end=")" contains=ALL 258syn region mysqlFunction start="sysdate(" end=")" contains=ALL 259syn region mysqlFunction start="system_user(" end=")" contains=ALL 260syn region mysqlFunction start="tan(" end=")" contains=ALL 261syn region mysqlFunction start="time_format(" end=")" contains=ALL 262syn region mysqlFunction start="time_to_sec(" end=")" contains=ALL 263syn region mysqlFunction start="to_days(" end=")" contains=ALL 264syn region mysqlFunction start="trim(" end=")" contains=ALL 265syn region mysqlFunction start="ucase(" end=")" contains=ALL 266syn region mysqlFunction start="unique_users(" end=")" contains=ALL 267syn region mysqlFunction start="unix_timestamp(" end=")" contains=ALL 268syn region mysqlFunction start="upper(" end=")" contains=ALL 269syn region mysqlFunction start="user(" end=")" contains=ALL 270syn region mysqlFunction start="version(" end=")" contains=ALL 271syn region mysqlFunction start="week(" end=")" contains=ALL 272syn region mysqlFunction start="weekday(" end=")" contains=ALL 273syn region mysqlFunction start="yearweek(" end=")" contains=ALL 274 275" Define the default highlighting. 276" For version 5.7 and earlier: only when not done already 277" For version 5.8 and later: only when an item doesn't have highlighting yet 278if version >= 508 || !exists("did_mysql_syn_inits") 279 if version < 508 280 let did_mysql_syn_inits = 1 281 command -nargs=+ HiLink hi link <args> 282 else 283 command -nargs=+ HiLink hi def link <args> 284 endif 285 286 HiLink mysqlKeyword Statement 287 HiLink mysqlSpecial Special 288 HiLink mysqlString String 289 HiLink mysqlNumber Number 290 HiLink mysqlVariable Identifier 291 HiLink mysqlComment Comment 292 HiLink mysqlType Type 293 HiLink mysqlOperator Statement 294 HiLink mysqlFlow Statement 295 HiLink mysqlFunction Function 296 297 delcommand HiLink 298endif 299 300let b:current_syntax = "mysql" 301 302