UNPKG

@deep-foundation/deeplinks

Version:

[![npm](https://img.shields.io/npm/v/@deep-foundation/deeplinks.svg)](https://www.npmjs.com/package/@deep-foundation/deeplinks) [![Gitpod](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/deep-fo

637 lines 42.7 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63; import { HasuraApi } from '@deep-foundation/hasura/api.js'; import { generateApolloClient } from '@deep-foundation/hasura/client.js'; import { sql } from '@deep-foundation/hasura/sql.js'; import { down as downRels, up as upRels } from '@deep-foundation/materialized-path/relationships.js'; import { down as downTable, up as upTable } from '@deep-foundation/materialized-path/table.js'; import { Trigger } from '@deep-foundation/materialized-path/trigger.js'; import Debug from 'debug'; import { _ids } from '../imports/client.js'; import { SCHEMA, TABLE_NAME as LINKS_TABLE_NAME } from './1616701513782-links.js'; const debug = Debug('deeplinks:migrations:materialized-path'); const log = debug.extend('log'); const error = debug.extend('error'); const client = generateApolloClient({ path: `${process.env.MIGRATIONS_HASURA_PATH}/v1/graphql`, ssl: !!+(process.env.MIGRATIONS_HASURA_SSL || 0), secret: process.env.MIGRATIONS_HASURA_SECRET, }); const api = new HasuraApi({ path: process.env.MIGRATIONS_HASURA_PATH, ssl: !!+(process.env.MIGRATIONS_HASURA_SSL || 0), secret: process.env.MIGRATIONS_HASURA_SECRET, }); export const MP_TABLE_NAME = 'mp'; export const TREE_TABLE_NAME = 'tree'; const triggerOptionos = { mpTableName: MP_TABLE_NAME, graphTableName: LINKS_TABLE_NAME, id_field: 'id', to_field: 'to_id', from_field: 'from_id', id_type: 'bigint', iteratorInsertDeclare: 'groupRow RECORD;', iteratorDeleteArgumentSend: 'groupRow', iteratorDeleteArgumentGet: 'groupRow RECORD', iteratorInsertBegin: `FOR groupRow IN ( SELECT DISTINCT mpGroup."id" FROM ${LINKS_TABLE_NAME} as mpGroup, ${LINKS_TABLE_NAME} as mpInclude WHERE mpInclude."type_id" IN (${(_a = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _a === void 0 ? void 0 : _a.TreeIncludeDown},${(_b = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _b === void 0 ? void 0 : _b.TreeIncludeUp},${(_c = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _c === void 0 ? void 0 : _c.TreeIncludeNode}, ${(_d = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _d === void 0 ? void 0 : _d.TreeIncludeIn}, ${(_e = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _e === void 0 ? void 0 : _e.TreeIncludeOut}, ${(_f = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _f === void 0 ? void 0 : _f.TreeIncludeFromCurrent}, ${(_g = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _g === void 0 ? void 0 : _g.TreeIncludeToCurrent}, ${(_h = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _h === void 0 ? void 0 : _h.TreeIncludeCurrentFrom}, ${(_j = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _j === void 0 ? void 0 : _j.TreeIncludeCurrentTo}, ${(_k = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _k === void 0 ? void 0 : _k.TreeIncludeFromCurrentTo}, ${(_l = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _l === void 0 ? void 0 : _l.TreeIncludeToCurrentFrom}) AND mpInclude."to_id" IN (NEW.type_id, ${(_m = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _m === void 0 ? void 0 : _m.Any}) AND mpInclude."from_id" = mpGroup."id" AND mpGroup."type_id" = ${(_o = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _o === void 0 ? void 0 : _o.Tree} AND mpGroup."id" != ${(_p = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _p === void 0 ? void 0 : _p.typesTree} AND ((groupid != 0 AND groupid = mpGroup."id") OR groupid = 0) ) LOOP`, iteratorInsertEnd: 'END LOOP;', groupInsert: 'groupRow."id"', additionalFields: '', additionalData: '', iteratorDeleteDeclare: 'groupRow RECORD;', iteratorDeleteBegin: `FOR groupRow IN ( SELECT mpGroup.* FROM ${LINKS_TABLE_NAME} as mpGroup, ${LINKS_TABLE_NAME} as mpInclude WHERE mpInclude."type_id" IN (${(_q = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _q === void 0 ? void 0 : _q.TreeIncludeDown},${(_r = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _r === void 0 ? void 0 : _r.TreeIncludeUp},${(_s = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _s === void 0 ? void 0 : _s.TreeIncludeNode}, ${(_t = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _t === void 0 ? void 0 : _t.TreeIncludeIn}, ${(_u = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _u === void 0 ? void 0 : _u.TreeIncludeOut}, ${(_v = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _v === void 0 ? void 0 : _v.TreeIncludeFromCurrent}, ${(_w = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _w === void 0 ? void 0 : _w.TreeIncludeToCurrent}, ${(_x = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _x === void 0 ? void 0 : _x.TreeIncludeCurrentFrom}, ${(_y = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _y === void 0 ? void 0 : _y.TreeIncludeCurrentTo}, ${(_z = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _z === void 0 ? void 0 : _z.TreeIncludeFromCurrentTo}, ${(_0 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _0 === void 0 ? void 0 : _0.TreeIncludeToCurrentFrom}) AND mpInclude."to_id" IN (OLD.type_id, ${(_1 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _1 === void 0 ? void 0 : _1.Any}) AND mpInclude."from_id" = mpGroup."id" AND mpGroup."type_id" = ${(_2 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _2 === void 0 ? void 0 : _2.Tree} AND mpGroup."id" != ${(_3 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _3 === void 0 ? void 0 : _3.typesTree} ) LOOP`, iteratorDeleteEnd: 'END LOOP;', groupDelete: 'groupRow."id"', isAllowSpreadFromCurrent: `EXISTS (SELECT l.* FROM ${LINKS_TABLE_NAME} as l WHERE l.type_id IN (${(_4 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _4 === void 0 ? void 0 : _4.TreeIncludeDown}, ${(_5 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _5 === void 0 ? void 0 : _5.TreeIncludeIn}, ${(_6 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _6 === void 0 ? void 0 : _6.TreeIncludeFromCurrent}, ${(_7 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _7 === void 0 ? void 0 : _7.TreeIncludeFromCurrentTo}) AND l.from_id = groupRow.id AND l.to_id IN (CURRENT.type_id) )`, isAllowSpreadCurrentTo: `EXISTS (SELECT l.* FROM ${LINKS_TABLE_NAME} as l WHERE l.type_id IN (${(_8 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _8 === void 0 ? void 0 : _8.TreeIncludeDown}, ${(_9 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _9 === void 0 ? void 0 : _9.TreeIncludeOut}, ${(_10 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _10 === void 0 ? void 0 : _10.TreeIncludeCurrentTo}, ${(_11 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _11 === void 0 ? void 0 : _11.TreeIncludeFromCurrentTo}) AND l.from_id = groupRow.id AND l.to_id IN (CURRENT.type_id) AND EXISTS (SELECT * FROM ${LINKS_TABLE_NAME} as child, ${LINKS_TABLE_NAME} as include WHERE child."id" = CURRENT."to_id" AND include."type_id" IN (${(_12 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _12 === void 0 ? void 0 : _12.TreeIncludeDown},${(_13 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _13 === void 0 ? void 0 : _13.TreeIncludeUp},${(_14 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _14 === void 0 ? void 0 : _14.TreeIncludeNode}, ${(_15 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _15 === void 0 ? void 0 : _15.TreeIncludeIn}, ${(_16 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _16 === void 0 ? void 0 : _16.TreeIncludeOut}, ${(_17 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _17 === void 0 ? void 0 : _17.TreeIncludeFromCurrent}, ${(_18 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _18 === void 0 ? void 0 : _18.TreeIncludeToCurrent}, ${(_19 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _19 === void 0 ? void 0 : _19.TreeIncludeCurrentFrom}, ${(_20 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _20 === void 0 ? void 0 : _20.TreeIncludeCurrentTo}, ${(_21 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _21 === void 0 ? void 0 : _21.TreeIncludeFromCurrentTo}, ${(_22 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _22 === void 0 ? void 0 : _22.TreeIncludeToCurrentFrom}) AND include."from_id" = groupRow.id AND include."to_id" IN (child.type_id, ${(_23 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _23 === void 0 ? void 0 : _23.Any}) ) )`, isAllowSpreadToCurrent: `EXISTS (SELECT l.* FROM ${LINKS_TABLE_NAME} as l WHERE l.type_id IN (${(_24 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _24 === void 0 ? void 0 : _24.TreeIncludeUp}, ${(_25 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _25 === void 0 ? void 0 : _25.TreeIncludeIn}, ${(_26 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _26 === void 0 ? void 0 : _26.TreeIncludeToCurrent}, ${(_27 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _27 === void 0 ? void 0 : _27.TreeIncludeToCurrentFrom}) AND l.from_id = groupRow.id AND l.to_id IN (CURRENT.type_id) )`, isAllowSpreadCurrentFrom: `EXISTS (SELECT l.* FROM ${LINKS_TABLE_NAME} as l WHERE l.type_id IN (${(_28 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _28 === void 0 ? void 0 : _28.TreeIncludeUp}, ${(_29 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _29 === void 0 ? void 0 : _29.TreeIncludeOut}, ${(_30 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _30 === void 0 ? void 0 : _30.TreeIncludeCurrentFrom}, ${(_31 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _31 === void 0 ? void 0 : _31.TreeIncludeToCurrentFrom}) AND l.from_id = groupRow.id AND l.to_id IN (CURRENT.type_id) AND EXISTS (SELECT * FROM ${LINKS_TABLE_NAME} as child, ${LINKS_TABLE_NAME} as include WHERE child."id" = CURRENT."from_id" AND include."type_id" IN (${(_32 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _32 === void 0 ? void 0 : _32.TreeIncludeDown},${(_33 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _33 === void 0 ? void 0 : _33.TreeIncludeUp},${(_34 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _34 === void 0 ? void 0 : _34.TreeIncludeNode}, ${(_35 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _35 === void 0 ? void 0 : _35.TreeIncludeIn}, ${(_36 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _36 === void 0 ? void 0 : _36.TreeIncludeOut}, ${(_37 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _37 === void 0 ? void 0 : _37.TreeIncludeFromCurrent}, ${(_38 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _38 === void 0 ? void 0 : _38.TreeIncludeToCurrent}, ${(_39 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _39 === void 0 ? void 0 : _39.TreeIncludeCurrentFrom}, ${(_40 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _40 === void 0 ? void 0 : _40.TreeIncludeCurrentTo}, ${(_41 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _41 === void 0 ? void 0 : _41.TreeIncludeFromCurrentTo}, ${(_42 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _42 === void 0 ? void 0 : _42.TreeIncludeToCurrentFrom}) AND include."from_id" = groupRow.id AND include."to_id" IN (child.type_id, ${(_43 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _43 === void 0 ? void 0 : _43.Any}) ) )`, isAllowSpreadToInCurrent: `EXISTS (SELECT l.* FROM ${LINKS_TABLE_NAME} as l WHERE l.type_id IN (${(_44 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _44 === void 0 ? void 0 : _44.TreeIncludeDown}, ${(_45 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _45 === void 0 ? void 0 : _45.TreeIncludeOut}, ${(_46 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _46 === void 0 ? void 0 : _46.TreeIncludeCurrentTo}, ${(_47 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _47 === void 0 ? void 0 : _47.TreeIncludeFromCurrentTo}) AND l.from_id = groupRow.id AND l.to_id IN (flowLink.type_id, ${(_48 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _48 === void 0 ? void 0 : _48.Any}) )`, isAllowSpreadCurrentFromOut: `EXISTS (SELECT l.* FROM ${LINKS_TABLE_NAME} as l WHERE l.type_id IN (${(_49 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _49 === void 0 ? void 0 : _49.TreeIncludeDown}, ${(_50 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _50 === void 0 ? void 0 : _50.TreeIncludeIn}, ${(_51 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _51 === void 0 ? void 0 : _51.TreeIncludeFromCurrent}, ${(_52 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _52 === void 0 ? void 0 : _52.TreeIncludeFromCurrentTo}) AND l.from_id = groupRow.id AND l.to_id IN (flowLink.type_id, ${(_53 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _53 === void 0 ? void 0 : _53.Any}) )`, isAllowSpreadFromOutCurrent: `EXISTS (SELECT l.* FROM ${LINKS_TABLE_NAME} as l WHERE l.type_id IN (${(_54 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _54 === void 0 ? void 0 : _54.TreeIncludeUp}, ${(_55 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _55 === void 0 ? void 0 : _55.TreeIncludeOut}, ${(_56 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _56 === void 0 ? void 0 : _56.TreeIncludeCurrentFrom}, ${(_57 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _57 === void 0 ? void 0 : _57.TreeIncludeToCurrentFrom}) AND l.from_id = groupRow.id AND l.to_id IN (flowLink.type_id, ${(_58 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _58 === void 0 ? void 0 : _58.Any}) )`, isAllowSpreadCurrentToIn: `EXISTS (SELECT l.* FROM ${LINKS_TABLE_NAME} as l WHERE l.type_id IN (${(_59 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _59 === void 0 ? void 0 : _59.TreeIncludeUp}, ${(_60 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _60 === void 0 ? void 0 : _60.TreeIncludeIn}, ${(_61 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _61 === void 0 ? void 0 : _61.TreeIncludeToCurrent}, ${(_62 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _62 === void 0 ? void 0 : _62.TreeIncludeFromCurrentTo}) AND l.from_id = groupRow.id AND l.to_id IN (flowLink.type_id, ${(_63 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _63 === void 0 ? void 0 : _63.Any}) )`, postfix: '', }; const trigger = Trigger(triggerOptionos); const DEFAULT_SCHEMA = process.env.MIGRATIONS_SCHEMA || 'public'; const DEFAULT_TREE_TABLE = TREE_TABLE_NAME; const DEFAULT_GRAPH_TABLE = LINKS_TABLE_NAME; export const upTreeSchema = ({ SCHEMA = DEFAULT_SCHEMA, TREE_TABLE = DEFAULT_TREE_TABLE, GRAPH_TABLE = DEFAULT_GRAPH_TABLE, ID_FIELD = 'id', api }) => __awaiter(void 0, void 0, void 0, function* () { yield api.query({ type: 'create_select_permission', args: { table: TREE_TABLE, role: 'guest', permission: { columns: '*', filter: {}, limit: 999, allow_aggregations: true } } }); yield api.query({ type: 'create_select_permission', args: { table: TREE_TABLE, role: 'user', permission: { columns: '*', filter: {}, limit: 999, allow_aggregations: true } } }); yield api.query({ type: 'create_array_relationship', args: { table: GRAPH_TABLE, name: 'up', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: TREE_TABLE, }, column_mapping: { [ID_FIELD]: 'link_id', }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_array_relationship', args: { table: GRAPH_TABLE, name: 'down', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: TREE_TABLE, }, column_mapping: { [ID_FIELD]: 'parent_id', }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_array_relationship', args: { table: GRAPH_TABLE, name: 'root', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: TREE_TABLE, }, column_mapping: { [ID_FIELD]: 'root_id', }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_array_relationship', args: { table: GRAPH_TABLE, name: TREE_TABLE_NAME, using: { manual_configuration: { remote_table: { schema: SCHEMA, name: TREE_TABLE, }, column_mapping: { [ID_FIELD]: 'tree_id', }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_object_relationship', args: { table: TREE_TABLE, name: 'link', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: GRAPH_TABLE, }, column_mapping: { link_id: ID_FIELD, }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_object_relationship', args: { table: TREE_TABLE, name: 'parent', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: GRAPH_TABLE, }, column_mapping: { parent_id: ID_FIELD, }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_object_relationship', args: { table: TREE_TABLE, name: 'root', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: GRAPH_TABLE, }, column_mapping: { root_id: ID_FIELD, }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_object_relationship', args: { table: TREE_TABLE, name: 'tree', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: GRAPH_TABLE, }, column_mapping: { tree_id: ID_FIELD, }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_array_relationship', args: { table: TREE_TABLE, name: 'by_link', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: TREE_TABLE, }, column_mapping: { link_id: 'link_id', }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_array_relationship', args: { table: TREE_TABLE, name: 'by_parent', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: TREE_TABLE, }, column_mapping: { parent_id: 'parent_id', }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_array_relationship', args: { table: TREE_TABLE, name: 'by_position', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: TREE_TABLE, }, column_mapping: { position_id: 'position_id', }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_object_relationship', args: { table: TREE_TABLE, name: 'by_tree', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: GRAPH_TABLE, }, column_mapping: { tree_id: ID_FIELD, }, insertion_order: 'after_parent', }, }, }, }); yield api.query({ type: 'create_array_relationship', args: { table: TREE_TABLE, name: 'by_root', using: { manual_configuration: { remote_table: { schema: SCHEMA, name: TREE_TABLE, }, column_mapping: { root_id: 'root_id', }, insertion_order: 'after_parent', }, }, }, }); }); export const downTreeSchema = ({ SCHEMA = DEFAULT_SCHEMA, TREE_TABLE = DEFAULT_TREE_TABLE, GRAPH_TABLE = DEFAULT_GRAPH_TABLE, api }) => __awaiter(void 0, void 0, void 0, function* () { yield api.query({ type: 'drop_relationship', args: { table: GRAPH_TABLE, relationship: 'up', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: GRAPH_TABLE, relationship: 'down', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: GRAPH_TABLE, relationship: 'root', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: GRAPH_TABLE, relationship: TREE_TABLE_NAME, cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: TREE_TABLE, relationship: 'link', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: TREE_TABLE, relationship: 'parent', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: TREE_TABLE, relationship: 'root', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: TREE_TABLE, relationship: 'by_link', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: TREE_TABLE, relationship: 'by_parent', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: TREE_TABLE, relationship: 'by_position', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: TREE_TABLE, relationship: 'by_tree', cascade: true, }, }); yield api.query({ type: 'drop_relationship', args: { table: TREE_TABLE, relationship: 'by_root', cascade: true, }, }); }); export const up = () => __awaiter(void 0, void 0, void 0, function* () { var _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113; log('up'); yield upTable({ MP_TABLE: MP_TABLE_NAME, customColumns: '', api, }); yield upRels({ SCHEMA, MP_TABLE: MP_TABLE_NAME, GRAPH_TABLE: LINKS_TABLE_NAME, api, }); yield api.sql(trigger.upFunctionInsertNode()); yield api.sql(trigger.upFunctionUpdateNode()); yield api.sql(trigger.upFunctionDeleteNode()); yield api.sql(trigger.upTriggerDelete()); yield api.sql(trigger.upTriggerUpdate()); yield api.sql(trigger.upTriggerInsert()); yield (() => { const { mpTableName, graphTableName, id_field, to_field, from_field, id_type, iteratorInsertDeclare, iteratorInsertBegin, iteratorInsertEnd, iteratorDeleteArgumentSend, iteratorDeleteArgumentGet, iteratorDeleteDeclare, iteratorDeleteBegin, iteratorDeleteEnd, groupInsert, groupDelete, additionalFields, additionalData, isAllowSpreadFromCurrent, isAllowSpreadCurrentTo, isAllowSpreadToCurrent, isAllowSpreadCurrentFrom, isAllowSpreadToInCurrent, isAllowSpreadCurrentFromOut, isAllowSpreadFromOutCurrent, isAllowSpreadCurrentToIn, postfix, } = triggerOptionos; })(); yield api.sql(sql `select create_btree_indexes_for_all_columns('${SCHEMA}', '${MP_TABLE_NAME}');`); yield api.sql(sql `CREATE OR REPLACE FUNCTION ${LINKS_TABLE_NAME}__tree_include__insert__function() RETURNS TRIGGER AS $trigger$ BEGIN IF (NEW."type_id" IN (${(_64 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _64 === void 0 ? void 0 : _64.TreeIncludeDown},${(_65 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _65 === void 0 ? void 0 : _65.TreeIncludeUp},${(_66 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _66 === void 0 ? void 0 : _66.TreeIncludeNode}, ${(_67 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _67 === void 0 ? void 0 : _67.TreeIncludeIn}, ${(_68 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _68 === void 0 ? void 0 : _68.TreeIncludeOut}, ${(_69 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _69 === void 0 ? void 0 : _69.TreeIncludeFromCurrent}, ${(_70 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _70 === void 0 ? void 0 : _70.TreeIncludeToCurrent}, ${(_71 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _71 === void 0 ? void 0 : _71.TreeIncludeCurrentFrom}, ${(_72 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _72 === void 0 ? void 0 : _72.TreeIncludeCurrentTo}, ${(_73 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _73 === void 0 ? void 0 : _73.TreeIncludeFromCurrentTo}, ${(_74 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _74 === void 0 ? void 0 : _74.TreeIncludeToCurrentFrom})) THEN PERFORM ${MP_TABLE_NAME}__insert_link__function_core(${LINKS_TABLE_NAME}.*, NEW."from_id") FROM ${LINKS_TABLE_NAME} WHERE type_id=NEW."to_id" OR NEW."to_id"=${(_75 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _75 === void 0 ? void 0 : _75.Any}; END IF; RETURN NEW; END; $trigger$ LANGUAGE plpgsql;`); yield api.sql(sql `CREATE OR REPLACE FUNCTION ${LINKS_TABLE_NAME}__tree_include__update__function() RETURNS TRIGGER AS $trigger$ DECLARE groupRow RECORD; BEGIN IF (NEW."type_id" IN (${(_76 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _76 === void 0 ? void 0 : _76.TreeIncludeDown},${(_77 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _77 === void 0 ? void 0 : _77.TreeIncludeUp},${(_78 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _78 === void 0 ? void 0 : _78.TreeIncludeNode}, ${(_79 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _79 === void 0 ? void 0 : _79.TreeIncludeIn}, ${(_80 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _80 === void 0 ? void 0 : _80.TreeIncludeOut}, ${(_81 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _81 === void 0 ? void 0 : _81.TreeIncludeFromCurrent}, ${(_82 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _82 === void 0 ? void 0 : _82.TreeIncludeToCurrent}, ${(_83 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _83 === void 0 ? void 0 : _83.TreeIncludeCurrentFrom}, ${(_84 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _84 === void 0 ? void 0 : _84.TreeIncludeCurrentTo}, ${(_85 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _85 === void 0 ? void 0 : _85.TreeIncludeFromCurrentTo}, ${(_86 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _86 === void 0 ? void 0 : _86.TreeIncludeToCurrentFrom})) THEN SELECT ${LINKS_TABLE_NAME}.* INTO groupRow FROM ${LINKS_TABLE_NAME} WHERE "id"=OLD."from_id" AND "type_id" = ${(_87 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _87 === void 0 ? void 0 : _87.Tree}; PERFORM ${MP_TABLE_NAME}__delete_link__function_core(${LINKS_TABLE_NAME}.*, groupRow) FROM ${LINKS_TABLE_NAME} WHERE type_id=OLD."to_id" OR OLD."to_id"=${(_88 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _88 === void 0 ? void 0 : _88.Any}; END IF; IF (NEW."type_id" IN (${(_89 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _89 === void 0 ? void 0 : _89.TreeIncludeDown},${(_90 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _90 === void 0 ? void 0 : _90.TreeIncludeUp},${(_91 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _91 === void 0 ? void 0 : _91.TreeIncludeNode}, ${(_92 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _92 === void 0 ? void 0 : _92.TreeIncludeIn}, ${(_93 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _93 === void 0 ? void 0 : _93.TreeIncludeOut}, ${(_94 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _94 === void 0 ? void 0 : _94.TreeIncludeFromCurrent}, ${(_95 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _95 === void 0 ? void 0 : _95.TreeIncludeToCurrent}, ${(_96 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _96 === void 0 ? void 0 : _96.TreeIncludeCurrentFrom}, ${(_97 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _97 === void 0 ? void 0 : _97.TreeIncludeCurrentTo}, ${(_98 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _98 === void 0 ? void 0 : _98.TreeIncludeFromCurrentTo}, ${(_99 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _99 === void 0 ? void 0 : _99.TreeIncludeToCurrentFrom})) THEN PERFORM ${MP_TABLE_NAME}__insert_link__function_core(${LINKS_TABLE_NAME}.*, NEW."from_id") FROM ${LINKS_TABLE_NAME} WHERE type_id=NEW."to_id" OR NEW."to_id"=${(_100 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _100 === void 0 ? void 0 : _100.Any}; END IF; RETURN NEW; END; $trigger$ LANGUAGE plpgsql;`); yield api.sql(sql `CREATE OR REPLACE FUNCTION ${LINKS_TABLE_NAME}__tree_include__delete__function() RETURNS TRIGGER AS $trigger$ DECLARE groupRow RECORD; BEGIN -- if delete link - is group include link IF (OLD."type_id" IN (${(_101 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _101 === void 0 ? void 0 : _101.TreeIncludeDown},${(_102 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _102 === void 0 ? void 0 : _102.TreeIncludeUp},${(_103 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _103 === void 0 ? void 0 : _103.TreeIncludeNode}, ${(_104 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _104 === void 0 ? void 0 : _104.TreeIncludeIn}, ${(_105 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _105 === void 0 ? void 0 : _105.TreeIncludeOut}, ${(_106 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _106 === void 0 ? void 0 : _106.TreeIncludeFromCurrent}, ${(_107 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _107 === void 0 ? void 0 : _107.TreeIncludeToCurrent}, ${(_108 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _108 === void 0 ? void 0 : _108.TreeIncludeCurrentFrom}, ${(_109 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _109 === void 0 ? void 0 : _109.TreeIncludeCurrentTo}, ${(_110 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _110 === void 0 ? void 0 : _110.TreeIncludeFromCurrentTo}, ${(_111 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _111 === void 0 ? void 0 : _111.TreeIncludeToCurrentFrom})) THEN SELECT ${LINKS_TABLE_NAME}.* INTO groupRow FROM ${LINKS_TABLE_NAME} WHERE "id"=OLD."from_id" AND "type_id" = ${(_112 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _112 === void 0 ? void 0 : _112.Tree}; PERFORM ${MP_TABLE_NAME}__delete_link__function_core(${LINKS_TABLE_NAME}.*, groupRow) FROM ${LINKS_TABLE_NAME} WHERE type_id=OLD."to_id" OR OLD."to_id"=${(_113 = _ids === null || _ids === void 0 ? void 0 : _ids['@deep-foundation/core']) === null || _113 === void 0 ? void 0 : _113.Any}; END IF; RETURN OLD; END; $trigger$ LANGUAGE plpgsql;`); yield api.sql(sql `CREATE TRIGGER ${LINKS_TABLE_NAME}__tree_include__insert__trigger AFTER INSERT ON "${LINKS_TABLE_NAME}" FOR EACH ROW EXECUTE PROCEDURE ${LINKS_TABLE_NAME}__tree_include__insert__function();`); yield api.sql(sql `CREATE TRIGGER ${LINKS_TABLE_NAME}__tree_include__delete__trigger AFTER DELETE ON "${LINKS_TABLE_NAME}" FOR EACH ROW EXECUTE PROCEDURE ${LINKS_TABLE_NAME}__tree_include__delete__function();`); yield api.sql(sql `CREATE TRIGGER ${LINKS_TABLE_NAME}__tree_include__update__trigger AFTER UPDATE ON "${LINKS_TABLE_NAME}" FOR EACH ROW EXECUTE PROCEDURE ${LINKS_TABLE_NAME}__tree_include__update__function();`); log('tree view'); yield api.sql(sql ` CREATE VIEW tree AS SELECT mp."id" as "id", mp."item_id" as "link_id", mp."path_item_id" as "parent_id", mp."path_item_depth" as "depth", mp."root_id" as "root_id", mp."position_id" as "position_id", mp."group_id" as "tree_id", (mp."item_id" = mp."path_item_id") as "self" FROM ${MP_TABLE_NAME} as mp; `); yield api.query({ type: 'track_table', args: { schema: SCHEMA, name: TREE_TABLE_NAME, }, }); upTreeSchema({ api }); }); export const down = () => __awaiter(void 0, void 0, void 0, function* () { log('down'); log('tree view'); yield downTreeSchema({ api }); yield api.query({ type: 'untrack_table', args: { table: { schema: SCHEMA, name: TREE_TABLE_NAME, }, cascade: true, }, }); yield api.sql(sql ` DROP VIEW IF EXISTS ${SCHEMA}."tree" CASCADE; `); log('dropInclude'); yield api.sql(sql `DROP FUNCTION IF EXISTS ${LINKS_TABLE_NAME}__tree_include__insert__function CASCADE;`); yield api.sql(sql `DROP FUNCTION IF EXISTS ${LINKS_TABLE_NAME}__tree_include__update__function CASCADE;`); yield api.sql(sql `DROP FUNCTION IF EXISTS ${LINKS_TABLE_NAME}__tree_include__delete__function CASCADE;`); yield api.sql(sql `DROP TRIGGER IF EXISTS ${LINKS_TABLE_NAME}__tree_include__insert__trigger ON "${LINKS_TABLE_NAME}";`); yield api.sql(sql `DROP TRIGGER IF EXISTS ${LINKS_TABLE_NAME}__tree_include__update__trigger ON "${LINKS_TABLE_NAME}";`); yield api.sql(sql `DROP TRIGGER IF EXISTS ${LINKS_TABLE_NAME}__tree_include__delete__trigger ON "${LINKS_TABLE_NAME}";`); log('dropRels'); yield downRels({ MP_TABLE: MP_TABLE_NAME, GRAPH_TABLE: LINKS_TABLE_NAME, api, }); log('dropTrigger'); yield api.sql(trigger.downFunctionInsertNode()); yield api.sql(trigger.downFunctionUpdateNode()); yield api.sql(trigger.downFunctionDeleteNode()); yield api.sql(trigger.downTriggerDelete()); yield api.sql(trigger.downTriggerUpdate()); yield api.sql(trigger.downTriggerInsert()); log('dropTable'); yield downTable({ MP_TABLE: MP_TABLE_NAME, api, }); }); //# sourceMappingURL=1621815803572-materialized-path.js.map