Skip to content

Commit bd5817f

Browse files
committed
store: Restrict the selectable columns to actual attributes
1 parent 35bd6fe commit bd5817f

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

store/postgres/src/sql/parser_tests.yaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
ok: >
1010
select to_jsonb(sub.*) as data from (
1111
SELECT symbol, address FROM (
12-
SELECT * FROM "sgd0815"."token" WHERE block_range @> 2147483647) AS token
12+
SELECT id, address, symbol, name, decimals FROM "sgd0815"."token" WHERE block_range @> 2147483647) AS token
1313
WHERE decimals > 10 ) as sub
1414
- sql: >
1515
with tokens as (
@@ -44,11 +44,13 @@
4444
AS t (address, symbol, name, decimals))
4545
SELECT date, t.symbol, SUM(amount) / pow(10, t.decimals) AS amount
4646
FROM (SELECT date(to_timestamp(block_timestamp) AT TIME ZONE 'utc') AS date, token, amount
47-
FROM (SELECT * FROM "sgd0815"."swap" WHERE block$ <= 2147483647) AS sm,
47+
FROM (SELECT id, timestamp, pool, token_0, token_1, sender, recipient, origin, amount_0, amount_1, amount_usd, sqrt_price_x96, tick, log_index
48+
FROM "sgd0815"."swap" WHERE block$ <= 2147483647) AS sm,
4849
UNNEST(sm.amounts_in, sm.tokens_in) AS smi (amount, token)
4950
UNION ALL
5051
SELECT date(to_timestamp(block_timestamp) AT TIME ZONE 'utc') AS date, token, amount
51-
FROM (SELECT * FROM "sgd0815"."swap" WHERE block$ <= 2147483647) AS sm,
52+
FROM (SELECT id, timestamp, pool, token_0, token_1, sender, recipient, origin, amount_0, amount_1, amount_usd, sqrt_price_x96, tick, log_index
53+
FROM "sgd0815"."swap" WHERE block$ <= 2147483647) AS sm,
5254
UNNEST(sm.amounts_out, sm.tokens_out) AS smo (amount, token)) AS tp
5355
JOIN tokens AS t ON t.address = tp.token
5456
GROUP BY tp.date, t.symbol, t.decimals

store/postgres/src/sql/validation.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,21 @@ impl VisitorMut for Validator<'_> {
116116
return ControlFlow::Continue(());
117117
};
118118

119-
// Change 'from table [as alias]' to 'from (select * from table) as alias'
119+
// Change 'from table [as alias]' to 'from (select {columns} from table) as alias'
120+
let columns = table
121+
.columns
122+
.iter()
123+
.map(|column| column.name.as_str())
124+
.collect::<Vec<_>>()
125+
.join(", ");
120126
let query = if table.immutable {
121127
format!(
122-
"select * from {} where {} <= {}",
128+
"select {columns} from {} where {} <= {}",
123129
table.qualified_name, BLOCK_COLUMN, self.block
124130
)
125131
} else {
126132
format!(
127-
"select * from {} where {} @> {}",
133+
"select {columns} from {} where {} @> {}",
128134
table.qualified_name, BLOCK_RANGE_COLUMN, self.block
129135
)
130136
};

0 commit comments

Comments
 (0)