annotate .cms/lib/codemirror/mode/sql/sql.js @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 (function(mod) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 if (typeof exports == "object" && typeof module == "object") // CommonJS
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 mod(require("../../lib/codemirror"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 else if (typeof define == "function" && define.amd) // AMD
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 define(["../../lib/codemirror"], mod);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 else // Plain browser env
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 mod(CodeMirror);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 })(function(CodeMirror) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 CodeMirror.defineMode("sql", function(config, parserConfig) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 var client = parserConfig.client || {},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 atoms = parserConfig.atoms || {"false": true, "true": true, "null": true},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 builtin = parserConfig.builtin || set(defaultBuiltin),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 keywords = parserConfig.keywords || set(sqlKeywords),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^\/]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 support = parserConfig.support || {},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 hooks = parserConfig.hooks || {},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 backslashStringEscapes = parserConfig.backslashStringEscapes !== false,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 brackets = parserConfig.brackets || /^[\{}\(\)\[\]]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 punctuation = parserConfig.punctuation || /^[;.,:]/
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 function tokenBase(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 var ch = stream.next();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 // call hooks from the mime type
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 if (hooks[ch]) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 var result = hooks[ch](stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 if (result !== false) return result;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 if (support.hexNumber &&
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]*'/))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 // hex
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 // ref: https://dev.mysql.com/doc/refman/8.0/en/hexadecimal-literals.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 } else if (support.binaryNumber &&
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 (((ch == "b" || ch == "B") && stream.match(/^'[01]*'/))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 || (ch == "0" && stream.match(/^b[01]+/)))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 // bitstring
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 // ref: https://dev.mysql.com/doc/refman/8.0/en/bit-value-literals.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 // numbers
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 // ref: https://dev.mysql.com/doc/refman/8.0/en/number-literals.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 stream.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 support.decimallessFloat && stream.match(/^\.(?!\.)/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 // placeholders
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 return "variable-3";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 } else if (ch == "'" || (ch == '"' && support.doubleQuote)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 // strings
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 // ref: https://dev.mysql.com/doc/refman/8.0/en/string-literals.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 state.tokenize = tokenLiteral(ch);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 return state.tokenize(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 } else if ((((support.nCharCast && (ch == "n" || ch == "N"))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 || (support.charsetCast && ch == "_" && stream.match(/[a-z][a-z0-9]*/i)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 && (stream.peek() == "'" || stream.peek() == '"'))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 // charset casting: _utf8'str', N'str', n'str'
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 // ref: https://dev.mysql.com/doc/refman/8.0/en/string-literals.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 return "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 } else if (support.escapeConstant && (ch == "e" || ch == "E")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 && (stream.peek() == "'" || (stream.peek() == '"' && support.doubleQuote))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 // escape constant: E'str', e'str'
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 // ref: https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 state.tokenize = function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 return (state.tokenize = tokenLiteral(stream.next(), true))(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 return "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 // 1-line comment
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 stream.skipToEnd();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 return "comment";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 } else if ((support.commentHash && ch == "#")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 // 1-line comments
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 // ref: https://kb.askmonty.org/en/comment-syntax/
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 stream.skipToEnd();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 return "comment";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 } else if (ch == "/" && stream.eat("*")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 // multi-line comments
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 // ref: https://kb.askmonty.org/en/comment-syntax/
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 state.tokenize = tokenComment(1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 return state.tokenize(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 } else if (ch == ".") {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 // .1 for 0.1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 if (support.zerolessFloat && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 if (stream.match(/^\.+/))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 return null
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 if (stream.match(/^[\w\d_$#]+/))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 return "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 } else if (operatorChars.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 // operators
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 stream.eatWhile(operatorChars);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 return "operator";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 } else if (brackets.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 // brackets
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 return "bracket";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 } else if (punctuation.test(ch)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 // punctuation
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 stream.eatWhile(punctuation);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 return "punctuation";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 } else if (ch == '{' &&
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 // dates (weird ODBC syntax)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 // ref: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 stream.eatWhile(/^[_\w\d]/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 var word = stream.current().toLowerCase();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 // dates (standard SQL syntax)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 // ref: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 return "number";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 if (atoms.hasOwnProperty(word)) return "atom";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 if (builtin.hasOwnProperty(word)) return "type";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 if (keywords.hasOwnProperty(word)) return "keyword";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 if (client.hasOwnProperty(word)) return "builtin";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 // 'string', with char specified in quote escaped by '\'
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 function tokenLiteral(quote, backslashEscapes) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 return function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 var escaped = false, ch;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 while ((ch = stream.next()) != null) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 if (ch == quote && !escaped) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 state.tokenize = tokenBase;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 break;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 escaped = (backslashStringEscapes || backslashEscapes) && !escaped && ch == "\\";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 return "string";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 function tokenComment(depth) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 return function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 var m = stream.match(/^.*?(\/\*|\*\/)/)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 if (!m) stream.skipToEnd()
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 else if (m[1] == "/*") state.tokenize = tokenComment(depth + 1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 else if (depth > 1) state.tokenize = tokenComment(depth - 1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 else state.tokenize = tokenBase
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 return "comment"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 function pushContext(stream, state, type) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 state.context = {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 prev: state.context,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158 indent: stream.indentation(),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 col: stream.column(),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 type: type
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164 function popContext(state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 state.indent = state.context.indent;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 state.context = state.context.prev;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169 return {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 startState: function() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171 return {tokenize: tokenBase, context: null};
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174 token: function(stream, state) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 if (stream.sol()) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176 if (state.context && state.context.align == null)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 state.context.align = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179 if (state.tokenize == tokenBase && stream.eatSpace()) return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181 var style = state.tokenize(stream, state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182 if (style == "comment") return style;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
184 if (state.context && state.context.align == null)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
185 state.context.align = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
186
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
187 var tok = stream.current();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
188 if (tok == "(")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
189 pushContext(stream, state, ")");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
190 else if (tok == "[")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
191 pushContext(stream, state, "]");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
192 else if (state.context && state.context.type == tok)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
193 popContext(state);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
194 return style;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
195 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
196
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
197 indent: function(state, textAfter) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
198 var cx = state.context;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
199 if (!cx) return CodeMirror.Pass;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
200 var closing = textAfter.charAt(0) == cx.type;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
201 if (cx.align) return cx.col + (closing ? 0 : 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
202 else return cx.indent + (closing ? 0 : config.indentUnit);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
203 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
204
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
205 blockCommentStart: "/*",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
206 blockCommentEnd: "*/",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
207 lineComment: support.commentSlashSlash ? "//" : support.commentHash ? "#" : "--",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
208 closeBrackets: "()[]{}''\"\"``",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
209 config: parserConfig
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
210 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
211 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
212
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
213 // `identifier`
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
214 function hookIdentifier(stream) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
215 // MySQL/MariaDB identifiers
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
216 // ref: https://dev.mysql.com/doc/refman/8.0/en/identifier-qualifiers.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
217 var ch;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
218 while ((ch = stream.next()) != null) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
219 if (ch == "`" && !stream.eat("`")) return "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
220 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
221 stream.backUp(stream.current().length - 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
222 return stream.eatWhile(/\w/) ? "variable-2" : null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
223 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
224
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
225 // "identifier"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
226 function hookIdentifierDoublequote(stream) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
227 // Standard SQL /SQLite identifiers
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
228 // ref: http://web.archive.org/web/20160813185132/http://savage.net.au/SQL/sql-99.bnf.html#delimited%20identifier
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
229 // ref: http://sqlite.org/lang_keywords.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
230 var ch;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
231 while ((ch = stream.next()) != null) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
232 if (ch == "\"" && !stream.eat("\"")) return "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
233 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
234 stream.backUp(stream.current().length - 1);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
235 return stream.eatWhile(/\w/) ? "variable-2" : null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
236 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
237
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
238 // variable token
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
239 function hookVar(stream) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
240 // variables
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
241 // @@prefix.varName @varName
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
242 // varName can be quoted with ` or ' or "
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
243 // ref: https://dev.mysql.com/doc/refman/8.0/en/user-variables.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
244 if (stream.eat("@")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
245 stream.match('session.');
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
246 stream.match('local.');
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
247 stream.match('global.');
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
248 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
249
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
250 if (stream.eat("'")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
251 stream.match(/^.*'/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
252 return "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
253 } else if (stream.eat('"')) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
254 stream.match(/^.*"/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
255 return "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
256 } else if (stream.eat("`")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
257 stream.match(/^.*`/);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
258 return "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
259 } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
260 return "variable-2";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
261 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
262 return null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
263 };
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
264
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
265 // short client keyword token
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
266 function hookClient(stream) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
267 // \N means NULL
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
268 // ref: https://dev.mysql.com/doc/refman/8.0/en/null-values.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
269 if (stream.eat("N")) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
270 return "atom";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
271 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
272 // \g, etc
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
273 // ref: https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
274 return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
275 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
276
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
277 // these keywords are used by all SQL dialects (however, a mode can still overwrite it)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
278 var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit ";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
279
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
280 // turn a space-separated list into an array
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
281 function set(str) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
282 var obj = {}, words = str.split(" ");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
283 for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
284 return obj;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
285 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
286
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
287 var defaultBuiltin = "bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
288
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
289 // A generic SQL Mode. It's not a standard, it just tries to support what is generally supported
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
290 CodeMirror.defineMIME("text/x-sql", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
291 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
292 keywords: set(sqlKeywords + "begin"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
293 builtin: set(defaultBuiltin),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
294 atoms: set("false true null unknown"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
295 dateSQL: set("date time timestamp"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
296 support: set("doubleQuote binaryNumber hexNumber")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
297 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
298
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
299 CodeMirror.defineMIME("text/x-mssql", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
300 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
301 client: set("$partition binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
302 keywords: set(sqlKeywords + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx updlock with"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
303 builtin: set("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
304 atoms: set("is not null like and or in left right between inner outer join all any some cross unpivot pivot exists"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
305 operatorChars: /^[*+\-%<>!=^\&|\/]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
306 brackets: /^[\{}\(\)]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
307 punctuation: /^[;.,:/]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
308 backslashStringEscapes: false,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
309 dateSQL: set("date datetimeoffset datetime2 smalldatetime datetime time"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
310 hooks: {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
311 "@": hookVar
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
312 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
313 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
314
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
315 CodeMirror.defineMIME("text/x-mysql", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
316 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
317 client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
318 keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
319 builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
320 atoms: set("false true null unknown"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
321 operatorChars: /^[*+\-%<>!=&|^]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
322 dateSQL: set("date time timestamp"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
323 support: set("decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
324 hooks: {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
325 "@": hookVar,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
326 "`": hookIdentifier,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
327 "\\": hookClient
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
328 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
329 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
330
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
331 CodeMirror.defineMIME("text/x-mariadb", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
332 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
333 client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
334 keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
335 builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
336 atoms: set("false true null unknown"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
337 operatorChars: /^[*+\-%<>!=&|^]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
338 dateSQL: set("date time timestamp"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
339 support: set("decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
340 hooks: {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
341 "@": hookVar,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
342 "`": hookIdentifier,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
343 "\\": hookClient
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
344 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
345 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
346
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
347 // provided by the phpLiteAdmin project - phpliteadmin.org
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
348 CodeMirror.defineMIME("text/x-sqlite", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
349 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
350 // commands of the official SQLite client, ref: https://www.sqlite.org/cli.html#dotcmd
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
351 client: set("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
352 // ref: http://sqlite.org/lang_keywords.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
353 keywords: set(sqlKeywords + "abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
354 // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
355 builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
356 // ref: http://sqlite.org/syntax/literal-value.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
357 atoms: set("null current_date current_time current_timestamp"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
358 // ref: http://sqlite.org/lang_expr.html#binaryops
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
359 operatorChars: /^[*+\-%<>!=&|/~]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
360 // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
361 dateSQL: set("date time timestamp datetime"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
362 support: set("decimallessFloat zerolessFloat"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
363 identifierQuote: "\"", //ref: http://sqlite.org/lang_keywords.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
364 hooks: {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
365 // bind-parameters ref:http://sqlite.org/lang_expr.html#varparam
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
366 "@": hookVar,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
367 ":": hookVar,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
368 "?": hookVar,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
369 "$": hookVar,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
370 // The preferred way to escape Identifiers is using double quotes, ref: http://sqlite.org/lang_keywords.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
371 "\"": hookIdentifierDoublequote,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
372 // there is also support for backticks, ref: http://sqlite.org/lang_keywords.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
373 "`": hookIdentifier
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
374 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
375 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
376
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
377 // the query language used by Apache Cassandra is called CQL, but this mime type
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
378 // is called Cassandra to avoid confusion with Contextual Query Language
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
379 CodeMirror.defineMIME("text/x-cassandra", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
380 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
381 client: { },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
382 keywords: set("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
383 builtin: set("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
384 atoms: set("false true infinity NaN"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
385 operatorChars: /^[<>=]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
386 dateSQL: { },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
387 support: set("commentSlashSlash decimallessFloat"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
388 hooks: { }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
389 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
390
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
391 // this is based on Peter Raganitsch's 'plsql' mode
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
392 CodeMirror.defineMIME("text/x-plsql", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
393 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
394 client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
395 keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
396 builtin: set("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
397 operatorChars: /^[*\/+\-%<>!=~]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
398 dateSQL: set("date time timestamp"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
399 support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
400 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
401
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
402 // Created to support specific hive keywords
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
403 CodeMirror.defineMIME("text/x-hive", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
404 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
405 keywords: set("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
406 builtin: set("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
407 atoms: set("false true null unknown"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
408 operatorChars: /^[*+\-%<>!=]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
409 dateSQL: set("date timestamp"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
410 support: set("doubleQuote binaryNumber hexNumber")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
411 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
412
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
413 CodeMirror.defineMIME("text/x-pgsql", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
414 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
415 client: set("source"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
416 // For PostgreSQL - https://www.postgresql.org/docs/11/sql-keywords-appendix.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
417 // For pl/pgsql lang - https://github.com/postgres/postgres/blob/REL_11_2/src/pl/plpgsql/src/pl_scanner.c
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
418 keywords: set(sqlKeywords + "a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
419 // https://www.postgresql.org/docs/11/datatype.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
420 builtin: set("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time zone timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
421 atoms: set("false true null unknown"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
422 operatorChars: /^[*\/+\-%<>!=&|^\/#@?~]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
423 backslashStringEscapes: false,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
424 dateSQL: set("date time timestamp"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
425 support: set("decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
426 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
427
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
428 // Google's SQL-like query language, GQL
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
429 CodeMirror.defineMIME("text/x-gql", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
430 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
431 keywords: set("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
432 atoms: set("false true"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
433 builtin: set("blob datetime first key __key__ string integer double boolean null"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
434 operatorChars: /^[*+\-%<>!=]/
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
435 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
436
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
437 // Greenplum
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
438 CodeMirror.defineMIME("text/x-gpsql", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
439 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
440 client: set("source"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
441 //https://github.com/greenplum-db/gpdb/blob/master/src/include/parser/kwlist.h
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
442 keywords: set("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
443 builtin: set("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
444 atoms: set("false true null unknown"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
445 operatorChars: /^[*+\-%<>!=&|^\/#@?~]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
446 dateSQL: set("date time timestamp"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
447 support: set("decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
448 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
449
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
450 // Spark SQL
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
451 CodeMirror.defineMIME("text/x-sparksql", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
452 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
453 keywords: set("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
454 builtin: set("abs acos acosh add_months aggregate and any approx_count_distinct approx_percentile array array_contains array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_repeat array_sort array_union arrays_overlap arrays_zip ascii asin asinh assert_true atan atan2 atanh avg base64 between bigint bin binary bit_and bit_count bit_get bit_length bit_or bit_xor bool_and bool_or boolean bround btrim cardinality case cast cbrt ceil ceiling char char_length character_length chr coalesce collect_list collect_set concat concat_ws conv corr cos cosh cot count count_if count_min_sketch covar_pop covar_samp crc32 cume_dist current_catalog current_database current_date current_timestamp current_timezone current_user date date_add date_format date_from_unix_date date_part date_sub date_trunc datediff day dayofmonth dayofweek dayofyear decimal decode degrees delimited dense_rank div double e element_at elt encode every exists exp explode explode_outer expm1 extract factorial filter find_in_set first first_value flatten float floor forall format_number format_string from_csv from_json from_unixtime from_utc_timestamp get_json_object getbit greatest grouping grouping_id hash hex hour hypot if ifnull in initcap inline inline_outer input_file_block_length input_file_block_start input_file_name inputformat instr int isnan isnotnull isnull java_method json_array_length json_object_keys json_tuple kurtosis lag last last_day last_value lcase lead least left length levenshtein like ln locate log log10 log1p log2 lower lpad ltrim make_date make_dt_interval make_interval make_timestamp make_ym_interval map map_concat map_entries map_filter map_from_arrays map_from_entries map_keys map_values map_zip_with max max_by md5 mean min min_by minute mod monotonically_increasing_id month months_between named_struct nanvl negative next_day not now nth_value ntile nullif nvl nvl2 octet_length or outputformat overlay parse_url percent_rank percentile percentile_approx pi pmod posexplode posexplode_outer position positive pow power printf quarter radians raise_error rand randn random rank rcfile reflect regexp regexp_extract regexp_extract_all regexp_like regexp_replace repeat replace reverse right rint rlike round row_number rpad rtrim schema_of_csv schema_of_json second sentences sequence sequencefile serde session_window sha sha1 sha2 shiftleft shiftright shiftrightunsigned shuffle sign signum sin sinh size skewness slice smallint some sort_array soundex space spark_partition_id split sqrt stack std stddev stddev_pop stddev_samp str_to_map string struct substr substring substring_index sum tan tanh textfile timestamp timestamp_micros timestamp_millis timestamp_seconds tinyint to_csv to_date to_json to_timestamp to_unix_timestamp to_utc_timestamp transform transform_keys transform_values translate trim trunc try_add try_divide typeof ucase unbase64 unhex uniontype unix_date unix_micros unix_millis unix_seconds unix_timestamp upper uuid var_pop var_samp variance version weekday weekofyear when width_bucket window xpath xpath_boolean xpath_double xpath_float xpath_int xpath_long xpath_number xpath_short xpath_string xxhash64 year zip_with"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
455 atoms: set("false true null"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
456 operatorChars: /^[*\/+\-%<>!=~&|^]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
457 dateSQL: set("date time timestamp"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
458 support: set("doubleQuote zerolessFloat")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
459 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
460
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
461 // Esper
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
462 CodeMirror.defineMIME("text/x-esper", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
463 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
464 client: set("source"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
465 // http://www.espertech.com/esper/release-5.5.0/esper-reference/html/appendix_keywords.html
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
466 keywords: set("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
467 builtin: {},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
468 atoms: set("false true null"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
469 operatorChars: /^[*+\-%<>!=&|^\/#@?~]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
470 dateSQL: set("time"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
471 support: set("decimallessFloat zerolessFloat binaryNumber hexNumber")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
472 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
473
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
474 // Trino (formerly known as Presto)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
475 CodeMirror.defineMIME("text/x-trino", {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
476 name: "sql",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
477 // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/core/trino-parser/src/main/antlr4/io/trino/sql/parser/SqlBase.g4#L859-L1129
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
478 // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/docs/src/main/sphinx/functions/list.rst
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
479 keywords: set("abs absent acos add admin after all all_match alter analyze and any any_match approx_distinct approx_most_frequent approx_percentile approx_set arbitrary array_agg array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_sort array_union arrays_overlap as asc asin at at_timezone atan atan2 authorization avg bar bernoulli beta_cdf between bing_tile bing_tile_at bing_tile_coordinates bing_tile_polygon bing_tile_quadkey bing_tile_zoom_level bing_tiles_around bit_count bitwise_and bitwise_and_agg bitwise_left_shift bitwise_not bitwise_or bitwise_or_agg bitwise_right_shift bitwise_right_shift_arithmetic bitwise_xor bool_and bool_or both by call cardinality cascade case cast catalogs cbrt ceil ceiling char2hexint checksum chr classify coalesce codepoint column columns combinations comment commit committed concat concat_ws conditional constraint contains contains_sequence convex_hull_agg copartition corr cos cosh cosine_similarity count count_if covar_pop covar_samp crc32 create cross cube cume_dist current current_catalog current_date current_groups current_path current_role current_schema current_time current_timestamp current_timezone current_user data date_add date_diff date_format date_parse date_trunc day day_of_month day_of_week day_of_year deallocate default define definer degrees delete dense_rank deny desc describe descriptor distinct distributed dow doy drop e element_at else empty empty_approx_set encoding end error escape evaluate_classifier_predictions every except excluding execute exists exp explain extract false features fetch filter final first first_value flatten floor following for format format_datetime format_number from from_base from_base32 from_base64 from_base64url from_big_endian_32 from_big_endian_64 from_encoded_polyline from_geojson_geometry from_hex from_ieee754_32 from_ieee754_64 from_iso8601_date from_iso8601_timestamp from_iso8601_timestamp_nanos from_unixtime from_unixtime_nanos from_utf8 full functions geometric_mean geometry_from_hadoop_shape geometry_invalid_reason geometry_nearest_points geometry_to_bing_tiles geometry_union geometry_union_agg grant granted grants graphviz great_circle_distance greatest group grouping groups hamming_distance hash_counts having histogram hmac_md5 hmac_sha1 hmac_sha256 hmac_sha512 hour human_readable_seconds if ignore in including index infinity initial inner input insert intersect intersection_cardinality into inverse_beta_cdf inverse_normal_cdf invoker io is is_finite is_infinite is_json_scalar is_nan isolation jaccard_index join json_array json_array_contains json_array_get json_array_length json_exists json_extract json_extract_scalar json_format json_object json_parse json_query json_size json_value keep key keys kurtosis lag last last_day_of_month last_value lateral lead leading learn_classifier learn_libsvm_classifier learn_libsvm_regressor learn_regressor least left length level levenshtein_distance like limit line_interpolate_point line_interpolate_points line_locate_point listagg ln local localtime localtimestamp log log10 log2 logical lower lpad ltrim luhn_check make_set_digest map_agg map_concat map_entries map_filter map_from_entries map_keys map_union map_values map_zip_with match match_recognize matched matches materialized max max_by md5 measures merge merge_set_digest millisecond min min_by minute mod month multimap_agg multimap_from_entries murmur3 nan natural next nfc nfd nfkc nfkd ngrams no none none_match normal_cdf normalize not now nth_value ntile null nullif nulls numeric_histogram object objectid_timestamp of offset omit on one only option or order ordinality outer output over overflow parse_data_size parse_datetime parse_duration partition partitions passing past path pattern per percent_rank permute pi position pow power preceding prepare privileges properties prune qdigest_agg quarter quotes radians rand random range rank read recursive reduce reduce_agg refresh regexp_count regexp_extract regexp_extract_all regexp_like regexp_position regexp_replace regexp_split regr_intercept regr_slope regress rename render repeat repeatable replace reset respect restrict returning reverse revoke rgb right role roles rollback rollup round row_number rows rpad rtrim running scalar schema schemas second security seek select sequence serializable session set sets sha1 sha256 sha512 show shuffle sign simplify_geometry sin skewness skip slice some soundex spatial_partitioning spatial_partitions split split_part split_to_map split_to_multimap spooky_hash_v2_32 spooky_hash_v2_64 sqrt st_area st_asbinary st_astext st_boundary st_buffer st_centroid st_contains st_convexhull st_coorddim st_crosses st_difference st_dimension st_disjoint st_distance st_endpoint st_envelope st_envelopeaspts st_equals st_exteriorring st_geometries st_geometryfromtext st_geometryn st_geometrytype st_geomfrombinary st_interiorringn st_interiorrings st_intersection st_intersects st_isclosed st_isempty st_isring st_issimple st_isvalid st_length st_linefromtext st_linestring st_multipoint st_numgeometries st_numinteriorring st_numpoints st_overlaps st_point st_pointn st_points st_polygon st_relate st_startpoint st_symdifference st_touches st_union st_within st_x st_xmax st_xmin st_y st_ymax st_ymin start starts_with stats stddev stddev_pop stddev_samp string strpos subset substr substring sum system table tables tablesample tan tanh tdigest_agg text then ties timestamp_objectid timezone_hour timezone_minute to to_base to_base32 to_base64 to_base64url to_big_endian_32 to_big_endian_64 to_char to_date to_encoded_polyline to_geojson_geometry to_geometry to_hex to_ieee754_32 to_ieee754_64 to_iso8601 to_milliseconds to_spherical_geography to_timestamp to_unixtime to_utf8 trailing transaction transform transform_keys transform_values translate trim trim_array true truncate try try_cast type typeof uescape unbounded uncommitted unconditional union unique unknown unmatched unnest update upper url_decode url_encode url_extract_fragment url_extract_host url_extract_parameter url_extract_path url_extract_port url_extract_protocol url_extract_query use user using utf16 utf32 utf8 validate value value_at_quantile values values_at_quantiles var_pop var_samp variance verbose version view week week_of_year when where width_bucket wilson_interval_lower wilson_interval_upper window with with_timezone within without word_stem work wrapper write xxhash64 year year_of_week yow zip zip_with"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
480 // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/core/trino-main/src/main/java/io/trino/metadata/TypeRegistry.java#L131-L168
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
481 // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/plugin/trino-ml/src/main/java/io/trino/plugin/ml/MLPlugin.java#L35
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
482 // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoPlugin.java#L32
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
483 // https://github.com/trinodb/trino/blob/bc7a4eeedde28684c7ae6f74cefcaf7c6e782174/plugin/trino-geospatial/src/main/java/io/trino/plugin/geospatial/GeoPlugin.java#L37
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
484 builtin: set("array bigint bingtile boolean char codepoints color date decimal double function geometry hyperloglog int integer interval ipaddress joniregexp json json2016 jsonpath kdbtree likepattern map model objectid p4hyperloglog precision qdigest re2jregexp real regressor row setdigest smallint sphericalgeography tdigest time timestamp tinyint uuid varbinary varchar zone"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
485 atoms: set("false true null unknown"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
486 // https://trino.io/docs/current/functions/list.html#id1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
487 operatorChars: /^[[\]|<>=!\-+*/%]/,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
488 dateSQL: set("date time timestamp zone"),
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
489 // hexNumber is necessary for VARBINARY literals, e.g. X'65683F'
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
490 // but it also enables 0xFF hex numbers, which Trino doesn't support.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
491 support: set("decimallessFloat zerolessFloat hexNumber")
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
492 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
493 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
494
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
495 /*
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
496 How Properties of Mime Types are used by SQL Mode
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
497 =================================================
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
498
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
499 keywords:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
500 A list of keywords you want to be highlighted.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
501 builtin:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
502 A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword").
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
503 operatorChars:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
504 All characters that must be handled as operators.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
505 client:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
506 Commands parsed and executed by the client (not the server).
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
507 support:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
508 A list of supported syntaxes which are not common, but are supported by more than 1 DBMS.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
509 * zerolessFloat: .1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
510 * decimallessFloat: 1.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
511 * hexNumber: X'01AF' X'01af' x'01AF' x'01af' 0x01AF 0x01af
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
512 * binaryNumber: b'01' B'01' 0b01
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
513 * doubleQuote: "string"
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
514 * escapeConstant: E''
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
515 * nCharCast: N'string'
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
516 * charsetCast: _utf8'string'
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
517 * commentHash: use # char for comments
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
518 * commentSlashSlash: use // for comments
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
519 * commentSpaceRequired: require a space after -- for comments
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
520 atoms:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
521 Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
522 UNKNOWN, INFINITY, UNDERFLOW, NaN...
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
523 dateSQL:
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
524 Used for date/time SQL standard syntax, because not all DBMS's support same temporal types.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
525 */