临时改了下一对多的join连接,使filter被修改后在某些情况下也能正确相连

This commit is contained in:
Xu Chang 2023-03-31 16:40:25 +08:00
parent 196cbed470
commit 73beea2b3f
2 changed files with 94 additions and 59 deletions

View File

@ -307,6 +307,10 @@ var CascadeStore = /** @class */ (function (_super) {
}
else {
cascadeSelectionFns.push(function (result) {
var entityIds = (0, lodash_1.uniq)(result.filter(function (ele) { return ele.entity === attr; }).map(function (ele) {
(0, assert_1.default)(ele.entityId !== null);
return ele.entityId;
}));
var dealWithSubRows = function (subRows) {
(0, assert_1.default)(subRows.length <= entityIds.length);
if (subRows.length < entityIds.length && !toModi) {
@ -339,10 +343,6 @@ var CascadeStore = /** @class */ (function (_super) {
}
});
};
var entityIds = (0, lodash_1.uniq)(result.filter(function (ele) { return ele.entity === attr; }).map(function (ele) {
(0, assert_1.default)(ele.entityId !== null);
return ele.entityId;
}));
if (entityIds.length > 0) {
var subRows = cascadeSelectFn.call(_this, attr, {
data: projection2[attr],
@ -359,8 +359,6 @@ var CascadeStore = /** @class */ (function (_super) {
dealWithSubRows(subRows);
}
}
else {
}
});
}
}
@ -399,6 +397,7 @@ var CascadeStore = /** @class */ (function (_super) {
}
else {
cascadeSelectionFns.push(function (result) {
var ids = (0, lodash_1.uniq)(result.filter(function (ele) { return !!(ele["".concat(attr, "Id")]); }).map(function (ele) { return ele["".concat(attr, "Id")]; }));
var dealWithSubRows = function (subRows) {
(0, assert_1.default)(subRows.length <= ids.length);
if (subRows.length < ids.length && !toModi) {
@ -436,7 +435,6 @@ var CascadeStore = /** @class */ (function (_super) {
}
});
};
var ids = (0, lodash_1.uniq)(result.filter(function (ele) { return !!(ele["".concat(attr, "Id")]); }).map(function (ele) { return ele["".concat(attr, "Id")]; }));
if (ids.length > 0) {
var subRows = cascadeSelectFn.call(_this, relation, {
data: projection2[attr],
@ -500,14 +498,24 @@ var CascadeStore = /** @class */ (function (_super) {
var _a;
var ids = result.map(function (ele) { return ele.id; });
var dealWithSubRows = function (subRows) {
result.forEach(function (ele) {
var _a;
var subRowss = subRows.filter(function (ele2) { return ele2[foreignKey_1] === ele.id; });
(0, assert_1.default)(subRowss);
Object.assign(ele, (_a = {},
_a[attr] = subRowss,
var _a;
// 这里如果result只有一行则把返回结果直接置上不对比外键值
// 这样做的原因是有的对象的filter会被改写掉userId),只能临时这样处理
if (result.length == 1) {
Object.assign(result[0], (_a = {},
_a[attr] = subRows,
_a));
});
}
else {
result.forEach(function (ele) {
var _a;
var subRowss = subRows.filter(function (ele2) { return ele2[foreignKey_1] === ele.id; });
(0, assert_1.default)(subRowss);
Object.assign(ele, (_a = {},
_a[attr] = subRowss,
_a));
});
}
};
if (ids.length > 0) {
var subRows = cascadeSelectFn.call(_this, entity2_1, {
@ -570,14 +578,24 @@ var CascadeStore = /** @class */ (function (_super) {
cascadeSelectionFns.push(function (result) {
var ids = result.map(function (ele) { return ele.id; });
var dealWithSubRows = function (subRows) {
result.forEach(function (ele) {
var _a;
var subRowss = subRows.filter(function (ele2) { return ele2.entityId === ele.id; });
(0, assert_1.default)(subRowss);
Object.assign(ele, (_a = {},
_a[attr] = subRowss,
var _a;
// 这里如果result只有一行则把返回结果直接置上不对比外键值
// 这样做的原因是有的对象的filter会被改写掉userId),只能临时这样处理
if (result.length === 1) {
Object.assign(result[0], (_a = {},
_a[attr] = subRows,
_a));
});
}
else {
result.forEach(function (ele) {
var _a;
var subRowss = subRows.filter(function (ele2) { return ele2.entityId === ele.id; });
(0, assert_1.default)(subRowss);
Object.assign(ele, (_a = {},
_a[attr] = subRowss,
_a));
});
}
};
if (ids.length > 0) {
var subRows = cascadeSelectFn.call(_this, entity2_1, {

View File

@ -376,6 +376,15 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
else {
cascadeSelectionFns.push(
(result) => {
const entityIds = uniq(result.filter(
ele => ele.entity === attr
).map(
ele => {
assert(ele.entityId !== null);
return ele.entityId;
}
) as string[]);
const dealWithSubRows = (subRows: Partial<ED[T]['Schema']>[]) => {
assert(subRows.length <= entityIds.length);
if (subRows.length < entityIds.length && !toModi) {
@ -412,14 +421,6 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
}
);
};
const entityIds = uniq(result.filter(
ele => ele.entity === attr
).map(
ele => {
assert(ele.entityId !== null);
return ele.entityId;
}
) as string[]);
if (entityIds.length > 0) {
const subRows = cascadeSelectFn.call(this, attr as any, {
@ -439,9 +440,6 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
dealWithSubRows(subRows as any);
}
}
else {
}
}
);
}
@ -493,6 +491,12 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
else {
cascadeSelectionFns.push(
(result) => {
const ids = uniq(result.filter(
ele => !!(ele[`${attr}Id`])
).map(
ele => ele[`${attr}Id`]
) as string[]);
const dealWithSubRows = (subRows: Partial<ED[keyof ED]['Schema']>[]) => {
assert(subRows.length <= ids.length);
if (subRows.length < ids.length && !toModi) {
@ -534,11 +538,6 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
}
);
};
const ids = uniq(result.filter(
ele => !!(ele[`${attr}Id`])
).map(
ele => ele[`${attr}Id`]
) as string[]);
if (ids.length > 0) {
const subRows = cascadeSelectFn.call(this, relation, {
@ -613,17 +612,26 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
) as string[];
const dealWithSubRows = (subRows: Partial<ED[keyof ED]['Schema']>[]) => {
result.forEach(
(ele) => {
const subRowss = subRows.filter(
ele2 => ele2[foreignKey] === ele.id
);
assert(subRowss);
Object.assign(ele, {
[attr]: subRowss,
});
}
);
// 这里如果result只有一行则把返回结果直接置上不对比外键值
// 这样做的原因是有的对象的filter会被改写掉userId),只能临时这样处理
if (result.length == 1) {
Object.assign(result[0], {
[attr]: subRows,
});
}
else {
result.forEach(
(ele) => {
const subRowss = subRows.filter(
ele2 => ele2[foreignKey] === ele.id
);
assert(subRowss);
Object.assign(ele, {
[attr]: subRowss,
});
}
);
}
};
if (ids.length > 0) {
@ -697,17 +705,26 @@ export abstract class CascadeStore<ED extends EntityDict & BaseEntityDict> exten
ele => ele.id
) as string[];
const dealWithSubRows = (subRows: Partial<ED[T]['Schema']>[]) => {
result.forEach(
(ele) => {
const subRowss = subRows.filter(
ele2 => ele2.entityId === ele.id
);
assert(subRowss);
Object.assign(ele, {
[attr]: subRowss,
});
}
);
// 这里如果result只有一行则把返回结果直接置上不对比外键值
// 这样做的原因是有的对象的filter会被改写掉userId),只能临时这样处理
if (result.length === 1) {
Object.assign(result[0], {
[attr]: subRows,
});
}
else {
result.forEach(
(ele) => {
const subRowss = subRows.filter(
ele2 => ele2.entityId === ele.id
);
assert(subRowss);
Object.assign(ele, {
[attr]: subRowss,
});
}
);
}
};
if (ids.length > 0) {