using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace Pf2eModel.Migrations; /// public partial class Function : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.Sql( """ CREATE OR REPLACE FUNCTION f_drop_tables() RETURNS void LANGUAGE plpgsql AS $func$ BEGIN EXECUTE (SELECT 'DROP TABLE ' || string_agg(format('%I.%I', schemaname, tablename), ', ') || ' CASCADE;' FROM pg_tables WHERE schemaname = 'public' ); END $func$; """ ); migrationBuilder.Sql( """ CREATE OR REPLACE FUNCTION f_permission_tables(_username text) RETURNS void LANGUAGE plpgsql AS $func$ DECLARE _tbl text; _sch text; BEGIN FOR _sch, _tbl IN SELECT schemaname, tablename FROM pg_tables WHERE schemaname = 'public' LOOP EXECUTE format('ALTER TABLE %I.%I OWNER TO %I', _sch, _tbl, _username); END LOOP; END $func$; """ ); migrationBuilder.Sql( """ CREATE OR REPLACE FUNCTION locale_search(data jsonb, search_value text) RETURNS boolean LANGUAGE plpgsql AS $func$ BEGIN RETURN jsonb_path_exists(data, '$.** ? (@ == $val)', jsonb_build_object('val', search_value)); END; $func$; """ ); migrationBuilder.Sql( """ CREATE OR REPLACE FUNCTION locale_search_array(data jsonb, search_values text[]) RETURNS boolean LANGUAGE plpgsql AS $func$ BEGIN RETURN EXISTS ( SELECT 1 FROM unnest(search_values) AS val WHERE jsonb_path_exists(data, '$.** ? (@ == $val)', jsonb_build_object('val', val)) ); END; $func$; """ ); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.Sql("DROP FUNCTION f_truncate_tables;"); migrationBuilder.Sql("DROP FUNCTION f_drop_tables;"); migrationBuilder.Sql("DROP FUNCTION f_permission_tables;"); migrationBuilder.Sql("DROP FUNCTION locale_search;"); migrationBuilder.Sql("DROP FUNCTION locale_search_array;"); } }