diff --git a/packages/core/database/examples/index.js b/packages/core/database/examples/index.js index e2c8ffaed7..7518247c75 100644 --- a/packages/core/database/examples/index.js +++ b/packages/core/database/examples/index.js @@ -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(); } diff --git a/packages/core/database/lib/dialects/index.js b/packages/core/database/lib/dialects/index.js index f0715f099e..b0a710a167 100644 --- a/packages/core/database/lib/dialects/index.js +++ b/packages/core/database/lib/dialects/index.js @@ -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 ); diff --git a/packages/core/database/lib/query/helpers.js b/packages/core/database/lib/query/helpers.js index 594d8e444f..f23d953e9a 100644 --- a/packages/core/database/lib/query/helpers.js +++ b/packages/core/database/lib/query/helpers.js @@ -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; } diff --git a/packages/core/database/lib/query/query-builder.js b/packages/core/database/lib/query/query-builder.js index 3014855e1a..e01fbdeea4 100644 --- a/packages/core/database/lib/query/query-builder.js +++ b/packages/core/database/lib/query/query-builder.js @@ -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)) { diff --git a/packages/core/strapi/lib/Strapi.js b/packages/core/strapi/lib/Strapi.js index 41a2404156..a8f81e0ade 100644 --- a/packages/core/strapi/lib/Strapi.js +++ b/packages/core/strapi/lib/Strapi.js @@ -491,7 +491,7 @@ class Strapi { } getModel(uid) { - return this.contentTypes[uid]; + return this.contentTypes[uid] || this.components[uid]; } /** diff --git a/packages/core/strapi/lib/services/entity-validator/index.js b/packages/core/strapi/lib/services/entity-validator/index.js index 2e575fbd20..d7547fea38 100644 --- a/packages/core/strapi/lib/services/entity-validator/index.js +++ b/packages/core/strapi/lib/services/entity-validator/index.js @@ -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'); }