Skip to content

Commit d1034f8

Browse files
authored
Update the Materialize lexer (#978)
This introduces some additional keywords. I've also scripted this on our end hence the changes in formatting and encoding of certain characters in attribute values. This also includes: - Some tests - Updates to the README to call out the `--csrf-key` argument for chromad. Without it securecookie throws an error.
1 parent 2d94bda commit d1034f8

File tree

4 files changed

+407
-78
lines changed

4 files changed

+407
-78
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ for that setup the `chroma` executable can be just symlinked to `~/.lessfilter`.
272272
If you edit some lexers and want to try it, open a shell in `cmd/chromad` and run:
273273

274274
```shell
275-
go run .
275+
go run . --csrf-key=securekey
276276
```
277277

278278
A Link will be printed. Open it in your Browser. Now you can test on the Playground with your local changes.

lexers/embedded/materialize_sql_dialect.xml

Lines changed: 77 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,154 +1,154 @@
11
<lexer>
22
<config>
33
<name>Materialize SQL dialect</name>
4-
<alias>materialize</alias>
5-
<alias>mzsql</alias>
64
<mime_type>text/x-materializesql</mime_type>
75
<case_insensitive>true</case_insensitive>
86
<not_multiline>true</not_multiline>
7+
<alias>materialize</alias>
8+
<alias>mzsql</alias>
99
</config>
1010
<rules>
1111
<state name="root">
1212
<rule pattern="\s+">
13-
<token type="Text"/>
13+
<token type="Text" />
1414
</rule>
1515
<rule pattern="--.*\n?">
16-
<token type="CommentSingle"/>
16+
<token type="CommentSingle" />
1717
</rule>
1818
<rule pattern="/\*">
19-
<token type="CommentMultiline"/>
20-
<push state="multiline-comments"/>
19+
<token type="CommentMultiline" />
20+
<push state="multiline-comments" />
2121
</rule>
2222
<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"/>
23+
<token type="NameBuiltin" />
2424
</rule>
25-
<rule pattern="(?s)(DO)(\s+)(?:(LANGUAGE)?(\s+)(&#39;?)(\w+)?(&#39;?)(\s+))?(\$)([^$]*)(\$)(.*?)(\$)(\10)(\$)">
25+
<rule pattern="(?s)(DO)(\s+)(?:(LANGUAGE)?(\s+)('?)(\w+)?('?)(\s+))?(\$)([^$]*)(\$)(.*?)(\$)(\10)(\$)">
2626
<usingbygroup>
2727
<sublexer_name_group>6</sublexer_name_group>
2828
<code_group>12</code_group>
2929
<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"/>
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" />
4545
</emitters>
4646
</usingbygroup>
4747
</rule>
48-
<rule pattern="(ACCESS|ACKS|ADD|ADDRESSES|AGGREGATE|ALL|ALTER|AND|ANY|ARN|ARRANGEMENT|ARRAY|AS|ASC|ASSERT|AT|AUCTION|AUTHORITY|AVAILABILITY|AVRO|AWS|BEGIN|BETWEEN|BIGINT|BILLED|BODY|BOOLEAN|BOTH|BPCHAR|BROKEN|BROKER|BROKERS|BY|BYTES|CARDINALITY|CASCADE|CASE|CAST|CERTIFICATE|CHAIN|CHAR|CHARACTER|CHARACTERISTICS|CHECK|CLIENT|CLOSE|CLUSTER|CLUSTERS|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPACTION|COMPRESSION|COMPUTE|COMPUTECTL|CONFLUENT|CONNECTION|CONNECTIONS|CONSTRAINT|COPY|COUNT|COUNTER|CREATE|CREATECLUSTER|CREATEDB|CREATEROLE|CROSS|CSV|CURRENT|CURSOR|DATABASE|DATABASES|DATUMS|DAY|DAYS|DEALLOCATE|DEBEZIUM|DEBUG|DEBUGGING|DEC|DECIMAL|DECLARE|DECORRELATED|DEFAULT|DEFAULTS|DELETE|DELIMITED|DELIMITER|DESC|DETAILS|DISCARD|DISK|DISTINCT|DOC|DOT|DOUBLE|DROP|EFFORT|ELEMENT|ELSE|ENABLE|END|ENDPOINT|ENFORCED|ENVELOPE|ERROR|ESCAPE|EXCEPT|EXECUTE|EXISTS|EXPECTED|EXPLAIN|EXPOSE|EXTRACT|FACTOR|FALSE|FETCH|FIELDS|FILTER|FIRST|FLOAT|FOLLOWING|FOR|FOREIGN|FORMAT|FORWARD|FROM|FULL|FULLNAME|FUNCTION|GENERATOR|GRANT|GREATEST|GROUP|GROUPS|HAVING|HEADER|HEADERS|HOLD|HOST|HOUR|HOURS|ID|IDEMPOTENCE|IDLE|IF|IGNORE|ILIKE|IN|INCLUDE|INDEX|INDEXES|INFO|INHERIT|INLINE|INNER|INPUT|INSERT|INSPECT|INT|INTEGER|INTERNAL|INTERSECT|INTERVAL|INTO|INTROSPECTION|IS|ISNULL|ISOLATION|JOIN|JSON|KAFKA|KEY|KEYS|LAST|LATERAL|LATEST|LEADING|LEAST|LEFT|LEVEL|LIKE|LIMIT|LIST|LOAD|LOCAL|LOG|LOGICAL|LOGIN|MANAGED|MAP|MARKETING|MATERIALIZE|MATERIALIZED|MAX|MECHANISMS|MEMBERSHIP|MERGE|MESSAGE|METADATA|MINUTE|MINUTES|MODE|MONTH|MONTHS|MS|MUTUALLY|NAME|NAMES|NATURAL|NEXT|NO|NOCREATECLUSTER|NOCREATEDB|NOCREATEROLE|NOINHERIT|NOLOGIN|NONE|NOSUPERUSER|NOT|NOTICE|NULL|NULLIF|NULLS|OBJECTS|OF|OFFSET|ON|ONLY|OPERATOR|OPTIMIZED|OPTIMIZER|OPTIONS|OR|ORDER|ORDINALITY|OUTER|OVER|OWNED|OWNER|PARTITION|PASSWORD|PHYSICAL|PLAN|PLANS|PORT|POSITION|POSTGRES|PRECEDING|PRECISION|PREFIX|PREPARE|PRIMARY|PRIVATELINK|PRIVILEGES|PROGRESS|PROTOBUF|PROTOCOL|PUBLICATION|QUERY|QUOTE|RAISE|RANGE|RAW|READ|REAL|REASSIGN|RECURSION|RECURSIVE|REFERENCES|REFRESH|REGEX|REGION|REGISTRY|RENAME|REPEATABLE|REPLACE|REPLICA|REPLICAS|REPLICATION|RESET|RESPECT|RESTRICT|RETENTION|RETURN|RETURNING|REVOKE|RIGHT|ROLE|ROLES|ROLLBACK|ROTATE|ROW|ROWS|SASL|SCALE|SCHEMA|SCHEMAS|SCRIPT|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|SUBSCRIBE|SUBSOURCE|SUBSOURCES|SUBSTRING|SUPERUSER|SWAP|SYSTEM|TABLE|TABLES|TAIL|TEMP|TEMPORARY|TEST|TEXT|THEN|TICK|TIES|TIME|TIMELINE|TIMEOUT|TIMESTAMP|TIMESTAMPTZ|TO|TOKEN|TOPIC|TPCH|TRACE|TRAILING|TRANSACTION|TRIM|TRUE|TUNNEL|TYPE|TYPES|UNBOUNDED|UNCOMMITTED|UNION|UNIQUE|UNKNOWN|UP|UPDATE|UPSERT|URL|USAGE|USER|USERNAME|USERS|USING|VALIDATE|VALUE|VALUES|VARCHAR|VARYING|VIEW|VIEWS|WARNING|WEBHOOK|WHEN|WHERE|WINDOW|WIRE|WITH|WITHIN|WITHOUT|WORK|WORKERS|WRITE|YEAR|YEARS|ZONE|ZONES)\b">
49-
<token type="Keyword"/>
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|CLIENT|CLOSE|CLUSTER|CLUSTERS|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPACTION|COMPATIBILITY|COMPRESSION|COMPUTE|COMPUTECTL|CONFIG|CONFLUENT|CONNECTION|CONNECTIONS|CONSTRAINT|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|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|GENERATOR|GRANT|GREATEST|GROUP|GROUPS|HAVING|HEADER|HEADERS|HISTORY|HOLD|HOST|HOUR|HOURS|HUMANIZED|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|PUBLICATION|PUSHDOWN|QUERY|QUOTE|RAISE|RANGE|RATE|RAW|READ|REAL|REASSIGN|RECURSION|RECURSIVE|REDACTED|REFERENCE|REFERENCES|REFRESH|REGEX|REGION|REGISTRY|REHYDRATION|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|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|UP|UPDATE|UPSERT|URL|USAGE|USER|USERNAME|USERS|USING|VALIDATE|VALUE|VALUES|VARCHAR|VARIADIC|VARYING|VERSION|VIEW|VIEWS|WARNING|WEBHOOK|WHEN|WHERE|WINDOW|WIRE|WITH|WITHIN|WITHOUT|WORK|WORKERS|WRITE|YEAR|YEARS|ZONE|ZONES)\b">
49+
<token type="Keyword" />
5050
</rule>
5151
<rule pattern="[+*/&lt;&gt;=~!@#%^&amp;|`?-]+">
52-
<token type="Operator"/>
52+
<token type="Operator" />
5353
</rule>
5454
<rule pattern="::">
55-
<token type="Operator"/>
55+
<token type="Operator" />
5656
</rule>
5757
<rule pattern="\$\d+">
58-
<token type="NameVariable"/>
58+
<token type="NameVariable" />
5959
</rule>
6060
<rule pattern="([0-9]*\.[0-9]*|[0-9]+)(e[+-]?[0-9]+)?">
61-
<token type="LiteralNumberFloat"/>
61+
<token type="LiteralNumberFloat" />
6262
</rule>
6363
<rule pattern="[0-9]+">
64-
<token type="LiteralNumberInteger"/>
64+
<token type="LiteralNumberInteger" />
6565
</rule>
66-
<rule pattern="((?:E|U&amp;)?)(&#39;)">
66+
<rule pattern="((?:E|U&amp;)?)(')">
6767
<bygroups>
68-
<token type="LiteralStringAffix"/>
69-
<token type="LiteralStringSingle"/>
68+
<token type="LiteralStringAffix" />
69+
<token type="LiteralStringSingle" />
7070
</bygroups>
71-
<push state="string"/>
71+
<push state="string" />
7272
</rule>
73-
<rule pattern="((?:U&amp;)?)(&#34;)">
73+
<rule pattern="((?:U&amp;)?)(&quot;)">
7474
<bygroups>
75-
<token type="LiteralStringAffix"/>
76-
<token type="LiteralStringName"/>
75+
<token type="LiteralStringAffix" />
76+
<token type="LiteralStringName" />
7777
</bygroups>
78-
<push state="quoted-ident"/>
78+
<push state="quoted-ident" />
7979
</rule>
80-
<rule pattern="(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)(\s+)(LANGUAGE)?(\s+)(&#39;?)(\w+)?(&#39;?)">
80+
<rule pattern="(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)(\s+)(LANGUAGE)?(\s+)('?)(\w+)?('?)">
8181
<usingbygroup>
8282
<sublexer_name_group>12</sublexer_name_group>
8383
<code_group>4</code_group>
8484
<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"/>
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" />
9898
</emitters>
9999
</usingbygroup>
100100
</rule>
101101
<rule pattern="(?s)(\$)([^$]*)(\$)(.*?)(\$)(\2)(\$)">
102-
<token type="LiteralStringHeredoc"/>
102+
<token type="LiteralStringHeredoc" />
103103
</rule>
104104
<rule pattern="[a-z_]\w*">
105-
<token type="Name"/>
105+
<token type="Name" />
106106
</rule>
107-
<rule pattern=":([&#39;&#34;]?)[a-z]\w*\b\1">
108-
<token type="NameVariable"/>
107+
<rule pattern=":(['&quot;]?)[a-z]\w*\b\1">
108+
<token type="NameVariable" />
109109
</rule>
110110
<rule pattern="[;:()\[\]{},.]">
111-
<token type="Punctuation"/>
111+
<token type="Punctuation" />
112112
</rule>
113113
</state>
114114
<state name="multiline-comments">
115115
<rule pattern="/\*">
116-
<token type="CommentMultiline"/>
117-
<push state="multiline-comments"/>
116+
<token type="CommentMultiline" />
117+
<push state="multiline-comments" />
118118
</rule>
119119
<rule pattern="\*/">
120-
<token type="CommentMultiline"/>
121-
<pop depth="1"/>
120+
<token type="CommentMultiline" />
121+
<pop depth="1" />
122122
</rule>
123123
<rule pattern="[^/*]+">
124-
<token type="CommentMultiline"/>
124+
<token type="CommentMultiline" />
125125
</rule>
126126
<rule pattern="[/*]">
127-
<token type="CommentMultiline"/>
127+
<token type="CommentMultiline" />
128128
</rule>
129129
</state>
130130
<state name="string">
131-
<rule pattern="[^&#39;]+">
132-
<token type="LiteralStringSingle"/>
131+
<rule pattern="[^']+">
132+
<token type="LiteralStringSingle" />
133133
</rule>
134-
<rule pattern="&#39;&#39;">
135-
<token type="LiteralStringSingle"/>
134+
<rule pattern="''">
135+
<token type="LiteralStringSingle" />
136136
</rule>
137-
<rule pattern="&#39;">
138-
<token type="LiteralStringSingle"/>
139-
<pop depth="1"/>
137+
<rule pattern="'">
138+
<token type="LiteralStringSingle" />
139+
<pop depth="1" />
140140
</rule>
141141
</state>
142142
<state name="quoted-ident">
143-
<rule pattern="[^&#34;]+">
144-
<token type="LiteralStringName"/>
143+
<rule pattern="[^&quot;]+">
144+
<token type="LiteralStringName" />
145145
</rule>
146-
<rule pattern="&#34;&#34;">
147-
<token type="LiteralStringName"/>
146+
<rule pattern="&quot;&quot;">
147+
<token type="LiteralStringName" />
148148
</rule>
149-
<rule pattern="&#34;">
150-
<token type="LiteralStringName"/>
151-
<pop depth="1"/>
149+
<rule pattern="&quot;">
150+
<token type="LiteralStringName" />
151+
<pop depth="1" />
152152
</rule>
153153
</state>
154154
</rules>

