diff --git a/crates/sui-indexer/migrations/2023-10-06-204335_tx_indices/down.sql b/crates/sui-indexer/migrations/2023-10-06-204335_tx_indices/down.sql new file mode 100644 index 0000000000000..ecf6733c69795 --- /dev/null +++ b/crates/sui-indexer/migrations/2023-10-06-204335_tx_indices/down.sql @@ -0,0 +1,5 @@ +DROP TABLE IF EXISTS tx_senders; +DROP TABLE IF EXISTS tx_recipients; +DROP TABLE IF EXISTS tx_input_objects; +DROP TABLE IF EXISTS tx_changed_objects; +DROP TABLE IF EXISTS tx_calls; diff --git a/crates/sui-indexer/migrations/2023-10-06-204335_tx_indices/up.sql b/crates/sui-indexer/migrations/2023-10-06-204335_tx_indices/up.sql new file mode 100644 index 0000000000000..ebd4d004528d0 --- /dev/null +++ b/crates/sui-indexer/migrations/2023-10-06-204335_tx_indices/up.sql @@ -0,0 +1,47 @@ +CREATE TABLE tx_senders ( + cp_sequence_number BIGINT NOT NULL, + tx_sequence_number BIGINT NOT NULL, + -- SuiAddress in bytes. + sender BYTEA NOT NULL, + PRIMARY KEY(sender, tx_sequence_number, cp_sequence_number) +); +CREATE INDEX tx_senders_tx_sequence_number_index ON tx_senders (tx_sequence_number ASC, cp_sequence_number ASC); + +CREATE TABLE tx_recipients ( + cp_sequence_number BIGINT NOT NULL, + tx_sequence_number BIGINT NOT NULL, + -- SuiAddress in bytes. + recipient BYTEA NOT NULL, + PRIMARY KEY(recipient, tx_sequence_number, cp_sequence_number) +); +CREATE INDEX tx_recipients_tx_sequence_number_index ON tx_recipients (tx_sequence_number ASC, cp_sequence_number ASC); + +CREATE TABLE tx_input_objects ( + cp_sequence_number BIGINT NOT NULL, + tx_sequence_number BIGINT NOT NULL, + -- Object ID in bytes. + object_id BYTEA NOT NULL, + PRIMARY KEY(object_id, tx_sequence_number, cp_sequence_number) +); + +CREATE TABLE tx_changed_objects ( + cp_sequence_number BIGINT NOT NULL, + tx_sequence_number BIGINT NOT NULL, + -- Object Id in bytes. + object_id BYTEA NOT NULL, + PRIMARY KEY(object_id, tx_sequence_number, cp_sequence_number) +); + +CREATE TABLE tx_calls ( + cp_sequence_number BIGINT NOT NULL, + tx_sequence_number BIGINT NOT NULL, + package BYTEA NOT NULL, + module TEXT NOT NULL, + func TEXT NOT NULL, + -- 1. Using Primary Key as a unique index. + -- 2. Diesel does not like tables with no primary key. + PRIMARY KEY(package, tx_sequence_number, cp_sequence_number) +); +CREATE INDEX tx_calls_module ON tx_calls (package, module, tx_sequence_number, cp_sequence_number); +CREATE INDEX tx_calls_func ON tx_calls (package, module, func, tx_sequence_number, cp_sequence_number); +CREATE INDEX tx_calls_tx_sequence_number ON tx_calls (tx_sequence_number, cp_sequence_number); diff --git a/crates/sui-indexer/migrations/2023-10-06-204335_tx_recipients/down.sql b/crates/sui-indexer/migrations/2023-10-06-204335_tx_recipients/down.sql deleted file mode 100644 index 921131a3d65ed..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204335_tx_recipients/down.sql +++ /dev/null @@ -1,2 +0,0 @@ --- This file should undo anything in `up.sql` -DROP TABLE IF EXISTS tx_recipients; diff --git a/crates/sui-indexer/migrations/2023-10-06-204335_tx_recipients/up.sql b/crates/sui-indexer/migrations/2023-10-06-204335_tx_recipients/up.sql deleted file mode 100644 index a338d3e6e0278..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204335_tx_recipients/up.sql +++ /dev/null @@ -1,8 +0,0 @@ --- Your SQL goes here -CREATE TABLE tx_recipients ( - tx_sequence_number BIGINT NOT NULL, - -- SuiAddress in bytes. - recipient BYTEA NOT NULL, - PRIMARY KEY(recipient, tx_sequence_number) -); -CREATE INDEX tx_recipients_tx_sequence_number_index ON tx_recipients (tx_sequence_number ASC); diff --git a/crates/sui-indexer/migrations/2023-10-06-204340_tx_senders/down.sql b/crates/sui-indexer/migrations/2023-10-06-204340_tx_senders/down.sql deleted file mode 100644 index 6ba56c061dad4..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204340_tx_senders/down.sql +++ /dev/null @@ -1,2 +0,0 @@ --- This file should undo anything in `up.sql` -DROP TABLE IF EXISTS tx_senders; diff --git a/crates/sui-indexer/migrations/2023-10-06-204340_tx_senders/up.sql b/crates/sui-indexer/migrations/2023-10-06-204340_tx_senders/up.sql deleted file mode 100644 index d47d57bc351ba..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204340_tx_senders/up.sql +++ /dev/null @@ -1,8 +0,0 @@ --- Your SQL goes here -CREATE TABLE tx_senders ( - tx_sequence_number BIGINT NOT NULL, - -- SuiAddress in bytes. - sender BYTEA NOT NULL, - PRIMARY KEY(sender, tx_sequence_number) -); -CREATE INDEX tx_senders_tx_sequence_number_index ON tx_senders (tx_sequence_number ASC); diff --git a/crates/sui-indexer/migrations/2023-10-06-204348_tx_input_objects/down.sql b/crates/sui-indexer/migrations/2023-10-06-204348_tx_input_objects/down.sql deleted file mode 100644 index 3baa45adc7e54..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204348_tx_input_objects/down.sql +++ /dev/null @@ -1,2 +0,0 @@ --- This file should undo anything in `up.sql` -DROP TABLE IF EXISTS tx_input_objects; diff --git a/crates/sui-indexer/migrations/2023-10-06-204348_tx_input_objects/up.sql b/crates/sui-indexer/migrations/2023-10-06-204348_tx_input_objects/up.sql deleted file mode 100644 index 5abab6afa1248..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204348_tx_input_objects/up.sql +++ /dev/null @@ -1,7 +0,0 @@ --- Your SQL goes here -CREATE TABLE tx_input_objects ( - tx_sequence_number BIGINT NOT NULL, - -- Object ID in bytes. - object_id BYTEA NOT NULL, - PRIMARY KEY(object_id, tx_sequence_number) -); diff --git a/crates/sui-indexer/migrations/2023-10-06-204352_tx_changed_objects/down.sql b/crates/sui-indexer/migrations/2023-10-06-204352_tx_changed_objects/down.sql deleted file mode 100644 index 5634bb220c03d..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204352_tx_changed_objects/down.sql +++ /dev/null @@ -1,2 +0,0 @@ --- This file should undo anything in `up.sql` -DROP TABLE IF EXISTS tx_changed_objects; diff --git a/crates/sui-indexer/migrations/2023-10-06-204352_tx_changed_objects/up.sql b/crates/sui-indexer/migrations/2023-10-06-204352_tx_changed_objects/up.sql deleted file mode 100644 index 33b3faffe1617..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204352_tx_changed_objects/up.sql +++ /dev/null @@ -1,7 +0,0 @@ --- Your SQL goes here -CREATE TABLE tx_changed_objects ( - tx_sequence_number BIGINT NOT NULL, - -- Object Id in bytes. - object_id BYTEA NOT NULL, - PRIMARY KEY(object_id, tx_sequence_number) -); diff --git a/crates/sui-indexer/migrations/2023-10-06-204400_tx_calls/down.sql b/crates/sui-indexer/migrations/2023-10-06-204400_tx_calls/down.sql deleted file mode 100644 index fd9e3de4187fa..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204400_tx_calls/down.sql +++ /dev/null @@ -1,2 +0,0 @@ --- This file should undo anything in `up.sql` -DROP TABLE IF EXISTS tx_calls; diff --git a/crates/sui-indexer/migrations/2023-10-06-204400_tx_calls/up.sql b/crates/sui-indexer/migrations/2023-10-06-204400_tx_calls/up.sql deleted file mode 100644 index e1204b09c9a06..0000000000000 --- a/crates/sui-indexer/migrations/2023-10-06-204400_tx_calls/up.sql +++ /dev/null @@ -1,14 +0,0 @@ --- Your SQL goes here -CREATE TABLE tx_calls ( - tx_sequence_number BIGINT NOT NULL, - package BYTEA NOT NULL, - module TEXT NOT NULL, - func TEXT NOT NULL, - -- 1. Using Primary Key as a unique index. - -- 2. Diesel does not like tables with no primary key. - PRIMARY KEY(package, tx_sequence_number) -); - -CREATE INDEX tx_calls_module ON tx_calls (package, module, tx_sequence_number); -CREATE INDEX tx_calls_func ON tx_calls (package, module, func, tx_sequence_number); -CREATE INDEX tx_calls_tx_sequence_number ON tx_calls (tx_sequence_number); diff --git a/crates/sui-indexer/src/models/tx_indices.rs b/crates/sui-indexer/src/models/tx_indices.rs index 9e30be163ad74..778820fc8e889 100644 --- a/crates/sui-indexer/src/models/tx_indices.rs +++ b/crates/sui-indexer/src/models/tx_indices.rs @@ -20,36 +20,41 @@ pub struct TxDigest { } #[derive(Queryable, Insertable, Debug, Clone, Default)] -#[diesel(table_name = tx_input_objects)] -pub struct StoredTxInputObject { +#[diesel(table_name = tx_senders)] +pub struct StoredTxSenders { + pub cp_sequence_number: i64, pub tx_sequence_number: i64, - pub object_id: Vec, + pub sender: Vec, } #[derive(Queryable, Insertable, Debug, Clone, Default)] -#[diesel(table_name = tx_changed_objects)] -pub struct StoredTxChangedObject { +#[diesel(table_name = tx_recipients)] +pub struct StoredTxRecipients { + pub cp_sequence_number: i64, pub tx_sequence_number: i64, - pub object_id: Vec, + pub recipient: Vec, } #[derive(Queryable, Insertable, Debug, Clone, Default)] -#[diesel(table_name = tx_senders)] -pub struct StoredTxSenders { +#[diesel(table_name = tx_input_objects)] +pub struct StoredTxInputObject { + pub cp_sequence_number: i64, pub tx_sequence_number: i64, - pub sender: Vec, + pub object_id: Vec, } #[derive(Queryable, Insertable, Debug, Clone, Default)] -#[diesel(table_name = tx_recipients)] -pub struct StoredTxRecipients { +#[diesel(table_name = tx_changed_objects)] +pub struct StoredTxChangedObject { + pub cp_sequence_number: i64, pub tx_sequence_number: i64, - pub recipient: Vec, + pub object_id: Vec, } #[derive(Queryable, Insertable, Debug, Clone, Default)] #[diesel(table_name = tx_calls)] pub struct StoredTxCalls { + pub cp_sequence_number: i64, pub tx_sequence_number: i64, pub package: Vec, pub module: String, @@ -68,10 +73,12 @@ impl TxIndex { Vec, ) { let tx_sequence_number = self.tx_sequence_number as i64; + let cp_sequence_number = self.checkpoint_sequence_number as i64; let tx_senders = self .senders .iter() .map(|s| StoredTxSenders { + cp_sequence_number, tx_sequence_number, sender: s.to_vec(), }) @@ -80,6 +87,7 @@ impl TxIndex { .recipients .iter() .map(|s| StoredTxRecipients { + cp_sequence_number, tx_sequence_number, recipient: s.to_vec(), }) @@ -88,6 +96,7 @@ impl TxIndex { .input_objects .iter() .map(|o| StoredTxInputObject { + cp_sequence_number, tx_sequence_number, object_id: bcs::to_bytes(&o).unwrap(), }) @@ -96,6 +105,7 @@ impl TxIndex { .changed_objects .iter() .map(|o| StoredTxChangedObject { + cp_sequence_number, tx_sequence_number, object_id: bcs::to_bytes(&o).unwrap(), }) @@ -104,6 +114,7 @@ impl TxIndex { .move_calls .iter() .map(|(p, m, f)| StoredTxCalls { + cp_sequence_number, tx_sequence_number, package: p.to_vec(), module: m.to_string(), diff --git a/crates/sui-indexer/src/schema.rs b/crates/sui-indexer/src/schema.rs index eea28c74d88d7..e76bf2901ee46 100644 --- a/crates/sui-indexer/src/schema.rs +++ b/crates/sui-indexer/src/schema.rs @@ -190,7 +190,8 @@ diesel::table! { } diesel::table! { - tx_calls (package, tx_sequence_number) { + tx_calls (package, tx_sequence_number, cp_sequence_number) { + cp_sequence_number -> Int8, tx_sequence_number -> Int8, package -> Bytea, module -> Text, @@ -199,28 +200,32 @@ diesel::table! { } diesel::table! { - tx_changed_objects (object_id, tx_sequence_number) { + tx_changed_objects (object_id, tx_sequence_number, cp_sequence_number) { + cp_sequence_number -> Int8, tx_sequence_number -> Int8, object_id -> Bytea, } } diesel::table! { - tx_input_objects (object_id, tx_sequence_number) { + tx_input_objects (object_id, tx_sequence_number, cp_sequence_number) { + cp_sequence_number -> Int8, tx_sequence_number -> Int8, object_id -> Bytea, } } diesel::table! { - tx_recipients (recipient, tx_sequence_number) { + tx_recipients (recipient, tx_sequence_number, cp_sequence_number) { + cp_sequence_number -> Int8, tx_sequence_number -> Int8, recipient -> Bytea, } } diesel::table! { - tx_senders (sender, tx_sequence_number) { + tx_senders (sender, tx_sequence_number, cp_sequence_number) { + cp_sequence_number -> Int8, tx_sequence_number -> Int8, sender -> Bytea, }