Skip to content

Commit 984b5b4

Browse files
authored
fix: inplace import abort (#1278)
* fix: inplace import abort * fix: add link record when set field property not empty
1 parent dee058b commit 984b5b4

2 files changed

Lines changed: 31 additions & 11 deletions

File tree

apps/nestjs-backend/src/features/calculation/batch.service.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,6 @@ export class BatchService {
225225
data: { id: string; values: { [key: string]: unknown } }[]
226226
) {
227227
const tempTableName = `temp_` + customAlphabet('abcdefghijklmnopqrstuvwxyz', 10)();
228-
const prisma = this.prismaService.txClient();
229-
230228
// 1.create temporary table structure
231229
const createTempTableSchema = this.knex.schema.createTable(tempTableName, (table) => {
232230
table.string(idFieldName).primary();
@@ -238,7 +236,6 @@ export class BatchService {
238236
const createTempTableSql = createTempTableSchema
239237
.toQuery()
240238
.replace('create table', 'create temporary table');
241-
await prisma.$executeRawUnsafe(createTempTableSql);
242239

243240
const { insertTempTableSql, updateRecordSql } = this.dbProvider.executeUpdateRecordsSqlList({
244241
dbTableName,
@@ -247,16 +244,28 @@ export class BatchService {
247244
dbFieldNames: schemas.map((s) => s.dbFieldName),
248245
data,
249246
});
247+
const dropTempTableSql = this.knex.schema.dropTable(tempTableName).toQuery();
250248

251-
// 2.initialize temporary table data
252-
await prisma.$executeRawUnsafe(insertTempTableSql);
249+
const prisma = this.prismaService.txClient();
253250

254-
// 3.update data
255-
await wrapWithValidationErrorHandler(() => prisma.$executeRawUnsafe(updateRecordSql));
251+
const batchOperators = async () => {
252+
// temp table should in one transaction
253+
await prisma.$executeRawUnsafe(createTempTableSql);
254+
// 2.initialize temporary table data
255+
await prisma.$executeRawUnsafe(insertTempTableSql);
256+
// 3.update data
257+
await wrapWithValidationErrorHandler(() => prisma.$executeRawUnsafe(updateRecordSql));
258+
// 4.delete temporary table
259+
await prisma.$executeRawUnsafe(dropTempTableSql);
260+
};
256261

257-
// 4.delete temporary table
258-
const dropTempTableSql = this.knex.schema.dropTable(tempTableName).toQuery();
259-
await prisma.$executeRawUnsafe(dropTempTableSql);
262+
if (this.cls.get('tx.id')) {
263+
await batchOperators();
264+
} else {
265+
await this.prismaService.$transaction(async () => {
266+
await batchOperators();
267+
});
268+
}
260269
}
261270

262271
private async executeUpdateRecordsInner(

apps/nestjs-backend/src/features/record/record.service.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1013,7 +1013,18 @@ export class RecordService {
10131013
});
10141014
});
10151015

1016-
const sql = this.dbProvider.batchInsertSql(dbTableName, snapshots);
1016+
const sql = this.dbProvider.batchInsertSql(
1017+
dbTableName,
1018+
snapshots.map((s) => {
1019+
return Object.entries(s).reduce(
1020+
(acc, [key, value]) => {
1021+
acc[key] = Array.isArray(value) ? JSON.stringify(value) : value;
1022+
return acc;
1023+
},
1024+
{} as Record<string, unknown>
1025+
);
1026+
})
1027+
);
10171028

10181029
await wrapWithValidationErrorHandler(() =>
10191030
this.prismaService.txClient().$executeRawUnsafe(sql)

0 commit comments

Comments
 (0)