CREATE TABLE request(
    chain_id VARCHAR(20) NOT NULL,
    network_id INTEGER NOT NULL,
    provider VARCHAR(40) NOT NULL,
    sequence INTEGER NOT NULL,
    created_at INTEGER NOT NULL,
    last_updated_at INTEGER NOT NULL,
    state VARCHAR(10) NOT NULL,
    request_block_number INTEGER NOT NULL,
    request_tx_hash VARCHAR(64) NOT NULL,
    user_random_number VARCHAR(64) NOT NULL,
    sender VARCHAR(40) NOT NULL,
    reveal_block_number INTEGER,
    reveal_tx_hash VARCHAR(64),
    provider_random_number VARCHAR(64),
    info TEXT,
    gas_used VARCHAR(100),
    gas_limit VARCHAR(100) NOT NULL,
    PRIMARY KEY (network_id, sequence, provider, request_tx_hash)
);

CREATE INDEX request__network_id__state__created_at ON request(network_id, state, created_at);
CREATE INDEX request__network_id__created_at ON request(network_id, created_at);
CREATE INDEX request__sender__network_id__state__created_at ON request(sender, network_id, state, created_at);
CREATE INDEX request__sender__network_id__created_at ON request(sender, network_id, created_at);
CREATE INDEX request__sender__state__created_at ON request(sender, state, created_at);
CREATE INDEX request__sender__created_at ON request(sender, created_at);
CREATE INDEX request__sequence__network_id__state__created_at ON request(sequence, network_id, state, created_at);
CREATE INDEX request__sequence__network_id__created_at ON request(sequence, network_id, created_at);
CREATE INDEX request__sequence__state__created_at ON request(sequence, state, created_at);
CREATE INDEX request__sequence__created_at ON request(sequence, created_at);
CREATE INDEX request__state__created_at ON request(state, created_at);
CREATE INDEX request__created_at ON request(created_at);

CREATE INDEX request__request_tx_hash ON request (request_tx_hash) WHERE request_tx_hash IS NOT NULL;
CREATE INDEX request__reveal_tx_hash ON request (reveal_tx_hash) WHERE reveal_tx_hash IS NOT NULL;
