From f35da4a2a0897c6501c8946308eeccb7cd189d1c Mon Sep 17 00:00:00 2001 From: chareice Date: Sun, 9 Apr 2023 12:52:42 +0800 Subject: [PATCH] fix: init sort field with null group --- .../src/__tests__/fields/sort-field.test.ts | 10 +++++++++ .../core/database/src/fields/sort-field.ts | 21 ++++++++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/packages/core/database/src/__tests__/fields/sort-field.test.ts b/packages/core/database/src/__tests__/fields/sort-field.test.ts index 90851b405..7ac3ac373 100644 --- a/packages/core/database/src/__tests__/fields/sort-field.test.ts +++ b/packages/core/database/src/__tests__/fields/sort-field.test.ts @@ -95,6 +95,14 @@ describe('string field', () => { group: 'b', name: 'r4', }, + { + group: null, + name: 'r5', + }, + { + group: null, + name: 'r6', + }, ], }); @@ -105,6 +113,8 @@ describe('string field', () => { const records = await Test.repository.find({}); const r3 = records.find((r) => r.get('name') === 'r3'); expect(r3.get('sort')).toBe(2); + const r5 = records.find((r) => r.get('name') === 'r5'); + expect(r5.get('sort')).toBe(1); }); it('should init sorted value by createdAt when primaryKey not exists', async () => { diff --git a/packages/core/database/src/fields/sort-field.ts b/packages/core/database/src/fields/sort-field.ts index c186128a9..5fde38d3d 100644 --- a/packages/core/database/src/fields/sort-field.ts +++ b/packages/core/database/src/fields/sort-field.ts @@ -87,11 +87,19 @@ export class SortField extends Field { scopeKey ? `PARTITION BY ${queryInterface.quoteIdentifier(scopeKey)}` : '' } ORDER BY ${quotedOrderField}) AS new_sequence_number FROM ${this.collection.quotedTableName()} - ${ - scopeKey - ? `WHERE ${queryInterface.quoteIdentifier(scopeKey)} IN (${scopeValue.map((v) => `'${v}'`).join(',')})` - : '' - } + ${(() => { + if (scopeKey && scopeValue) { + const hasNull = scopeValue.includes(null); + + return `WHERE ${queryInterface.quoteIdentifier(scopeKey)} IN (${scopeValue + .filter((v) => v !== null) + .map((v) => `'${v}'`) + .join(',')}) ${hasNull ? `OR ${queryInterface.quoteIdentifier(scopeKey)} IS NULL` : ''} `; + } + + return ''; + })()} + ) ${ this.collection.db.inDialect('mysql') @@ -99,7 +107,6 @@ export class SortField extends Field { UPDATE ${this.collection.quotedTableName()}, ordered_table SET ${this.collection.quotedTableName()}.${this.name} = ordered_table.new_sequence_number WHERE ${this.collection.quotedTableName()}.${quotedOrderField} = ordered_table.${quotedOrderField} - ${scopeKey ? `AND ${this.collection.quotedTableName()}.${scopeKey} = ordered_table.${scopeKey}` : ''} ` : ` UPDATE ${this.collection.quotedTableName()} @@ -130,7 +137,7 @@ export class SortField extends Field { const needInitGroups = []; for (const group of groups) { if (await needInit(scopeKey, group[scopeKey])) { - needInitGroups.push(group['group']); + needInitGroups.push(group[scopeKey]); } }