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