mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-27 06:48:21 -05:00
Co-authored-by: vincent <419436363@qq.com> Co-authored-by: Péter Garamvölgyi <peter@scroll.io> Co-authored-by: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com>
73 lines
2.0 KiB
PL/PgSQL
73 lines
2.0 KiB
PL/PgSQL
-- +goose Up
|
|
-- +goose StatementBegin
|
|
create table cross_message
|
|
(
|
|
id BIGSERIAL PRIMARY KEY,
|
|
msg_hash VARCHAR NOT NULL DEFAULT '',
|
|
height BIGINT NOT NULL,
|
|
sender VARCHAR NOT NULL,
|
|
target VARCHAR NOT NULL,
|
|
amount VARCHAR NOT NULL,
|
|
layer1_hash VARCHAR NOT NULL DEFAULT '',
|
|
layer2_hash VARCHAR NOT NULL DEFAULT '',
|
|
layer1_token VARCHAR NOT NULL DEFAULT '',
|
|
layer2_token VARCHAR NOT NULL DEFAULT '',
|
|
token_id BIGINT NOT NULL DEFAULT 0,
|
|
asset SMALLINT NOT NULL,
|
|
msg_type SMALLINT NOT NULL,
|
|
is_deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created_at TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
deleted_at TIMESTAMP(0) DEFAULT NULL
|
|
);
|
|
|
|
comment
|
|
on column cross_message.asset is 'ETH, ERC20, ERC721, ERC1155';
|
|
|
|
comment
|
|
on column cross_message.msg_type is 'unknown, l1msg, l2msg';
|
|
|
|
comment
|
|
on column cross_message.is_deleted is 'NotDeleted false, Deleted true';
|
|
|
|
CREATE INDEX valid_l1_msg_index ON cross_message (layer1_hash, is_deleted);
|
|
|
|
CREATE INDEX valid_l2_msg_index ON cross_message (layer2_hash, is_deleted);
|
|
|
|
CREATE INDEX valid_height_index ON cross_message (height, msg_type, is_deleted);
|
|
|
|
CREATE OR REPLACE FUNCTION update_timestamp()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
|
|
CREATE TRIGGER update_timestamp BEFORE UPDATE
|
|
ON cross_message FOR EACH ROW EXECUTE PROCEDURE
|
|
update_timestamp();
|
|
|
|
CREATE OR REPLACE FUNCTION delete_at_trigger()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
IF NEW.is_deleted AND OLD.is_deleted != NEW.is_deleted THEN
|
|
UPDATE cross_message SET delete_at = NOW() WHERE id = NEW.id;
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER delete_at_trigger
|
|
AFTER UPDATE ON cross_message
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION delete_at_trigger();
|
|
|
|
|
|
-- +goose StatementEnd
|
|
|
|
-- +goose Down
|
|
-- +goose StatementBegin
|
|
drop table if exists cross_message;
|
|
-- +goose StatementEnd
|