<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<!--
  MySQL syntax definition based on sql.xml by Yury Lebedev
  original by Shane Wright (me@shanewright.co.uk)
  modifications by Milian Wolff (mail@milianw.de)
-->
<language name="SQL (MySQL)" version="1.16" kateversion="3.4" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Shane Wright (me@shanewright.co.uk)" license="">
  <highlighting>
    <list name="keywords">
      <item> ACCESS </item>
      <item> ADD </item>
      <item> ALL </item>
      <item> ALTER </item>
      <item> ANALYZE </item>
      <item> AND </item>
      <item> AS </item>
      <item> ASC </item>
      <item> AUTO_INCREMENT </item>
      <item> BDB </item>
      <item> BERKELEYDB </item>
      <item> BETWEEN </item>
      <item> BOTH </item>
      <item> BY </item>
      <item> CASCADE </item>
      <item> CASE </item>
      <item> CHANGE </item>
      <!-- <item> CHARACTER SET </item>
        needs special regexp (see below) -->
      <item> CHARSET </item>
      <item> COLUMN </item>
      <item> COLUMNS </item>
      <item> CONSTRAINT </item>
      <item> CREATE </item>
      <item> CROSS </item>
      <item> CURRENT_DATE </item>
      <item> CURRENT_TIME </item>
      <item> CURRENT_TIMESTAMP </item>
      <item> DATABASE </item>
      <item> DATABASES </item>
      <item> DAY_HOUR </item>
      <item> DAY_MINUTE </item>
      <item> DAY_SECOND </item>
      <item> DEC </item>
      <item> DEFAULT </item>
      <item> DELAYED </item>
      <item> DELETE </item>
      <item> DESC </item>
      <item> DESCRIBE </item>
      <item> DISTINCT </item>
      <item> DISTINCTROW </item>
      <item> DROP </item>
      <item> ELSE </item>
      <item> ENCLOSED </item>
      <item> ESCAPED </item>
      <item> EXISTS </item>
      <item> EXPLAIN </item>
      <item> FIELDS </item>
      <item> FOR </item>
      <item> FOREIGN </item>
      <item> FROM </item>
      <item> FULLTEXT </item>
      <item> FUNCTION </item>
      <item> GRANT </item>
      <item> GROUP </item>
      <item> HAVING </item>
      <item> HIGH_PRIORITY </item>
      <item> IF </item>
      <item> IGNORE </item>
      <item> IN </item>
      <item> INDEX </item>
      <item> INFILE </item>
      <item> INNER </item>
      <item> INNODB </item>
      <item> INSERT </item>
      <item> INTERVAL </item>
      <item> INTO </item>
      <item> IS </item>
      <item> JOIN </item>
      <item> KEY </item>
      <item> KEYS </item>
      <item> KILL </item>
      <item> LEADING </item>
      <item> LEFT </item>
      <item> LIKE </item>
      <item> LIMIT </item>
      <item> LINES </item>
      <item> LOAD </item>
      <item> LOCK </item>
      <item> LOW_PRIORITY </item>
      <item> MASTER_SERVER_ID </item>
      <item> MATCH </item>
      <item> MRG_MYISAM </item>
      <item> NATIONAL </item>
      <item> NATURAL </item>
      <item> NOT </item>
      <item> NULL </item>
      <item> NUMERIC </item>
      <item> ON </item>
      <item> OPTIMIZE </item>
      <item> OPTION </item>
      <item> OPTIONALLY </item>
      <item> OR </item>
      <item> ORDER </item>
      <item> OUTER </item>
      <item> OUTFILE </item>
      <item> PARTIAL </item>
      <item> PRECISION </item>
      <item> PRIMARY </item>
      <item> PRIVILEGES </item>
      <item> PROCEDURE </item>
      <item> PURGE </item>
      <item> READ </item>
      <item> REFERENCES </item>
      <item> REGEXP </item>
      <item> RENAME </item>
      <item> REPLACE </item>
      <item> REQUIRE </item>
      <item> RESTRICT </item>
      <item> RETURNS </item>
      <item> REVOKE </item>
      <item> RIGHT </item>
      <item> RLIKE </item>
      <item> SELECT </item>
      <item> SET </item>
      <item> SHOW </item>
      <item> SONAME </item>
      <item> SQL_BIG_RESULT </item>
      <item> SQL_CALC_FOUND_ROWS </item>
      <item> SQL_SMALL_RESULT </item>
      <item> SSL </item>
      <item> STARTING </item>
      <item> STRAIGHT_JOIN </item>
      <item> STRIPED </item>
      <item> TABLE </item>
      <item> TABLES </item>
      <item> TERMINATED </item>
      <item> THEN </item>
      <item> TO </item>
      <item> TRAILING </item>
      <item> TRUNCATE </item>
      <item> TYPE </item>
      <item> UNION </item>
      <item> UNIQUE </item>
      <item> UNLOCK </item>
      <item> UNSIGNED </item>
      <item> UPDATE </item>
      <item> USAGE </item>
      <item> USE </item>
      <item> USER_RESOURCES </item>
      <item> USING </item>
      <item> VALUES </item>
      <item> VARYING </item>
      <item> WHEN </item>
      <item> WHERE </item>
      <item> WHILE </item>
      <item> WITH </item>
      <item> WRITE </item>
      <item> XOR </item>
      <item> YEAR_MONTH </item>
      <item> ZEROFILL </item>
    </list>
    <list name="operators">
      <item> + </item>
      <item> - </item>
      <item> * </item>
      <item> / </item>
      <item> || </item>
      <item> = </item>
      <item> != </item>
      <item> &lt;&gt; </item>
      <item> &lt; </item>
      <item> &lt;= </item>
      <item> &gt; </item>
      <item> &gt;= </item>
      <item> ~= </item>
      <item> ^= </item>
      <item> := </item>
      <item> =&gt; </item>
      <item> ** </item>
      <item> .. </item>
    </list>
    <list name="functions">
      <!-- string functions -->
      <item> ASCII </item>
      <item> BIN </item>
      <item> BIT_LENGTH </item>
      <item> CHAR </item>
      <item> CHARACTER_LENGTH </item>
      <item> CHAR_LENGTH </item>
      <item> CONCAT </item>
      <item> CONCAT_WS </item>
      <item> CONV </item>
      <item> ELT </item>
      <item> EXPORT_SET </item>
      <item> FIELD </item>
      <item> FIND_IN_SET </item>
      <item> HEX </item>
      <item> INSERT </item>
      <item> INSTR </item>
      <item> LCASE </item>
      <item> LEFT </item>
      <item> LENGTH </item>
      <item> LOAD_FILE </item>
      <item> LOCATE </item>
      <item> LOWER </item>
      <item> LPAD </item>
      <item> LTRIM </item>
      <item> MAKE_SET </item>
      <item> MID </item>
      <item> OCT </item>
      <item> OCTET_LENGTH </item>
      <item> ORD </item>
      <item> POSITION </item>
      <item> QUOTE </item>
      <item> REPEAT </item>
      <item> REPLACE </item>
      <item> REVERSE </item>
      <item> RIGHT </item>
      <item> RPAD </item>
      <item> RTRIM </item>
      <item> SOUNDEX </item>
      <item> SPACE </item>
      <item> SUBSTRING </item>
      <item> SUBSTRING_INDEX </item>
      <item> TRIM </item>
      <item> UCASE </item>
      <item> UPPER </item>
      <!-- math functions -->
      <item> ABS </item>
      <item> ACOS </item>
      <item> ASIN </item>
      <item> ATAN </item>
      <item> ATAN2 </item>
      <item> CEILING </item>
      <item> COS </item>
      <item> COT </item>
      <item> DEGREES </item>
      <item> EXP </item>
      <item> FLOOR </item>
      <item> GREATEST </item>
      <item> LEAST </item>
      <item> LN </item>
      <item> LOG </item>
      <item> LOG10 </item>
      <item> LOG2 </item>
      <item> MOD </item>
      <item> PI </item>
      <item> POW </item>
      <item> POWER </item>
      <item> RADIANS </item>
      <item> RAND </item>
      <item> ROUND </item>
      <item> SIGN </item>
      <item> SIN </item>
      <item> SQRT </item>
      <item> TAN </item>
      <!-- date/time functions -->
      <item> ADDDATE </item>
      <item> CURDATE </item>
      <item> CURRENT_DATE </item>
      <item> CURRENT_TIME </item>
      <item> CURRENT_TIMESTAMP </item>
      <item> CURTIME </item>
      <item> DATE_ADD </item>
      <item> DATE_FORMAT </item>
      <item> DATE_SUB </item>
      <item> DAYNAME </item>
      <item> DAYOFMONTH </item>
      <item> DAYOFWEEK </item>
      <item> DAYOFYEAR </item>
      <item> EXTRACT </item>
      <item> FROM_DAYS </item>
      <item> FROM_UNIXTIME </item>
      <item> HOUR </item>
      <item> MINUTE </item>
      <item> MONTH </item>
      <item> MONTHNAME </item>
      <item> NOW </item>
      <item> PERIOD_ADD </item>
      <item> PERIOD_DIFF </item>
      <item> QUARTER </item>
      <item> SECOND </item>
      <item> SEC_TO_TIME </item>
      <item> SUBDATE </item>
      <item> SYSDATE </item>
      <item> TIME_FORMAT </item>
      <item> TIME_TO_SEC </item>
      <item> TO_DAYS </item>
      <item> UNIX_TIMESTAMP </item>
      <item> WEEK </item>
      <item> WEEKDAY </item>
      <item> YEAR </item>
      <item> YEARWEEK </item>
      <!-- cast functions -->
      <item> CAST </item>
      <item> CONVERT </item>
      <!-- misc -->
      <item> AES_DECRYPT </item>
      <item> AES_ENCRYPT </item>
      <item> BENCHMARK </item>
      <item> BIT_COUNT </item>
      <item> CONNECTION_ID </item>
      <item> DATABASE </item>
      <item> DECODE </item>
      <item> DES_DECRYPT </item>
      <item> DES_ENCRYPT </item>
      <item> ENCODE </item>
      <item> ENCRYPT </item>
      <item> FORMAT </item>
      <item> FOUND_ROWS </item>
      <item> GET_LOCK </item>
      <item> INET_ATON </item>
      <item> INET_NTOA </item>
      <item> IS_FREE_LOCK </item>
      <item> LAST_INSERT_ID </item>
      <item> MASTER_POS_WAIT </item>
      <item> MD5 </item>
      <item> PASSWORD </item>
      <item> RELEASE_LOCK </item>
      <item> SESSION_USER </item>
      <item> SHA </item>
      <item> SHA1 </item>
      <item> SYSTEM_USER </item>
      <item> USER </item>
      <item> VERSION </item>
      <!-- GROUP BY -->
      <item> AVG </item>
      <item> BIT_AND </item>
      <item> BIT_OR </item>
      <item> COUNT </item>
      <item> MAX </item>
      <item> MIN </item>
      <item> STD </item>
      <item> STDDEV </item>
      <item> SUM </item>
    </list>
    <list name="types">
      <!-- strings -->
      <item> BINARY </item>
      <item> BLOB </item>
      <item> CHAR </item>
      <item> CHARACTER </item>
      <item> ENUM </item>
      <item> LONGBLOB </item>
      <item> LONGTEXT </item>
      <item> MEDIUMBLOB </item>
      <item> MEDIUMTEXT </item>
      <item> TEXT </item>
      <item> TINYBLOB </item>
      <item> TINYTEXT </item>
      <item> VARBINARY </item>
      <item> VARCHAR </item>
      <!-- <item> SET </item>
        needs special regexp (see below) -->
      <!-- numeric -->
      <item> BIGINT </item>
      <item> BIT </item>
      <item> BOOL </item>
      <item> BOOLEAN </item>
      <item> DEC </item>
      <item> DECIMAL </item>
      <item> DOUBLE </item>
      <item> FIXED </item>
      <item> FLOAT </item>
      <item> INT </item>
      <item> INTEGER </item>
      <item> LONG </item>
      <item> MEDIUMINT </item>
      <item> MIDDLEINT </item>
      <item> NUMERIC </item>
      <item> TINYINT </item>
      <item> REAL </item>
      <item> SERIAL </item>
      <item> SMALLINT </item>
      <!-- date and time -->
      <item> DATE </item>
      <item> DATETIME </item>
      <item> TIME </item>
      <item> TIMESTAMP </item>
      <item> YEAR </item>
    </list>
    <contexts>
      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
        <DetectSpaces/>
        <!-- problematic special cases -->
        <!-- SET type -->
        <RegExpr attribute="Data Type" context="#stay" insensitive="true" String="SET(?=\s*\()"/>
        <!-- keyword character set -->
        <RegExpr attribute="Keyword" context="#stay" insensitive="true" String="\bCHARACTER SET\b"/>
        <!-- using the lists -->
        <keyword attribute="Keyword" context="#stay" String="keywords"/>
        <keyword attribute="Operator" context="#stay" String="operators"/>
        <keyword attribute="Function" context="#stay" String="functions"/>
        <keyword attribute="Data Type" context="#stay" String="types"/>

        <DetectIdentifier/>
        <!-- extra data types -->
        <RegExpr attribute="Data Type" context="#stay" String="%(?:bulk_(?:exceptions|rowcount)|found|isopen|notfound|rowcount|rowtype|type)\b" insensitive="true"/>
        <!-- numbers -->
        <HlCHex attribute="Hex" context="#stay"/>
        <Float attribute="Float" context="#stay"/>
        <Int attribute="Decimal" context="#stay"/>
        <!-- strings -->
        <DetectChar attribute="String" context="String" char="'"/>
        <DetectChar attribute="String" context="String2" char="&quot;"/>
        <DetectChar attribute="Name" context="Name" char="`"/>
        <!-- comments -->
        <DetectChar attribute="Comment" context="SingleLineComment" char="#"/>
        <Detect2Chars attribute="Comment" context="SingleLineComment" char="-" char1="-"/>
        <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*" beginRegion="Comment"/>
        <RegExpr attribute="Comment" context="SingleLineComment" String="rem\b" insensitive="true" column="0"/>

        <AnyChar attribute="Symbol" context="#stay" String=":&#38;"/>
        <RegExpr attribute="Symbol" context="#stay" String="/$" column="0"/>
        <RegExpr attribute="Preprocessor" context="Preprocessor" String="@@?[^@ \t\r\n]" column="0"/>
        <!-- for something like : SELECT DB.TABLE.ROW ... -->
        <DetectChar attribute="String Char" context="#stay" char="."/>
      </context>
      <!-- 'string' -->
      <context name="String" attribute="String" lineEndContext="#stay">
        <LineContinue attribute="String" context="#pop"/>
        <HlCStringChar attribute="String Char" context="#stay"/>
        <DetectChar attribute="Symbol" context="#stay" char="&#38;"/>
        <DetectChar attribute="String" context="#pop" char="'"/>
      </context>
      <!-- "string", extra context needed to enable "str'ing" and 'str"ing' -->
      <context name="String2" attribute="String" lineEndContext="#stay">
        <LineContinue attribute="String" context="#pop"/>
        <HlCStringChar attribute="String Char" context="#stay"/>
        <DetectChar attribute="Symbol" context="#stay" char="&#38;"/>
        <DetectChar attribute="String" context="#pop" char="&quot;"/>
      </context>
      <!-- `names` -->
      <context name="Name" attribute="Name" lineEndContext="#stay">
        <LineContinue attribute="Name" context="#pop"/>
        <HlCStringChar attribute="String Char" context="#stay"/>
        <DetectChar attribute="Name" context="#pop" char="`"/>
      </context>
      <!-- comments -->
      <context name="SingleLineComment" attribute="Comment" lineEndContext="#pop"/>
      <context name="MultiLineComment" attribute="Comment" lineEndContext="#stay">
        <LineContinue attribute="Comment" context="#pop"/>
        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
      </context>
      <!-- preprocessor -->
      <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop"/>
    </contexts>
    <itemDatas>
      <itemData name="Normal Text"       defStyleNum="dsNormal" spellChecking="false"/>
      <itemData name="Keyword"           defStyleNum="dsKeyword" spellChecking="false"/>
      <itemData name="Operator"          defStyleNum="dsNormal" spellChecking="false"/>
      <itemData name="Function"          defStyleNum="dsFunction" spellChecking="false"/>
      <itemData name="Data Type"         defStyleNum="dsDataType" spellChecking="false"/>
      <itemData name="Decimal"           defStyleNum="dsDecVal" spellChecking="false"/>
      <itemData name="Hex"               defStyleNum="dsBaseN" spellChecking="false"/>
      <itemData name="Float"             defStyleNum="dsFloat" spellChecking="false"/>
      <itemData name="Name" color="#080" defStyleNum="dsString" spellChecking="false"/>
      <itemData name="String"            defStyleNum="dsString"/>
      <itemData name="String Char"       defStyleNum="dsChar" spellChecking="false"/>
      <itemData name="Comment"           defStyleNum="dsComment"/>
      <itemData name="Symbol"            defStyleNum="dsChar" spellChecking="false"/>
      <itemData name="Preprocessor"      defStyleNum="dsOthers" spellChecking="false"/>
    </itemDatas>
  </highlighting>
  <general>
    <comments>
      <comment name="singleLine" start="--"/>
      <comment name="multiLine" start="/*" end="*/"/>
    </comments>
    <keywords casesensitive="0" weakDeliminator="+-*/|=!&lt;&gt;~^:."/>
    <folding indentationsensitive="true"/>
  </general>
</language>
