materialize_sql_dialect.xml

  1<lexer>
  2  <config>
  3    <name>Materialize SQL dialect</name>
  4    <mime_type>text/x-materializesql</mime_type>
  5    <case_insensitive>true</case_insensitive>
  6    <not_multiline>true</not_multiline>
  7    <alias>materialize</alias>
  8    <alias>mzsql</alias>
  9  </config>
 10  <rules>
 11    <state name="root">
 12      <rule pattern="\s+">
 13        <token type="Text" />
 14      </rule>
 15      <rule pattern="--.*\n?">
 16        <token type="CommentSingle" />
 17      </rule>
 18      <rule pattern="/\*">
 19        <token type="CommentMultiline" />
 20        <push state="multiline-comments" />
 21      </rule>
 22      <rule pattern="(bigint|bigserial|bit|bit\s+varying|bool|boolean|box|bytea|char|character|character\s+varying|cidr|circle|date|decimal|double\s+precision|float4|float8|inet|int|int2|int4|int8|integer|interval|json|jsonb|line|lseg|macaddr|money|numeric|path|pg_lsn|point|polygon|real|serial|serial2|serial4|serial8|smallint|smallserial|text|time|timestamp|timestamptz|timetz|tsquery|tsvector|txid_snapshot|uuid|varbit|varchar|with\s+time\s+zone|without\s+time\s+zone|xml|anyarray|anyelement|anyenum|anynonarray|anyrange|cstring|fdw_handler|internal|language_handler|opaque|record|void)\b">
 23        <token type="NameBuiltin" />
 24      </rule>
 25      <rule pattern="(?s)(DO)(\s+)(?:(LANGUAGE)?(\s+)('?)(\w+)?('?)(\s+))?(\$)([^$]*)(\$)(.*?)(\$)(\10)(\$)">
 26        <usingbygroup>
 27          <sublexer_name_group>6</sublexer_name_group>
 28          <code_group>12</code_group>
 29          <emitters>
 30            <token type="Keyword" />
 31            <token type="Text" />
 32            <token type="Keyword" />
 33            <token type="Text" />
 34            <token type="LiteralStringSingle" />
 35            <token type="LiteralStringSingle" />
 36            <token type="LiteralStringSingle" />
 37            <token type="Text" />
 38            <token type="LiteralStringHeredoc" />
 39            <token type="LiteralStringHeredoc" />
 40            <token type="LiteralStringHeredoc" />
 41            <token type="LiteralStringHeredoc" />
 42            <token type="LiteralStringHeredoc" />
 43            <token type="LiteralStringHeredoc" />
 44            <token type="LiteralStringHeredoc" />
 45          </emitters>
 46        </usingbygroup>
 47      </rule>
 48      <rule pattern="(ACCESS|ADD|ADDRESSES|AGGREGATE|ALIGNED|ALL|ALTER|ANALYSIS|AND|ANY|ARITY|ARN|ARRANGEMENT|ARRAY|AS|ASC|ASSERT|ASSUME|AT|AUCTION|AUTHORITY|AVAILABILITY|AVRO|AWS|BATCH|BEGIN|BETWEEN|BIGINT|BILLED|BODY|BOOLEAN|BOTH|BPCHAR|BROKEN|BROKER|BROKERS|BY|BYTES|CARDINALITY|CASCADE|CASE|CAST|CERTIFICATE|CHAIN|CHAINS|CHAR|CHARACTER|CHARACTERISTICS|CHECK|CLASS|CLIENT|CLOCK|CLOSE|CLUSTER|CLUSTERS|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPACTION|COMPATIBILITY|COMPRESSION|COMPUTE|COMPUTECTL|CONFIG|CONFLUENT|CONNECTION|CONNECTIONS|CONSTRAINT|CONTINUAL|COPY|COUNT|COUNTER|CREATE|CREATECLUSTER|CREATEDB|CREATEROLE|CREATION|CROSS|CSV|CURRENT|CURSOR|DATABASE|DATABASES|DATUMS|DAY|DAYS|DEALLOCATE|DEBEZIUM|DEBUG|DEBUGGING|DEC|DECIMAL|DECLARE|DECODING|DECORRELATED|DEFAULT|DEFAULTS|DELETE|DELIMITED|DELIMITER|DELTA|DESC|DETAILS|DISCARD|DISK|DISTINCT|DOC|DOT|DOUBLE|DROP|EAGER|ELEMENT|ELSE|ENABLE|END|ENDPOINT|ENFORCED|ENVELOPE|ERROR|ERRORS|ESCAPE|ESTIMATE|EVERY|EXCEPT|EXCLUDE|EXECUTE|EXISTS|EXPECTED|EXPLAIN|EXPOSE|EXPRESSIONS|EXTERNAL|EXTRACT|FACTOR|FALSE|FAST|FEATURES|FETCH|FIELDS|FILE|FILTER|FIRST|FIXPOINT|FLOAT|FOLLOWING|FOR|FOREIGN|FORMAT|FORWARD|FROM|FULL|FULLNAME|FUNCTION|FUSION|GENERATOR|GRANT|GREATEST|GROUP|GROUPS|HAVING|HEADER|HEADERS|HISTORY|HOLD|HOST|HOUR|HOURS|HUMANIZED|HYDRATION|ID|IDENTIFIERS|IDS|IF|IGNORE|ILIKE|IMPLEMENTATIONS|IMPORTED|IN|INCLUDE|INDEX|INDEXES|INFO|INHERIT|INLINE|INNER|INPUT|INSERT|INSIGHTS|INSPECT|INT|INTEGER|INTERNAL|INTERSECT|INTERVAL|INTO|INTROSPECTION|IS|ISNULL|ISOLATION|JOIN|JOINS|JSON|KAFKA|KEY|KEYS|LAST|LATERAL|LATEST|LEADING|LEAST|LEFT|LEGACY|LETREC|LEVEL|LIKE|LIMIT|LINEAR|LIST|LOAD|LOCAL|LOCALLY|LOG|LOGICAL|LOGIN|LOWERING|MANAGED|MANUAL|MAP|MARKETING|MATERIALIZE|MATERIALIZED|MAX|MECHANISMS|MEMBERSHIP|MESSAGE|METADATA|MINUTE|MINUTES|MODE|MONTH|MONTHS|MUTUALLY|MYSQL|NAME|NAMES|NATURAL|NEGATIVE|NEW|NEXT|NO|NOCREATECLUSTER|NOCREATEDB|NOCREATEROLE|NODE|NOINHERIT|NOLOGIN|NON|NONE|NOSUPERUSER|NOT|NOTICE|NOTICES|NULL|NULLIF|NULLS|OBJECTS|OF|OFFSET|ON|ONLY|OPERATOR|OPTIMIZED|OPTIMIZER|OPTIONS|OR|ORDER|ORDINALITY|OUTER|OVER|OWNED|OWNER|PARTITION|PARTITIONS|PASSWORD|PATH|PHYSICAL|PLAN|PLANS|PORT|POSITION|POSTGRES|PRECEDING|PRECISION|PREFIX|PREPARE|PRIMARY|PRIVATELINK|PRIVILEGES|PROGRESS|PROTOBUF|PROTOCOL|PUBLIC|PUBLICATION|PUSHDOWN|QUERY|QUOTE|RAISE|RANGE|RATE|RAW|READ|READY|REAL|REASSIGN|RECURSION|RECURSIVE|REDACTED|REDUCE|REFERENCE|REFERENCES|REFRESH|REGEX|REGION|REGISTRY|RENAME|REOPTIMIZE|REPEATABLE|REPLACE|REPLAN|REPLICA|REPLICAS|REPLICATION|RESET|RESPECT|RESTRICT|RETAIN|RETURN|RETURNING|REVOKE|RIGHT|ROLE|ROLES|ROLLBACK|ROTATE|ROUNDS|ROW|ROWS|SASL|SCALE|SCHEDULE|SCHEMA|SCHEMAS|SECOND|SECONDS|SECRET|SECRETS|SECURITY|SEED|SELECT|SEQUENCES|SERIALIZABLE|SERVICE|SESSION|SET|SHARD|SHOW|SINK|SINKS|SIZE|SMALLINT|SNAPSHOT|SOME|SOURCE|SOURCES|SSH|SSL|START|STDIN|STDOUT|STORAGE|STORAGECTL|STRATEGY|STRICT|STRING|STRONG|SUBSCRIBE|SUBSOURCE|SUBSOURCES|SUBSTRING|SUBTREE|SUPERUSER|SWAP|SYNTAX|SYSTEM|TABLE|TABLES|TAIL|TASK|TEMP|TEMPORARY|TEXT|THEN|TICK|TIES|TIME|TIMELINE|TIMEOUT|TIMESTAMP|TIMESTAMPTZ|TIMING|TO|TOKEN|TOPIC|TPCH|TRACE|TRAILING|TRANSACTION|TRANSACTIONAL|TRIM|TRUE|TUNNEL|TYPE|TYPES|UNBOUNDED|UNCOMMITTED|UNION|UNIQUE|UNKNOWN|UNNEST|UNTIL|UP|UPDATE|UPSERT|URL|USAGE|USER|USERNAME|USERS|USING|VALIDATE|VALUE|VALUES|VARCHAR|VARIADIC|VARYING|VERSION|VIEW|VIEWS|WAIT|WARNING|WEBHOOK|WHEN|WHERE|WINDOW|WIRE|WITH|WITHIN|WITHOUT|WORK|WORKERS|WORKLOAD|WRITE|YEAR|YEARS|YUGABYTE|ZONE|ZONES)\b">
 49        <token type="Keyword" />
 50      </rule>
 51      <rule pattern="[+*/&lt;&gt;=~!@#%^&amp;|`?-]+">
 52        <token type="Operator" />
 53      </rule>
 54      <rule pattern="::">
 55        <token type="Operator" />
 56      </rule>
 57      <rule pattern="\$\d+">
 58        <token type="NameVariable" />
 59      </rule>
 60      <rule pattern="([0-9]*\.[0-9]*|[0-9]+)(e[+-]?[0-9]+)?">
 61        <token type="LiteralNumberFloat" />
 62      </rule>
 63      <rule pattern="[0-9]+">
 64        <token type="LiteralNumberInteger" />
 65      </rule>
 66      <rule pattern="((?:E|U&amp;)?)(')">
 67        <bygroups>
 68          <token type="LiteralStringAffix" />
 69          <token type="LiteralStringSingle" />
 70        </bygroups>
 71        <push state="string" />
 72      </rule>
 73      <rule pattern="((?:U&amp;)?)(&quot;)">
 74        <bygroups>
 75          <token type="LiteralStringAffix" />
 76          <token type="LiteralStringName" />
 77        </bygroups>
 78        <push state="quoted-ident" />
 79      </rule>
 80      <rule pattern="(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)(\s+)(LANGUAGE)?(\s+)('?)(\w+)?('?)">
 81        <usingbygroup>
 82          <sublexer_name_group>12</sublexer_name_group>
 83          <code_group>4</code_group>
 84          <emitters>
 85            <token type="LiteralStringHeredoc" />
 86            <token type="LiteralStringHeredoc" />
 87            <token type="LiteralStringHeredoc" />
 88            <token type="LiteralStringHeredoc" />
 89            <token type="LiteralStringHeredoc" />
 90            <token type="LiteralStringHeredoc" />
 91            <token type="LiteralStringHeredoc" />
 92            <token type="Text" />
 93            <token type="Keyword" />
 94            <token type="Text" />
 95            <token type="LiteralStringSingle" />
 96            <token type="LiteralStringSingle" />
 97            <token type="LiteralStringSingle" />
 98          </emitters>
 99        </usingbygroup>
