forked from cerc-io/ipld-eth-server
Fix SQL query to check for empty storage value.
This commit is contained in:
@@ -1,18 +1,26 @@
|
||||
-- +goose Up
|
||||
|
||||
|
||||
-- +goose StatementBegin
|
||||
-- returns if a storage node at the provided path was removed in the range >= the provided height and <= the provided block hash
|
||||
CREATE OR REPLACE FUNCTION was_state_leaf_removed(state_leaf_key BYTEA, block_num BIGINT) RETURNS BOOLEAN
|
||||
-- returns if a state leaf node was removed within the provided block number
|
||||
CREATE OR REPLACE FUNCTION was_state_leaf_removed(key character varying, hash character varying) RETURNS boolean
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
SELECT exists(SELECT 1
|
||||
FROM eth.state_cids
|
||||
INNER JOIN eth.header_cids ON (state_cids.header_id = header_cids.id)
|
||||
WHERE state_leaf_key = state_leaf_key
|
||||
AND block_number <= block_num
|
||||
AND state_cids.node_type = 3
|
||||
LIMIT 1);
|
||||
$$ LANGUAGE SQL;
|
||||
DECLARE
|
||||
rec RECORD;
|
||||
BEGIN
|
||||
FOR rec IN SELECT state_cids.node_type
|
||||
FROM eth.state_cids
|
||||
INNER JOIN eth.header_cids ON (state_cids.header_id = header_cids.id)
|
||||
WHERE state_leaf_key = key
|
||||
AND block_number <= (SELECT block_number FROM eth.header_cids WHERE block_hash = hash)
|
||||
ORDER BY state_cids.id DESC LIMIT 1
|
||||
LOOP
|
||||
IF rec.node_type = 3 THEN
|
||||
RETURN TRUE;
|
||||
END IF;
|
||||
END LOOP;
|
||||
RETURN FALSE;
|
||||
END;
|
||||
$$;
|
||||
-- +goose StatementEnd
|
||||
|
||||
-- +goose StatementBegin
|
||||
|
||||
Reference in New Issue
Block a user