From dd45feb0d00e38801c8b2cd8bdce79f63b01e80b Mon Sep 17 00:00:00 2001 From: Tomasz Pastusiak Date: Fri, 24 Jan 2025 10:38:09 +0100 Subject: [PATCH 1/6] [indexer]: Create script to autogenerate indexer schema --- crates/iota-indexer/src/schema.patch | 32 +- crates/iota-indexer/src/schema.rs | 465 +++++ crates/iota-indexer/src/schema/mod.rs | 33 - crates/iota-indexer/src/schema/pg.rs | 2568 ------------------------- scripts/generate_indexer_schema.sh | 82 + 5 files changed, 577 insertions(+), 2603 deletions(-) create mode 100644 crates/iota-indexer/src/schema.rs delete mode 100644 crates/iota-indexer/src/schema/mod.rs delete mode 100644 crates/iota-indexer/src/schema/pg.rs create mode 100755 scripts/generate_indexer_schema.sh diff --git a/crates/iota-indexer/src/schema.patch b/crates/iota-indexer/src/schema.patch index 4eca2333f51..20fceddcae5 100644 --- a/crates/iota-indexer/src/schema.patch +++ b/crates/iota-indexer/src/schema.patch @@ -1,8 +1,36 @@ diff --git a/crates/iota-indexer/src/schema.rs b/crates/iota-indexer/src/schema.rs --- a/crates/iota-indexer/src/schema.rs +++ b/crates/iota-indexer/src/schema.rs -@@ -1 +1,4 @@ +@@ -1,4 +1,7 @@ +-// @generated automatically by Diesel CLI. +// Copyright (c) Mysten Labs, Inc. +// Modifications Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 - // @generated automatically by Diesel CLI. ++// @generated automatically by scripts/generate_indexer_schema.sh + + diesel::table! { + active_addresses (address) { +@@ -414,7 +417,10 @@ diesel::table! { + } + } + +-diesel::allow_tables_to_appear_in_same_query!( ++#[macro_export] ++macro_rules! for_all_tables { ++ ($action:path) => { ++ $action!( + active_addresses, + address_metrics, + addresses, +@@ -451,5 +457,9 @@ diesel::allow_tables_to_appear_in_same_query!( + tx_input_objects, + tx_kinds, + tx_recipients, +- tx_senders, +-); ++ tx_senders ++ ); ++ }; ++} ++pub use for_all_tables; ++for_all_tables!(diesel::allow_tables_to_appear_in_same_query); diff --git a/crates/iota-indexer/src/schema.rs b/crates/iota-indexer/src/schema.rs new file mode 100644 index 00000000000..c28f3724b7e --- /dev/null +++ b/crates/iota-indexer/src/schema.rs @@ -0,0 +1,465 @@ +// Copyright (c) Mysten Labs, Inc. +// Modifications Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 +// @generated automatically by scripts/generate_indexer_schema.sh + +diesel::table! { + active_addresses (address) { + address -> Bytea, + first_appearance_tx -> Int8, + first_appearance_time -> Int8, + last_appearance_tx -> Int8, + last_appearance_time -> Int8, + } +} + +diesel::table! { + address_metrics (checkpoint) { + checkpoint -> Int8, + epoch -> Int8, + timestamp_ms -> Int8, + cumulative_addresses -> Int8, + cumulative_active_addresses -> Int8, + daily_active_addresses -> Int8, + } +} + +diesel::table! { + addresses (address) { + address -> Bytea, + first_appearance_tx -> Int8, + first_appearance_time -> Int8, + last_appearance_tx -> Int8, + last_appearance_time -> Int8, + } +} + +diesel::table! { + chain_identifier (checkpoint_digest) { + checkpoint_digest -> Bytea, + } +} + +diesel::table! { + checkpoints (sequence_number) { + sequence_number -> Int8, + checkpoint_digest -> Bytea, + epoch -> Int8, + network_total_transactions -> Int8, + previous_checkpoint_digest -> Nullable, + end_of_epoch -> Bool, + tx_digests -> Array>, + timestamp_ms -> Int8, + total_gas_cost -> Int8, + computation_cost -> Int8, + storage_cost -> Int8, + storage_rebate -> Int8, + non_refundable_storage_fee -> Int8, + checkpoint_commitments -> Bytea, + validator_signature -> Bytea, + end_of_epoch_data -> Nullable, + min_tx_sequence_number -> Nullable, + max_tx_sequence_number -> Nullable, + } +} + +diesel::table! { + display (object_type) { + object_type -> Text, + id -> Bytea, + version -> Int2, + bcs -> Bytea, + } +} + +diesel::table! { + epoch_peak_tps (epoch) { + epoch -> Int8, + peak_tps -> Float8, + peak_tps_30d -> Float8, + } +} + +diesel::table! { + epochs (epoch) { + epoch -> Int8, + first_checkpoint_id -> Int8, + epoch_start_timestamp -> Int8, + reference_gas_price -> Int8, + protocol_version -> Int8, + total_stake -> Int8, + storage_fund_balance -> Int8, + system_state -> Bytea, + epoch_total_transactions -> Nullable, + last_checkpoint_id -> Nullable, + epoch_end_timestamp -> Nullable, + storage_charge -> Nullable, + storage_rebate -> Nullable, + total_gas_fees -> Nullable, + total_stake_rewards_distributed -> Nullable, + epoch_commitments -> Nullable, + burnt_tokens_amount -> Nullable, + minted_tokens_amount -> Nullable, + } +} + +diesel::table! { + event_emit_module (package, module, tx_sequence_number, event_sequence_number) { + package -> Bytea, + module -> Text, + tx_sequence_number -> Int8, + event_sequence_number -> Int8, + sender -> Bytea, + } +} + +diesel::table! { + event_emit_package (package, tx_sequence_number, event_sequence_number) { + package -> Bytea, + tx_sequence_number -> Int8, + event_sequence_number -> Int8, + sender -> Bytea, + } +} + +diesel::table! { + event_senders (sender, tx_sequence_number, event_sequence_number) { + sender -> Bytea, + tx_sequence_number -> Int8, + event_sequence_number -> Int8, + } +} + +diesel::table! { + event_struct_instantiation (package, module, type_instantiation, tx_sequence_number, event_sequence_number) { + package -> Bytea, + module -> Text, + type_instantiation -> Text, + tx_sequence_number -> Int8, + event_sequence_number -> Int8, + sender -> Bytea, + } +} + +diesel::table! { + event_struct_module (package, module, tx_sequence_number, event_sequence_number) { + package -> Bytea, + module -> Text, + tx_sequence_number -> Int8, + event_sequence_number -> Int8, + sender -> Bytea, + } +} + +diesel::table! { + event_struct_name (package, module, type_name, tx_sequence_number, event_sequence_number) { + package -> Bytea, + module -> Text, + type_name -> Text, + tx_sequence_number -> Int8, + event_sequence_number -> Int8, + sender -> Bytea, + } +} + +diesel::table! { + event_struct_package (package, tx_sequence_number, event_sequence_number) { + package -> Bytea, + tx_sequence_number -> Int8, + event_sequence_number -> Int8, + sender -> Bytea, + } +} + +diesel::table! { + events (tx_sequence_number, event_sequence_number) { + tx_sequence_number -> Int8, + event_sequence_number -> Int8, + transaction_digest -> Bytea, + senders -> Array>, + package -> Bytea, + module -> Text, + event_type -> Text, + timestamp_ms -> Int8, + bcs -> Bytea, + } +} + +diesel::table! { + feature_flags (protocol_version, flag_name) { + protocol_version -> Int8, + flag_name -> Text, + flag_value -> Bool, + } +} + +diesel::table! { + move_call_metrics (id) { + id -> Int8, + epoch -> Int8, + day -> Int8, + move_package -> Text, + move_module -> Text, + move_function -> Text, + count -> Int8, + } +} + +diesel::table! { + move_calls (transaction_sequence_number, move_package, move_module, move_function) { + transaction_sequence_number -> Int8, + checkpoint_sequence_number -> Int8, + epoch -> Int8, + move_package -> Bytea, + move_module -> Text, + move_function -> Text, + } +} + +diesel::table! { + objects (object_id) { + object_id -> Bytea, + object_version -> Int8, + object_digest -> Bytea, + checkpoint_sequence_number -> Int8, + owner_type -> Int2, + owner_id -> Nullable, + object_type -> Nullable, + object_type_package -> Nullable, + object_type_module -> Nullable, + object_type_name -> Nullable, + serialized_object -> Bytea, + coin_type -> Nullable, + coin_balance -> Nullable, + df_kind -> Nullable, + df_name -> Nullable, + df_object_type -> Nullable, + df_object_id -> Nullable, + } +} + +diesel::table! { + objects_history (checkpoint_sequence_number, object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + object_status -> Int2, + object_digest -> Nullable, + checkpoint_sequence_number -> Int8, + owner_type -> Nullable, + owner_id -> Nullable, + object_type -> Nullable, + object_type_package -> Nullable, + object_type_module -> Nullable, + object_type_name -> Nullable, + serialized_object -> Nullable, + coin_type -> Nullable, + coin_balance -> Nullable, + df_kind -> Nullable, + df_name -> Nullable, + df_object_type -> Nullable, + df_object_id -> Nullable, + } +} + +diesel::table! { + objects_snapshot (object_id) { + object_id -> Bytea, + object_version -> Int8, + object_status -> Int2, + object_digest -> Nullable, + checkpoint_sequence_number -> Int8, + owner_type -> Nullable, + owner_id -> Nullable, + object_type -> Nullable, + object_type_package -> Nullable, + object_type_module -> Nullable, + object_type_name -> Nullable, + serialized_object -> Nullable, + coin_type -> Nullable, + coin_balance -> Nullable, + df_kind -> Nullable, + df_name -> Nullable, + df_object_type -> Nullable, + df_object_id -> Nullable, + } +} + +diesel::table! { + objects_version (object_id, object_version) { + object_id -> Bytea, + object_version -> Int8, + cp_sequence_number -> Int8, + } +} + +diesel::table! { + packages (package_id, original_id, package_version) { + package_id -> Bytea, + original_id -> Bytea, + package_version -> Int8, + move_package -> Bytea, + checkpoint_sequence_number -> Int8, + } +} + +diesel::table! { + protocol_configs (protocol_version, config_name) { + protocol_version -> Int8, + config_name -> Text, + config_value -> Nullable, + } +} + +diesel::table! { + pruner_cp_watermark (checkpoint_sequence_number) { + checkpoint_sequence_number -> Int8, + min_tx_sequence_number -> Int8, + max_tx_sequence_number -> Int8, + } +} + +diesel::table! { + transactions (tx_sequence_number) { + tx_sequence_number -> Int8, + transaction_digest -> Bytea, + raw_transaction -> Bytea, + raw_effects -> Bytea, + checkpoint_sequence_number -> Int8, + timestamp_ms -> Int8, + object_changes -> Array>, + balance_changes -> Array>, + events -> Array>, + transaction_kind -> Int2, + success_command_count -> Int2, + } +} + +diesel::table! { + tx_calls_fun (package, module, func, tx_sequence_number) { + tx_sequence_number -> Int8, + package -> Bytea, + module -> Text, + func -> Text, + sender -> Bytea, + } +} + +diesel::table! { + tx_calls_mod (package, module, tx_sequence_number) { + tx_sequence_number -> Int8, + package -> Bytea, + module -> Text, + sender -> Bytea, + } +} + +diesel::table! { + tx_calls_pkg (package, tx_sequence_number) { + tx_sequence_number -> Int8, + package -> Bytea, + sender -> Bytea, + } +} + +diesel::table! { + tx_changed_objects (object_id, tx_sequence_number) { + tx_sequence_number -> Int8, + object_id -> Bytea, + sender -> Bytea, + } +} + +diesel::table! { + tx_count_metrics (checkpoint_sequence_number) { + checkpoint_sequence_number -> Int8, + epoch -> Int8, + timestamp_ms -> Int8, + total_transaction_blocks -> Int8, + total_successful_transaction_blocks -> Int8, + total_successful_transactions -> Int8, + } +} + +diesel::table! { + tx_digests (tx_digest) { + tx_digest -> Bytea, + tx_sequence_number -> Int8, + } +} + +diesel::table! { + tx_input_objects (object_id, tx_sequence_number) { + tx_sequence_number -> Int8, + object_id -> Bytea, + sender -> Bytea, + } +} + +diesel::table! { + tx_kinds (tx_kind, tx_sequence_number) { + tx_sequence_number -> Int8, + tx_kind -> Int2, + } +} + +diesel::table! { + tx_recipients (recipient, tx_sequence_number) { + tx_sequence_number -> Int8, + recipient -> Bytea, + sender -> Bytea, + } +} + +diesel::table! { + tx_senders (sender, tx_sequence_number) { + tx_sequence_number -> Int8, + sender -> Bytea, + } +} + +#[macro_export] +macro_rules! for_all_tables { + ($action:path) => { + $action!( + active_addresses, + address_metrics, + addresses, + chain_identifier, + checkpoints, + display, + epoch_peak_tps, + epochs, + event_emit_module, + event_emit_package, + event_senders, + event_struct_instantiation, + event_struct_module, + event_struct_name, + event_struct_package, + events, + feature_flags, + move_call_metrics, + move_calls, + objects, + objects_history, + objects_snapshot, + objects_version, + packages, + protocol_configs, + pruner_cp_watermark, + transactions, + tx_calls_fun, + tx_calls_mod, + tx_calls_pkg, + tx_changed_objects, + tx_count_metrics, + tx_digests, + tx_input_objects, + tx_kinds, + tx_recipients, + tx_senders + ); + }; +} +pub use for_all_tables; +for_all_tables!(diesel::allow_tables_to_appear_in_same_query); diff --git a/crates/iota-indexer/src/schema/mod.rs b/crates/iota-indexer/src/schema/mod.rs deleted file mode 100644 index 08cbaa0d02d..00000000000 --- a/crates/iota-indexer/src/schema/mod.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// Modifications Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -#![allow(clippy::all)] - -mod pg; - -mod inner { - pub use crate::schema::pg::{ - active_addresses, address_metrics, addresses, chain_identifier, checkpoints, display, - epoch_peak_tps, epochs, event_emit_module, event_emit_package, event_senders, - event_struct_instantiation, event_struct_module, event_struct_name, event_struct_package, - events, feature_flags, move_call_metrics, move_calls, objects, objects_history, - objects_snapshot, objects_version, packages, protocol_configs, pruner_cp_watermark, - transactions, tx_calls_fun, tx_calls_mod, tx_calls_pkg, tx_changed_objects, - tx_count_metrics, tx_digests, tx_input_objects, tx_kinds, tx_recipients, tx_senders, - }; -} - -pub use inner::{ - active_addresses, address_metrics, addresses, chain_identifier, checkpoints, display, - epoch_peak_tps, epochs, event_emit_module, event_emit_package, event_senders, - event_struct_instantiation, event_struct_module, event_struct_name, event_struct_package, - events, feature_flags, move_call_metrics, move_calls, objects, objects_history, - objects_snapshot, objects_version, packages, protocol_configs, pruner_cp_watermark, - transactions, tx_calls_fun, tx_calls_mod, tx_calls_pkg, tx_changed_objects, tx_count_metrics, - tx_digests, tx_input_objects, tx_kinds, tx_recipients, tx_senders, -}; - -pub use crate::schema::pg::{ - events_partition_0, objects_history_partition_0, transactions_partition_0, -}; diff --git a/crates/iota-indexer/src/schema/pg.rs b/crates/iota-indexer/src/schema/pg.rs deleted file mode 100644 index 81fbcc963e6..00000000000 --- a/crates/iota-indexer/src/schema/pg.rs +++ /dev/null @@ -1,2568 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// Modifications Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 -// @generated automatically by Diesel CLI. - -diesel::table! { - active_addresses (address) { - address -> Bytea, - first_appearance_tx -> Int8, - first_appearance_time -> Int8, - last_appearance_tx -> Int8, - last_appearance_time -> Int8, - } -} - -diesel::table! { - address_metrics (checkpoint) { - checkpoint -> Int8, - epoch -> Int8, - timestamp_ms -> Int8, - cumulative_addresses -> Int8, - cumulative_active_addresses -> Int8, - daily_active_addresses -> Int8, - } -} - -diesel::table! { - addresses (address) { - address -> Bytea, - first_appearance_tx -> Int8, - first_appearance_time -> Int8, - last_appearance_tx -> Int8, - last_appearance_time -> Int8, - } -} - -diesel::table! { - chain_identifier (checkpoint_digest) { - checkpoint_digest -> Bytea, - } -} - -diesel::table! { - checkpoints (sequence_number) { - sequence_number -> Int8, - checkpoint_digest -> Bytea, - epoch -> Int8, - network_total_transactions -> Int8, - previous_checkpoint_digest -> Nullable, - end_of_epoch -> Bool, - tx_digests -> Array>, - timestamp_ms -> Int8, - total_gas_cost -> Int8, - computation_cost -> Int8, - storage_cost -> Int8, - storage_rebate -> Int8, - non_refundable_storage_fee -> Int8, - checkpoint_commitments -> Bytea, - validator_signature -> Bytea, - end_of_epoch_data -> Nullable, - min_tx_sequence_number -> Nullable, - max_tx_sequence_number -> Nullable, - } -} - -diesel::table! { - display (object_type) { - object_type -> Text, - id -> Bytea, - version -> Int2, - bcs -> Bytea, - } -} - -diesel::table! { - epoch_peak_tps (epoch) { - epoch -> Int8, - peak_tps -> Float8, - peak_tps_30d -> Float8, - } -} - -diesel::table! { - epochs (epoch) { - epoch -> Int8, - first_checkpoint_id -> Int8, - epoch_start_timestamp -> Int8, - reference_gas_price -> Int8, - protocol_version -> Int8, - total_stake -> Int8, - storage_fund_balance -> Int8, - system_state -> Bytea, - epoch_total_transactions -> Nullable, - last_checkpoint_id -> Nullable, - epoch_end_timestamp -> Nullable, - storage_charge -> Nullable, - storage_rebate -> Nullable, - total_gas_fees -> Nullable, - total_stake_rewards_distributed -> Nullable, - epoch_commitments -> Nullable, - burnt_tokens_amount -> Nullable, - minted_tokens_amount -> Nullable, - } -} - -diesel::table! { - event_emit_module (package, module, tx_sequence_number, event_sequence_number) { - package -> Bytea, - module -> Text, - tx_sequence_number -> Int8, - event_sequence_number -> Int8, - sender -> Bytea, - } -} - -diesel::table! { - event_emit_package (package, tx_sequence_number, event_sequence_number) { - package -> Bytea, - tx_sequence_number -> Int8, - event_sequence_number -> Int8, - sender -> Bytea, - } -} - -diesel::table! { - event_senders (sender, tx_sequence_number, event_sequence_number) { - sender -> Bytea, - tx_sequence_number -> Int8, - event_sequence_number -> Int8, - } -} - -diesel::table! { - event_struct_instantiation (package, module, type_instantiation, tx_sequence_number, event_sequence_number) { - package -> Bytea, - module -> Text, - type_instantiation -> Text, - tx_sequence_number -> Int8, - event_sequence_number -> Int8, - sender -> Bytea, - } -} - -diesel::table! { - event_struct_module (package, module, tx_sequence_number, event_sequence_number) { - package -> Bytea, - module -> Text, - tx_sequence_number -> Int8, - event_sequence_number -> Int8, - sender -> Bytea, - } -} - -diesel::table! { - event_struct_name (package, module, type_name, tx_sequence_number, event_sequence_number) { - package -> Bytea, - module -> Text, - type_name -> Text, - tx_sequence_number -> Int8, - event_sequence_number -> Int8, - sender -> Bytea, - } -} - -diesel::table! { - event_struct_package (package, tx_sequence_number, event_sequence_number) { - package -> Bytea, - tx_sequence_number -> Int8, - event_sequence_number -> Int8, - sender -> Bytea, - } -} - -diesel::table! { - events (tx_sequence_number, event_sequence_number) { - tx_sequence_number -> Int8, - event_sequence_number -> Int8, - transaction_digest -> Bytea, - senders -> Array>, - package -> Bytea, - module -> Text, - event_type -> Text, - timestamp_ms -> Int8, - bcs -> Bytea, - } -} - -diesel::table! { - events_partition_0 (tx_sequence_number, event_sequence_number) { - tx_sequence_number -> Int8, - event_sequence_number -> Int8, - transaction_digest -> Bytea, - senders -> Array>, - package -> Bytea, - module -> Text, - event_type -> Text, - timestamp_ms -> Int8, - bcs -> Bytea, - } -} - -diesel::table! { - feature_flags (protocol_version, flag_name) { - protocol_version -> Int8, - flag_name -> Text, - flag_value -> Bool, - } -} - -diesel::table! { - move_call_metrics (id) { - id -> Int8, - epoch -> Int8, - day -> Int8, - move_package -> Text, - move_module -> Text, - move_function -> Text, - count -> Int8, - } -} - -diesel::table! { - move_calls (transaction_sequence_number, move_package, move_module, move_function) { - transaction_sequence_number -> Int8, - checkpoint_sequence_number -> Int8, - epoch -> Int8, - move_package -> Bytea, - move_module -> Text, - move_function -> Text, - } -} - -diesel::table! { - objects (object_id) { - object_id -> Bytea, - object_version -> Int8, - object_digest -> Bytea, - checkpoint_sequence_number -> Int8, - owner_type -> Int2, - owner_id -> Nullable, - object_type -> Nullable, - object_type_package -> Nullable, - object_type_module -> Nullable, - object_type_name -> Nullable, - serialized_object -> Bytea, - coin_type -> Nullable, - coin_balance -> Nullable, - df_kind -> Nullable, - df_name -> Nullable, - df_object_type -> Nullable, - df_object_id -> Nullable, - } -} - -diesel::table! { - objects_history (checkpoint_sequence_number, object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - object_status -> Int2, - object_digest -> Nullable, - checkpoint_sequence_number -> Int8, - owner_type -> Nullable, - owner_id -> Nullable, - object_type -> Nullable, - object_type_package -> Nullable, - object_type_module -> Nullable, - object_type_name -> Nullable, - serialized_object -> Nullable, - coin_type -> Nullable, - coin_balance -> Nullable, - df_kind -> Nullable, - df_name -> Nullable, - df_object_type -> Nullable, - df_object_id -> Nullable, - } -} - -diesel::table! { - objects_history_partition_0 (checkpoint_sequence_number, object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - object_status -> Int2, - object_digest -> Nullable, - checkpoint_sequence_number -> Int8, - owner_type -> Nullable, - owner_id -> Nullable, - object_type -> Nullable, - object_type_package -> Nullable, - object_type_module -> Nullable, - object_type_name -> Nullable, - serialized_object -> Nullable, - coin_type -> Nullable, - coin_balance -> Nullable, - df_kind -> Nullable, - df_name -> Nullable, - df_object_type -> Nullable, - df_object_id -> Nullable, - } -} - -diesel::table! { - objects_snapshot (object_id) { - object_id -> Bytea, - object_version -> Int8, - object_status -> Int2, - object_digest -> Nullable, - checkpoint_sequence_number -> Int8, - owner_type -> Nullable, - owner_id -> Nullable, - object_type -> Nullable, - object_type_package -> Nullable, - object_type_module -> Nullable, - object_type_name -> Nullable, - serialized_object -> Nullable, - coin_type -> Nullable, - coin_balance -> Nullable, - df_kind -> Nullable, - df_name -> Nullable, - df_object_type -> Nullable, - df_object_id -> Nullable, - } -} - -diesel::table! { - objects_version (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_00 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_01 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_02 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_03 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_04 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_05 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_06 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_07 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_08 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_09 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_0a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_0b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_0c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_0d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_0e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_0f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_10 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_11 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_12 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_13 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_14 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_15 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_16 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_17 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_18 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_19 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_1a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_1b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_1c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_1d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_1e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_1f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_20 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_21 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_22 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_23 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_24 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_25 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_26 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_27 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_28 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_29 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_2a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_2b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_2c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_2d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_2e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_2f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_30 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_31 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_32 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_33 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_34 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_35 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_36 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_37 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_38 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_39 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_3a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_3b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_3c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_3d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_3e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_3f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_40 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_41 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_42 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_43 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_44 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_45 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_46 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_47 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_48 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_49 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_4a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_4b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_4c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_4d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_4e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_4f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_50 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_51 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_52 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_53 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_54 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_55 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_56 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_57 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_58 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_59 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_5a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_5b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_5c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_5d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_5e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_5f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_60 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_61 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_62 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_63 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_64 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_65 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_66 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_67 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_68 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_69 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_6a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_6b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_6c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_6d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_6e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_6f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_70 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_71 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_72 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_73 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_74 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_75 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_76 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_77 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_78 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_79 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_7a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_7b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_7c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_7d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_7e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_7f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_80 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_81 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_82 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_83 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_84 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_85 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_86 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_87 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_88 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_89 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_8a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_8b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_8c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_8d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_8e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_8f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_90 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_91 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_92 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_93 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_94 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_95 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_96 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_97 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_98 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_99 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_9a (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_9b (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_9c (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_9d (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_9e (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_9f (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a0 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a1 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a2 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a3 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a4 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a5 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a6 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a7 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a8 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_a9 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_aa (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ab (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ac (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ad (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ae (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_af (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b0 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b1 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b2 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b3 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b4 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b5 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b6 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b7 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b8 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_b9 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ba (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_bb (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_bc (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_bd (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_be (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_bf (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c0 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c1 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c2 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c3 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c4 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c5 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c6 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c7 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c8 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_c9 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ca (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_cb (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_cc (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_cd (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ce (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_cf (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d0 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d1 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d2 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d3 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d4 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d5 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d6 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d7 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d8 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_d9 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_da (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_db (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_dc (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_dd (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_de (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_df (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e0 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e1 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e2 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e3 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e4 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e5 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e6 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e7 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e8 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_e9 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ea (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_eb (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ec (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ed (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ee (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ef (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f0 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f1 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f2 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f3 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f4 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f5 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f6 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f7 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f8 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_f9 (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_fa (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_fb (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_fc (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_fd (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_fe (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - objects_version_ff (object_id, object_version) { - object_id -> Bytea, - object_version -> Int8, - cp_sequence_number -> Int8, - } -} - -diesel::table! { - packages (package_id, original_id, package_version) { - package_id -> Bytea, - original_id -> Bytea, - package_version -> Int8, - move_package -> Bytea, - checkpoint_sequence_number -> Int8, - } -} - -diesel::table! { - protocol_configs (protocol_version, config_name) { - protocol_version -> Int8, - config_name -> Text, - config_value -> Nullable, - } -} - -diesel::table! { - pruner_cp_watermark (checkpoint_sequence_number) { - checkpoint_sequence_number -> Int8, - min_tx_sequence_number -> Int8, - max_tx_sequence_number -> Int8, - } -} - -diesel::table! { - transactions (tx_sequence_number) { - tx_sequence_number -> Int8, - transaction_digest -> Bytea, - raw_transaction -> Bytea, - raw_effects -> Bytea, - checkpoint_sequence_number -> Int8, - timestamp_ms -> Int8, - object_changes -> Array>, - balance_changes -> Array>, - events -> Array>, - transaction_kind -> Int2, - success_command_count -> Int2, - } -} - -diesel::table! { - transactions_partition_0 (tx_sequence_number) { - tx_sequence_number -> Int8, - transaction_digest -> Bytea, - raw_transaction -> Bytea, - raw_effects -> Bytea, - checkpoint_sequence_number -> Int8, - timestamp_ms -> Int8, - object_changes -> Array>, - balance_changes -> Array>, - events -> Array>, - transaction_kind -> Int2, - success_command_count -> Int2, - } -} - -diesel::table! { - tx_calls_fun (package, module, func, tx_sequence_number) { - tx_sequence_number -> Int8, - package -> Bytea, - module -> Text, - func -> Text, - sender -> Bytea, - } -} - -diesel::table! { - tx_calls_mod (package, module, tx_sequence_number) { - tx_sequence_number -> Int8, - package -> Bytea, - module -> Text, - sender -> Bytea, - } -} - -diesel::table! { - tx_calls_pkg (package, tx_sequence_number) { - tx_sequence_number -> Int8, - package -> Bytea, - sender -> Bytea, - } -} - -diesel::table! { - tx_changed_objects (object_id, tx_sequence_number) { - tx_sequence_number -> Int8, - object_id -> Bytea, - sender -> Bytea, - } -} - -diesel::table! { - tx_count_metrics (checkpoint_sequence_number) { - checkpoint_sequence_number -> Int8, - epoch -> Int8, - timestamp_ms -> Int8, - total_transaction_blocks -> Int8, - total_successful_transaction_blocks -> Int8, - total_successful_transactions -> Int8, - } -} - -diesel::table! { - tx_digests (tx_digest) { - tx_digest -> Bytea, - tx_sequence_number -> Int8, - } -} - -diesel::table! { - tx_input_objects (object_id, tx_sequence_number) { - tx_sequence_number -> Int8, - object_id -> Bytea, - sender -> Bytea, - } -} - -diesel::table! { - tx_kinds (tx_kind, tx_sequence_number) { - tx_sequence_number -> Int8, - tx_kind -> Int2, - } -} - -diesel::table! { - tx_recipients (recipient, tx_sequence_number) { - tx_sequence_number -> Int8, - recipient -> Bytea, - sender -> Bytea, - } -} - -diesel::table! { - tx_senders (sender, tx_sequence_number) { - tx_sequence_number -> Int8, - sender -> Bytea, - } -} - -#[macro_export] -macro_rules! for_all_tables { - ($action:path) => { - $action!( - active_addresses, - address_metrics, - addresses, - chain_identifier, - checkpoints, - display, - epoch_peak_tps, - epochs, - event_emit_module, - event_emit_package, - event_senders, - event_struct_instantiation, - event_struct_module, - event_struct_name, - event_struct_package, - events, - feature_flags, - move_call_metrics, - move_calls, - objects, - objects_history, - objects_snapshot, - objects_version, - packages, - protocol_configs, - pruner_cp_watermark, - transactions, - transactions_partition_0, - tx_calls_fun, - tx_calls_mod, - tx_calls_pkg, - tx_changed_objects, - tx_count_metrics, - tx_digests, - tx_input_objects, - tx_kinds, - tx_recipients, - tx_senders - ); - }; -} -pub use for_all_tables; - -for_all_tables!(diesel::allow_tables_to_appear_in_same_query); diff --git a/scripts/generate_indexer_schema.sh b/scripts/generate_indexer_schema.sh new file mode 100755 index 00000000000..935d4d55298 --- /dev/null +++ b/scripts/generate_indexer_schema.sh @@ -0,0 +1,82 @@ +#!/bin/bash +# Copyright (c) Mysten Labs, Inc. +# Modifications Copyright (c) 2024 IOTA Stiftung +# SPDX-License-Identifier: Apache-2.0 +# +# Update iota-indexer's generated src/schema.rs based on the schema after +# running all its migrations on a clean database. Expects the first argument to +# be a port to run the temporary database on (defaults to 5433). + +set -x +set -e + +if ! command -v git &> /dev/null; then + echo "Please install git: e.g. brew install git" >&2 + exit 1 +fi + +for PG in psql initdb postgres pg_isready pg_ctl; do + if ! command -v $PG &> /dev/null; then + echo "Could not find $PG. Please install postgres: e.g. brew install postgresql@15" >&2 + exit 1 + fi +done + +if ! command -v diesel &> /dev/null; then + echo "Please install diesel: e.g. cargo install diesel_cli --features postgres" >&2 + exit 1 +fi + +REPO=$(git rev-parse --show-toplevel) + +# Create a temporary directory to store the ephemeral DB. +TMP=$(mktemp -d) + +# Set-up a trap to clean everything up on EXIT (stop DB, delete temp directory) +function cleanup { + pg_ctl stop -D "$TMP" -mfast + set +x + echo "Postgres STDOUT:" + cat "$TMP/db.stdout" + echo "Postgres STDERR:" + cat "$TMP/db.stderr" + set -x + rm -rf "$TMP" +} +trap cleanup EXIT + +# Create a new database in the temporary directory +initdb -D "$TMP" --user postgres + +# Run the DB in the background, on the port provided and capture its output +PORT=${1:-5433} +postgres -D "$TMP" -p "$PORT" -c unix_socket_directories= \ + > "$TMP/db.stdout" \ + 2> "$TMP/db.stderr" & + +# Wait for postgres to report as ready +RETRIES=0 +while ! pg_isready -p "$PORT" --host "localhost" --username "postgres"; do + if [ $RETRIES -gt 5 ]; then + echo "Postgres failed to start" >&2 + exit 1 + fi + sleep 1 + RETRIES=$((RETRIES + 1)) +done + +# Run all migrations on the new database +diesel migration run \ + --database-url "postgres://postgres:postgrespw@localhost:$PORT" \ + --migration-dir "$REPO/crates/iota-indexer/migrations/pg" + +# Generate the schema.rs file, excluding partition tables and including the +# copyright notice. +diesel print-schema \ + --database-url "postgres://postgres:postgrespw@localhost:$PORT" \ + --patch-file "$REPO/crates/iota-indexer/src/schema.patch" \ + --except-tables "^objects_version_|_partition_" \ + > "$REPO/crates/iota-indexer/src/schema.rs" + +# Applying the patch may destroy the formatting, fix it +rustfmt +nightly "$REPO/crates/iota-indexer/src/schema.rs" From a2eef3801c6be2c638720e2e4ed54180c371c945 Mon Sep 17 00:00:00 2001 From: Tomasz Pastusiak Date: Tue, 28 Jan 2025 12:47:44 +0100 Subject: [PATCH 2/6] Convert script to dockerized version Co-authored-by: muXxer --- scripts/generate_indexer_schema.sh | 82 --------------------- scripts/indexer-generate-schema/Dockerfile | 21 ++++++ scripts/indexer-generate-schema/build.sh | 19 +++++ scripts/indexer-generate-schema/generate.sh | 62 ++++++++++++++++ 4 files changed, 102 insertions(+), 82 deletions(-) delete mode 100755 scripts/generate_indexer_schema.sh create mode 100644 scripts/indexer-generate-schema/Dockerfile create mode 100755 scripts/indexer-generate-schema/build.sh create mode 100755 scripts/indexer-generate-schema/generate.sh diff --git a/scripts/generate_indexer_schema.sh b/scripts/generate_indexer_schema.sh deleted file mode 100755 index 935d4d55298..00000000000 --- a/scripts/generate_indexer_schema.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/bash -# Copyright (c) Mysten Labs, Inc. -# Modifications Copyright (c) 2024 IOTA Stiftung -# SPDX-License-Identifier: Apache-2.0 -# -# Update iota-indexer's generated src/schema.rs based on the schema after -# running all its migrations on a clean database. Expects the first argument to -# be a port to run the temporary database on (defaults to 5433). - -set -x -set -e - -if ! command -v git &> /dev/null; then - echo "Please install git: e.g. brew install git" >&2 - exit 1 -fi - -for PG in psql initdb postgres pg_isready pg_ctl; do - if ! command -v $PG &> /dev/null; then - echo "Could not find $PG. Please install postgres: e.g. brew install postgresql@15" >&2 - exit 1 - fi -done - -if ! command -v diesel &> /dev/null; then - echo "Please install diesel: e.g. cargo install diesel_cli --features postgres" >&2 - exit 1 -fi - -REPO=$(git rev-parse --show-toplevel) - -# Create a temporary directory to store the ephemeral DB. -TMP=$(mktemp -d) - -# Set-up a trap to clean everything up on EXIT (stop DB, delete temp directory) -function cleanup { - pg_ctl stop -D "$TMP" -mfast - set +x - echo "Postgres STDOUT:" - cat "$TMP/db.stdout" - echo "Postgres STDERR:" - cat "$TMP/db.stderr" - set -x - rm -rf "$TMP" -} -trap cleanup EXIT - -# Create a new database in the temporary directory -initdb -D "$TMP" --user postgres - -# Run the DB in the background, on the port provided and capture its output -PORT=${1:-5433} -postgres -D "$TMP" -p "$PORT" -c unix_socket_directories= \ - > "$TMP/db.stdout" \ - 2> "$TMP/db.stderr" & - -# Wait for postgres to report as ready -RETRIES=0 -while ! pg_isready -p "$PORT" --host "localhost" --username "postgres"; do - if [ $RETRIES -gt 5 ]; then - echo "Postgres failed to start" >&2 - exit 1 - fi - sleep 1 - RETRIES=$((RETRIES + 1)) -done - -# Run all migrations on the new database -diesel migration run \ - --database-url "postgres://postgres:postgrespw@localhost:$PORT" \ - --migration-dir "$REPO/crates/iota-indexer/migrations/pg" - -# Generate the schema.rs file, excluding partition tables and including the -# copyright notice. -diesel print-schema \ - --database-url "postgres://postgres:postgrespw@localhost:$PORT" \ - --patch-file "$REPO/crates/iota-indexer/src/schema.patch" \ - --except-tables "^objects_version_|_partition_" \ - > "$REPO/crates/iota-indexer/src/schema.rs" - -# Applying the patch may destroy the formatting, fix it -rustfmt +nightly "$REPO/crates/iota-indexer/src/schema.rs" diff --git a/scripts/indexer-generate-schema/Dockerfile b/scripts/indexer-generate-schema/Dockerfile new file mode 100644 index 00000000000..0bccfbd07d2 --- /dev/null +++ b/scripts/indexer-generate-schema/Dockerfile @@ -0,0 +1,21 @@ +# Use the official PostgreSQL image as a base +FROM postgres:15 + +# Install dependencies +RUN apt-get update && apt-get install -y \ + curl \ + build-essential \ + libpq-dev && \ + rm -rf /var/lib/apt/lists/* + +ARG RUST_TOOLCHAIN_VERSION + +# Install Rust +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain ${RUST_TOOLCHAIN_VERSION} + +# Install Diesel CLI +RUN /root/.cargo/bin/cargo install diesel_cli --no-default-features --features postgres + +# Add the Rust and Diesel CLI binaries to PATH +ENV PATH="/root/.cargo/bin:${PATH}" + diff --git a/scripts/indexer-generate-schema/build.sh b/scripts/indexer-generate-schema/build.sh new file mode 100755 index 00000000000..288850532ab --- /dev/null +++ b/scripts/indexer-generate-schema/build.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -x +set -e + +if ! command -v git &> /dev/null; then + echo "git not installed" >&2 + exit 1 +fi + +REPO_ROOT=$(git rev-parse --show-toplevel) + +echo "Parse the rust toolchain version from 'rust-toolchain.toml'..." +RUST_TOOLCHAIN_VERSION=$(grep -oE 'channel = "[^"]+' ${REPO_ROOT}/rust-toolchain.toml | sed 's/channel = "//') +if [ -z "$RUST_TOOLCHAIN_VERSION" ]; then + echo "Failed to parse the rust toolchain version" + exit 1 +fi + +docker build --build-arg RUST_TOOLCHAIN_VERSION=${RUST_TOOLCHAIN_VERSION} -t postgres-rust-diesel . diff --git a/scripts/indexer-generate-schema/generate.sh b/scripts/indexer-generate-schema/generate.sh new file mode 100755 index 00000000000..beeeb820198 --- /dev/null +++ b/scripts/indexer-generate-schema/generate.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# Copyright (c) Mysten Labs, Inc. +# Modifications Copyright (c) 2024 IOTA Stiftung +# SPDX-License-Identifier: Apache-2.0 +# +# Update iota-indexer's generated src/schema.rs based on the schema after +# running all its migrations on a clean database. +set -x +set -e + +if ! command -v git &> /dev/null; then + echo "git not installed" >&2 + exit 1 +fi + +REPO=$(git rev-parse --show-toplevel) + +# Set up the Docker container with PostgreSQL and Diesel CLI +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgrespw +CONTAINER_NAME=postgres-rust-diesel + +function cleanup { + # Cleanup: Stop and remove the container + docker stop ${CONTAINER_NAME} +} +trap cleanup EXIT + +docker run --rm -d \ + --name ${CONTAINER_NAME} \ + -e POSTGRES_USER=${POSTGRES_USER} \ + -e POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \ + -e RUST_TOOLCHAIN_VERSION=${RUST_TOOLCHAIN_VERSION} \ + -v "${REPO}:/workspace" \ + -w /workspace \ + ${CONTAINER_NAME} + +# Wait for Postgres to be ready +RETRIES=0 +while ! docker exec ${CONTAINER_NAME} pg_isready -p 5432 --username ${POSTGRES_USER}; do + if [ $RETRIES -gt 30 ]; then + echo "Postgres failed to start" >&2 + docker stop ${CONTAINER_NAME} + exit 1 + fi + sleep 1 + RETRIES=$((RETRIES + 1)) +done + +# Run migrations and generate the schema.rs file +docker exec ${CONTAINER_NAME} diesel migration run \ + --database-url "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432" \ + --migration-dir "/workspace/crates/iota-indexer/migrations/pg" + +docker exec ${CONTAINER_NAME} diesel print-schema \ + --database-url "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432" \ + --patch-file "/workspace/crates/iota-indexer/src/schema.patch" \ + --except-tables "^objects_version_|_partition_" \ + > "${REPO}/crates/iota-indexer/src/schema.rs" + +# Applying the patch may destroy the formatting, fix it +rustfmt +nightly "${REPO}/crates/iota-indexer/src/schema.rs" From 612b8eae859980782877d1e68a1a54c5b4c19fac Mon Sep 17 00:00:00 2001 From: Tomasz Pastusiak Date: Tue, 28 Jan 2025 12:55:49 +0100 Subject: [PATCH 3/6] Update script name in schema.patch --- crates/iota-indexer/src/schema.patch | 2 +- crates/iota-indexer/src/schema.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/iota-indexer/src/schema.patch b/crates/iota-indexer/src/schema.patch index 20fceddcae5..4b49f208126 100644 --- a/crates/iota-indexer/src/schema.patch +++ b/crates/iota-indexer/src/schema.patch @@ -6,7 +6,7 @@ diff --git a/crates/iota-indexer/src/schema.rs b/crates/iota-indexer/src/schema. +// Copyright (c) Mysten Labs, Inc. +// Modifications Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 -+// @generated automatically by scripts/generate_indexer_schema.sh ++// @generated automatically by scripts/indexer-generate-schema/generate.sh diesel::table! { active_addresses (address) { diff --git a/crates/iota-indexer/src/schema.rs b/crates/iota-indexer/src/schema.rs index c28f3724b7e..207d0809472 100644 --- a/crates/iota-indexer/src/schema.rs +++ b/crates/iota-indexer/src/schema.rs @@ -1,7 +1,7 @@ // Copyright (c) Mysten Labs, Inc. // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -// @generated automatically by scripts/generate_indexer_schema.sh +// @generated automatically by scripts/indexer-generate-schema/generate.sh diesel::table! { active_addresses (address) { From 7151a955f6b7249d441a4e395d8141967bf86725 Mon Sep 17 00:00:00 2001 From: Tomasz Pastusiak Date: Tue, 28 Jan 2025 17:32:32 +0100 Subject: [PATCH 4/6] Allow build to be called from anywhere --- scripts/indexer-generate-schema/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/indexer-generate-schema/build.sh b/scripts/indexer-generate-schema/build.sh index 288850532ab..a3b7b64e6a9 100755 --- a/scripts/indexer-generate-schema/build.sh +++ b/scripts/indexer-generate-schema/build.sh @@ -16,4 +16,4 @@ if [ -z "$RUST_TOOLCHAIN_VERSION" ]; then exit 1 fi -docker build --build-arg RUST_TOOLCHAIN_VERSION=${RUST_TOOLCHAIN_VERSION} -t postgres-rust-diesel . +docker build --build-arg RUST_TOOLCHAIN_VERSION=${RUST_TOOLCHAIN_VERSION} -t postgres-rust-diesel ${REPO_ROOT}/scripts/indexer-generate-schema From 19982c3745bca02bb549f7812df93561e08205de Mon Sep 17 00:00:00 2001 From: Tomasz Pastusiak Date: Tue, 28 Jan 2025 17:32:51 +0100 Subject: [PATCH 5/6] Ensure the required image is built --- scripts/indexer-generate-schema/generate.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/indexer-generate-schema/generate.sh b/scripts/indexer-generate-schema/generate.sh index beeeb820198..0bcc0b33399 100755 --- a/scripts/indexer-generate-schema/generate.sh +++ b/scripts/indexer-generate-schema/generate.sh @@ -20,6 +20,11 @@ POSTGRES_USER=postgres POSTGRES_PASSWORD=postgrespw CONTAINER_NAME=postgres-rust-diesel +# Ensure the required image is built +if ! docker image inspect ${CONTAINER_NAME} &> /dev/null; then + ${REPO}/scripts/indexer-generate-schema/build.sh +fi + function cleanup { # Cleanup: Stop and remove the container docker stop ${CONTAINER_NAME} From a5aa568715a867e305cec09457f7a50389d066a2 Mon Sep 17 00:00:00 2001 From: Tomasz Pastusiak Date: Tue, 28 Jan 2025 17:37:28 +0100 Subject: [PATCH 6/6] Rename indexer-generate-schema to indexer-schema --- crates/iota-indexer/src/schema.patch | 2 +- crates/iota-indexer/src/schema.rs | 2 +- scripts/{indexer-generate-schema => indexer-schema}/Dockerfile | 0 scripts/{indexer-generate-schema => indexer-schema}/build.sh | 2 +- scripts/{indexer-generate-schema => indexer-schema}/generate.sh | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename scripts/{indexer-generate-schema => indexer-schema}/Dockerfile (100%) rename scripts/{indexer-generate-schema => indexer-schema}/build.sh (86%) rename scripts/{indexer-generate-schema => indexer-schema}/generate.sh (97%) diff --git a/crates/iota-indexer/src/schema.patch b/crates/iota-indexer/src/schema.patch index 4b49f208126..0806f90dc3b 100644 --- a/crates/iota-indexer/src/schema.patch +++ b/crates/iota-indexer/src/schema.patch @@ -6,7 +6,7 @@ diff --git a/crates/iota-indexer/src/schema.rs b/crates/iota-indexer/src/schema. +// Copyright (c) Mysten Labs, Inc. +// Modifications Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 -+// @generated automatically by scripts/indexer-generate-schema/generate.sh ++// @generated automatically by scripts/indexer-schema/generate.sh diesel::table! { active_addresses (address) { diff --git a/crates/iota-indexer/src/schema.rs b/crates/iota-indexer/src/schema.rs index 207d0809472..978a9511d51 100644 --- a/crates/iota-indexer/src/schema.rs +++ b/crates/iota-indexer/src/schema.rs @@ -1,7 +1,7 @@ // Copyright (c) Mysten Labs, Inc. // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -// @generated automatically by scripts/indexer-generate-schema/generate.sh +// @generated automatically by scripts/indexer-schema/generate.sh diesel::table! { active_addresses (address) { diff --git a/scripts/indexer-generate-schema/Dockerfile b/scripts/indexer-schema/Dockerfile similarity index 100% rename from scripts/indexer-generate-schema/Dockerfile rename to scripts/indexer-schema/Dockerfile diff --git a/scripts/indexer-generate-schema/build.sh b/scripts/indexer-schema/build.sh similarity index 86% rename from scripts/indexer-generate-schema/build.sh rename to scripts/indexer-schema/build.sh index a3b7b64e6a9..eb97c50be16 100755 --- a/scripts/indexer-generate-schema/build.sh +++ b/scripts/indexer-schema/build.sh @@ -16,4 +16,4 @@ if [ -z "$RUST_TOOLCHAIN_VERSION" ]; then exit 1 fi -docker build --build-arg RUST_TOOLCHAIN_VERSION=${RUST_TOOLCHAIN_VERSION} -t postgres-rust-diesel ${REPO_ROOT}/scripts/indexer-generate-schema +docker build --build-arg RUST_TOOLCHAIN_VERSION=${RUST_TOOLCHAIN_VERSION} -t postgres-rust-diesel ${REPO_ROOT}/scripts/indexer-schema diff --git a/scripts/indexer-generate-schema/generate.sh b/scripts/indexer-schema/generate.sh similarity index 97% rename from scripts/indexer-generate-schema/generate.sh rename to scripts/indexer-schema/generate.sh index 0bcc0b33399..ce7e3c13ddb 100755 --- a/scripts/indexer-generate-schema/generate.sh +++ b/scripts/indexer-schema/generate.sh @@ -22,7 +22,7 @@ CONTAINER_NAME=postgres-rust-diesel # Ensure the required image is built if ! docker image inspect ${CONTAINER_NAME} &> /dev/null; then - ${REPO}/scripts/indexer-generate-schema/build.sh + ${REPO}/scripts/indexer-schema/build.sh fi function cleanup {