neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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"