name: SQL fileTypes:
-
sql
-
ddl
-
dml
scopeName: source.sql repository:
string_interpolation: name: string.interpolated.sql captures: "1": name: punctuation.definition.string.end.sql match: (#\{)([^\}]*)(\}) comments: patterns: - name: comment.line.double-dash.sql captures: "1": name: punctuation.definition.comment.sql match: (--).*$\n? - name: comment.line.number-sign.sql captures: "1": name: punctuation.definition.comment.sql match: (#).*$\n? - name: comment.block.c captures: "0": name: punctuation.definition.comment.sql begin: /\* end: \*/ string_escape: name: constant.character.escape.sql match: \\. strings: patterns: - name: string.quoted.single.sql captures: "1": name: punctuation.definition.string.begin.sql "3": name: punctuation.definition.string.end.sql match: (')[^'\\]*(') comment: this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines. - name: string.quoted.single.sql endCaptures: "0": name: punctuation.definition.string.end.sql begin: "'" beginCaptures: "0": name: punctuation.definition.string.begin.sql end: "'" patterns: - include: "#string_escape" - name: string.quoted.other.backtick.sql captures: "1": name: punctuation.definition.string.begin.sql "3": name: punctuation.definition.string.end.sql match: (`)[^`\\]*(`) comment: this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines. - name: string.quoted.other.backtick.sql endCaptures: "0": name: punctuation.definition.string.end.sql begin: "`" beginCaptures: "0": name: punctuation.definition.string.begin.sql end: "`" patterns: - include: "#string_escape" - name: string.quoted.double.sql captures: "1": name: punctuation.definition.string.begin.sql "3": name: punctuation.definition.string.end.sql match: (")[^"#]*(") comment: this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines. - name: string.quoted.double.sql endCaptures: "0": name: punctuation.definition.string.end.sql begin: "\"" beginCaptures: "0": name: punctuation.definition.string.begin.sql end: "\"" patterns: - include: "#string_interpolation" - name: string.other.quoted.brackets.sql endCaptures: "0": name: punctuation.definition.string.end.sql begin: "%\\{" beginCaptures: "0": name: punctuation.definition.string.begin.sql end: \} patterns: - include: "#string_interpolation" regexps: patterns: - name: string.regexp.sql endCaptures: "0": name: punctuation.definition.string.end.sql begin: /(?=\S.*/) beginCaptures: "0": name: punctuation.definition.string.begin.sql end: / patterns: - include: "#string_interpolation" - name: constant.character.escape.slash.sql match: \\/ - name: string.regexp.modr.sql endCaptures: "0": name: punctuation.definition.string.end.sql begin: "%r\\{" beginCaptures: "0": name: punctuation.definition.string.begin.sql end: \} patterns: - include: "#string_interpolation" comment: We should probably handle nested bracket pairs!?! -- Allan
uuid: C49120AC-6ECC-11D9-ACC8-000D93589AF6 foldingStartMarker: s*(s*$ patterns:
-
name: meta.create.sql captures:
"1": name: keyword.other.create.sql "2": name: keyword.other.sql "5": name: entity.name.function.sql
match: (?i:^s*(create)s+(aggregate|conversion|database|domain|function|group|(uniques+)?index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view)s+)(?)(w+)4
-
name: meta.drop.sql captures:
"1": name: keyword.other.create.sql "2": name: keyword.other.sql
match: (?i:^s*(drop)s+(aggregate|conversion|database|domain|function|group|index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view))
-
name: meta.drop.sql captures:
"1": name: keyword.other.create.sql "2": name: keyword.other.table.sql "3": name: entity.name.function.sql "4": name: keyword.other.cascade.sql
match: (?i:s*(drop)s+(table)s+(w+)(s+cascade)?b)
-
name: meta.alter.sql captures:
"1": name: keyword.other.create.sql "2": name: keyword.other.table.sql
match: (?i:^s*(alter)s+(aggregate|conversion|database|domain|function|group|index|language|operator class|operator|rule|schema|sequence|table|tablespace|trigger|type|user|view)s+)
-
captures:
"6": name: storage.type.sql "11": name: storage.type.sql "7": name: constant.numeric.sql "12": name: storage.type.sql "8": name: constant.numeric.sql "13": name: storage.type.sql "9": name: storage.type.sql "14": name: constant.numeric.sql "15": name: storage.type.sql "1": name: storage.type.sql "2": name: storage.type.sql "3": name: constant.numeric.sql "4": name: storage.type.sql "10": name: constant.numeric.sql "5": name: constant.numeric.sql
match: “(?xi)nn\
\t\t\t\t# normal stuff, capture 1\n\ \t\t\t\t \\b(bigint|bigserial|bit|boolean|box|bytea|cidr|circle|date|double\\sprecision|inet|int|integer|line|lseg|macaddr|money|oid|path|point|polygon|real|serial|smallint|sysdate|text)\\b\n\n\ \t\t\t\t# numeric suffix, capture 2 + 3i\n\ \t\t\t\t|\\b(bit\\svarying|character\\s(?:varying)?|tinyint|var\\schar|float|interval)\\((\\d+)\\)\n\n\ \t\t\t\t# optional numeric suffix, capture 4 + 5i\n\ \t\t\t\t|\\b(char|number|varchar\\d?)\\b(?:\\((\\d+)\\))?\n\n\ \t\t\t\t# special case, capture 6 + 7i + 8i\n\ \t\t\t\t|\\b(numeric)\\b(?:\\((\\d+),(\\d+)\\))?\n\n\ \t\t\t\t# special case, captures 9, 10i, 11\n\ \t\t\t\t|\\b(times)(?:\\((\\d+)\\))(\\swithoutstimeszone\\b)?\n\n\ \t\t\t\t# special case, captures 12, 13, 14i, 15\n\ \t\t\t\t|\\b(timestamp)(?:(s)\\((\\d+)\\)(\\swithoutstimeszone\\b)?)?\n\n\ \t\t\t"
-
name: storage.modifier.sql match: (?i:b((?:primary|foreign)s+key|references|onsdelete(s+cascade)?|check|constraint)b)
-
name: constant.numeric.sql match: d+
-
name: keyword.other.DML.sql match: (?i:b(select(s+distinct)?|inserts+(ignores+)?into|update|delete|from|set|where|groupsby|and|union(s+all)?|having|ordersby|limit|(inner|cross)s+join|straight_join|(left|right)(s+outer)?s+join|natural(s+(left|right)(s+outer)?)?s+join)b)
-
name: keyword.other.DDL.create.II.sql match: (?i:b(ons+|(nots+)?null)b)
-
name: keyword.other.DML.II.sql match: (?i:bvaluesb)
-
name: keyword.other.LUW.sql match: (?i:b(begin(s+work)?|starts+transaction|commit(s+work)?|rollback(s+work)?)b)
-
name: keyword.other.authorization.sql match: (?i:b(grant(swithsgrantsoption)?|revoke)b)
-
name: keyword.other.data-integrity.sql match: (?i:binb)
-
name: keyword.other.object-comments.sql match: (?i:^s*(comments+ons+(table|column|aggregate|constraint|database|domain|function|index|operator|rule|schema|sequence|trigger|type|view))s+.*?s+(is)s+)
-
include: “#comments”
-
include: “#strings”
-
include: “#regexps”
foldingStopMarker: ^s*) keyEquivalent: ^~S