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}`); diff --git a/packages/plugins/@nocobase/plugin-notification-email/package.json b/packages/plugins/@nocobase/plugin-notification-email/package.json index e2c7b1b9c16ce..73aa31a2ca4f7 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 ad335aabb1f93..c70d73efe2a6b 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 93a0048e37d97..c7631de37c38c 100644 --- a/packages/plugins/@nocobase/plugin-notification-manager/package.json +++ b/packages/plugins/@nocobase/plugin-notification-manager/package.json @@ -5,6 +5,8 @@ "displayName.zh-CN": "通知管理", "description.zh-CN": "提供统一的管理服务,涵盖渠道配置、日志记录等功能,支持多种通知渠道的配置,包括站内信和电子邮件等。", "version": "1.5.0-beta.34", + "homepage": "https://docs.nocobase.com/handbook/notification-manager", + "homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/notification-manager", "main": "dist/server/index.js", "devDependencies": { "@ant-design/icons": "5.x",