moleculer-db-adapter-sequelize
Advanced tools
Comparing version 0.2.17 to 0.2.18
{ | ||
"name": "moleculer-db-adapter-sequelize", | ||
"version": "0.2.17", | ||
"version": "0.2.18", | ||
"description": "SQL adapter (Postgres, MySQL, SQLite & MSSQL) for Moleculer DB service", | ||
@@ -49,3 +49,3 @@ "main": "index.js", | ||
"sequelize": "^6.35.0", | ||
"sqlite3": "^5.1.6", | ||
"sqlite3": "^5.1.7", | ||
"tedious": "^11.0.8" | ||
@@ -66,3 +66,3 @@ }, | ||
}, | ||
"gitHead": "b8026d6b112201ed48a2160f8a8623cf816e2083" | ||
"gitHead": "ee39037b85238f5fe481d85dd958f9e66cddf257" | ||
} |
@@ -130,4 +130,4 @@ ![Moleculer logo](http://moleculer.services/images/banner.png) | ||
# Contact | ||
Copyright (c) 2016-2022 MoleculerJS | ||
Copyright (c) 2016-2024 MoleculerJS | ||
[![@moleculerjs](https://img.shields.io/badge/github-moleculerjs-green.svg)](https://github.com/moleculerjs) [![@MoleculerJS](https://img.shields.io/badge/twitter-MoleculerJS-blue.svg)](https://twitter.com/MoleculerJS) |
@@ -316,2 +316,4 @@ /* | ||
const searchConditions = []; | ||
// Text search | ||
@@ -324,11 +326,35 @@ if (_.isString(params.search) && params.search !== "") { | ||
const searchConditions = fields.map(f => { | ||
return { | ||
for (const f of fields) { | ||
searchConditions.push({ | ||
[f]: { | ||
[Op.like]: "%" + params.search + "%" | ||
} | ||
}; | ||
}); | ||
}); | ||
} | ||
} | ||
// Case insensitive search | ||
else if (_.isString(params.iSearch) && params.iSearch !== "") { | ||
let fields = []; | ||
if (params.searchFields) { | ||
fields = _.isString(params.searchFields) ? params.searchFields.split(" ") : params.searchFields; | ||
} | ||
const lowerCaseSearch = "%" + (params.iSearch).toLowerCase() + "%"; | ||
for (const f of fields) { | ||
searchConditions.push(Sequelize.where( | ||
Sequelize.fn("lower", Sequelize.col(f)), | ||
Op.like, | ||
lowerCaseSearch | ||
)); | ||
} | ||
} | ||
// Assign only query params | ||
if (searchConditions.length == 0) { | ||
if (params.query) { | ||
Object.assign(q.where, params.query); | ||
} | ||
// Assign query and search params | ||
} else { | ||
if (params.query) { | ||
q.where[Op.and] = [ | ||
@@ -341,4 +367,2 @@ params.query, | ||
} | ||
} else if (params.query) { | ||
Object.assign(q.where, params.query); | ||
} | ||
@@ -345,0 +369,0 @@ |
@@ -232,3 +232,3 @@ "use strict"; | ||
adapter.createCursor({ | ||
search: "walter", | ||
search: "WaLtEr", | ||
searchFields: ["title", "content"] | ||
@@ -240,12 +240,4 @@ }); | ||
[Op.or]: [ | ||
{ | ||
title: { | ||
[Op.like]: "%walter%" | ||
} | ||
}, | ||
{ | ||
content: { | ||
[Op.like]: "%walter%" | ||
} | ||
} | ||
{ "title": { [Op.like]: "%WaLtEr%" } }, | ||
{ "content": { [Op.like]: "%WaLtEr%" } } | ||
] | ||
@@ -256,2 +248,45 @@ } | ||
it("call with full-text search (insensitive case) without query", () => { | ||
adapter.model.findAll.mockClear(); | ||
adapter.createCursor({ | ||
iSearch: "WaLtEr", | ||
searchFields: ["title", "content"] | ||
}); | ||
expect(adapter.model.findAll).toHaveBeenCalledTimes(1); | ||
expect(adapter.model.findAll).toHaveBeenCalledWith({ | ||
where: { | ||
[Op.or]: [ | ||
Sequelize.where( | ||
Sequelize.fn("lower", Sequelize.col("title")), | ||
Op.like, | ||
"%walter%" | ||
), | ||
Sequelize.where( | ||
Sequelize.fn("lower", Sequelize.col("content")), | ||
Op.like, | ||
"%walter%" | ||
) | ||
] | ||
} | ||
}); | ||
}); | ||
it("call with full-text search and full-text insensitive case search without query", () => { | ||
adapter.model.findAll.mockClear(); | ||
adapter.createCursor({ | ||
search: "WaLtEr", | ||
iSearch: "WaLtEr", | ||
searchFields: ["title", "content"] | ||
}); | ||
expect(adapter.model.findAll).toHaveBeenCalledTimes(1); | ||
expect(adapter.model.findAll).toHaveBeenCalledWith({ | ||
where: { | ||
[Op.or]: [ | ||
{ "title": { [Op.like]: "%WaLtEr%" } }, | ||
{ "content": { [Op.like]: "%WaLtEr%" } } | ||
] | ||
} | ||
}); | ||
}); | ||
it("call with full-text search with query", () => { | ||
@@ -261,3 +296,3 @@ adapter.model.findAll.mockClear(); | ||
query: { status: 1 }, | ||
search: "walter", | ||
search: "wAlTeR", | ||
searchFields: ["title", "content"] | ||
@@ -271,14 +306,5 @@ }); | ||
{ [Op.or]: [ | ||
{ | ||
title: { | ||
[Op.like]: "%walter%" | ||
} | ||
}, | ||
{ | ||
content: { | ||
[Op.like]: "%walter%" | ||
} | ||
} | ||
] | ||
} | ||
{ "title": { [Op.like]: "%wAlTeR%" } }, | ||
{ "content": { [Op.like]: "%wAlTeR%" } } | ||
] } | ||
] | ||
@@ -289,2 +315,53 @@ } | ||
it("call with full-text search (insensitive case) with query", () => { | ||
adapter.model.findAll.mockClear(); | ||
adapter.createCursor({ | ||
query: { status: 1 }, | ||
iSearch: "wAlTeR", | ||
searchFields: ["title", "content"] | ||
}); | ||
expect(adapter.model.findAll).toHaveBeenCalledTimes(1); | ||
expect(adapter.model.findAll).toHaveBeenCalledWith({ | ||
where: { | ||
[Op.and]: [ | ||
{ status: 1 }, | ||
{ [Op.or]: [ | ||
Sequelize.where( | ||
Sequelize.fn("lower", Sequelize.col("title")), | ||
Op.like, | ||
"%walter%" | ||
), | ||
Sequelize.where( | ||
Sequelize.fn("lower", Sequelize.col("content")), | ||
Op.like, | ||
"%walter%" | ||
) | ||
] } | ||
] | ||
} | ||
}); | ||
}); | ||
it("call with full-text search and full-text insensitive case search with query", () => { | ||
adapter.model.findAll.mockClear(); | ||
adapter.createCursor({ | ||
query: { status: 1 }, | ||
search: "wAlTeR", | ||
iSearch: "wAlTeR", | ||
searchFields: ["title", "content"] | ||
}); | ||
expect(adapter.model.findAll).toHaveBeenCalledTimes(1); | ||
expect(adapter.model.findAll).toHaveBeenCalledWith({ | ||
where: { | ||
[Op.and]: [ | ||
{ status: 1 }, | ||
{ [Op.or]: [ | ||
{ "title": { [Op.like]: "%wAlTeR%" } }, | ||
{ "content": { [Op.like]: "%wAlTeR%" } } | ||
] } | ||
] | ||
} | ||
}); | ||
}); | ||
it("call with full-text search & advanced query", () => { | ||
@@ -299,3 +376,3 @@ adapter.model.findAll.mockClear(); | ||
}, | ||
search: "walter", | ||
search: "WALTER", | ||
searchFields: ["title", "content"] | ||
@@ -312,12 +389,4 @@ }); | ||
{ [Op.or]: [ | ||
{ | ||
title: { | ||
[Op.like]: "%walter%" | ||
} | ||
}, | ||
{ | ||
content: { | ||
[Op.like]: "%walter%" | ||
} | ||
} | ||
{ "title": { [Op.like]: "%WALTER%" } }, | ||
{ "content": { [Op.like]: "%WALTER%" } } | ||
] } | ||
@@ -329,2 +398,68 @@ ] | ||
it("call with full-text search (insensitive case) & advanced query", () => { | ||
adapter.model.findAll.mockClear(); | ||
adapter.createCursor({ | ||
query: { | ||
[Op.or]: [ | ||
{ status: 1 }, | ||
{ deleted: 0 } | ||
] | ||
}, | ||
iSearch: "WALTER", | ||
searchFields: ["title", "content"] | ||
}); | ||
expect(adapter.model.findAll).toHaveBeenCalledTimes(1); | ||
expect(adapter.model.findAll).toHaveBeenCalledWith({ | ||
where: { | ||
[Op.and]: [ | ||
{ [Op.or]: [ | ||
{ status: 1 }, | ||
{ deleted: 0 }, | ||
] }, | ||
{ [Op.or]: [ | ||
Sequelize.where( | ||
Sequelize.fn("lower", Sequelize.col("title")), | ||
Op.like, | ||
"%walter%" | ||
), | ||
Sequelize.where( | ||
Sequelize.fn("lower", Sequelize.col("content")), | ||
Op.like, | ||
"%walter%" | ||
) | ||
] } | ||
] | ||
} | ||
}); | ||
}); | ||
it("call with full-text search and full-text insensitive case search & advanced query", () => { | ||
adapter.model.findAll.mockClear(); | ||
adapter.createCursor({ | ||
query: { | ||
[Op.or]: [ | ||
{ status: 1 }, | ||
{ deleted: 0 } | ||
] | ||
}, | ||
search: "WALTER", | ||
iSearch: "WALTER", | ||
searchFields: ["title", "content"] | ||
}); | ||
expect(adapter.model.findAll).toHaveBeenCalledTimes(1); | ||
expect(adapter.model.findAll).toHaveBeenCalledWith({ | ||
where: { | ||
[Op.and]: [ | ||
{ [Op.or]: [ | ||
{ status: 1 }, | ||
{ deleted: 0 }, | ||
] }, | ||
{ [Op.or]: [ | ||
{ "title": { [Op.like]: "%WALTER%" } }, | ||
{ "content": { [Op.like]: "%WALTER%" } } | ||
] } | ||
] | ||
} | ||
}); | ||
}); | ||
}); | ||
@@ -331,0 +466,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
54289
1621