use asciiOnlyToLowerCase to match lower function behaviour of SQLite

This commit is contained in:
Oleg Ivasenko 2024-09-13 17:09:32 +00:00
parent def34a860b
commit 0af29a378a
2 changed files with 16 additions and 38 deletions

View File

@ -1,5 +1,6 @@
const { DataTypes, Model, where, fn, col } = require('sequelize') const { DataTypes, Model, where, fn, col } = require('sequelize')
const parseNameString = require('../utils/parsers/parseNameString') const parseNameString = require('../utils/parsers/parseNameString')
const { asciiOnlyToLowerCase } = require('../utils/index')
class Author extends Model { class Author extends Model {
constructor(values, options) { constructor(values, options) {
@ -53,26 +54,14 @@ class Author extends Model {
* @returns {Promise<Author>} * @returns {Promise<Author>}
*/ */
static async getByNameAndLibrary(authorName, libraryId) { static async getByNameAndLibrary(authorName, libraryId) {
const containsOnlyASCII = /^[\u0000-\u007f]*$/.test(authorName) return this.findOne({
where: [
// SQLite does not support lower with non-Unicode chars where(fn('lower', col('name')), asciiOnlyToLowerCase(authorName)),
if (!containsOnlyASCII) { {
return this.findOne({ libraryId
where: {
name: authorName,
libraryId: libraryId
} }
}) ]
} else { })
return this.findOne({
where: [
where(fn('lower', col('name')), authorName.toLowerCase()),
{
libraryId
}
]
})
}
} }
/** /**

View File

@ -1,6 +1,7 @@
const { DataTypes, Model, where, fn, col } = require('sequelize') const { DataTypes, Model, where, fn, col } = require('sequelize')
const { getTitlePrefixAtEnd } = require('../utils/index') const { getTitlePrefixAtEnd } = require('../utils/index')
const { asciiOnlyToLowerCase } = require('../utils/index')
class Series extends Model { class Series extends Model {
constructor(values, options) { constructor(values, options) {
@ -39,26 +40,14 @@ class Series extends Model {
* @returns {Promise<Series>} * @returns {Promise<Series>}
*/ */
static async getByNameAndLibrary(seriesName, libraryId) { static async getByNameAndLibrary(seriesName, libraryId) {
const containsOnlyASCII = /^[\u0000-\u007f]*$/.test(authorName) return this.findOne({
where: [
// SQLite does not support lower with non-Unicode chars where(fn('lower', col('name')), asciiOnlyToLowerCase(seriesName)),
if (!containsOnlyASCII) { {
return this.findOne({ libraryId
where: {
name: seriesName,
libraryId: libraryId
} }
}) ]
} else { })
return this.findOne({
where: [
where(fn('lower', col('name')), seriesName.toLowerCase()),
{
libraryId
}
]
})
}
} }
/** /**