1<lexer>
2 <config>
3 <name>PostgreSQL SQL dialect</name>
4 <alias>postgresql</alias>
5 <alias>postgres</alias>
6 <mime_type>text/x-postgresql</mime_type>
7 <case_insensitive>true</case_insensitive>
8 <not_multiline>true</not_multiline>
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="(CURRENT_TIMESTAMP|CHARACTERISTICS|CURRENT_CATALOG|CURRENT_SCHEMA|LOCALTIMESTAMP|CONFIGURATION|AUTHORIZATION|XMLATTRIBUTES|MATERIALIZED|SERIALIZABLE|CURRENT_DATE|XMLSERIALIZE|SESSION_USER|CURRENT_ROLE|CURRENT_USER|CONCURRENTLY|CURRENT_TIME|UNENCRYPTED|UNCOMMITTED|TRANSACTION|INSENSITIVE|CONSTRAINTS|ASSIGNMENT|ASYMMETRIC|DEALLOCATE|ORDINALITY|PRIVILEGES|DEFERRABLE|PROCEDURAL|CONVERSION|REFERENCES|WHITESPACE|TABLESPACE|CONSTRAINT|CONNECTION|STATISTICS|DELIMITERS|STANDALONE|DICTIONARY|REPEATABLE|CHECKPOINT|XMLELEMENT|LC_COLLATE|SYMMETRIC|PARTITION|SEQUENCES|FUNCTIONS|IMMEDIATE|IMMUTABLE|SAVEPOINT|EXTENSION|INCLUDING|RETURNING|COLLATION|INCREMENT|EXCLUSIVE|EXCLUDING|INITIALLY|COMMITTED|INTERSECT|STATEMENT|SUBSTRING|FOLLOWING|ISOLATION|TEMPORARY|ENCRYPTED|TIMESTAMP|RECURSIVE|LEAKPROOF|PROCEDURE|LOCALTIME|XMLFOREST|XMLEXISTS|AGGREGATE|ATTRIBUTE|UNBOUNDED|ASSERTION|XMLCONCAT|DELIMITER|CHARACTER|VALIDATOR|PRECISION|PRECEDING|LC_CTYPE|SECURITY|PREPARED|PASSWORD|VALIDATE|OVERLAPS|VARIADIC|DEFAULTS|VOLATILE|DEFERRED|OPERATOR|NATIONAL|UNLOGGED|UNLISTEN|TRAILING|BACKWARD|MAXVALUE|PRESERVE|DISTINCT|LOCATION|DOCUMENT|TRUNCATE|MINVALUE|POSITION|ABSOLUTE|XMLPARSE|LANGUAGE|ENCODING|CONTINUE|TEMPLATE|INTERVAL|CASCADED|DATABASE|RELATIVE|INHERITS|COMMENTS|SNAPSHOT|RESTRICT|COALESCE|IMPLICIT|ROLLBACK|EXTERNAL|REASSIGN|SMALLINT|IDENTITY|GREATEST|SEQUENCE|FUNCTION|DISCARD|CASCADE|DECIMAL|XMLROOT|FOREIGN|FORWARD|PARTIAL|PLACING|WRAPPER|WITHOUT|OVERLAY|DECLARE|PREPARE|GRANTED|CURRENT|DEFAULT|HANDLER|PRIMARY|OPTIONS|VERSION|VERBOSE|DEFINER|VARYING|ANALYSE|VARCHAR|EXTRACT|EXPLAIN|PROGRAM|RECHECK|EXECUTE|ANALYZE|INDEXES|INHERIT|EXCLUDE|CONTENT|REFRESH|REINDEX|NUMERIC|UNKNOWN|RELEASE|NOTNULL|INSTEAD|TRUSTED|INTEGER|NOTHING|COMMENT|TRIGGER|INVOKER|BETWEEN|REPLACE|REPLICA|RESTART|BOOLEAN|NATURAL|COLLATE|RETURNS|CLUSTER|LATERAL|STORAGE|DISABLE|LEADING|MAPPING|PASSING|SESSION|CATALOG|SIMILAR|SIMPLE|LISTEN|STABLE|SERVER|DOUBLE|DOMAIN|SELECT|SECOND|CALLED|SEARCH|SCROLL|STDOUT|MINUTE|SCHEMA|STRICT|REVOKE|SYSTEM|ENABLE|COLUMN|DELETE|TABLES|BINARY|BIGINT|ISNULL|BEFORE|RENAME|ESCAPE|NOTIFY|INSERT|NOWAIT|UNIQUE|NULLIF|COMMIT|UPDATE|OBJECT|VACUUM|INLINE|OFFSET|EXCEPT|EXISTS|VALUES|FAMILY|OPTION|HEADER|CREATE|HAVING|ALWAYS|WINDOW|CURSOR|WITHIN|GLOBAL|FILTER|POLICY|ACTION|PARSER|FREEZE|ACCESS|LOCAL|LEAST|OWNER|PLANS|OWNED|FORCE|XMLPI|CYCLE|ADMIN|OUTER|AFTER|ORDER|PRIOR|WRITE|CROSS|FIRST|GRANT|QUOTE|RANGE|FETCH|ALTER|WHERE|GROUP|VIEWS|ILIKE|FALSE|VALUE|INDEX|NULLS|VALID|INNER|USING|INOUT|UNTIL|RESET|NCHAR|NAMES|ARRAY|INPUT|MONTH|RIGHT|EVENT|UNION|TYPES|TREAT|BEGIN|CLOSE|LABEL|ABORT|MATCH|TABLE|CLASS|LARGE|CHECK|SYSID|CHAIN|FLOAT|STRIP|LIMIT|STDIN|SETOF|SHARE|CACHE|START|LEVEL|NAME|MOVE|SOME|LEFT|CAST|LIKE|DROP|SHOW|ZONE|EACH|ELSE|LAST|LOAD|YEAR|BOTH|CHAR|DATA|LOCK|DESC|FROM|TEMP|OVER|JOIN|TEXT|THEN|TIME|ALSO|FULL|WORK|RULE|ROWS|INTO|TRIM|TRUE|ENUM|ONLY|TYPE|WITH|READ|REAL|COST|MODE|ROLE|CASE|WHEN|COPY|NEXT|VIEW|USER|NONE|HOLD|NULL|HOUR|OIDS|BIT|ADD|SET|YES|FOR|AND|NOT|DAY|ANY|KEY|DEC|END|ASC|OFF|ROW|INT|REF|OUT|ALL|CSV|XML|ON|AT|NO|TO|AS|IN|DO|IS|IF|BY|OR|OF)\b">
49 <token type="Keyword"/>
50 </rule>
51 <rule pattern="[+*/<>=~!@#%^&|`?-]+">
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&)?)(')">
67 <bygroups>
68 <token type="LiteralStringAffix"/>
69 <token type="LiteralStringSingle"/>
70 </bygroups>
71 <push state="string"/>
72 </rule>
73 <rule pattern="((?:U&)?)(")">
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=":(['"]?)[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="[^"]+">
144 <token type="LiteralStringName"/>
145 </rule>
146 <rule pattern="""">
147 <token type="LiteralStringName"/>
148 </rule>
149 <rule pattern=""">
150 <token type="LiteralStringName"/>
151 <pop depth="1"/>
152 </rule>
153 </state>
154 </rules>
155</lexer>