lexers/testdata/materialize.actual

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
-- basic statements
2+
3+
CREATE VIEW my_typed_source AS
4+
SELECT
5+
(data->>'field1')::boolean AS field_1,
6+
(data->>'field2')::int AS field_2,
7+
(data->>'field3')::float AS field_3
8+
FROM my_jsonb_source;
9+
10+
WITH
11+
regional_sales (region, total_sales) AS (
12+
SELECT region, sum(amount)
13+
FROM orders
14+
GROUP BY region
15+
),
16+
top_regions AS (
17+
SELECT region
18+
FROM regional_sales
19+
ORDER BY total_sales DESC
20+
LIMIT 5
21+
)
22+
SELECT region,
23+
product,
24+
SUM(quantity) AS product_units,
25+
SUM(amount) AS product_sales
26+
FROM orders
27+
WHERE region IN (SELECT region FROM top_regions)
28+
GROUP BY region, product;
29+
30+
-- sources
31+
32+
CREATE SOURCE webhook_with_basic_auth
33+
FROM WEBHOOK
34+
BODY FORMAT JSON
35+
CHECK (
36+
WITH (
37+
HEADERS,
38+
BODY AS request_body,
39+
SECRET basic_hook_auth AS validation_secret
40+
)
41+
-- The constant_time_eq validation function **does not support** fully
42+
-- qualified secret names. We recommend always aliasing the secret name
43+
-- for ease of use.
44+
constant_time_eq(headers->'authorization', validation_secret)
45+
);
46+
47+
CREATE SOURCE mz_source
48+
FROM MYSQL CONNECTION mysql_connection
49+
FOR TABLES (schema1.table_1 AS s1_table_1, schema2.table_1 AS s2_table_1);

0 commit comments

Comments
 (0)