create的opRecord支持多行
This commit is contained in:
parent
20f62e55c5
commit
7014ab0f66
|
|
@ -1,13 +1,14 @@
|
||||||
import { Context } from '../types/Context';
|
import { Context } from '../types/Context';
|
||||||
import { DeduceCreateOperation, DeduceCreateSingleOperation, DeduceRemoveOperation, DeduceUpdateOperation, EntityDict, OperateParams, OperationResult, SelectRowShape } from "../types/Entity";
|
import { DeduceCreateMultipleOperation, DeduceCreateOperation, DeduceCreateSingleOperation, DeduceRemoveOperation, DeduceUpdateOperation, EntityDict, OperateParams, OperationResult, SelectRowShape } from "../types/Entity";
|
||||||
import { RowStore } from '../types/RowStore';
|
import { RowStore } from '../types/RowStore';
|
||||||
import { StorageSchema } from '../types/Storage';
|
import { StorageSchema } from '../types/Storage';
|
||||||
/**这个用来处理级联的select和update,对不同能力的 */
|
/**这个用来处理级联的select和update,对不同能力的 */
|
||||||
export declare abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED>> extends RowStore<ED, Cxt> {
|
export declare abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED>> extends RowStore<ED, Cxt> {
|
||||||
constructor(storageSchema: StorageSchema<ED>);
|
constructor(storageSchema: StorageSchema<ED>);
|
||||||
protected abstract supportManyToOneJoin(): boolean;
|
protected abstract supportManyToOneJoin(): boolean;
|
||||||
|
protected abstract supportMultipleCreate(): boolean;
|
||||||
protected abstract selectAbjointRow<T extends keyof ED, S extends ED[T]['Selection']>(entity: T, selection: S, context: Cxt, params?: OperateParams): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
|
protected abstract selectAbjointRow<T extends keyof ED, S extends ED[T]['Selection']>(entity: T, selection: S, context: Cxt, params?: OperateParams): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
|
||||||
protected abstract updateAbjointRow<T extends keyof ED>(entity: T, operation: DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>, context: Cxt, params?: OperateParams): Promise<number>;
|
protected abstract updateAbjointRow<T extends keyof ED>(entity: T, operation: DeduceCreateMultipleOperation<ED[T]['Schema']> | DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>, context: Cxt, params?: OperateParams): Promise<number>;
|
||||||
protected cascadeSelect<T extends keyof ED, S extends ED[T]['Selection']>(entity: T, selection: S, context: Cxt, params?: OperateParams): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
|
protected cascadeSelect<T extends keyof ED, S extends ED[T]['Selection']>(entity: T, selection: S, context: Cxt, params?: OperateParams): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
|
||||||
/**
|
/**
|
||||||
* 级联更新
|
* 级联更新
|
||||||
|
|
|
||||||
|
|
@ -201,14 +201,23 @@ class CascadeStore extends RowStore_1.RowStore {
|
||||||
const opData = {};
|
const opData = {};
|
||||||
const result = {};
|
const result = {};
|
||||||
if (action === 'create' && data instanceof Array) {
|
if (action === 'create' && data instanceof Array) {
|
||||||
for (const dataEle of data) {
|
const multipleCreate = this.supportMultipleCreate();
|
||||||
const result2 = await this.cascadeUpdate(entity, {
|
if (multipleCreate) {
|
||||||
|
return await this.cascadeUpdate(entity, {
|
||||||
action,
|
action,
|
||||||
data: dataEle,
|
data,
|
||||||
}, context, params);
|
}, context, params);
|
||||||
this.mergeOperationResult(result, result2);
|
|
||||||
}
|
}
|
||||||
return result;
|
else {
|
||||||
|
for (const dataEle of data) {
|
||||||
|
const result2 = await this.cascadeUpdate(entity, {
|
||||||
|
action,
|
||||||
|
data: dataEle,
|
||||||
|
}, context, params);
|
||||||
|
this.mergeOperationResult(result, result2);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const data2 = data;
|
const data2 = data;
|
||||||
for (const attr in data2) {
|
for (const attr in data2) {
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ export declare type DeduceOperation<SH extends GeneralEntityShape> = DeduceCreat
|
||||||
export declare type CreateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
export declare type CreateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
||||||
a: 'c';
|
a: 'c';
|
||||||
e: T;
|
e: T;
|
||||||
d: ED[T]['OpSchema'];
|
d: ED[T]['OpSchema'] | ED[T]['OpSchema'][];
|
||||||
};
|
};
|
||||||
export declare type UpdateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
export declare type UpdateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
||||||
a: 'u';
|
a: 'u';
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ import assert from "assert";
|
||||||
import { assign, keys } from "lodash";
|
import { assign, keys } from "lodash";
|
||||||
import { Context } from '../types/Context';
|
import { Context } from '../types/Context';
|
||||||
import {
|
import {
|
||||||
|
DeduceCreateMultipleOperation,
|
||||||
DeduceCreateOperation, DeduceCreateSingleOperation, DeduceFilter, DeduceRemoveOperation, DeduceSelection,
|
DeduceCreateOperation, DeduceCreateSingleOperation, DeduceFilter, DeduceRemoveOperation, DeduceSelection,
|
||||||
DeduceUpdateOperation, EntityDict, EntityShape, OperateParams, OperationResult, SelectionResult, SelectRowShape
|
DeduceUpdateOperation, EntityDict, EntityShape, OperateParams, OperationResult, SelectionResult, SelectRowShape
|
||||||
} from "../types/Entity";
|
} from "../types/Entity";
|
||||||
|
|
@ -16,6 +17,7 @@ export abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED
|
||||||
super(storageSchema);
|
super(storageSchema);
|
||||||
}
|
}
|
||||||
protected abstract supportManyToOneJoin(): boolean;
|
protected abstract supportManyToOneJoin(): boolean;
|
||||||
|
protected abstract supportMultipleCreate(): boolean;
|
||||||
protected abstract selectAbjointRow<T extends keyof ED, S extends ED[T]['Selection']>(
|
protected abstract selectAbjointRow<T extends keyof ED, S extends ED[T]['Selection']>(
|
||||||
entity: T,
|
entity: T,
|
||||||
selection: S,
|
selection: S,
|
||||||
|
|
@ -24,7 +26,7 @@ export abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED
|
||||||
|
|
||||||
protected abstract updateAbjointRow<T extends keyof ED>(
|
protected abstract updateAbjointRow<T extends keyof ED>(
|
||||||
entity: T,
|
entity: T,
|
||||||
operation: DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>,
|
operation: DeduceCreateMultipleOperation<ED[T]['Schema']> | DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>,
|
||||||
context: Cxt,
|
context: Cxt,
|
||||||
params?: OperateParams): Promise<number>;
|
params?: OperateParams): Promise<number>;
|
||||||
|
|
||||||
|
|
@ -261,14 +263,23 @@ export abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED
|
||||||
const result: OperationResult<ED> = {};
|
const result: OperationResult<ED> = {};
|
||||||
|
|
||||||
if (action === 'create' && data instanceof Array) {
|
if (action === 'create' && data instanceof Array) {
|
||||||
for (const dataEle of data) {
|
const multipleCreate = this.supportMultipleCreate();
|
||||||
const result2 = await this.cascadeUpdate(entity, {
|
if (multipleCreate) {
|
||||||
|
return await this.cascadeUpdate(entity, {
|
||||||
action,
|
action,
|
||||||
data: dataEle,
|
data,
|
||||||
}, context, params);
|
}, context, params);
|
||||||
this.mergeOperationResult(result, result2);
|
|
||||||
}
|
}
|
||||||
return result;
|
else {
|
||||||
|
for (const dataEle of data) {
|
||||||
|
const result2 = await this.cascadeUpdate(entity, {
|
||||||
|
action,
|
||||||
|
data: dataEle,
|
||||||
|
}, context, params);
|
||||||
|
this.mergeOperationResult(result, result2);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const data2 = data as (DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>)['data'];
|
const data2 = data as (DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>)['data'];
|
||||||
|
|
|
||||||
|
|
@ -134,7 +134,7 @@ export type DeduceOperation<SH extends GeneralEntityShape> = DeduceCreateOperati
|
||||||
export type CreateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
export type CreateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
||||||
a: 'c';
|
a: 'c';
|
||||||
e: T;
|
e: T;
|
||||||
d: ED[T]['OpSchema'];
|
d: ED[T]['OpSchema'] | ED[T]['OpSchema'][];
|
||||||
};
|
};
|
||||||
|
|
||||||
export type UpdateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
export type UpdateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue