增加了translateFilterToObjectPredicate
This commit is contained in:
parent
95e5606b10
commit
c745debe5e
|
|
@ -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],
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>): {};
|
||||
|
|
|
|||
|
|
@ -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']>
|
||||
|
|
|
|||
|
|
@ -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[];
|
||||
|
|
|
|||
|
|
@ -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],
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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']>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue