1106 lines
46 KiB
JSON
1106 lines
46 KiB
JSON
[
|
|
{
|
|
"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\"}}')"
|
|
]
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
] |