mirror of
https://github.com/strapi/strapi.git
synced 2025-12-02 01:52:21 +00:00
Cleanup operators
This commit is contained in:
parent
2d59716f5d
commit
1728e67e5d
@ -21,7 +21,24 @@ async function main(connection) {
|
||||
await orm.schema.sync();
|
||||
await orm.schema.reset();
|
||||
|
||||
await tests(orm);
|
||||
await orm.query('article').createMany({
|
||||
// select: {},
|
||||
// populate: {},
|
||||
data: Array(5)
|
||||
.fill({})
|
||||
.map((v, idx) => ({
|
||||
title: `Article ${_.padStart(idx, 3, '0')}`,
|
||||
})),
|
||||
});
|
||||
|
||||
const articles = await orm.query('article').findMany({
|
||||
limit: 5,
|
||||
where: { title: 'Article 001', createdAt: { $null: true } },
|
||||
});
|
||||
|
||||
console.log(articles);
|
||||
|
||||
// await tests(orm);
|
||||
} finally {
|
||||
orm.destroy();
|
||||
}
|
||||
|
||||
@ -83,7 +83,8 @@ class SqliteDialect extends Dialect {
|
||||
// TODO: get strapi.dir from somewhere else
|
||||
|
||||
this.db.config.connection.connection.filename = path.resolve(
|
||||
strapi.dir,
|
||||
// TODO: do this somewhere else
|
||||
// global.strapi ? gstrapi.dir : process.cwd(),
|
||||
this.db.config.connection.connection.filename
|
||||
);
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ const GROUP_OPERATORS = ['$and', '$or'];
|
||||
const OPERATORS = [
|
||||
'$not',
|
||||
'$in',
|
||||
'$nin',
|
||||
'$notIn',
|
||||
'$eq',
|
||||
'$ne',
|
||||
'$gt',
|
||||
@ -17,9 +17,10 @@ const OPERATORS = [
|
||||
'$lt',
|
||||
'$lte',
|
||||
'$null',
|
||||
'$notNull',
|
||||
'$between',
|
||||
'$like',
|
||||
'$regexp',
|
||||
// '$like',
|
||||
// '$regexp',
|
||||
'$startsWith',
|
||||
'$endsWith',
|
||||
'$contains',
|
||||
@ -264,66 +265,96 @@ const applyWhereToColumn = (qb, column, columnWhere) => {
|
||||
|
||||
switch (operator) {
|
||||
case '$not': {
|
||||
return qb.whereNot(qb => applyWhereToColumn(qb, column, value));
|
||||
qb.whereNot(qb => applyWhereToColumn(qb, column, value));
|
||||
break;
|
||||
}
|
||||
|
||||
case '$in': {
|
||||
return qb.whereIn(column, value);
|
||||
qb.whereIn(column, value);
|
||||
break;
|
||||
}
|
||||
|
||||
case '$nin': {
|
||||
return qb.whereNotIn(column, value);
|
||||
case '$notIn': {
|
||||
qb.whereNotIn(column, value);
|
||||
break;
|
||||
}
|
||||
|
||||
case '$eq': {
|
||||
if (value === null) {
|
||||
return qb.whereNull(column);
|
||||
qb.whereNull(column);
|
||||
break;
|
||||
}
|
||||
|
||||
return qb.where(column, value);
|
||||
qb.where(column, value);
|
||||
break;
|
||||
}
|
||||
case '$ne': {
|
||||
if (value === null) {
|
||||
return qb.whereNotNull(column);
|
||||
qb.whereNotNull(column);
|
||||
break;
|
||||
}
|
||||
|
||||
return qb.where(column, '<>', value);
|
||||
qb.where(column, '<>', value);
|
||||
break;
|
||||
}
|
||||
case '$gt': {
|
||||
return qb.where(column, '>', value);
|
||||
qb.where(column, '>', value);
|
||||
break;
|
||||
}
|
||||
case '$gte': {
|
||||
return qb.where(column, '>=', value);
|
||||
qb.where(column, '>=', value);
|
||||
break;
|
||||
}
|
||||
case '$lt': {
|
||||
return qb.where(column, '<', value);
|
||||
qb.where(column, '<', value);
|
||||
break;
|
||||
}
|
||||
case '$lte': {
|
||||
return qb.where(column, '<=', value);
|
||||
qb.where(column, '<=', value);
|
||||
break;
|
||||
}
|
||||
case '$null': {
|
||||
return value === true ? qb.whereNull(column) : qb.whereNotNull(column);
|
||||
// TODO: make this better
|
||||
if (value) {
|
||||
qb.whereNull(column);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case '$notNull': {
|
||||
if (value) {
|
||||
qb.whereNotNull(column);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case '$between': {
|
||||
return qb.whereBetween(column, value);
|
||||
}
|
||||
case '$regexp': {
|
||||
// TODO:
|
||||
return;
|
||||
}
|
||||
// string
|
||||
// TODO: use $case to make it case insensitive
|
||||
case '$like': {
|
||||
return qb.where(column, 'like', value);
|
||||
qb.whereBetween(column, value);
|
||||
break;
|
||||
}
|
||||
// case '$regexp': {
|
||||
// // TODO:
|
||||
//
|
||||
// break;
|
||||
// }
|
||||
// // string
|
||||
// // TODO: use $case to make it case insensitive
|
||||
// case '$like': {
|
||||
// qb.where(column, 'like', value);
|
||||
// break;
|
||||
// }
|
||||
|
||||
// TODO: add casting logic
|
||||
case '$startsWith': {
|
||||
return qb.where(column, 'like', `${value}%`);
|
||||
qb.where(column, 'like', `${value}%`);
|
||||
break;
|
||||
}
|
||||
case '$endsWith': {
|
||||
return qb.where(column, 'like', `%${value}`);
|
||||
qb.where(column, 'like', `%${value}`);
|
||||
break;
|
||||
}
|
||||
case '$contains': {
|
||||
return qb.where(column, 'like', `%${value}%`);
|
||||
qb.where(column, 'like', `%${value}%`);
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO: json operators
|
||||
@ -413,15 +444,7 @@ const processPopulate = (populate, ctx) => {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (typeof populate === 'string' && Boolean(populate)) {
|
||||
for (const key in meta.attributes) {
|
||||
const attribute = meta.attributes[key];
|
||||
|
||||
if (attribute.type === 'relation') {
|
||||
populateMap[key] = true;
|
||||
}
|
||||
}
|
||||
} else if (Array.isArray(populate)) {
|
||||
if (Array.isArray(populate)) {
|
||||
for (const key of populate) {
|
||||
populateMap[key] = true;
|
||||
}
|
||||
|
||||
@ -244,8 +244,6 @@ const createQueryBuilder = (uid, db) => {
|
||||
helpers.applyJoins(qb, state.joins);
|
||||
}
|
||||
|
||||
// console.log(qb.toQuery());
|
||||
|
||||
const rows = await qb;
|
||||
|
||||
if (state.populate && !_.isNil(rows)) {
|
||||
|
||||
@ -491,7 +491,7 @@ class Strapi {
|
||||
}
|
||||
|
||||
getModel(uid) {
|
||||
return this.contentTypes[uid];
|
||||
return this.contentTypes[uid] || this.components[uid];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -56,7 +56,7 @@ const preventCast = validator => validator.transform((val, originalVal) => origi
|
||||
const createComponentValidator = createOrUpdate => (attr, data, { isDraft }) => {
|
||||
let validator;
|
||||
|
||||
const [model] = strapi.db.getModelsByAttribute(attr);
|
||||
const model = strapi.getModel(attr.component);
|
||||
if (!model) {
|
||||
throw new Error('Validation failed: Model not found');
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user