1" Vim syntax file 2" Language: SQL, SAP HANA In Memory Database 3" Maintainer: David Fishburn <dfishburn dot vim at gmail dot com> 4" Last Change: 2012 Oct 23 5" Version: SP4 b (Q2 2012) 6" Homepage: http://www.vim.org/scripts/script.php?script_id=4275 7 8" Description: Updated to SAP HANA SP4 9" 10" For version 5.x: Clear all syntax items 11" For version 6.x: Quit when a syntax file was already loaded 12if version < 600 13 syntax clear 14elseif exists("b:current_syntax") 15 finish 16endif 17 18syn case ignore 19 20" The SQL reserved words, defined as keywords. 21" These were pulled from the following SQL reference: 22" http://help.sap.com/hana/hana_sql_en.pdf 23" An easy approach is to copy all text from the PDF 24" into a Vim buffer. The keywords are in UPPER case, 25" so you can run the following commands to be left with 26" mainly the UPPER case words: 27" 1. Delete all words that do not begin with a Capital 28" %s/\(\<[^A-Z]\w*\>\)//g 29" 2. Remove all words where the 2nd letter is not a Capital 30" %s/\(\<[A-Z][^A-Z]\w*\>\)//g 31" 3. Remove all non-word (or space) characters 32" %s/[^0-9A-Za-z_ ]*//g 33" 4. Remove some known words 34" %s/\<\(SAP\|HANA\|OK\|AG\|IBM\|DB2\|AIX\|POWER\d\+\|UNIX\)\>//g 35" 5. Remove blank lines and trailing spaces 36" %s/\s\+$//g 37" %s/^\s\+//g 38" %s/^$\n//g 39" 6. Convert spaces to newlines remove single character 40" %s/[ ]\+/\r/g 41" %g/^\w$/d 42" 7. Sort and remove duplicates 43" :sort 44" :Uniq 45" 8. Use the WhatsMissing plugin against the sqlhana.vim file. 46" 9. Generated a file of all UPPER cased words which should not 47" be in the syntax file. These items should be removed 48" from the list in step 7. You can use WhatsNotMissing 49" between step 7 and this new file to weed out the words 50" we know are not syntax related. 51" 10. Use the WhatsMissingRemoveMatches to remove the words 52" from step 9. 53 54syn keyword sqlSpecial false null true 55 56" Supported Functions for Date/Time types 57syn keyword sqlFunction ADD_DAYS ADD_MONTHS ADD_SECONDS ADD_YEARS COALESCE 58syn keyword sqlFunction CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_UTCDATE 59syn keyword sqlFunction CURRENT_UTCTIME CURRENT_UTCTIMESTAMP 60syn keyword sqlFunction DAYNAME DAYOFMONTH DAYOFYEAR DAYS_BETWEEN EXTRACT 61syn keyword sqlFunction GREATEST HOUR IFNULL ISOWEEK LAST_DAY LEAST LOCALTOUTC 62syn keyword sqlFunction MINUTE MONTH MONTHNAME NEXT_DAY NOW QUARTER SECOND 63syn keyword sqlFunction SECONDS_BETWEEN UTCTOLOCAL WEEK WEEKDAY YEAR 64 65syn keyword sqlFunction TO_CHAR TO_DATE TO_DATS TO_NCHAR TO_TIME TO_TIMESTAMP UTCTOLOCAL 66 67" Aggregate 68syn keyword sqlFunction COUNT MIN MAX SUM AVG STDDEV VAR 69 70" Datatype conversion 71syn keyword sqlFunction CAST TO_ALPHANUM TO_BIGINT TO_BINARY TO_BLOB TO_CHAR TO_CLOB 72syn keyword sqlFunction TO_DATE TO_DATS TO_DECIMAL TO_DOUBLE TO_INT TO_INTEGER TO_NCHAR 73syn keyword sqlFunction TO_NCLOB TO_NVARCHAR TO_REAL TO_SECONDDATE TO_SMALLDECIMAL 74syn keyword sqlFunction TO_SMALLINT TO_TIME TO_TIMESTAMP TO_TINYINT TO_VARCHAR TO_VARBINARY 75 76" Number functions 77syn keyword sqlFunction ABS ACOS ASIN ATAN ATAN2 BINTOHEX BITAND CEIL COS COSH COT 78syn keyword sqlFunction EXP FLOOR GREATEST HEXTOBIN LEAST LN LOG MOD POWER ROUND 79syn keyword sqlFunction SIGN SIN SINH SQRT TAN TANH UMINUS 80 81" String functions 82syn keyword sqlFunction ASCII CHAR CONCAT LCASE LENGTH LOCATE LOWER LPAD LTRIM 83syn keyword sqlFunction NCHAR REPLACE RPAD RTRIM SUBSTR_AFTER SUBSTR_BEFORE 84syn keyword sqlFunction SUBSTRING TRIM UCASE UNICODE UPPER 85 86" Miscellaneous functions 87syn keyword sqlFunction COALESCE CURRENT_CONNECTION CURRENT_SCHEMA CURRENT_USER 88syn keyword sqlFunction GROUPING_ID IFNULL MAP NULLIF SESSION_CONTEXT SESSION_USER SYSUUIDSQL 89syn keyword sqlFunction GET_NUM_SERVERS 90 91 92" sp_ procedures 93" syn keyword sqlFunction sp_addalias 94 95 96" Reserved keywords 97syn keyword sqlkeyword ALL AS AT BEFORE 98syn keyword sqlkeyword BEGIN BOTH BY 99syn keyword sqlkeyword CONDITION 100syn keyword sqlkeyword CURRVAL CURSOR DECLARE 101syn keyword sqlkeyword DISTINCT DO ELSE ELSEIF ELSIF 102syn keyword sqlkeyword END EXCEPTION EXEC 103syn keyword sqlkeyword FOR FROM GROUP 104syn keyword sqlkeyword HAVING IN 105syn keyword sqlkeyword INOUT INTO IS 106syn keyword sqlkeyword LEADING 107syn keyword sqlkeyword LOOP MINUS NATURAL NEXTVAL 108syn keyword sqlkeyword OF ON ORDER OUT 109syn keyword sqlkeyword PRIOR RETURN RETURNS REVERSE 110syn keyword sqlkeyword ROWID SELECT 111syn keyword sqlkeyword SQL START STOP SYSDATE 112syn keyword sqlkeyword SYSTIME SYSTIMESTAMP SYSUUID 113syn keyword sqlkeyword TRAILING USING UTCDATE 114syn keyword sqlkeyword UTCTIME UTCTIMESTAMP VALUES 115syn keyword sqlkeyword WHILE 116syn keyword sqlkeyword ANY SOME EXISTS ESCAPE 117 118" IF keywords 119syn keyword sqlkeyword IF 120 121" CASE keywords 122syn keyword sqlKeyword WHEN THEN 123 124" Syntax rules common to TEXT and SHORTTEXT keywords 125syn keyword sqlKeyword LANGUAGE DETECTION LINGUISTIC 126syn keyword sqlkeyword MIME TYPE 127syn keyword sqlkeyword EXACT WEIGHT FUZZY FUZZINESSTHRESHOLD SEARCH 128syn keyword sqlkeyword PHRASE INDEX RATIO REBUILD 129syn keyword sqlkeyword CONFIGURATION 130syn keyword sqlkeyword SEARCH ONLY 131syn keyword sqlkeyword FAST PREPROCESS 132syn keyword sqlkeyword SYNC SYNCHRONOUS ASYNC ASYNCHRONOUS FLUSH QUEUE 133syn keyword sqlkeyword EVERY AFTER MINUTES DOCUMENTS SUSPEND 134 135" Statement keywords (i.e. after ALTER or CREATE) 136syn keyword sqlkeyword AUDIT POLICY 137syn keyword sqlkeyword FULLTEXT 138syn keyword sqlkeyword SEQUENCE RESTART 139syn keyword sqlkeyword TABLE 140syn keyword sqlkeyword PROCEDURE STATISTICS 141syn keyword sqlkeyword SCHEMA 142syn keyword sqlkeyword SYNONYM 143syn keyword sqlkeyword VIEW 144syn keyword sqlkeyword COLUMN 145syn keyword sqlkeyword SYSTEM LICENSE 146syn keyword sqlkeyword SESSION 147syn keyword sqlkeyword CANCEL WORK 148syn keyword sqlkeyword PLAN CACHE 149syn keyword sqlkeyword LOGGING NOLOGGING RETENTION 150syn keyword sqlkeyword RECONFIGURE SERVICE 151syn keyword sqlkeyword RESET MONITORING 152syn keyword sqlkeyword SAVE DURATION PERFTRACE FUNCTION_PROFILER 153syn keyword sqlkeyword SAVEPOINT 154syn keyword sqlkeyword USER 155syn keyword sqlkeyword ROLE 156syn keyword sqlkeyword ASC DESC 157syn keyword sqlkeyword OWNED 158syn keyword sqlkeyword DEPENDENCIES SCRAMBLE 159 160" Create sequence 161syn keyword sqlkeyword INCREMENT MAXVALUE MINVALUE CYCLE 162 163" Create table 164syn keyword sqlkeyword HISTORY GLOBAL LOCAL TEMPORARY 165 166" Create trigger 167syn keyword sqlkeyword TRIGGER REFERENCING EACH DEFAULT 168syn keyword sqlkeyword SIGNAL RESIGNAL MESSAGE_TEXT OLD NEW 169syn keyword sqlkeyword EXIT HANDLER SQL_ERROR_CODE 170syn keyword sqlkeyword TARGET CONDITION SIGNAL 171 172" Alter table 173syn keyword sqlkeyword ADD DROP MODIFY GENERATED ALWAYS 174syn keyword sqlkeyword UNIQUE BTREE CPBTREE PRIMARY KEY 175syn keyword sqlkeyword CONSTRAINT PRELOAD NONE 176syn keyword sqlkeyword ROW THREADS BATCH 177syn keyword sqlkeyword MOVE PARTITION TO LOCATION PHYSICAL OTHERS 178syn keyword sqlkeyword ROUNDROBIN PARTITIONS HASH RANGE VALUE 179syn keyword sqlkeyword PERSISTENT DELTA AUTO AUTOMERGE 180 181" Create audit policy 182syn keyword sqlkeyword AUDITING SUCCESSFUL UNSUCCESSFUL 183syn keyword sqlkeyword PRIVILEGE STRUCTURED CHANGE LEVEL 184syn keyword sqlkeyword EMERGENCY ALERT CRITICAL WARNING INFO 185 186" Privileges 187syn keyword sqlkeyword DEBUG EXECUTE 188 189" Schema 190syn keyword sqlkeyword CASCADE RESTRICT PARAMETERS SCAN 191 192" Traces 193syn keyword sqlkeyword CLIENT CRASHDUMP EMERGENCYDUMP 194syn keyword sqlkeyword INDEXSERVER NAMESERVER DAEMON 195syn keyword sqlkeyword CLEAR REMOVE TRACES 196 197" Reclaim 198syn keyword sqlkeyword RECLAIM DATA VOLUME VERSION SPACE DEFRAGMENT SPARSIFY 199 200" Join 201syn keyword sqlkeyword INNER OUTER LEFT RIGHT FULL CROSS JOIN 202syn keyword sqlkeyword GROUPING SETS ROLLUP CUBE 203syn keyword sqlkeyword BEST LIMIT OFFSET 204syn keyword sqlkeyword WITH SUBTOTAL BALANCE TOTAL 205syn keyword sqlkeyword TEXT_FILTER FILL UP SORT MATCHES TOP 206syn keyword sqlkeyword RESULT OVERVIEW PREFIX MULTIPLE RESULTSETS 207 208" Lock 209syn keyword sqlkeyword EXCLUSIVE MODE NOWAIT 210 211" Transaction 212syn keyword sqlkeyword TRANSACTION ISOLATION READ COMMITTED 213syn keyword sqlkeyword REPEATABLE SERIALIZABLE WRITE 214 215" Saml 216syn keyword sqlkeyword SAML ASSERTION PROVIDER SUBJECT ISSUER 217 218" User 219syn keyword sqlkeyword PASSWORD IDENTIFIED EXTERNALLY ATTEMPTS ATTEMPTS 220syn keyword sqlkeyword ENABLE DISABLE OFF LIFETIME FORCE DEACTIVATE 221syn keyword sqlkeyword ACTIVATE IDENTITY KERBEROS 222 223" Grant 224syn keyword sqlkeyword ADMIN BACKUP CATALOG SCENARIO INIFILE MONITOR 225syn keyword sqlkeyword OPTIMIZER OPTION 226syn keyword sqlkeyword RESOURCE STRUCTUREDPRIVILEGE TRACE 227 228" Import 229syn keyword sqlkeyword CSV FILE CONTROL NO CHECK SKIP FIRST LIST 230syn keyword sqlkeyword RECORD DELIMITED FIELD OPTIONALLY ENCLOSED FORMAT 231 232" Roles 233syn keyword sqlkeyword PUBLIC CONTENT_ADMIN MODELING MONITORING 234 235" Miscellaneous 236syn keyword sqlkeyword APPLICATION BINARY IMMEDIATE COREFILE SECURITY DEFINER 237syn keyword sqlkeyword DUMMY INVOKER MATERIALIZED MESSEGE_TEXT PARAMETER PARAMETERS 238syn keyword sqlkeyword PART 239syn keyword sqlkeyword CONSTANT SQLEXCEPTION SQLWARNING 240 241syn keyword sqlOperator WHERE BETWEEN LIKE NULL CONTAINS 242syn keyword sqlOperator AND OR NOT CASE 243syn keyword sqlOperator UNION INTERSECT EXCEPT 244 245syn keyword sqlStatement ALTER CALL CALLS CREATE DROP RENAME TRUNCATE 246syn keyword sqlStatement DELETE INSERT UPDATE EXPLAIN 247syn keyword sqlStatement MERGE REPLACE UPSERT SELECT 248syn keyword sqlStatement SET UNSET LOAD UNLOAD 249syn keyword sqlStatement CONNECT DISCONNECT COMMIT LOCK ROLLBACK 250syn keyword sqlStatement GRANT REVOKE 251syn keyword sqlStatement EXPORT IMPORT 252 253 254syn keyword sqlType DATE TIME SECONDDATE TIMESTAMP TINYINT SMALLINT 255syn keyword sqlType INT INTEGER BIGINT SMALLDECIMAL DECIMAL 256syn keyword sqlType REAL DOUBLE FLOAT 257syn keyword sqlType VARCHAR NVARCHAR ALPHANUM SHORTTEXT VARBINARY 258syn keyword sqlType BLOB CLOB NCLOB TEXT DAYDATE 259 260syn keyword sqlOption Webservice_namespace_host 261 262" Strings and characters: 263syn region sqlString start=+"+ end=+"+ contains=@Spell 264syn region sqlString start=+'+ end=+'+ contains=@Spell 265 266" Numbers: 267syn match sqlNumber "-\=\<\d*\.\=[0-9_]\>" 268 269" Comments: 270syn region sqlDashComment start=/--/ end=/$/ contains=@Spell 271syn region sqlSlashComment start=/\/\// end=/$/ contains=@Spell 272syn region sqlMultiComment start="/\*" end="\*/" contains=sqlMultiComment,@Spell 273syn cluster sqlComment contains=sqlDashComment,sqlSlashComment,sqlMultiComment,@Spell 274syn sync ccomment sqlComment 275syn sync ccomment sqlDashComment 276syn sync ccomment sqlSlashComment 277 278hi def link sqlDashComment Comment 279hi def link sqlSlashComment Comment 280hi def link sqlMultiComment Comment 281hi def link sqlNumber Number 282hi def link sqlOperator Operator 283hi def link sqlSpecial Special 284hi def link sqlKeyword Keyword 285hi def link sqlStatement Statement 286hi def link sqlString String 287hi def link sqlType Type 288hi def link sqlFunction Function 289hi def link sqlOption PreProc 290 291let b:current_syntax = "sqlhana" 292 293" vim:sw=4: 294