changeset 35768:31b224083517

runtime(mysql): update syntax script Commit: https://github.com/vim/vim/commit/6e37575760022be047cad0e1cf1e30c18fab21ad Author: Yinzuo Jiang <jiangyinzuo@foxmail.com> Date: Sun Jul 21 09:27:27 2024 +0200 runtime(mysql): update syntax script Problem: - `syn region ...`s in syntax/mysql.vim match function names inaccurately. - no syntax rules for mysql window function. - coarse highlight definition in syntax/mysql.vim. Solution: - add `\<` before the function name for accuracy. - add syntax rules for mysql window function. - enhance the highlight definition. closes: #15311 Signed-off-by: Yinzuo Jiang <jiangyinzuo@foxmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Sun, 21 Jul 2024 09:30:13 +0200
parents 8ea2151d1ed8
children 4f48d5d327ea
files runtime/syntax/mysql.vim
diffstat 1 files changed, 169 insertions(+), 145 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/syntax/mysql.vim
+++ b/runtime/syntax/mysql.vim
@@ -1,10 +1,13 @@
 " Vim syntax file
 " Language:     mysql
 " Maintainer:   Kenneth J. Pronovici <pronovic@ieee.org>
-" Last Change:  $LastChangedDate: 2016-04-11 10:31:04 -0500 (Mon, 11 Apr 2016) $
 " Filenames:    *.mysql
-" URL:          ftp://cedar-solutions.com/software/mysql.vim
-" Note:         The definitions below are taken from the mysql user manual as of April 2002, for version 3.23
+" URL:          ftp://cedar-solutions.com/software/mysql.vim (https://github.com/pronovic/vim-syntax/blob/master/mysql.vim)
+" Note:         The definitions below are taken from the mysql user manual as of April 2002, for version 3.23 and have been updated
+"               in July 2024 with the docs for version 8.4
+" Last Change:  2016 Apr 11
+"  2024-07-21:  update MySQL functions as of MySQL 8.4 (by Vim Project)
+" 
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -92,23 +95,23 @@ syn keyword mysqlType            tinytex
 syn keyword mysqlType            tinyblob mediumblob longblob blob
 syn region mysqlType             start="float\W" end="."me=s-1
 syn region mysqlType             start="float$" end="."me=s-1
-syn region mysqlType             start="float(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType             start="\<float(" end=")" contains=mysqlNumber,mysqlVariable
 syn region mysqlType             start="double\W" end="."me=s-1
 syn region mysqlType             start="double$" end="."me=s-1
-syn region mysqlType             start="double(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType             start="\<double(" end=")" contains=mysqlNumber,mysqlVariable
 syn region mysqlType             start="double precision\W" end="."me=s-1
 syn region mysqlType             start="double precision$" end="."me=s-1
 syn region mysqlType             start="double precision(" end=")" contains=mysqlNumber,mysqlVariable
 syn region mysqlType             start="real\W" end="."me=s-1
 syn region mysqlType             start="real$" end="."me=s-1
