From bae769c6bf108250bf0679ad5c006e2013549809 Mon Sep 17 00:00:00 2001 From: Sheldon Guo Date: Mon, 3 Feb 2025 09:52:21 +0800 Subject: [PATCH 1/2] chore: add homepage links to notification plugins in package.json (#6150) * feat: add homepage links to notification plugins in package.json --- .../plugins/@nocobase/plugin-notification-email/package.json | 2 ++ .../@nocobase/plugin-notification-in-app-message/package.json | 2 ++ .../plugins/@nocobase/plugin-notification-manager/package.json | 2 ++ 3 files changed, 6 insertions(+) diff --git a/packages/plugins/@nocobase/plugin-notification-email/package.json b/packages/plugins/@nocobase/plugin-notification-email/package.json index f31d40ea7155e..e772fa435f4ee 100644 --- a/packages/plugins/@nocobase/plugin-notification-email/package.json +++ b/packages/plugins/@nocobase/plugin-notification-email/package.json @@ -5,6 +5,8 @@ "displayName.zh-CN": "通知:电子邮件", "description": "Used for sending email notifications with built-in SMTP transport.", "description.zh-CN": "通过电子邮件渠道发送通知,目前只支持 SMTP 传输方式。", + "homepage": "https://docs.nocobase.com/handbook/notification-email", + "homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/notification-email", "main": "dist/server/index.js", "devDependencies": { "@types/nodemailer": "^6.x", diff --git a/packages/plugins/@nocobase/plugin-notification-in-app-message/package.json b/packages/plugins/@nocobase/plugin-notification-in-app-message/package.json index 6b4125d5f1fef..1812bac434f96 100644 --- a/packages/plugins/@nocobase/plugin-notification-in-app-message/package.json +++ b/packages/plugins/@nocobase/plugin-notification-in-app-message/package.json @@ -5,6 +5,8 @@ "displayName.zh-CN": "通知:站内信", "description": "It supports users in receiving real-time message notifications within the NocoBase application.", "description.zh-CN": "支持用户在 NocoBase 应用内实时接收消息通知。", + "homepage": "https://docs.nocobase.com/handbook/notification-in-app-message", + "homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/notification-in-app-message", "keywords": [ "Notification" ], diff --git a/packages/plugins/@nocobase/plugin-notification-manager/package.json b/packages/plugins/@nocobase/plugin-notification-manager/package.json index 0601e05273c67..416738d04fea6 100644 --- a/packages/plugins/@nocobase/plugin-notification-manager/package.json +++ b/packages/plugins/@nocobase/plugin-notification-manager/package.json @@ -4,6 +4,8 @@ "description": "Provides a unified management service that includes channel configuration, logging, and other features, supporting the configuration of various notification channels, including in-app message and email.", "displayName.zh-CN": "通知管理", "description.zh-CN": "提供统一的管理服务,涵盖渠道配置、日志记录等功能,支持多种通知渠道的配置,包括站内信和电子邮件等。", + "homepage": "https://docs.nocobase.com/handbook/notification-manager", + "homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/notification-manager", "version": "1.4.34", "main": "dist/server/index.js", "devDependencies": { From b0c517a22287374c788775133e9141d6b7f43956 Mon Sep 17 00:00:00 2001 From: YANG QIA <2013xile@gmail.com> Date: Wed, 5 Feb 2025 19:46:16 +0800 Subject: [PATCH 2/2] fix(sql-collection): filtering SQL Collection throws an error when `DB_TABLE_PREFIX` is set (#6156) --- .../src/server/__tests__/select-query.test.ts | 71 +++++++++++++++++++ .../server/sql-collection/query-generator.ts | 6 +- 2 files changed, 74 insertions(+), 3 deletions(-) diff --git a/packages/plugins/@nocobase/plugin-collection-sql/src/server/__tests__/select-query.test.ts b/packages/plugins/@nocobase/plugin-collection-sql/src/server/__tests__/select-query.test.ts index 47512e5ada7c9..a53ba62d6d80c 100644 --- a/packages/plugins/@nocobase/plugin-collection-sql/src/server/__tests__/select-query.test.ts +++ b/packages/plugins/@nocobase/plugin-collection-sql/src/server/__tests__/select-query.test.ts @@ -80,3 +80,74 @@ describe('select query', () => { ); }); }); + +describe('select query with DB_TABLE_PREFIX', () => { + const model = class extends SQLModel {}; + model.init(null, { + modelName: 'users', + tableName: 'd_users', + sequelize: new Sequelize({ + dialect: 'postgres', + }), + }); + model.sql = 'SELECT * FROM "d_users"'; + model.collection = { + fields: new Map( + Object.entries({ + id: {}, + name: {}, + }), + ), + } as any; + const queryGenerator = model.queryInterface.queryGenerator as any; + + test('plain sql', () => { + const query = queryGenerator.selectQuery('d_users', {}, model); + expect(query).toBe('SELECT * FROM "d_users";'); + }); + + test('attributes', () => { + const query = queryGenerator.selectQuery('d_users', { attributes: ['id', 'name'] }, model); + expect(query).toBe('SELECT "id", "name" FROM (SELECT * FROM "d_users") AS "users";'); + }); + + test('where', () => { + const query = queryGenerator.selectQuery('d_users', { where: { id: 1 } }, model); + expect(query).toBe('SELECT * FROM (SELECT * FROM "d_users") AS "users" WHERE "users"."id" = 1;'); + }); + + test('group', () => { + const query1 = queryGenerator.selectQuery('d_users', { group: 'id' }, model); + expect(query1).toBe('SELECT * FROM (SELECT * FROM "d_users") AS "users" GROUP BY "id";'); + const query2 = queryGenerator.selectQuery('d_users', { group: ['id', 'name'] }, model); + expect(query2).toBe('SELECT * FROM (SELECT * FROM "d_users") AS "users" GROUP BY "id", "name";'); + }); + + test('order', () => { + const query = queryGenerator.selectQuery('d_users', { order: ['id'] }, model); + expect(query).toBe('SELECT * FROM (SELECT * FROM "d_users") AS "users" ORDER BY "users"."id";'); + }); + + test('limit, offset', () => { + const query = queryGenerator.selectQuery('d_users', { limit: 1, offset: 0 }, model); + expect(query).toBe('SELECT * FROM (SELECT * FROM "d_users") AS "users" LIMIT 1 OFFSET 0;'); + }); + + test('complex sql', () => { + const query = queryGenerator.selectQuery( + 'd_users', + { + attributes: ['id', 'name'], + where: { id: 1 }, + group: 'id', + order: ['id'], + limit: 1, + offset: 0, + }, + model, + ); + expect(query).toBe( + 'SELECT "id", "name" FROM (SELECT * FROM "d_users") AS "users" WHERE "users"."id" = 1 GROUP BY "id" ORDER BY "users"."id" LIMIT 1 OFFSET 0;', + ); + }); +}); diff --git a/packages/plugins/@nocobase/plugin-collection-sql/src/server/sql-collection/query-generator.ts b/packages/plugins/@nocobase/plugin-collection-sql/src/server/sql-collection/query-generator.ts index 6efc564aed50a..df6608a79e886 100644 --- a/packages/plugins/@nocobase/plugin-collection-sql/src/server/sql-collection/query-generator.ts +++ b/packages/plugins/@nocobase/plugin-collection-sql/src/server/sql-collection/query-generator.ts @@ -39,7 +39,7 @@ export function selectQuery( // Add WHERE to sub or main query if (Object.prototype.hasOwnProperty.call(options, 'where')) { - options.where = this.getWhereConditions(options.where, tableName, model, options); + options.where = this.getWhereConditions(options.where, model.name, model, options); if (options.where) { queryItems.push(` WHERE ${options.where}`); } @@ -48,8 +48,8 @@ export function selectQuery( // Add GROUP BY to sub or main query if (options.group) { options.group = Array.isArray(options.group) - ? options.group.map((t) => this.aliasGrouping(t, model, tableName, options)).join(', ') - : this.aliasGrouping(options.group, model, tableName, options); + ? options.group.map((t) => this.aliasGrouping(t, model, model.name, options)).join(', ') + : this.aliasGrouping(options.group, model, model.name, options); if (options.group) { queryItems.push(` GROUP BY ${options.group}`);