100      </rule>
101      <rule pattern="(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)">
102        <token type="LiteralStringHeredoc" />
103      </rule>
104      <rule pattern="[a-z_]\w*">
105        <token type="Name" />
106      </rule>
107      <rule pattern=":(['&quot;]?)[a-z]\w*\b\1">
108        <token type="NameVariable" />
109      </rule>
110      <rule pattern="[;:()\[\]{},.]">
111        <token type="Punctuation" />
112      </rule>
113    </state>
114    <state name="multiline-comments">
115      <rule pattern="/\*">
116        <token type="CommentMultiline" />
117        <push state="multiline-comments" />
118      </rule>
119      <rule pattern="\*/">
120        <token type="CommentMultiline" />
121        <pop depth="1" />
122      </rule>
123      <rule pattern="[^/*]+">
124        <token type="CommentMultiline" />
125      </rule>
126      <rule pattern="[/*]">
127        <token type="CommentMultiline" />
128      </rule>
129    </state>
130    <state name="string">
131      <rule pattern="[^']+">
132        <token type="LiteralStringSingle" />
133      </rule>
134      <rule pattern="''">
135        <token type="LiteralStringSingle" />
136      </rule>
137      <rule pattern="'">
138        <token type="LiteralStringSingle" />
139        <pop depth="1" />
140      </rule>
141    </state>
142    <state name="quoted-ident">
143      <rule pattern="[^&quot;]+">
144        <token type="LiteralStringName" />
145      </rule>
146      <rule pattern="&quot;&quot;">
147        <token type="LiteralStringName" />
148      </rule>
149      <rule pattern="&quot;">
150        <token type="LiteralStringName" />
151        <pop depth="1" />
152      </rule>
153    </state>
154  </rules>
155</lexer>