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