mirror of
https://github.com/nocobase/nocobase
synced 2024-11-15 09:47:10 +00:00
fix: array operator with camel case field (#4032)
* fix: array operator with camel case field * fix: test * fix: test
This commit is contained in:
parent
ed26c2ebea
commit
ad75debeaa
@ -14,6 +14,27 @@ describe('filter', () => {
|
||||
await db.close();
|
||||
});
|
||||
|
||||
it('should filter by field in camel case', async () => {
|
||||
const UserCollection = db.collection({
|
||||
name: 'users',
|
||||
fields: [{ type: 'array', name: 'referralSource' }],
|
||||
});
|
||||
|
||||
await db.sync();
|
||||
|
||||
await UserCollection.repository.create({
|
||||
values: {
|
||||
referralSource: ['a', 'b'],
|
||||
},
|
||||
});
|
||||
|
||||
const usersCount = await UserCollection.repository.count({
|
||||
filter: { $and: [{ referralSource: { $notEmpty: true } }] },
|
||||
});
|
||||
|
||||
expect(usersCount).toBe(1);
|
||||
});
|
||||
|
||||
it('should filter by belongs to many association', async () => {
|
||||
const A = db.collection({
|
||||
name: 'a',
|
||||
|
@ -44,7 +44,7 @@ describe('array field operator', function () {
|
||||
test('array field update', async () => {
|
||||
const Post = db.collection({
|
||||
name: 'posts',
|
||||
fields: [{ type: 'array', name: 'tags' }],
|
||||
fields: [{ type: 'array', name: 'tagsFields' }],
|
||||
});
|
||||
|
||||
await db.sync({ force: true });
|
||||
@ -52,13 +52,13 @@ describe('array field operator', function () {
|
||||
await Post.repository.create({});
|
||||
const p1 = await Post.repository.create({
|
||||
values: {
|
||||
tags: ['t1', 't2'],
|
||||
tagsFields: ['t1', 't2'],
|
||||
},
|
||||
});
|
||||
|
||||
let result = await Post.repository.findOne({
|
||||
filter: {
|
||||
'tags.$match': ['t2', 't1'],
|
||||
'tagsFields.$match': ['t2', 't1'],
|
||||
},
|
||||
});
|
||||
|
||||
@ -67,13 +67,13 @@ describe('array field operator', function () {
|
||||
await Post.repository.update({
|
||||
filterByTk: <any>p1.get('id'),
|
||||
values: {
|
||||
tags: ['t3', 't2'],
|
||||
tagsFields: ['t3', 't2'],
|
||||
},
|
||||
});
|
||||
|
||||
result = await Post.repository.findOne({
|
||||
filter: {
|
||||
'tags.$match': ['t3', 't2'],
|
||||
'tagsFields.$match': ['t3', 't2'],
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -3,8 +3,7 @@ import { Op, Sequelize } from 'sequelize';
|
||||
import { isMySQL, isPg } from './utils';
|
||||
|
||||
const getFieldName = (ctx) => {
|
||||
const fieldName = ctx.fieldName;
|
||||
return fieldName;
|
||||
return ctx.model.rawAttributes[ctx.fieldName]?.field || ctx.fieldName;
|
||||
};
|
||||
|
||||
const escape = (value, ctx) => {
|
||||
@ -43,11 +42,14 @@ const emptyQuery = (ctx, operator: '=' | '>') => {
|
||||
funcName = 'json_length';
|
||||
}
|
||||
|
||||
return `(select ${ifNull}(${funcName}(${fieldName}), 0) ${operator} 0)`;
|
||||
const queryInterface = getQueryInterface(ctx);
|
||||
|
||||
return `(select ${ifNull}(${funcName}(${queryInterface.quoteIdentifier(fieldName)}), 0) ${operator} 0)`;
|
||||
};
|
||||
|
||||
export default {
|
||||
$match(value, ctx) {
|
||||
const queryInterface = getQueryInterface(ctx);
|
||||
const fieldName = getFieldName(ctx);
|
||||
|
||||
if (isPg(ctx)) {
|
||||
|
Loading…
Reference in New Issue
Block a user