mirror of
https://github.com/strapi/strapi.git
synced 2025-12-26 14:44:31 +00:00
properly handle knex queries for in and notIn
This commit is contained in:
parent
3ff32e91eb
commit
79355cf239
@ -6,6 +6,7 @@ const types = require('../../types');
|
||||
const { createField } = require('../../fields');
|
||||
const { createJoin } = require('./join');
|
||||
const { toColumnName } = require('./transform');
|
||||
const { isKnexQuery } = require('../../utils/knex');
|
||||
|
||||
const GROUP_OPERATORS = ['$and', '$or'];
|
||||
const OPERATORS = [
|
||||
@ -206,12 +207,12 @@ const applyOperator = (qb, column, operator, value) => {
|
||||
}
|
||||
|
||||
case '$in': {
|
||||
qb.whereIn(column, _.isObject(value) ? value : [value]);
|
||||
qb.whereIn(column, isKnexQuery(value) ? value : _.castArray(value));
|
||||
break;
|
||||
}
|
||||
|
||||
case '$notIn': {
|
||||
qb.whereNotIn(column, _.isObject(value) ? value : [value]);
|
||||
qb.whereNotIn(column, isKnexQuery(value) ? value : _.castArray(value));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
33
packages/core/database/lib/tests/knex-utils.test.e2e.js
Normal file
33
packages/core/database/lib/tests/knex-utils.test.e2e.js
Normal file
@ -0,0 +1,33 @@
|
||||
'use strict';
|
||||
|
||||
const { createStrapiInstance } = require('../../../../../test/helpers/strapi');
|
||||
const { isKnexQuery } = require('../utils/knex');
|
||||
|
||||
let strapi;
|
||||
|
||||
describe('knex', () => {
|
||||
beforeAll(async () => {
|
||||
strapi = await createStrapiInstance();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await strapi.destroy();
|
||||
});
|
||||
|
||||
describe('isKnexQuery', () => {
|
||||
test('knex query: true', () => {
|
||||
const res = isKnexQuery(strapi.db.connection('strapi_core_store_settings'));
|
||||
expect(res).toBe(true);
|
||||
});
|
||||
|
||||
test('knex raw: true', () => {
|
||||
const res = isKnexQuery(strapi.db.connection.raw('SELECT * FROM strapi_core_store_settings'));
|
||||
expect(res).toBe(true);
|
||||
});
|
||||
|
||||
test.each([[''], [{}], [[]], [2], [new Date()]])('%s: false', (value) => {
|
||||
const res = isKnexQuery(value);
|
||||
expect(res).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
12
packages/core/database/lib/utils/knex.js
Normal file
12
packages/core/database/lib/utils/knex.js
Normal file
@ -0,0 +1,12 @@
|
||||
'use strict';
|
||||
|
||||
const KnexBuilder = require('knex/lib/query/querybuilder');
|
||||
const KnexRaw = require('knex/lib/raw');
|
||||
|
||||
const isKnexQuery = (value) => {
|
||||
return value instanceof KnexBuilder || value instanceof KnexRaw;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
isKnexQuery,
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user