[ { "description": "Merger Execution", "database": { "puncs": [], "enums": [ { "id": "11111111-1111-1111-1111-111111111111", "type": "relation_type", "enum": "relation_type", "values": [ "foreign_key", "polymorphic", "graph" ] } ], "relations": [ { "id": "22222222-2222-2222-2222-222222222222", "type": "relation", "constraint": "fk_order_customer", "source_type": "order", "source_columns": [ "customer_id" ], "destination_type": "person", "destination_columns": [ "id" ], "prefix": "customer" }, { "id": "33333333-3333-3333-3333-333333333333", "type": "relation", "constraint": "fk_order_line_order", "source_type": "order_line", "source_columns": [ "order_id" ], "destination_type": "order", "destination_columns": [ "id" ], "prefix": "lines" } ], "types": [ { "name": "entity", "schemas": [ { "$id": "entity", "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "string" }, "archived": { "type": "boolean" }, "created_by": { "type": "string" }, "modified_by": { "type": "string" }, "created_at": { "type": "string", "format": "date-time" }, "modified_at": { "type": "string", "format": "date-time" } }, "required": [ "id", "type", "created_by", "created_at", "modified_by", "modified_at" ] } ], "hierarchy": [ "entity" ], "fields": [ "id", "type", "created_at", "created_by", "modified_at", "modified_by", "archived" ], "grouped_fields": { "entity": [ "id", "type", "created_at", "created_by", "modified_at", "modified_by", "archived" ] }, "lookup_fields": [], "historical": false, "relationship": false }, { "name": "organization", "schemas": [ { "$id": "organization", "$ref": "entity", "properties": { "name": { "type": "string" } } } ], "hierarchy": [ "organization", "entity" ], "fields": [ "id", "type", "name", "created_at", "created_by", "modified_at", "modified_by", "archived" ], "grouped_fields": { "organization": [ "id", "type", "name" ], "entity": [ "id", "type", "created_at", "created_by", "modified_at", "modified_by", "archived" ] }, "lookup_fields": [], "historical": true, "relationship": false }, { "name": "user", "schemas": [ { "$id": "user", "$ref": "organization", "properties": {} } ], "hierarchy": [ "user", "organization", "entity" ], "fields": [ "id", "type", "name", "created_at", "created_by", "modified_at", "modified_by", "archived" ], "grouped_fields": { "user": [ "id", "type" ], "organization": [ "id", "type", "name" ], "entity": [ "id", "type", "created_at", "created_by", "modified_at", "modified_by", "archived" ] }, "lookup_fields": [], "historical": true, "relationship": false }, { "name": "person", "schemas": [ { "$id": "person", "$ref": "user", "properties": { "first_name": { "type": "string" }, "last_name": { "type": "string" }, "date_of_birth": { "type": "string" }, "pronouns": { "type": "string" }, "contact_id": { "type": "string" } } } ], "hierarchy": [ "person", "user", "organization", "entity" ], "fields": [ "id", "type", "first_name", "last_name", "date_of_birth", "pronouns", "contact_id", "name", "created_at", "created_by", "modified_at", "modified_by", "archived" ], "grouped_fields": { "person": [ "id", "type", "first_name", "last_name", "date_of_birth", "pronouns", "contact_id" ], "user": [ "id", "type" ], "organization": [ "id", "type", "name" ], "entity": [ "id", "type", "created_at", "created_by", "modified_at", "modified_by", "archived" ] }, "lookup_fields": [ "first_name", "last_name", "date_of_birth", "pronouns" ], "historical": true, "relationship": false }, { "name": "order", "schemas": [ { "$id": "order", "$ref": "entity", "properties": { "total": { "type": "number" }, "customer_id": { "type": "string" } } } ], "hierarchy": [ "order", "entity" ], "fields": [ "id", "type", "total", "customer_id", "created_at", "created_by", "modified_at", "modified_by", "archived" ], "grouped_fields": { "order": [ "id", "type", "total", "customer_id" ], "entity": [ "id", "type", "created_at", "created_by", "modified_at", "modified_by", "archived" ] }, "lookup_fields": [ "id" ], "historical": true, "relationship": false }, { "name": "order_line", "schemas": [ { "$id": "order_line", "$ref": "entity", "properties": { "order_id": { "type": "string" }, "product": { "type": "string" }, "price": { "type": "number" } } } ], "hierarchy": [ "order_line", "entity" ], "fields": [ "id", "type", "order_id", "product", "price", "created_at", "created_by", "modified_at", "modified_by", "archived" ], "grouped_fields": { "order_line": [ "id", "type", "order_id", "product", "price" ], "entity": [ "id", "type", "created_at", "created_by", "modified_at", "modified_by", "archived" ] }, "lookup_fields": [], "historical": true, "relationship": false } ] }, "tests": [ { "description": "Person insert with id (no lookup)", "action": "merge", "data": { "id": "123", "type": "person", "first_name": "John", "last_name": "Doe", "date_of_birth": "1990-01-01T00:00:00Z" }, "expect": { "success": true, "sql": [ [ "SELECT to_jsonb(t1.*) || to_jsonb(t2.*) || to_jsonb(t3.*) || to_jsonb(t4.*)", "FROM agreego.\"person\" t1", "LEFT JOIN agreego.\"user\" t2 ON t2.id = t1.id", "LEFT JOIN agreego.\"organization\" t3 ON t3.id = t1.id", "LEFT JOIN agreego.\"entity\" t4 ON t4.id = t1.id", "WHERE t1.id = '123'" ], [ "INSERT INTO agreego.\"entity\" (", " \"created_at\",", " \"created_by\",", " \"id\",", " \"modified_at\",", " \"modified_by\",", " \"type\")", "VALUES (", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " '123',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " 'person'", ")" ], [ "INSERT INTO agreego.\"organization\" (", " \"id\",", " \"type\")", "VALUES ('123', 'person')" ], [ "INSERT INTO agreego.\"user\" (", " \"id\",", " \"type\")", "VALUES ('123', 'person')" ], [ "INSERT INTO agreego.\"person\" (", " \"date_of_birth\",", " \"first_name\",", " \"id\",", " \"last_name\",", " \"type\")", "VALUES (", " '1990-01-01T00:00:00Z',", " 'John',", " '123',", " 'Doe',", " 'person'", ")" ], [ "INSERT INTO agreego.change (", " changes,", " entity_id,", " id,", " kind,", " modified_at,", " modified_by", ")", "VALUES (", " '{", " \"date_of_birth\":\"1990-01-01T00:00:00Z\",", " \"first_name\":\"John\",", " \"last_name\":\"Doe\",", " \"type\":\"person\"", " }',", " '123',", " '{{uuid}}',", " 'create',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000'", ")" ], [ "SELECT pg_notify('entity', '{", " \"complete\":{", " \"created_at\":\"{{timestamp}}\",", " \"created_by\":\"00000000-0000-0000-0000-000000000000\",", " \"date_of_birth\":\"1990-01-01T00:00:00Z\",", " \"first_name\":\"John\",", " \"id\":\"123\",", " \"last_name\":\"Doe\",", " \"modified_at\":\"{{timestamp}}\",", " \"modified_by\":\"00000000-0000-0000-0000-000000000000\",", " \"type\":\"person\"", " }", "}')" ] ] } }, { "description": "Person insert with no id (lookup)", "action": "merge", "data": { "type": "person", "first_name": "John", "last_name": "Doe", "date_of_birth": "1990-01-01T00:00:00Z" }, "expect": { "success": true, "sql": [ [ "SELECT to_jsonb(t1.*) || to_jsonb(t2.*) || to_jsonb(t3.*) || to_jsonb(t4.*)", "FROM agreego.\"person\" t1", "LEFT JOIN agreego.\"user\" t2 ON t2.id = t1.id", "LEFT JOIN agreego.\"organization\" t3 ON t3.id = t1.id", "LEFT JOIN agreego.\"entity\" t4 ON t4.id = t1.id", "WHERE", " \"first_name\" = 'John'", " AND \"last_name\" = 'Doe'", " AND \"date_of_birth\" = '1990-01-01T00:00:00Z'", " AND \"pronouns\" IS NULL" ], [ "INSERT INTO agreego.\"entity\" (", " \"created_at\",", " \"created_by\",", " \"id\",", " \"modified_at\",", " \"modified_by\",", " \"type\")", "VALUES (", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " '{{uuid:person_1}}',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " 'person'", ")" ], [ "INSERT INTO agreego.\"organization\" (", " \"id\",", " \"type\"", ")", "VALUES (", " '{{uuid:person_1}}',", " 'person'", ")" ], [ "INSERT INTO agreego.\"user\" (", " \"id\",", " \"type\"", ")", "VALUES (", " '{{uuid:person_1}}',", " 'person'", ")" ], [ "INSERT INTO agreego.\"person\" (", " \"date_of_birth\",", " \"first_name\",", " \"id\",", " \"last_name\",", " \"type\"", ")", "VALUES (", " '1990-01-01T00:00:00Z',", " 'John',", " '{{uuid:person_1}}',", " 'Doe',", " 'person'", ")" ], [ "INSERT INTO agreego.change (", " changes,", " entity_id,", " id,", " kind,", " modified_at,", " modified_by", ")", "VALUES (", " '{ ", " \"date_of_birth\":\"1990-01-01T00:00:00Z\",", " \"first_name\":\"John\",", " \"last_name\":\"Doe\",", " \"type\":\"person\" ", " }',", " '{{uuid}}',", " 'create',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000'", ")" ], [ "SELECT pg_notify('entity', '{", " \"complete\":{", " \"created_at\":\"{{timestamp}}\",", " \"created_by\":\"00000000-0000-0000-0000-000000000000\",", " \"date_of_birth\":\"1990-01-01T00:00:00Z\",", " \"first_name\":\"John\",", " \"id\":\"{{uuid:person_1}}\",", " \"last_name\":\"Doe\",", " \"modified_at\":\"{{timestamp}}\",", " \"modified_by\":\"00000000-0000-0000-0000-000000000000\",", " \"type\":\"person\"", " }", "}')" ] ] } }, { "description": "Should explicitly null out fields provided as empty strings", "action": "merge", "data": { "id": "123", "type": "person", "first_name": "John", "last_name": "Doe", "date_of_birth": "1990-01-01T00:00:00Z", "pronouns": "" }, "expect": { "success": true, "sql": [ [ "SELECT to_jsonb(t1.*) || to_jsonb(t2.*) || to_jsonb(t3.*) || to_jsonb(t4.*)", "FROM agreego.\"person\" t1", "LEFT JOIN agreego.\"user\" t2 ON t2.id = t1.id", "LEFT JOIN agreego.\"organization\" t3 ON t3.id = t1.id", "LEFT JOIN agreego.\"entity\" t4 ON t4.id = t1.id", "WHERE t1.id = '123'" ], [ "INSERT INTO agreego.\"entity\" (", " \"created_at\",", " \"created_by\",", " \"id\",", " \"modified_at\",", " \"modified_by\",", " \"type\"", ")", "VALUES (", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " '123',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " 'person'", ")" ], [ "INSERT INTO agreego.\"organization\" (", " \"id\",", " \"type\"", ")", "VALUES (", " '123',", " 'person'", ")" ], [ "INSERT INTO agreego.\"user\" (", " \"id\",", " \"type\"", ")", "VALUES (", " '123',", " 'person'", ")" ], [ "INSERT INTO agreego.\"person\" (", " \"date_of_birth\",", " \"first_name\",", " \"id\",", " \"last_name\",", " \"pronouns\",", " \"type\"", ")", "VALUES (", " '1990-01-01T00:00:00Z',", " 'John',", " '123',", " 'Doe',", " NULL,", " 'person'", ")" ], [ "INSERT INTO agreego.change (", " changes,", " entity_id,", " id,", " kind,", " modified_at,", " modified_by", ")", "VALUES (", " '{", " \"date_of_birth\":\"1990-01-01T00:00:00Z\",", " \"first_name\":\"John\",", " \"last_name\":\"Doe\",", " \"pronouns\":\"\",", " \"type\":\"person\"", " }',", " '123',", " '{{uuid}}',", " 'create',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000'", ")" ], [ "SELECT pg_notify('entity', '{", " \"complete\":{", " \"created_at\":\"{{timestamp}}\",", " \"created_by\":\"00000000-0000-0000-0000-000000000000\",", " \"date_of_birth\":\"1990-01-01T00:00:00Z\",", " \"first_name\":\"John\",", " \"id\":\"123\",", " \"last_name\":\"Doe\",", " \"modified_at\":\"{{timestamp}}\",", " \"modified_by\":\"00000000-0000-0000-0000-000000000000\",", " \"pronouns\":\"\",", " \"type\":\"person\"", " }", "}')" ] ] } }, { "description": "Order with a nested customer person", "action": "merge", "data": { "type": "order", "total": 100.0, "customer": { "type": "person", "first_name": "Bob", "last_name": "Smith", "date_of_birth": "2000-01-01" } }, "expect": { "success": true, "sql": [ [ "SELECT to_jsonb(t1.*) || to_jsonb(t2.*)", "FROM agreego.\"order\" t1", "LEFT JOIN agreego.\"entity\" t2 ON t2.id = t1.id", "WHERE \"id\" IS NULL" ], [ "SELECT to_jsonb(t1.*) || to_jsonb(t2.*) || to_jsonb(t3.*) || to_jsonb(t4.*)", "FROM agreego.\"person\" t1", "LEFT JOIN agreego.\"user\" t2 ON t2.id = t1.id", "LEFT JOIN agreego.\"organization\" t3 ON t3.id = t1.id", "LEFT JOIN agreego.\"entity\" t4 ON t4.id = t1.id", "WHERE", " \"first_name\" = 'Bob'", " AND \"last_name\" = 'Smith'", " AND \"date_of_birth\" = '2000-01-01'", " AND \"pronouns\" IS NULL" ], [ "INSERT INTO agreego.\"entity\" (", " \"created_at\",", " \"created_by\",", " \"id\",", " \"modified_at\",", " \"modified_by\",", " \"type\"", ")", "VALUES (", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " '{{uuid:customer_id}}',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " 'person'", ")" ], [ "INSERT INTO agreego.\"organization\" (", " \"id\",", " \"type\"", ")", "VALUES (", " '{{uuid:customer_id}}',", " 'person'", ")" ], [ "INSERT INTO agreego.\"user\" (", " \"id\",", " \"type\"", ")", "VALUES (", " '{{uuid:customer_id}}',", " 'person'", ")" ], [ "INSERT INTO agreego.\"person\" (", " \"date_of_birth\",", " \"first_name\",", " \"id\",", " \"last_name\",", " \"type\"", ")", "VALUES (", " '2000-01-01',", " 'Bob',", " '{{uuid:customer_id}}',", " 'Smith',", " 'person'", ")" ], [ "INSERT INTO agreego.change (", " changes,", " entity_id,", " id,", " kind,", " modified_at,", " modified_by", ")", "VALUES (", " '{", " \"date_of_birth\":\"2000-01-01\",", " \"first_name\":\"Bob\",", " \"last_name\":\"Smith\",", " \"type\":\"person\"", " }',", " '{{uuid:customer_id}}',", " '{{uuid}}',", " 'create',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000'", ")" ], [ "SELECT pg_notify('entity', '{", " \"complete\":{", " \"created_at\":\"{{timestamp}}\",", " \"created_by\":\"00000000-0000-0000-0000-000000000000\",", " \"date_of_birth\":\"2000-01-01\",", " \"first_name\":\"Bob\",", " \"id\":\"{{uuid:customer_id}}\",", " \"last_name\":\"Smith\",", " \"modified_at\":\"{{timestamp}}\",", " \"modified_by\":\"00000000-0000-0000-0000-000000000000\",", " \"type\":\"person\"", " }", "}')" ], [ "INSERT INTO agreego.\"entity\" (", " \"created_at\",", " \"created_by\",", " \"id\",", " \"modified_at\",", " \"modified_by\",", " \"type\"", ")", "VALUES (", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " '{{uuid:order_id}}',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " 'order'", ")" ], [ "INSERT INTO agreego.\"order\" (", " \"customer_id\",", " \"id\",", " \"total\",", " \"type\"", ")", "VALUES (", " '{{uuid:customer_id}}',", " '{{uuid:order_id}}',", " 100,", " 'order'", ")" ], [ "INSERT INTO agreego.change (", " changes,", " entity_id,", " id,", " kind,", " modified_at,", " modified_by", ")", "VALUES (", " '{\"customer_id\":\"{{uuid:customer_id}}\",\"total\":100.0,\"type\":\"order\"}',", " '{{uuid:order_id}}',", " '{{uuid}}',", " 'create',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000'", ")" ], [ "SELECT pg_notify('entity', '{", " \"complete\":{", " \"created_at\":\"{{timestamp}}\",", " \"created_by\":\"00000000-0000-0000-0000-000000000000\",", " \"customer_id\":\"{{uuid:customer_id}}\",", " \"id\":\"{{uuid:order_id}}\",", " \"modified_at\":\"{{timestamp}}\",", " \"modified_by\":\"00000000-0000-0000-0000-000000000000\",", " \"total\":100.0,", " \"type\":\"order\"", " }", "}')" ] ] } }, { "description": "Should execute a 1:N array relation mapping parent IDs to children", "action": "merge", "data": { "id": "abc", "type": "order", "total": 99.0, "lines": [ { "type": "order_line", "product": "Widget", "price": 99.0 } ] }, "expect": { "success": true, "sql": [ [ "SELECT to_jsonb(t1.*) || to_jsonb(t2.*)", "FROM agreego.\"order\" t1", "LEFT JOIN agreego.\"entity\" t2 ON t2.id = t1.id", "WHERE t1.id = 'abc'" ], [ "INSERT INTO agreego.\"entity\" (", " \"created_at\",", " \"created_by\",", " \"id\",", " \"modified_at\",", " \"modified_by\",", " \"type\"", ")", "VALUES (", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " 'abc',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " 'order'", ")" ], [ "INSERT INTO agreego.\"order\" (", " \"id\",", " \"total\",", " \"type\"", ")", "VALUES (", " 'abc',", " 99,", " 'order'", ")" ], [ "INSERT INTO agreego.\"entity\" (", " \"created_at\",", " \"created_by\",", " \"id\",", " \"modified_at\",", " \"modified_by\",", " \"type\"", ")", "VALUES (", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " '{{uuid:line_id}}',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000',", " 'order_line'", ")" ], [ "INSERT INTO agreego.\"order_line\" (", " \"id\",", " \"order_id\",", " \"price\",", " \"product\",", " \"type\")", "VALUES (", " '{{uuid:line_id}}',", " 'abc',", " 99,", " 'Widget',", " 'order_line'", ")" ], [ "INSERT INTO agreego.change (", " changes,", " entity_id,", " id,", " kind,", " modified_at,", " modified_by", ")", "VALUES (", " '{", " \"order_id\":\"abc\",", " \"price\":99.0,", " \"product\":\"Widget\",", " \"type\":\"order_line\"", " }',", " '{{uuid:line_id}}',", " '{{uuid}}',", " 'create',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000'", ")" ], [ "SELECT pg_notify('entity', '{", " \"complete\":{", " \"created_at\":\"{{timestamp}}\",", " \"created_by\":\"00000000-0000-0000-0000-000000000000\",", " \"id\":\"{{uuid:line_id}}\",", " \"modified_at\":\"{{timestamp}}\",", " \"modified_by\":\"00000000-0000-0000-0000-000000000000\",", " \"order_id\":\"abc\",", " \"price\":99.0,\",", " \"product\":\"Widget\",", " \"type\":\"order_line\"", " }", "}')" ], [ "INSERT INTO agreego.change (", " changes,", " entity_id,", " id,", " kind,", " modified_at,", " modified_by", ")", "VALUES (", " '{\"total\":99.0,\"type\":\"order\"}',", " 'abc',", " '{{uuid}}',", " 'create',", " '{{timestamp}}',", " '00000000-0000-0000-0000-000000000000'", ")" ], [ "SELECT pg_notify('entity', '{", " \"complete\":{", " \"created_at\":\"{{timestamp}}\",", " \"created_by\":\"00000000-0000-0000-0000-000000000000\",", " \"id\":\"abc\",", " \"modified_at\":\"{{timestamp}}\",", " \"modified_by\":\"00000000-0000-0000-0000-000000000000\",", " \"total\":99.0,", " \"type\":\"order\"}}')" ] ] } } ] } ]