From b3a3e0837ac22fb02359114eac64efd46d52dad9 Mon Sep 17 00:00:00 2001 From: Ivan S Glazunov Date: Thu, 10 Oct 2024 22:26:55 +0300 Subject: [PATCH] 0.0.616 --- imports/bool_exp_to_sql.ts | 10 +++++++++- migrations/1622421760258-selectors.ts | 10 ++++++++-- migrations/1622421760260-permissions.ts | 1 - package.json | 2 +- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/imports/bool_exp_to_sql.ts b/imports/bool_exp_to_sql.ts index f88a377d..34dafd5d 100644 --- a/imports/bool_exp_to_sql.ts +++ b/imports/bool_exp_to_sql.ts @@ -29,8 +29,14 @@ const deep = new DeepClient({ export const itemReplaceSymbol = 777777777777; export const userReplaceSymbol = 777777777778; +export const fromReplaceSymbol = 777777777779; +export const toReplaceSymbol = 777777777780; +export const typeReplaceSymbol = 777777777781; export const itemPublicSymbol = 'X-Deep-Item-Id'; export const userPublicSymbol = 'X-Deep-User-Id'; +export const fromPublicSymbol = 'X-Deep-From-Id'; +export const toPublicSymbol = 'X-Deep-To-Id'; +export const typePublicSymbol = 'X-Deep-Type-Id'; export const applyBoolExpToLink = (sql: string, linkId: Id) => { return sql.replace(`${itemReplaceSymbol}`, `${linkId}`); @@ -48,7 +54,9 @@ export const boolExpToSQL = async (boolExpId: Id, boolExpValue: any) => { gql = gql.replace(new RegExp(`'${userPublicSymbol}'`, 'g'), userReplaceSymbol); gql = gql.replace(new RegExp(`"${userPublicSymbol}"`, 'g'), userReplaceSymbol); gql = gql.replace(new RegExp(`'${itemPublicSymbol}'`, 'g'), itemReplaceSymbol); - gql = gql.replace(new RegExp(`"${itemPublicSymbol}"`, 'g'), itemReplaceSymbol); + gql = gql.replace(new RegExp(`"${fromPublicSymbol}"`, 'g'), fromReplaceSymbol); + gql = gql.replace(new RegExp(`"${toPublicSymbol}"`, 'g'), toReplaceSymbol); + gql = gql.replace(new RegExp(`"${typePublicSymbol}"`, 'g'), typeReplaceSymbol); explained = await api.explain(`{ links(where: { _and: [{ id: { _eq: ${itemReplaceSymbol} } }, ${gql}] }, limit: 1) { id } }`); sql = explained?.data?.[0]?.sql; if (sql) { diff --git a/migrations/1622421760258-selectors.ts b/migrations/1622421760258-selectors.ts index a0b6d38f..6a135dab 100644 --- a/migrations/1622421760258-selectors.ts +++ b/migrations/1622421760258-selectors.ts @@ -1,7 +1,7 @@ import { generateApolloClient } from '@deep-foundation/hasura/client.js'; import { sql } from '@deep-foundation/hasura/sql.js'; import Debug from 'debug'; -import { itemReplaceSymbol, userReplaceSymbol } from '../imports/bool_exp_to_sql.js'; +import { fromReplaceSymbol, itemReplaceSymbol, toReplaceSymbol, typeReplaceSymbol, userReplaceSymbol } from '../imports/bool_exp_to_sql.js'; import { DeepClient, _ids } from '../imports/client.js'; import { api, SCHEMA } from './1616701513782-links.js'; import { MP_TABLE_NAME } from './1621815803572-materialized-path.js'; @@ -63,17 +63,23 @@ export const up = async () => { await api.sql(sql` CREATE OR REPLACE FUNCTION bool_exp_execute(target_link_id bigint, bool_exp_link_id bigint, user_id bigint) RETURNS BOOL AS $trigger$ DECLARE boolExp RECORD; + link RECORD; sqlResult INT; query TEXT; BEGIN SELECT be.* into boolExp FROM "${BOOL_EXP_TABLE_NAME}" as be WHERE be.link_id=bool_exp_link_id; + + SELECT * into link + FROM "links" + WHERE id=target_link_id; + IF boolExp IS NOT NULL THEN IF (user_id IS NULL) THEN user_id := ${_ids?.['@deep-foundation/core']?.Any}; END IF; - SELECT REPLACE(REPLACE(boolExp.value, ${itemReplaceSymbol}::text, target_link_id::text), ${userReplaceSymbol}::text, user_id::text) INTO query; + SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(boolExp.value, ${itemReplaceSymbol}::text, target_link_id::text), ${userReplaceSymbol}::text, user_id::text), ${fromReplaceSymbol}::text, user_id::text), ${toReplaceSymbol}::text, user_id::text), ${typeReplaceSymbol}::text, user_id::text) INTO query; EXECUTE query INTO sqlResult; IF sqlResult = 0 THEN RETURN FALSE; diff --git a/migrations/1622421760260-permissions.ts b/migrations/1622421760260-permissions.ts index ed17dfe6..ecf69adc 100644 --- a/migrations/1622421760260-permissions.ts +++ b/migrations/1622421760260-permissions.ts @@ -13,7 +13,6 @@ const log = debug.extend('log'); const error = debug.extend('error'); export const TABLE_NAME = 'links'; -export const REPLACE_PATTERN_ID = '777777777777'; const client = generateApolloClient({ path: `${process.env.MIGRATIONS_HASURA_PATH}/v1/graphql`, diff --git a/package.json b/package.json index 43f8981f..21559c6a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@deep-foundation/deeplinks", - "version": "0.0.615", + "version": "0.0.616", "license": "Unlicense", "type": "module", "main": "import.js",