diff --git a/packages/core/database/src/__tests__/operator/eq.test.ts b/packages/core/database/src/__tests__/operator/eq.test.ts new file mode 100644 index 000000000..29cb322cf --- /dev/null +++ b/packages/core/database/src/__tests__/operator/eq.test.ts @@ -0,0 +1,76 @@ +import Database from '../../database'; +import { mockDatabase } from '../index'; + +describe('eq operator', () => { + let db: Database; + let Test; + + beforeEach(async () => { + db = mockDatabase({}); + + Test = db.collection({ + name: 'tests', + fields: [{ type: 'string', name: 'name' }], + }); + + await db.sync(); + }); + + afterEach(async () => { + await db.close(); + }); + + it('should eq with array', async () => { + await db.getRepository('tests').create({ + values: [ + { name: '123' }, + { name: '234' }, + { name: '345' }, + ] + }); + + const results = await db.getRepository('tests').count({ + filter: { + 'name.$eq': ['123', '234'], + }, + }); + + expect(results).toEqual(2); + }); + + it('should eq with array', async () => { + await db.getRepository('tests').create({ + values: [ + { name: '123' }, + { name: '234' }, + { name: '345' }, + ] + }); + + const results = await db.getRepository('tests').count({ + filter: { + 'name.$eq': '123', + }, + }); + + expect(results).toEqual(1); + }); + + it('should eq with array', async () => { + await db.getRepository('tests').create({ + values: [ + { name: '123' }, + { name: '234' }, + { name: '345' }, + ] + }); + + const results = await db.getRepository('tests').count({ + filter: { + 'name.$eq': '456', + }, + }); + + expect(results).toEqual(0); + }); +}); diff --git a/packages/core/database/src/__tests__/operator/ne.test.ts b/packages/core/database/src/__tests__/operator/ne.test.ts index ab262787d..4f84b04ab 100644 --- a/packages/core/database/src/__tests__/operator/ne.test.ts +++ b/packages/core/database/src/__tests__/operator/ne.test.ts @@ -1,5 +1,5 @@ -import { mockDatabase } from '../index'; import Database from '../../database'; +import { mockDatabase } from '../index'; describe('ne operator', () => { let db: Database; @@ -42,4 +42,22 @@ describe('ne operator', () => { expect(results).toBe(0); }); + + it('should ne with array', async () => { + await db.getRepository('tests').create({ + values: [ + { name: '123' }, + { name: '234' }, + { name: '345' }, + ] + }); + + const results = await db.getRepository('tests').count({ + filter: { + 'name.$ne': ['123', '234'], + }, + }); + + expect(results).toEqual(1); + }); }); diff --git a/packages/core/database/src/operators/eq.ts b/packages/core/database/src/operators/eq.ts new file mode 100644 index 000000000..fa994f0bb --- /dev/null +++ b/packages/core/database/src/operators/eq.ts @@ -0,0 +1,14 @@ +import { Op } from 'sequelize'; + +export default { + $eq(val: any) { + if (Array.isArray(val)) { + return { + [Op.in]: val, + }; + } + return { + [Op.eq]: val, + }; + }, +} as Record; diff --git a/packages/core/database/src/operators/index.ts b/packages/core/database/src/operators/index.ts index e94b33890..62665c856 100644 --- a/packages/core/database/src/operators/index.ts +++ b/packages/core/database/src/operators/index.ts @@ -4,6 +4,7 @@ export default { ...require('./array').default, ...require('./empty').default, ...require('./string').default, + ...require('./eq').default, ...require('./ne').default, ...require('./notIn').default, ...require('./boolean').default, diff --git a/packages/core/database/src/operators/ne.ts b/packages/core/database/src/operators/ne.ts index e69d4cbe3..f650530e9 100644 --- a/packages/core/database/src/operators/ne.ts +++ b/packages/core/database/src/operators/ne.ts @@ -2,15 +2,20 @@ import { Op } from 'sequelize'; export default { $ne(val, ctx) { + if (Array.isArray(val)) { + return { + [Op.notIn]: val, + }; + } return val === null ? { - [Op.ne]: null, - } + [Op.ne]: null, + } : { - [Op.or]: { - [Op.ne]: val, - [Op.is]: null, - }, - }; + [Op.or]: { + [Op.ne]: val, + [Op.is]: null, + }, + }; }, } as Record;