commit 448f4106f2b8b672ae05a8cc53c8b15b47746774
parent 8d857be8772c81413cf8e565e0cc5327d08a3922
Author: triesap <tyson@radroots.org>
Date: Tue, 28 Jul 2026 17:35:39 +0000
event_store: derive ledger DDL identity
- share one ledger schema literal
- derive qualified creation SQL
- remove runtime identity drift
- retain exact catalog bytes
Diffstat:
2 files changed, 10 insertions(+), 19 deletions(-)
diff --git a/contracts/event_store_production_sources.toml b/contracts/event_store_production_sources.toml
@@ -11,7 +11,7 @@ sha256 = "7d588cd181f42b6c8731d84f71e5a778cd6605add07dc9b7d0b8144b51a44a9f"
[[sources]]
path = "crates/event_store/src/migrations.rs"
-sha256 = "f698d03ee78de42bfef98c3689c7db3fb3796ad95f2055fe7bf80f290733dfa8"
+sha256 = "097bca46604d381fdb047b059a51c759988038e0b98e60e7b75828fd4d4f4276"
[[sources]]
path = "crates/event_store/src/model.rs"
diff --git a/crates/event_store/src/migrations.rs b/crates/event_store/src/migrations.rs
@@ -11,21 +11,20 @@ pub(crate) const EVENT_STORE_RESERVED_PREFIX: &str = "radroots_event_store_";
pub const RADROOTS_EVENT_STORE_SCHEMA_VERSION_MIN: u32 = 1;
pub const RADROOTS_EVENT_STORE_SCHEMA_VERSION_CURRENT: u32 = 4;
-pub(crate) const EVENT_STORE_LEDGER_DDL: &str = "CREATE TABLE radroots_event_store_schema_migrations (
+macro_rules! event_store_ledger_ddl {
+ ($schema:literal) => {
+ concat!("CREATE TABLE ", $schema, "radroots_event_store_schema_migrations (
version INTEGER PRIMARY KEY NOT NULL CHECK (version > 0),
name TEXT NOT NULL UNIQUE CHECK (length(name) > 0),
up_sha256 TEXT NOT NULL CHECK (length(up_sha256) = 64 AND up_sha256 NOT GLOB '*[^0-9a-f]*'),
down_sha256 TEXT NOT NULL CHECK (length(down_sha256) = 64 AND down_sha256 NOT GLOB '*[^0-9a-f]*'),
schema_sha256 TEXT NOT NULL CHECK (length(schema_sha256) = 64 AND schema_sha256 NOT GLOB '*[^0-9a-f]*')
-) STRICT, WITHOUT ROWID";
-pub(crate) const EVENT_STORE_LEDGER_CREATE_DDL: &str =
- "CREATE TABLE main.radroots_event_store_schema_migrations (
- version INTEGER PRIMARY KEY NOT NULL CHECK (version > 0),
- name TEXT NOT NULL UNIQUE CHECK (length(name) > 0),
- up_sha256 TEXT NOT NULL CHECK (length(up_sha256) = 64 AND up_sha256 NOT GLOB '*[^0-9a-f]*'),
- down_sha256 TEXT NOT NULL CHECK (length(down_sha256) = 64 AND down_sha256 NOT GLOB '*[^0-9a-f]*'),
- schema_sha256 TEXT NOT NULL CHECK (length(schema_sha256) = 64 AND schema_sha256 NOT GLOB '*[^0-9a-f]*')
-) STRICT, WITHOUT ROWID";
+) STRICT, WITHOUT ROWID")
+ };
+}
+
+pub(crate) const EVENT_STORE_LEDGER_DDL: &str = event_store_ledger_ddl!("");
+pub(crate) const EVENT_STORE_LEDGER_CREATE_DDL: &str = event_store_ledger_ddl!("main.");
pub(crate) const EVENT_STORE_BASELINE_OBJECT_NAMES: &[&str] = &[
"event_envelope_contract_idx",
@@ -456,14 +455,6 @@ pub(crate) fn validate_migration_registry(
minimum: u32,
current: u32,
) -> Result<(), RadrootsEventStoreError> {
- if EVENT_STORE_LEDGER_CREATE_DDL.strip_prefix("CREATE TABLE main.")
- != EVENT_STORE_LEDGER_DDL.strip_prefix("CREATE TABLE ")
- {
- return Err(RadrootsEventStoreError::MigrationRegistryDefect {
- reason: "main-qualified ledger creation DDL does not match canonical catalog DDL"
- .to_owned(),
- });
- }
if registry
.iter()
.any(|migration| migration.hook == EventStoreMigrationHook::Nip09ReconciliationV1)