-syn region mysqlType             start="real(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType             start="numeric(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType             start="\<real(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType             start="\<numeric(" end=")" contains=mysqlNumber,mysqlVariable
 syn region mysqlType             start="dec\W" end="."me=s-1
 syn region mysqlType             start="dec$" end="."me=s-1
-syn region mysqlType             start="dec(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType             start="\<dec(" end=")" contains=mysqlNumber,mysqlVariable
 syn region mysqlType             start="decimal\W" end="."me=s-1
 syn region mysqlType             start="decimal$" end="."me=s-1
-syn region mysqlType             start="decimal(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType             start="\<decimal(" end=")" contains=mysqlNumber,mysqlVariable
 syn region mysqlType             start="\Wtimestamp\W" end="."me=s-1
 syn region mysqlType             start="\Wtimestamp$" end="."me=s-1
 syn region mysqlType             start="\Wtimestamp(" end=")" contains=mysqlNumber,mysqlVariable
@@ -117,25 +120,42 @@ syn region mysqlType             start="
 syn region mysqlType             start="^timestamp(" end=")" contains=mysqlNumber,mysqlVariable
 syn region mysqlType             start="\Wyear(" end=")" contains=mysqlNumber,mysqlVariable
 syn region mysqlType             start="^year(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType             start="char(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType             start="varchar(" end=")" contains=mysqlNumber,mysqlVariable
-syn region mysqlType             start="enum(" end=")" contains=mysqlString,mysqlVariable
+syn region mysqlType             start="\<char(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType             start="\<varchar(" end=")" contains=mysqlNumber,mysqlVariable
+syn region mysqlType             start="\<enum(" end=")" contains=mysqlString,mysqlVariable
 syn region mysqlType             start="\Wset(" end=")" contains=mysqlString,mysqlVariable
 syn region mysqlType             start="^set(" end=")" contains=mysqlString,mysqlVariable
 
 " Logical, string and  numeric operators
 syn keyword mysqlOperator        between not and or is in like regexp rlike binary exists
-syn region mysqlOperator         start="isnull(" end=")" contains=ALL
-syn region mysqlOperator         start="coalesce(" end=")" contains=ALL
-syn region mysqlOperator         start="interval(" end=")" contains=ALL
+syn region mysqlOperatorFunction start="\<isnull(" end=")" contains=ALL
+syn region mysqlOperatorFunction start="\<coalesce(" end=")" contains=ALL
+syn region mysqlOperatorFunction start="\<interval(" end=")" contains=ALL
+
+" Flow control functions
+" https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/flow-control-functions.html
+syn keyword mysqlFlowLabel       case when then else end
+syn region mysqlFlowFunction     start="\<ifnull("   end=")"  contains=ALL
+syn region mysqlFlowFunction     start="\<nullif("   end=")"  contains=ALL
+syn region mysqlFlowFunction     start="\<if("       end=")"  contains=ALL
 
-" Control flow functions
-syn keyword mysqlFlow            case when then else end
-syn region mysqlFlow             start="ifnull("   end=")"  contains=ALL
-syn region mysqlFlow             start="nullif("   end=")"  contains=ALL
-syn region mysqlFlow             start="if("       end=")"  contains=ALL
+" Window functions
+" https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/window-functions-usage.html
+syn keyword mysqlWindowKeyword   over partition window
+" https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/window-function-descriptions.html
+syn region  mysqlWindowFunction  start="\<cume_dist(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<dense_rank(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<first_value(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<lag(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<last_value(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<lead(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<nth_value(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<ntile(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<percent_rank(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<rank(" end=")" contains=ALL
+syn region  mysqlWindowFunction  start="\<row_number(" end=")" contains=ALL
 
-" General Functions
+" General functions
 "
 " I'm leery of just defining keywords for functions, since according to the MySQL manual:
 "
@@ -147,140 +167,144 @@ syn region mysqlFlow             start="
 " region to define them, not just a keyword.  This will probably cause the syntax file
 " to load more slowly, but at least it will be 'correct'.
 
-syn region mysqlFunction         start="abs(" end=")" contains=ALL
-syn region mysqlFunction         start="acos(" end=")" contains=ALL
-syn region mysqlFunction         start="adddate(" end=")" contains=ALL
-syn region mysqlFunction         start="ascii(" end=")" contains=ALL
-syn region mysqlFunction         start="asin(" end=")" contains=ALL
-syn region mysqlFunction         start="atan(" end=")" contains=ALL
-syn region mysqlFunction         start="atan2(" end=")" contains=ALL
-syn region mysqlFunction         start="avg(" end=")" contains=ALL
-syn region mysqlFunction         start="benchmark(" end=")" contains=ALL
-syn region mysqlFunction         start="bin(" end=")" contains=ALL
-syn region mysqlFunction         start="bit_and(" end=")" contains=ALL
-syn region mysqlFunction         start="bit_count(" end=")" contains=ALL
-syn region mysqlFunction         start="bit_or(" end=")" contains=ALL
-syn region mysqlFunction         start="ceiling(" end=")" contains=ALL
-syn region mysqlFunction         start="character_length(" end=")" contains=ALL
-syn region mysqlFunction         start="char_length(" end=")" contains=ALL
-syn region mysqlFunction         start="concat(" end=")" contains=ALL
-syn region mysqlFunction         start="concat_ws(" end=")" contains=ALL
-syn region mysqlFunction         start="connection_id(" end=")" contains=ALL
-syn region mysqlFunction         start="conv(" end=")" contains=ALL
-syn region mysqlFunction         start="cos(" end=")" contains=ALL
-syn region mysqlFunction         start="cot(" end=")" contains=ALL
-syn region mysqlFunction         start="count(" end=")" contains=ALL
-syn region mysqlFunction         start="curdate(" end=")" contains=ALL
-syn region mysqlFunction         start="curtime(" end=")" contains=ALL
-syn region mysqlFunction         start="date_add(" end=")" contains=ALL
-syn region mysqlFunction         start="date_format(" end=")" contains=ALL
-syn region mysqlFunction         start="date_sub(" end=")" contains=ALL
-syn region mysqlFunction         start="dayname(" end=")" contains=ALL
-syn region mysqlFunction         start="dayofmonth(" end=")" contains=ALL
-syn region mysqlFunction         start="dayofweek(" end=")" contains=ALL
-syn region mysqlFunction         start="dayofyear(" end=")" contains=ALL
-syn region mysqlFunction         start="decode(" end=")" contains=ALL
-syn region mysqlFunction         start="degrees(" end=")" contains=ALL
-syn region mysqlFunction         start="elt(" end=")" contains=ALL
-syn region mysqlFunction         start="encode(" end=")" contains=ALL
-syn region mysqlFunction         start="encrypt(" end=")" contains=ALL
-syn region mysqlFunction         start="exp(" end=")" contains=ALL
-syn region mysqlFunction         start="export_set(" end=")" contains=ALL
-syn region mysqlFunction         start="extract(" end=")" contains=ALL
-syn region mysqlFunction         start="field(" end=")" contains=ALL
-syn region mysqlFunction         start="find_in_set(" end=")" contains=ALL
-syn region mysqlFunction         start="floor(" end=")" contains=ALL
-syn region mysqlFunction         start="format(" end=")" contains=ALL
-syn region mysqlFunction         start="from_days(" end=")" contains=ALL
-syn region mysqlFunction         start="from_unixtime(" end=")" contains=ALL
-syn region mysqlFunction         start="get_lock(" end=")" contains=ALL
-syn region mysqlFunction         start="greatest(" end=")" contains=ALL
-syn region mysqlFunction         start="group_unique_users(" end=")" contains=ALL
-syn region mysqlFunction         start="hex(" end=")" contains=ALL
-syn region mysqlFunction         start="inet_aton(" end=")" contains=ALL
-syn region mysqlFunction         start="inet_ntoa(" end=")" contains=ALL
-syn region mysqlFunction         start="instr(" end=")" contains=ALL
-syn region mysqlFunction         start="lcase(" end=")" contains=ALL
-syn region mysqlFunction         start="least(" end=")" contains=ALL
-syn region mysqlFunction         start="length(" end=")" contains=ALL
-syn region mysqlFunction         start="load_file(" end=")" contains=ALL
-syn region mysqlFunction         start="locate(" end=")" contains=ALL
-syn region mysqlFunction         start="log(" end=")" contains=ALL
-syn region mysqlFunction         start="log10(" end=")" contains=ALL
-syn region mysqlFunction         start="lower(" end=")" contains=ALL
-syn region mysqlFunction         start="lpad(" end=")" contains=ALL
-syn region mysqlFunction         start="ltrim(" end=")" contains=ALL
-syn region mysqlFunction         start="make_set(" end=")" contains=ALL
-syn region mysqlFunction         start="master_pos_wait(" end=")" contains=ALL
-syn region mysqlFunction         start="max(" end=")" contains=ALL
-syn region mysqlFunction         start="md5(" end=")" contains=ALL
-syn region mysqlFunction         start="mid(" end=")" contains=ALL
-syn region mysqlFunction         start="min(" end=")" contains=ALL
-syn region mysqlFunction         start="mod(" end=")" contains=ALL
-syn region mysqlFunction         start="monthname(" end=")" contains=ALL
-syn region mysqlFunction         start="now(" end=")" contains=ALL
-syn region mysqlFunction         start="oct(" end=")" contains=ALL
-syn region mysqlFunction         start="octet_length(" end=")" contains=ALL
-syn region mysqlFunction         start="ord(" end=")" contains=ALL
-syn region mysqlFunction         start="period_add(" end=")" contains=ALL
-syn region mysqlFunction         start="period_diff(" end=")" contains=ALL
-syn region mysqlFunction         start="pi(" end=")" contains=ALL
-syn region mysqlFunction         start="position(" end=")" contains=ALL
-syn region mysqlFunction         start="pow(" end=")" contains=ALL
-syn region mysqlFunction         start="power(" end=")" contains=ALL
-syn region mysqlFunction         start="quarter(" end=")" contains=ALL
-syn region mysqlFunction         start="radians(" end=")" contains=ALL
-syn region mysqlFunction         start="rand(" end=")" contains=ALL
-syn region mysqlFunction         start="release_lock(" end=")" contains=ALL
-syn region mysqlFunction         start="repeat(" end=")" contains=ALL
-syn region mysqlFunction         start="reverse(" end=")" contains=ALL
-syn region mysqlFunction         start="round(" end=")" contains=ALL
-syn region mysqlFunction         start="rpad(" end=")" contains=ALL
-syn region mysqlFunction         start="rtrim(" end=")" contains=ALL
-syn region mysqlFunction         start="sec_to_time(" end=")" contains=ALL
-syn region mysqlFunction         start="session_user(" end=")" contains=ALL
-syn region mysqlFunction         start="sign(" end=")" contains=ALL
-syn region mysqlFunction         start="sin(" end=")" contains=ALL
-syn region mysqlFunction         start="soundex(" end=")" contains=ALL
-syn region mysqlFunction         start="space(" end=")" contains=ALL
-syn region mysqlFunction         start="sqrt(" end=")" contains=ALL
-syn region mysqlFunction         start="std(" end=")" contains=ALL
-syn region mysqlFunction         start="stddev(" end=")" contains=ALL
-syn region mysqlFunction         start="strcmp(" end=")" contains=ALL
-syn region mysqlFunction         start="subdate(" end=")" contains=ALL
-syn region mysqlFunction         start="substring(" end=")" contains=ALL
-syn region mysqlFunction         start="substring_index(" end=")" contains=ALL
-syn region mysqlFunction         start="subtime(" end=")" contains=ALL
-syn region mysqlFunction         start="sum(" end=")" contains=ALL
-syn region mysqlFunction         start="sysdate(" end=")" contains=ALL
-syn region mysqlFunction         start="system_user(" end=")" contains=ALL
-syn region mysqlFunction         start="tan(" end=")" contains=ALL
-syn region mysqlFunction         start="time_format(" end=")" contains=ALL
-syn region mysqlFunction         start="time_to_sec(" end=")" contains=ALL
-syn region mysqlFunction         start="to_days(" end=")" contains=ALL
-syn region mysqlFunction         start="trim(" end=")" contains=ALL
-syn region mysqlFunction         start="ucase(" end=")" contains=ALL
-syn region mysqlFunction         start="unique_users(" end=")" contains=ALL
-syn region mysqlFunction         start="unix_timestamp(" end=")" contains=ALL
-syn region mysqlFunction         start="upper(" end=")" contains=ALL
-syn region mysqlFunction         start="user(" end=")" contains=ALL
-syn region mysqlFunction         start="version(" end=")" contains=ALL
-syn region mysqlFunction         start="week(" end=")" contains=ALL
-syn region mysqlFunction         start="weekday(" end=")" contains=ALL
-syn region mysqlFunction         start="yearweek(" end=")" contains=ALL
+syn region mysqlFunction         start="\<abs(" end=")" contains=ALL
+syn region mysqlFunction         start="\<acos(" end=")" contains=ALL
+syn region mysqlFunction         start="\<adddate(" end=")" contains=ALL
+syn region mysqlFunction         start="\<ascii(" end=")" contains=ALL
+syn region mysqlFunction         start="\<asin(" end=")" contains=ALL
+syn region mysqlFunction         start="\<atan(" end=")" contains=ALL
+syn region mysqlFunction         start="\<atan2(" end=")" contains=ALL
+syn region mysqlFunction         start="\<avg(" end=")" contains=ALL
+syn region mysqlFunction         start="\<benchmark(" end=")" contains=ALL
+syn region mysqlFunction         start="\<bin(" end=")" contains=ALL
+syn region mysqlFunction         start="\<bit_and(" end=")" contains=ALL
+syn region mysqlFunction         start="\<bit_count(" end=")" contains=ALL
+syn region mysqlFunction         start="\<bit_or(" end=")" contains=ALL
+syn region mysqlFunction         start="\<ceiling(" end=")" contains=ALL
+syn region mysqlFunction         start="\<character_length(" end=")" contains=ALL
+syn region mysqlFunction         start="\<char_length(" end=")" contains=ALL
+syn region mysqlFunction         start="\<concat(" end=")" contains=ALL
+syn region mysqlFunction         start="\<concat_ws(" end=")" contains=ALL
+syn region mysqlFunction         start="\<connection_id(" end=")" contains=ALL
+syn region mysqlFunction         start="\<conv(" end=")" contains=ALL
+syn region mysqlFunction         start="\<cos(" end=")" contains=ALL
+syn region mysqlFunction         start="\<cot(" end=")" contains=ALL
+syn region mysqlFunction         start="\<count(" end=")" contains=ALL
+syn region mysqlFunction         start="\<curdate(" end=")" contains=ALL
+syn region mysqlFunction         start="\<curtime(" end=")" contains=ALL
+syn region mysqlFunction         start="\<date_add(" end=")" contains=ALL
+syn region mysqlFunction         start="\<date_format(" end=")" contains=ALL
+syn region mysqlFunction         start="\<date_sub(" end=")" contains=ALL
+syn region mysqlFunction         start="\<dayname(" end=")" contains=ALL
+syn region mysqlFunction         start="\<dayofmonth(" end=")" contains=ALL
+syn region mysqlFunction         start="\<dayofweek(" end=")" contains=ALL
+syn region mysqlFunction         start="\<dayofyear(" end=")" contains=ALL
+syn region mysqlFunction         start="\<decode(" end=")" contains=ALL
+syn region mysqlFunction         start="\<degrees(" end=")" contains=ALL
+syn region mysqlFunction         start="\<elt(" end=")" contains=ALL
+syn region mysqlFunction         start="\<encode(" end=")" contains=ALL
+syn region mysqlFunction         start="\<encrypt(" end=")" contains=ALL
+syn region mysqlFunction         start="\<exp(" end=")" contains=ALL
+syn region mysqlFunction         start="\<export_set(" end=")" contains=ALL
+syn region mysqlFunction         start="\<extract(" end=")" contains=ALL
+syn region mysqlFunction         start="\<field(" end=")" contains=ALL
+syn region mysqlFunction         start="\<find_in_set(" end=")" contains=ALL
+syn region mysqlFunction         start="\<floor(" end=")" contains=ALL
+syn region mysqlFunction         start="\<format(" end=")" contains=ALL
+syn region mysqlFunction         start="\<from_days(" end=")" contains=ALL
+syn region mysqlFunction         start="\<from_unixtime(" end=")" contains=ALL
+syn region mysqlFunction         start="\<get_lock(" end=")" contains=ALL
+syn region mysqlFunction         start="\<greatest(" end=")" contains=ALL
+syn region mysqlFunction         start="\<group_unique_users(" end=")" contains=ALL
+syn region mysqlFunction         start="\<hex(" end=")" contains=ALL
+syn region mysqlFunction         start="\<inet_aton(" end=")" contains=ALL
+syn region mysqlFunction         start="\<inet_ntoa(" end=")" contains=ALL
+syn region mysqlFunction         start="\<instr(" end=")" contains=ALL
+syn region mysqlFunction         start="\<lcase(" end=")" contains=ALL
+syn region mysqlFunction         start="\<least(" end=")" contains=ALL
+syn region mysqlFunction         start="\<length(" end=")" contains=ALL
+syn region mysqlFunction         start="\<load_file(" end=")" contains=ALL
+syn region mysqlFunction         start="\<locate(" end=")" contains=ALL
+syn region mysqlFunction         start="\<log(" end=")" contains=ALL
+syn region mysqlFunction         start="\<log10(" end=")" contains=ALL
+syn region mysqlFunction         start="\<lower(" end=")" contains=ALL
+syn region mysqlFunction         start="\<lpad(" end=")" contains=ALL
+syn region mysqlFunction         start="\<ltrim(" end=")" contains=ALL
+syn region mysqlFunction         start="\<make_set(" end=")" contains=ALL
+syn region mysqlFunction         start="\<master_pos_wait(" end=")" contains=ALL
+syn region mysqlFunction         start="\<max(" end=")" contains=ALL
+syn region mysqlFunction         start="\<md5(" end=")" contains=ALL
+syn region mysqlFunction         start="\<mid(" end=")" contains=ALL
+syn region mysqlFunction         start="\<min(" end=")" contains=ALL
+syn region mysqlFunction         start="\<mod(" end=")" contains=ALL
+syn region mysqlFunction         start="\<monthname(" end=")" contains=ALL
+syn region mysqlFunction         start="\<now(" end=")" contains=ALL
+syn region mysqlFunction         start="\<oct(" end=")" contains=ALL
+syn region mysqlFunction         start="\<octet_length(" end=")" contains=ALL
+syn region mysqlFunction         start="\<ord(" end=")" contains=ALL
+syn region mysqlFunction         start="\<period_add(" end=")" contains=ALL
+syn region mysqlFunction         start="\<period_diff(" end=")" contains=ALL
+syn region mysqlFunction         start="\<pi(" end=")" contains=ALL
+syn region mysqlFunction         start="\<position(" end=")" contains=ALL
+syn region mysqlFunction         start="\<pow(" end=")" contains=ALL
+syn region mysqlFunction         start="\<power(" end=")" contains=ALL
+syn region mysqlFunction         start="\<quarter(" end=")" contains=ALL
+syn region mysqlFunction         start="\<radians(" end=")" contains=ALL
+syn region mysqlFunction         start="\<rand(" end=")" contains=ALL
+syn region mysqlFunction         start="\<release_lock(" end=")" contains=ALL
+syn region mysqlFunction         start="\<repeat(" end=")" contains=ALL
+syn region mysqlFunction         start="\<reverse(" end=")" contains=ALL
+syn region mysqlFunction         start="\<round(" end=")" contains=ALL
+syn region mysqlFunction         start="\<rpad(" end=")" contains=ALL
+syn region mysqlFunction         start="\<rtrim(" end=")" contains=ALL
+syn region mysqlFunction         start="\<sec_to_time(" end=")" contains=ALL
+syn region mysqlFunction         start="\<session_user(" end=")" contains=ALL
+syn region mysqlFunction         start="\<sign(" end=")" contains=ALL
+syn region mysqlFunction         start="\<sin(" end=")" contains=ALL
+syn region mysqlFunction         start="\<soundex(" end=")" contains=ALL
+syn region mysqlFunction         start="\<space(" end=")" contains=ALL
+syn region mysqlFunction         start="\<sqrt(" end=")" contains=ALL
+syn region mysqlFunction         start="\<std(" end=")" contains=ALL
+syn region mysqlFunction         start="\<stddev(" end=")" contains=ALL
+syn region mysqlFunction         start="\<strcmp(" end=")" contains=ALL
+syn region mysqlFunction         start="\<subdate(" end=")" contains=ALL
+syn region mysqlFunction         start="\<substring(" end=")" contains=ALL
+syn region mysqlFunction         start="\<substring_index(" end=")" contains=ALL
+syn region mysqlFunction         start="\<subtime(" end=")" contains=ALL
+syn region mysqlFunction         start="\<sum(" end=")" contains=ALL
+syn region mysqlFunction         start="\<sysdate(" end=")" contains=ALL
+syn region mysqlFunction         start="\<system_user(" end=")" contains=ALL
+syn region mysqlFunction         start="\<tan(" end=")" contains=ALL
+syn region mysqlFunction         start="\<time_format(" end=")" contains=ALL
+syn region mysqlFunction         start="\<time_to_sec(" end=")" contains=ALL
+syn region mysqlFunction         start="\<to_days(" end=")" contains=ALL
+syn region mysqlFunction         start="\<trim(" end=")" contains=ALL
+syn region mysqlFunction         start="\<ucase(" end=")" contains=ALL
+syn region mysqlFunction         start="\<unique_users(" end=")" contains=ALL
+syn region mysqlFunction         start="\<unix_timestamp(" end=")" contains=ALL
+syn region mysqlFunction         start="\<upper(" end=")" contains=ALL
+syn region mysqlFunction         start="\<user(" end=")" contains=ALL
+syn region mysqlFunction         start="\<version(" end=")" contains=ALL
+syn region mysqlFunction         start="\<week(" end=")" contains=ALL
+syn region mysqlFunction         start="\<weekday(" end=")" contains=ALL
+syn region mysqlFunction         start="\<yearweek(" end=")" contains=ALL
 
 " Define the default highlighting.
 " Only when an item doesn't have highlighting yet
 
-hi def link mysqlKeyword            Statement
+hi def link mysqlKeyword            Keyword
 hi def link mysqlSpecial            Special
 hi def link mysqlString             String
 hi def link mysqlNumber             Number
 hi def link mysqlVariable           Identifier
 hi def link mysqlComment            Comment
 hi def link mysqlType               Type
-hi def link mysqlOperator           Statement
-hi def link mysqlFlow               Statement
+hi def link mysqlOperator           Operator
+hi def link mysqlOperatorFunction   Function
+hi def link mysqlFlowFunction       Function
+hi def link mysqlFlowLabel          Label
+hi def link mysqlWindowFunction     Function
+hi def link mysqlWindowKeyword      Keyword
 hi def link mysqlFunction           Function