Ctrl K
ComunidadGuías…

migrations/20261023040000_xet_file_aliases.up.sql

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
CREATE TABLE IF NOT EXISTS shardline_xet_file_aliases (
    scope_key TEXT NOT NULL,
    file_id TEXT NOT NULL,
    sha256 TEXT NOT NULL,
    total_bytes BIGINT NOT NULL CHECK (total_bytes >= 0),
    PRIMARY KEY (scope_key, file_id)
);

CREATE OR REPLACE FUNCTION shardline_preserve_xet_file_alias_v1()
RETURNS trigger LANGUAGE plpgsql SET search_path = pg_catalog AS $$
DECLARE inserted bigint; replay boolean;
BEGIN
    IF TG_OP = 'UPDATE' THEN
        EXECUTE format('INSERT INTO %I.shardline_xet_file_aliases(scope_key,file_id,sha256,total_bytes)
            VALUES ($1,$2,$3,$4) ON CONFLICT (scope_key,file_id) DO NOTHING', TG_TABLE_SCHEMA)
            USING OLD.scope_key,OLD.file_id,OLD.sha256,OLD.total_bytes;
        GET DIAGNOSTICS inserted = ROW_COUNT;
        IF inserted = 0 THEN
            EXECUTE format('SELECT EXISTS(SELECT 1 FROM %I.shardline_xet_file_aliases
                WHERE scope_key=$1 AND file_id=$2 AND sha256=$3 AND total_bytes=$4)', TG_TABLE_SCHEMA)
                INTO replay USING OLD.scope_key,OLD.file_id,OLD.sha256,OLD.total_bytes;
            IF NOT replay THEN RAISE EXCEPTION 'conflicting native Xet file alias'; END IF;
        END IF;
    END IF;
    EXECUTE format('INSERT INTO %I.shardline_xet_file_aliases(scope_key,file_id,sha256,total_bytes)
        VALUES ($1,$2,$3,$4) ON CONFLICT (scope_key,file_id) DO NOTHING', TG_TABLE_SCHEMA)
        USING NEW.scope_key,NEW.file_id,NEW.sha256,NEW.total_bytes;
    GET DIAGNOSTICS inserted = ROW_COUNT;
    IF inserted = 0 THEN
        EXECUTE format('SELECT EXISTS(SELECT 1 FROM %I.shardline_xet_file_aliases
            WHERE scope_key=$1 AND file_id=$2 AND sha256=$3 AND total_bytes=$4)', TG_TABLE_SCHEMA)
            INTO replay USING NEW.scope_key,NEW.file_id,NEW.sha256,NEW.total_bytes;
        IF NOT replay THEN RAISE EXCEPTION 'conflicting native Xet file alias'; END IF;
    END IF;
    RETURN NEW;
END;
$$;
DROP TRIGGER IF EXISTS shardline_xet_file_aliases_preserve ON shardline_xet_file_identities;
CREATE TRIGGER shardline_xet_file_aliases_preserve
    AFTER INSERT OR UPDATE ON shardline_xet_file_identities
    FOR EACH ROW EXECUTE FUNCTION shardline_preserve_xet_file_alias_v1();

INSERT INTO shardline_xet_file_aliases(scope_key,file_id,sha256,total_bytes)
SELECT scope_key,file_id,sha256,total_bytes FROM shardline_xet_file_identities WHERE TRUE
ON CONFLICT (scope_key,file_id) DO UPDATE SET sha256 =
    CASE WHEN shardline_xet_file_aliases.sha256=excluded.sha256
          AND shardline_xet_file_aliases.total_bytes=excluded.total_bytes
         THEN shardline_xet_file_aliases.sha256 ELSE NULL END;