///|
/// Fixed source templates derived from pinned install.py AST, not supplied hashes.
fn orm_expected_function(schema : String, name : String) -> String raise {
let state = "\"" + schema + "\".\"_mtw_orm_state\""
let candidates = "\"" + schema + "\".\"_mtw_orm_candidates\""
let effects = "\"" + schema + "\".\"_mtw_orm_effects\""
let deleted_version = "\"" + schema + "\".\"_mtw_orm_deleted_version\""
let old_image = "jsonb_build_object('id',OLD.\"id\"::text,'email',OLD.\"email\",'hashed_password',OLD.\"hashed_password\",'is_active',OLD.\"is_active\",'is_superuser',OLD.\"is_superuser\",'is_verified',OLD.\"is_verified\")"
let new_image = "jsonb_build_object('id',NEW.\"id\"::text,'email',NEW.\"email\",'hashed_password',NEW.\"hashed_password\",'is_active',NEW.\"is_active\",'is_superuser',NEW.\"is_superuser\",'is_verified',NEW.\"is_verified\")"
match name {
"before" =>
"\nDECLARE k text; previous uuid; was_present boolean; v uuid; old_data jsonb; new_data jsonb;\nBEGIN\n IF TG_OP<>'DELETE' THEN\n IF NEW.id IS NULL OR NEW.email IS NULL OR NEW.hashed_password IS NULL OR NEW.is_active IS NULL OR NEW.is_superuser IS NULL OR NEW.is_verified IS NULL THEN RETURN NEW; END IF;\n IF TG_OP='UPDATE' AND NEW.id IS DISTINCT FROM OLD.id THEN RAISE EXCEPTION 'ORM fixed UUID mutation unsupported'; END IF;\n k:=NEW.id::text;\n ELSE k:=OLD.id::text; END IF;\n SELECT token,present INTO previous,was_present FROM " +
state +
" WHERE key=k FOR UPDATE;\n IF NOT FOUND THEN RAISE EXCEPTION 'ORM key outside controlled fixed domain'; END IF;\n IF TG_OP<>'INSERT' AND (NOT was_present OR previous IS DISTINCT FROM OLD.\"" +
"_mtw_orm_version" +
"\") THEN RAISE EXCEPTION 'ORM source chain mismatch'; END IF;\n v:=gen_random_uuid();\n old_data:=CASE WHEN TG_OP='INSERT' THEN NULL ELSE " +
old_image +
" END;\n new_data:=CASE WHEN TG_OP='DELETE' THEN NULL ELSE " +
new_image +
" END;\n INSERT INTO " +
candidates +
"(token,key,predecessor,action,old_present,new_present,old_image,new_image)\n VALUES(v,k,previous,TG_OP,was_present,TG_OP<>'DELETE',old_data,new_data);\n IF TG_OP='DELETE' THEN RETURN OLD; ELSE NEW.\"" +
"_mtw_orm_version" +
"\":=v; RETURN NEW; END IF;\nEND\n"
"predecessor" =>
"\nDECLARE v uuid; n integer;\nBEGIN\n SELECT count(*),min(predecessor::text)::uuid INTO n,v FROM " +
candidates +
" WHERE token=token_text::uuid;\n IF n<>1 THEN RAISE EXCEPTION 'ORM candidate predecessor not unique'; END IF;\n RETURN v;\nEND\n"
"deleted_version" =>
"\nDECLARE v uuid; n integer;\nBEGIN\n SELECT count(*),min(token::text)::uuid INTO n,v FROM " +
candidates +
"\n WHERE key=key_text AND predecessor=predecessor_text::uuid AND action='DELETE';\n IF n<>1 THEN RAISE EXCEPTION 'ORM delete candidate not unique'; END IF;\n RETURN v;\nEND\n"
"after" =>
"\nDECLARE k text; v uuid; candidate record; n integer; actual_image jsonb;\nBEGIN\n IF TG_OP='DELETE' THEN k:=OLD.id::text; v:=" +
deleted_version +
"(k,OLD.\"" +
"_mtw_orm_version" +
"\"::text); actual_image:=NULL;\n ELSE k:=NEW.id::text; v:=NEW.\"" +
"_mtw_orm_version" +
"\"; actual_image:=" +
new_image +
"; END IF;\n SELECT * INTO candidate FROM " +
candidates +
" WHERE token=v;\n IF NOT FOUND OR candidate.key IS DISTINCT FROM k OR candidate.action IS DISTINCT FROM TG_OP OR candidate.new_image IS DISTINCT FROM actual_image THEN RAISE EXCEPTION 'ORM actual effect candidate mismatch'; END IF;\n IF TG_OP='INSERT' AND candidate.old_present THEN RAISE EXCEPTION 'ORM insert source presence drift'; END IF;\n UPDATE " +
state +
" SET token=v,present=(TG_OP<>'DELETE'),image=actual_image\n WHERE key=k AND token=candidate.predecessor AND present=candidate.old_present;\n GET DIAGNOSTICS n=ROW_COUNT;\n IF n<>1 THEN RAISE EXCEPTION 'ORM actual effect chain mismatch'; END IF;\n INSERT INTO " +
effects +
" SELECT * FROM " +
candidates +
" WHERE token=v;\n IF TG_OP='DELETE' THEN RETURN OLD; ELSE RETURN NEW; END IF;\nEND\n"
_ => fail("Unknown fixed ORM source helper")
}
}