/
0007_reverse_eth_logs_table.go
71 lines (57 loc) · 3.05 KB
/
0007_reverse_eth_logs_table.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package migrations
import (
"gorm.io/gorm"
)
const up7 = `
DELETE FROM eth_logs;
ALTER TABLE log_broadcasts
DROP COLUMN "eth_log_id",
DROP COLUMN "consumed";
ALTER TABLE log_broadcasts RENAME TO log_consumptions;
ALTER TABLE log_consumptions RENAME CONSTRAINT chk_log_broadcasts_exactly_one_job_id TO chk_log_consumptions_exactly_one_job_id;
ALTER TABLE log_consumptions RENAME CONSTRAINT log_broadcasts_job_id_fkey TO log_consumptions_job_id_fkey;
CREATE UNIQUE INDEX log_consumptions_unique_v1_idx ON public.log_consumptions USING btree (job_id, block_hash, log_index);
CREATE UNIQUE INDEX log_consumptions_unique_v2_idx ON public.log_consumptions USING btree (job_id_v2, block_hash, log_index);
DROP TABLE "eth_logs";
`
const down7 = `
CREATE TABLE "eth_logs" (
"id" BIGSERIAL PRIMARY KEY,
"block_hash" bytea NOT NULL,
"block_number" bigint NOT NULL,
"index" bigint NOT NULL,
"address" bytea NOT NULL,
"topics" bytea[] NOT NULL,
"data" bytea NOT NULL,
"order_received" serial NOT NULL,
"created_at" timestamp without time zone NOT NULL
);
CREATE UNIQUE INDEX idx_eth_logs_unique ON eth_logs (block_hash, index) INCLUDE (id);
CREATE INDEX IF NOT EXISTS idx_eth_logs_block_number ON eth_logs (block_number);
CREATE INDEX IF NOT EXISTS idx_eth_logs_address_block_number ON eth_logs (address, block_number);
ALTER TABLE log_consumptions RENAME CONSTRAINT chk_log_consumptions_exactly_one_job_id TO chk_log_broadcasts_exactly_one_job_id;
ALTER TABLE log_consumptions RENAME CONSTRAINT log_consumptions_job_id_fkey TO log_broadcasts_job_id_fkey;
ALTER TABLE log_consumptions RENAME TO log_broadcasts;
ALTER TABLE log_broadcasts
ADD COLUMN "consumed" BOOL NOT NULL DEFAULT FALSE,
ADD COLUMN "eth_log_id" BIGINT, -- NOTE: This ought to be not null in the final application of this reversal
ADD CONSTRAINT log_broadcasts_eth_log_id_fkey FOREIGN KEY (eth_log_id) REFERENCES eth_logs (id) ON DELETE CASCADE DEFERRABLE INITIALLY IMMEDIATE;
CREATE INDEX idx_log_broadcasts_unconsumed_eth_log_id ON log_broadcasts (eth_log_id) WHERE consumed = false;
CREATE INDEX idx_log_broadcasts_unconsumed_job_id ON log_broadcasts (job_id) WHERE consumed = false AND job_id IS NOT NULL;
CREATE INDEX idx_log_broadcasts_unconsumed_job_id_v2 ON log_broadcasts (job_id_v2) WHERE consumed = false AND job_id_v2 IS NOT NULL;
DROP INDEX IF EXISTS log_consumptions_unique_v1_idx;
DROP INDEX IF EXISTS log_consumptions_unique_v2_idx;
CREATE UNIQUE INDEX log_consumptions_unique_v1_idx ON log_broadcasts(job_id, block_hash, log_index) INCLUDE (consumed) WHERE job_id IS NOT NULL;
CREATE UNIQUE INDEX log_consumptions_unique_v2_idx ON log_broadcasts(job_id_v2, block_hash, log_index) INCLUDE (consumed) WHERE job_id_v2 IS NOT NULL;
`
func init() {
Migrations = append(Migrations, &Migration{
ID: "0007_reverse_eth_logs_table",
Migrate: func(db *gorm.DB) error {
return db.Exec(up7).Error
},
Rollback: func(db *gorm.DB) error {
return db.Exec(down7).Error
},
})
}