增加了translateFilterToObjectPredicate

This commit is contained in:
Xu Chang 2023-11-30 19:38:01 +08:00
parent 95e5606b10
commit c745debe5e
7 changed files with 62 additions and 7 deletions

View File

@ -975,12 +975,12 @@ class RelationAuth {
value: '',
$$createAt$$: 1,
$$updateAt$$: 1,
$$seq$$: 'temp',
$$seq$$: 123,
recursive: false,
},
$$createAt$$: 1,
$$updateAt$$: 1,
$$seq$$: 'temp',
$$seq$$: 123,
deActions: [node.action],
});
}

View File

@ -77,3 +77,9 @@ export declare function makeTreeDescendantFilter<ED extends EntityDict & BaseEnt
*/
export declare function checkFilterContains<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends SyncContext<ED> | AsyncContext<ED>>(entity: T, context: Cxt, contained: ED[T]['Selection']['filter'], filter?: ED[T]['Selection']['filter'], dataCompare?: true, warningOnDataCompare?: true): boolean | Promise<boolean>;
export declare function checkFilterRepel<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends SyncContext<ED> | AsyncContext<ED>>(entity: T, context: Cxt, filter1: ED[T]['Selection']['filter'], filter2: ED[T]['Selection']['filter'], dataCompare?: true, warningOnDataCompare?: true): boolean | Promise<boolean>;
/**
* filter当成非结构化属性存储filter进行转换$开头的escape
* filter是查询数据的标准子集true
* @param filter
*/
export declare function translateFilterToObjectPredicate(filter: Record<string, any>): {};

View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkFilterRepel = exports.checkFilterContains = exports.makeTreeDescendantFilter = exports.makeTreeAncestorFilter = exports.same = exports.getRelevantIds = exports.judgeValueRelation = exports.combineFilters = void 0;
exports.translateFilterToObjectPredicate = exports.checkFilterRepel = exports.checkFilterContains = exports.makeTreeDescendantFilter = exports.makeTreeAncestorFilter = exports.same = exports.getRelevantIds = exports.judgeValueRelation = exports.combineFilters = void 0;
const tslib_1 = require("tslib");
const assert_1 = tslib_1.__importDefault(require("assert"));
const types_1 = require("../types");
@ -1602,6 +1602,30 @@ function checkFilterRepel(entity, context, filter1, filter2, dataCompare, warnin
return false;
}
exports.checkFilterRepel = checkFilterRepel;
/**
* 有的场景下将filter当成非结构化属性存储又想支持对其查询此时必须将查询的filter进行转换处理其中$开头的escape
* 只要filter是查询数据的标准子集查询应当能返回true
* @param filter
*/
function translateFilterToObjectPredicate(filter) {
const copyInner = (orig, dest) => {
for (const key in orig) {
const value = orig[key];
const key2 = key.startsWith('$') ? `.${key}` : key;
if (typeof value === 'object' && !(value instanceof Array)) {
dest[key2] = {};
copyInner(value, dest[key2]);
}
else {
dest[key2] = value;
}
}
};
const translated = {};
copyInner(filter, translated);
return translated;
}
exports.translateFilterToObjectPredicate = translateFilterToObjectPredicate;
/* export function getCascadeEntityFilter<ED extends EntityDict & BaseEntityDict, T extends keyof ED>(
filter: NonNullable<ED[T]['Selection']['filter']>,
attr: keyof NonNullable<ED[T]['Selection']['filter']>

View File

@ -15,7 +15,7 @@ export type Boolean = boolean;
export type Price = number;
export type PrimaryKey = string;
export type ForeignKey<E extends string> = string;
export type Sequence = string;
export type Sequence = number;
export { Geo, SingleGeo } from './Geo';
export type DataTypes = number | string | Datetime | Day | Time | Geo | Object | SingleGeo;
export declare const types: string[];

View File

@ -1262,12 +1262,12 @@ export class RelationAuth<ED extends EntityDict & BaseEntityDict>{
value: '',
$$createAt$$: 1,
$$updateAt$$: 1,
$$seq$$: 'temp',
$$seq$$: 123,
recursive: false,
},
$$createAt$$: 1,
$$updateAt$$: 1,
$$seq$$: 'temp',
$$seq$$: 123,
deActions: [node.action],
});
}

View File

@ -1832,6 +1832,31 @@ export function checkFilterRepel<ED extends EntityDict & BaseEntityDict, T exten
return false;
}
/**
* filter当成非结构化属性存储filter进行转换$开头的escape
* filter是查询数据的标准子集true
* @param filter
*/
export function translateFilterToObjectPredicate(filter: Record<string, any>) {
const copyInner = (orig: Record<string, any>, dest: Record<string, any>) => {
for (const key in orig) {
const value = orig[key];
const key2 = key.startsWith('$') ? `.${key}` : key;
if (typeof value === 'object' && !(value instanceof Array)) {
dest[key2] = {};
copyInner(value, dest[key2]);
}
else {
dest[key2] = value;
}
}
}
const translated = {};
copyInner(filter, translated);
return translated;
}
/* export function getCascadeEntityFilter<ED extends EntityDict & BaseEntityDict, T extends keyof ED>(
filter: NonNullable<ED[T]['Selection']['filter']>,
attr: keyof NonNullable<ED[T]['Selection']['filter']>

View File

@ -16,7 +16,7 @@ export type Boolean = boolean;
export type Price = number;
export type PrimaryKey = string;
export type ForeignKey<E extends string> = string;
export type Sequence = string; // 自增长序列为了让人阅读方便为了支持分布式这里用string底层实现可自定义
export type Sequence = number; // 自增长序列,单个结点上能保证递增就行了
export { Geo, SingleGeo } from './Geo';
export type DataTypes = number | string | Datetime | Day | Time | Geo | Object | SingleGeo;