|
7 | 7 |
|
8 | 8 | - sql: select symbol, address from token where decimals > 10
|
9 | 9 | ok: >
|
10 |
| - SELECT symbol, address FROM ( |
11 |
| - SELECT id, address, symbol, name, decimals FROM "sgd0815"."token" WHERE block_range @> 2147483647) AS token |
12 |
| - WHERE decimals > 10 |
| 10 | + select symbol, address from ( |
| 11 | + select id, address, symbol, name, decimals from "sgd0815"."token" where block_range @> 2147483647) as token |
| 12 | + where decimals > 10 |
13 | 13 | - sql: >
|
14 | 14 | with tokens as (
|
15 | 15 | select * from (values
|
16 |
| - ('0x0000000000000000000000000000000000000000','ETH','Ethereum',18), |
17 |
| - ('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48','USDC','USD Coin',6) |
| 16 | + ('0x0000000000000000000000000000000000000000','eth','ethereum',18), |
| 17 | + ('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48','usdc','usd coin',6) |
18 | 18 | ) as t(address,symbol,name,decimals))
|
19 |
| - select date, t.symbol, SUM(amount)/pow(10,t.decimals) as amount |
| 19 | + select date, t.symbol, sum(amount)/pow(10,t.decimals) as amount |
20 | 20 | from (select
|
21 | 21 | date(to_timestamp(block_timestamp) at time zone 'utc') as date,
|
22 | 22 | token, amount
|
|
33 | 33 | group by tp.date, t.symbol, t.decimals
|
34 | 34 | order by tp.date desc, amount desc
|
35 | 35 | ok: >
|
36 |
| - WITH tokens AS ( |
37 |
| - SELECT * FROM ( |
38 |
| - VALUES ('0x0000000000000000000000000000000000000000', 'ETH', 'Ethereum', 18), |
39 |
| - ('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', 'USDC', 'USD Coin', 6)) |
40 |
| - AS t (address, symbol, name, decimals)) |
41 |
| - SELECT date, t.symbol, SUM(amount) / pow(10, t.decimals) AS amount |
42 |
| - FROM (SELECT date(to_timestamp(block_timestamp) AT TIME ZONE 'utc') AS date, token, amount |
43 |
| - FROM (SELECT id, timestamp, pool, token_0, token_1, sender, recipient, origin, amount_0, amount_1, amount_usd, sqrt_price_x96, tick, log_index |
44 |
| - FROM "sgd0815"."swap" WHERE block$ <= 2147483647) AS sm, |
45 |
| - UNNEST(sm.amounts_in, sm.tokens_in) AS smi (amount, token) |
46 |
| - UNION ALL |
47 |
| - SELECT date(to_timestamp(block_timestamp) AT TIME ZONE 'utc') AS date, token, amount |
48 |
| - FROM (SELECT id, timestamp, pool, token_0, token_1, sender, recipient, origin, amount_0, amount_1, amount_usd, sqrt_price_x96, tick, log_index |
49 |
| - FROM "sgd0815"."swap" WHERE block$ <= 2147483647) AS sm, |
50 |
| - UNNEST(sm.amounts_out, sm.tokens_out) AS smo (amount, token)) AS tp |
51 |
| - JOIN tokens AS t ON t.address = tp.token |
52 |
| - GROUP BY tp.date, t.symbol, t.decimals |
53 |
| - ORDER BY tp.date DESC, amount DESC |
| 36 | + with tokens as ( |
| 37 | + select * from ( |
| 38 | + values ('0x0000000000000000000000000000000000000000', 'eth', 'ethereum', 18), |
| 39 | + ('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', 'usdc', 'usd coin', 6)) |
| 40 | + as t (address, symbol, name, decimals)) |
| 41 | + select date, t.symbol, sum(amount) / pow(10, t.decimals) as amount |
| 42 | + from (select date(to_timestamp(block_timestamp) at time zone 'utc') as date, token, amount |
| 43 | + from (select id, timestamp, pool, token_0, token_1, sender, recipient, origin, amount_0, amount_1, amount_usd, sqrt_price_x96, tick, log_index |
| 44 | + from "sgd0815"."swap" where block$ <= 2147483647) as sm, |
| 45 | + unnest(sm.amounts_in, sm.tokens_in) as smi (amount, token) |
| 46 | + union all |
| 47 | + select date(to_timestamp(block_timestamp) at time zone 'utc') as date, token, amount |
| 48 | + from (select id, timestamp, pool, token_0, token_1, sender, recipient, origin, amount_0, amount_1, amount_usd, sqrt_price_x96, tick, log_index |
| 49 | + from "sgd0815"."swap" where block$ <= 2147483647) as sm, |
| 50 | + unnest(sm.amounts_out, sm.tokens_out) as smo (amount, token)) as tp |
| 51 | + join tokens as t on t.address = tp.token |
| 52 | + group by tp.date, t.symbol, t.decimals |
| 53 | + order by tp.date desc, amount desc |
| 54 | +- name: pg_sleep forbidden |
| 55 | + sql: select pool from swap where '' = (select cast(pg_sleep(5) as text)) |
| 56 | + err: Unknown or unsupported function pg_sleep |
| 57 | +- name: table functions forbidden |
| 58 | + sql: > |
| 59 | + select vid, k.sname |
| 60 | + from swap, |
| 61 | + lateral(select current_schemas as sname from current_schemas(true)) as k |
| 62 | + err: Unknown or unsupported function current_schemas |
| 63 | +- name: function without parens forbidden |
| 64 | + sql: select input_token from swap where '' = (select user) |
| 65 | + err: Unknown or unsupported function user |
| 66 | +- name: aggregation allowed |
| 67 | + sql: > |
| 68 | + select token0, sum(amount0) as total_amount |
| 69 | + from swap |
| 70 | + group by token0 |
| 71 | + having sum(amount0) > 1000 |
| 72 | + ok: > |
| 73 | + SELECT token0, sum(amount0) AS total_amount |
| 74 | + FROM (SELECT id, timestamp, pool, token_0, token_1, sender, recipient, origin, amount_0, amount_1, amount_usd, sqrt_price_x96, tick, log_index |
| 75 | + FROM "sgd0815"."swap" WHERE block$ <= 2147483647) AS swap |
| 76 | + GROUP BY token0 |
| 77 | + HAVING sum(amount0) > 1000 |
| 78 | +- name: arbitrary function forbidden |
| 79 | + sql: > |
| 80 | + select token0 from swap |
| 81 | + where '' = (select cast(do_strange_math(amount_in) as text)) |
| 82 | + err: Unknown or unsupported function do_strange_math |
| 83 | +- name: create table forbidden |
| 84 | + sql: create table foo (id int primary key); |
| 85 | + err: Only SELECT query is supported |
| 86 | +- name: insert forbidden |
| 87 | + sql: insert into foo values (1); |
| 88 | + err: Only SELECT query is supported |
| 89 | +- name: CTE allowed |
| 90 | + sql: with foo as (select 1) select * from foo |
| 91 | + ok: with foo as (select 1) select * from foo |
| 92 | +- name: CTE with insert forbidden |
| 93 | + sql: with foo as (insert into target values(1)) select * from bar |
| 94 | + err: Only SELECT query is supported |
| 95 | +- name: only single statement |
| 96 | + sql: select 1; select 2; |
| 97 | + err: Multi statement is not supported |
| 98 | +- name: unknown tables forbidden |
| 99 | + sql: select * from unknown_table |
| 100 | + err: Unknown table unknown_table |
0 commit comments