Hunno this isn't all the case search fixes required...
Manual fixes for a lot of case places.. -Dx
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { and, desc, eq, like, sql, asc } from "drizzle-orm";
|
import { and, desc, eq, sql, asc } from "drizzle-orm";
|
||||||
import { cache } from "react";
|
import { cache } from "react";
|
||||||
// import { alias } from "drizzle-orm/mysql-core";
|
// import { alias } from "drizzle-orm/mysql-core";
|
||||||
import { db } from "@/server/db";
|
import { db } from "@/server/db";
|
||||||
@@ -107,13 +107,13 @@ export interface EntryFacets {
|
|||||||
|
|
||||||
function buildEntrySearchUnion(pattern: string, scope: EntrySearchScope) {
|
function buildEntrySearchUnion(pattern: string, scope: EntrySearchScope) {
|
||||||
const parts: Array<ReturnType<typeof sql>> = [
|
const parts: Array<ReturnType<typeof sql>> = [
|
||||||
sql`select ${searchByTitles.entryId} as entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern}`,
|
sql`select ${searchByTitles.entryId} as entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern}`,
|
||||||
];
|
];
|
||||||
if (scope !== "title") {
|
if (scope !== "title") {
|
||||||
parts.push(sql`select ${searchByAliases.entryId} as entry_id from ${searchByAliases} where ${searchByAliases.libraryTitle} like ${pattern}`);
|
parts.push(sql`select ${searchByAliases.entryId} as entry_id from ${searchByAliases} where lower(${searchByAliases.libraryTitle}) like ${pattern}`);
|
||||||
}
|
}
|
||||||
if (scope === "title_aliases_origins") {
|
if (scope === "title_aliases_origins") {
|
||||||
parts.push(sql`select ${searchByOrigins.entryId} as entry_id from ${searchByOrigins} where ${searchByOrigins.libraryTitle} like ${pattern}`);
|
parts.push(sql`select ${searchByOrigins.entryId} as entry_id from ${searchByOrigins} where lower(${searchByOrigins.libraryTitle}) like ${pattern}`);
|
||||||
}
|
}
|
||||||
return sql.join(parts, sql` union `);
|
return sql.join(parts, sql` union `);
|
||||||
}
|
}
|
||||||
@@ -271,7 +271,7 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
|
|||||||
const countRows = await db
|
const countRows = await db
|
||||||
.select({ total: sql<number>`count(distinct ${searchByTitles.entryId})` })
|
.select({ total: sql<number>`count(distinct ${searchByTitles.entryId})` })
|
||||||
.from(searchByTitles)
|
.from(searchByTitles)
|
||||||
.where(like(searchByTitles.entryTitle, pattern));
|
.where(sql`lower(${searchByTitles.entryTitle}) like ${pattern}`);
|
||||||
|
|
||||||
const total = Number(countRows[0]?.total ?? 0);
|
const total = Number(countRows[0]?.total ?? 0);
|
||||||
|
|
||||||
@@ -293,7 +293,7 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
|
|||||||
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
||||||
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
||||||
.leftJoin(languages, eq(languages.id, entries.languageId))
|
.leftJoin(languages, eq(languages.id, entries.languageId))
|
||||||
.where(like(searchByTitles.entryTitle, pattern))
|
.where(sql`lower(${searchByTitles.entryTitle}) like ${pattern}`)
|
||||||
.groupBy(entries.id)
|
.groupBy(entries.id)
|
||||||
.orderBy(sort === "id_desc" ? desc(entries.id) : entries.title)
|
.orderBy(sort === "id_desc" ? desc(entries.id) : entries.title)
|
||||||
.limit(pageSize)
|
.limit(pageSize)
|
||||||
@@ -1207,7 +1207,7 @@ export async function getLabelAuthoredEntries(labelId: number, params: LabelCont
|
|||||||
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
||||||
.from(authors)
|
.from(authors)
|
||||||
.innerJoin(entries, eq(entries.id, authors.entryId))
|
.innerJoin(entries, eq(entries.id, authors.entryId))
|
||||||
.where(and(eq(authors.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`));
|
.where(and(eq(authors.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`));
|
||||||
const total = Number((countRows)[0]?.total ?? 0);
|
const total = Number((countRows)[0]?.total ?? 0);
|
||||||
const items = await db
|
const items = await db
|
||||||
.select({
|
.select({
|
||||||
@@ -1226,7 +1226,7 @@ export async function getLabelAuthoredEntries(labelId: number, params: LabelCont
|
|||||||
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
||||||
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
||||||
.leftJoin(languages, eq(languages.id, entries.languageId))
|
.leftJoin(languages, eq(languages.id, entries.languageId))
|
||||||
.where(and(eq(authors.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))
|
.where(and(eq(authors.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`))
|
||||||
.groupBy(entries.id)
|
.groupBy(entries.id)
|
||||||
.orderBy(entries.title)
|
.orderBy(entries.title)
|
||||||
.limit(pageSize)
|
.limit(pageSize)
|
||||||
@@ -1279,7 +1279,7 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon
|
|||||||
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
||||||
.from(publishers)
|
.from(publishers)
|
||||||
.innerJoin(entries, eq(entries.id, publishers.entryId))
|
.innerJoin(entries, eq(entries.id, publishers.entryId))
|
||||||
.where(and(eq(publishers.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`));
|
.where(and(eq(publishers.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`));
|
||||||
const total = Number((countRows)[0]?.total ?? 0);
|
const total = Number((countRows)[0]?.total ?? 0);
|
||||||
const items = await db
|
const items = await db
|
||||||
.select({
|
.select({
|
||||||
@@ -1298,7 +1298,7 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon
|
|||||||
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
||||||
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
||||||
.leftJoin(languages, eq(languages.id, entries.languageId))
|
.leftJoin(languages, eq(languages.id, entries.languageId))
|
||||||
.where(and(eq(publishers.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))
|
.where(and(eq(publishers.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`))
|
||||||
.groupBy(entries.id)
|
.groupBy(entries.id)
|
||||||
.orderBy(entries.title)
|
.orderBy(entries.title)
|
||||||
.limit(pageSize)
|
.limit(pageSize)
|
||||||
@@ -1338,16 +1338,16 @@ export async function searchLanguages(params: SimpleSearchParams) {
|
|||||||
return { items, page, pageSize, total };
|
return { items, page, pageSize, total };
|
||||||
}
|
}
|
||||||
|
|
||||||
const pattern = `%${q}%`;
|
const pattern = `%${q.toLowerCase()}%`;
|
||||||
const [items, countRows] = await Promise.all([
|
const [items, countRows] = await Promise.all([
|
||||||
db
|
db
|
||||||
.select()
|
.select()
|
||||||
.from(languages)
|
.from(languages)
|
||||||
.where(like(languages.name, pattern))
|
.where(sql`lower(${languages.name}) like ${pattern}`)
|
||||||
.orderBy(languages.name)
|
.orderBy(languages.name)
|
||||||
.limit(pageSize)
|
.limit(pageSize)
|
||||||
.offset(offset),
|
.offset(offset),
|
||||||
db.select({ total: sql<number>`count(*)` }).from(languages).where(like(languages.name, pattern)),
|
db.select({ total: sql<number>`count(*)` }).from(languages).where(sql`lower(${languages.name}) like ${pattern}`),
|
||||||
]);
|
]);
|
||||||
const total = Number(countRows?.[0]?.total ?? 0);
|
const total = Number(countRows?.[0]?.total ?? 0);
|
||||||
return { items, page, pageSize, total };
|
return { items, page, pageSize, total };
|
||||||
@@ -1368,16 +1368,16 @@ export async function searchGenres(params: SimpleSearchParams) {
|
|||||||
return { items, page, pageSize, total };
|
return { items, page, pageSize, total };
|
||||||
}
|
}
|
||||||
|
|
||||||
const pattern = `%${q}%`;
|
const pattern = `%${q.toLowerCase()}%`;
|
||||||
const [items, countRows] = await Promise.all([
|
const [items, countRows] = await Promise.all([
|
||||||
db
|
db
|
||||||
.select()
|
.select()
|
||||||
.from(genretypes)
|
.from(genretypes)
|
||||||
.where(like(genretypes.name, pattern))
|
.where(sql`lower(${genretypes.name}) like ${pattern}`)
|
||||||
.orderBy(genretypes.name)
|
.orderBy(genretypes.name)
|
||||||
.limit(pageSize)
|
.limit(pageSize)
|
||||||
.offset(offset),
|
.offset(offset),
|
||||||
db.select({ total: sql<number>`count(*)` }).from(genretypes).where(like(genretypes.name, pattern)),
|
db.select({ total: sql<number>`count(*)` }).from(genretypes).where(sql`lower(${genretypes.name}) like ${pattern}`),
|
||||||
]);
|
]);
|
||||||
const total = Number(countRows?.[0]?.total ?? 0);
|
const total = Number(countRows?.[0]?.total ?? 0);
|
||||||
return { items, page, pageSize, total };
|
return { items, page, pageSize, total };
|
||||||
@@ -1398,16 +1398,16 @@ export async function searchMachinetypes(params: SimpleSearchParams) {
|
|||||||
return { items, page, pageSize, total };
|
return { items, page, pageSize, total };
|
||||||
}
|
}
|
||||||
|
|
||||||
const pattern = `%${q}%`;
|
const pattern = `%${q.toLowerCase()}%`;
|
||||||
const [items, countRows] = await Promise.all([
|
const [items, countRows] = await Promise.all([
|
||||||
db
|
db
|
||||||
.select()
|
.select()
|
||||||
.from(machinetypes)
|
.from(machinetypes)
|
||||||
.where(like(machinetypes.name, pattern))
|
.where(sql`lower(${machinetypes.name}) like ${pattern}`)
|
||||||
.orderBy(machinetypes.name)
|
.orderBy(machinetypes.name)
|
||||||
.limit(pageSize)
|
.limit(pageSize)
|
||||||
.offset(offset),
|
.offset(offset),
|
||||||
db.select({ total: sql<number>`count(*)` }).from(machinetypes).where(like(machinetypes.name, pattern)),
|
db.select({ total: sql<number>`count(*)` }).from(machinetypes).where(sql`lower(${machinetypes.name}) like ${pattern}`),
|
||||||
]);
|
]);
|
||||||
const total = Number((countRows as { total: number }[])[0]?.total ?? 0);
|
const total = Number((countRows as { total: number }[])[0]?.total ?? 0);
|
||||||
return { items, page, pageSize, total };
|
return { items, page, pageSize, total };
|
||||||
@@ -1454,7 +1454,7 @@ export async function entriesByGenre(
|
|||||||
const countRows = await db
|
const countRows = await db
|
||||||
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
||||||
.from(entries)
|
.from(entries)
|
||||||
.where(and(eq(entries.genretypeId, genreId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`));
|
.where(and(eq(entries.genretypeId, genreId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`));
|
||||||
const total = Number(countRows[0]?.total ?? 0);
|
const total = Number(countRows[0]?.total ?? 0);
|
||||||
const items = await db
|
const items = await db
|
||||||
.select({
|
.select({
|
||||||
@@ -1472,7 +1472,7 @@ export async function entriesByGenre(
|
|||||||
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
||||||
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
||||||
.leftJoin(languages, eq(languages.id, entries.languageId))
|
.leftJoin(languages, eq(languages.id, entries.languageId))
|
||||||
.where(and(eq(entries.genretypeId, genreId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))
|
.where(and(eq(entries.genretypeId, genreId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`))
|
||||||
.groupBy(entries.id)
|
.groupBy(entries.id)
|
||||||
.orderBy(entries.title)
|
.orderBy(entries.title)
|
||||||
.limit(pageSize)
|
.limit(pageSize)
|
||||||
@@ -1521,7 +1521,7 @@ export async function entriesByLanguage(
|
|||||||
const countRows = await db
|
const countRows = await db
|
||||||
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
||||||
.from(entries)
|
.from(entries)
|
||||||
.where(and(eq(entries.languageId, langId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`));
|
.where(and(eq(entries.languageId, langId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`));
|
||||||
const total = Number(countRows[0]?.total ?? 0);
|
const total = Number(countRows[0]?.total ?? 0);
|
||||||
const items = await db
|
const items = await db
|
||||||
.select({
|
.select({
|
||||||
@@ -1539,7 +1539,7 @@ export async function entriesByLanguage(
|
|||||||
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
||||||
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
||||||
.leftJoin(languages, eq(languages.id, entries.languageId))
|
.leftJoin(languages, eq(languages.id, entries.languageId))
|
||||||
.where(and(eq(entries.languageId, langId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))
|
.where(and(eq(entries.languageId, langId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`))
|
||||||
.groupBy(entries.id)
|
.groupBy(entries.id)
|
||||||
.orderBy(entries.title)
|
.orderBy(entries.title)
|
||||||
.limit(pageSize)
|
.limit(pageSize)
|
||||||
@@ -1588,7 +1588,7 @@ export async function entriesByMachinetype(
|
|||||||
const countRows = await db
|
const countRows = await db
|
||||||
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
.select({ total: sql<number>`count(distinct ${entries.id})` })
|
||||||
.from(entries)
|
.from(entries)
|
||||||
.where(and(eq(entries.machinetypeId, mtId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`));
|
.where(and(eq(entries.machinetypeId, mtId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`));
|
||||||
const total = Number(countRows[0]?.total ?? 0);
|
const total = Number(countRows[0]?.total ?? 0);
|
||||||
const items = await db
|
const items = await db
|
||||||
.select({
|
.select({
|
||||||
@@ -1606,7 +1606,7 @@ export async function entriesByMachinetype(
|
|||||||
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
|
||||||
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
|
||||||
.leftJoin(languages, eq(languages.id, entries.languageId))
|
.leftJoin(languages, eq(languages.id, entries.languageId))
|
||||||
.where(and(eq(entries.machinetypeId, mtId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))
|
.where(and(eq(entries.machinetypeId, mtId), sql`${entries.id} in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`))
|
||||||
.groupBy(entries.id)
|
.groupBy(entries.id)
|
||||||
.orderBy(entries.title)
|
.orderBy(entries.title)
|
||||||
.limit(pageSize)
|
.limit(pageSize)
|
||||||
@@ -1629,10 +1629,10 @@ export async function getEntryFacets(params: SearchParams): Promise<EntryFacets>
|
|||||||
const union = buildEntrySearchUnion(pattern, scope);
|
const union = buildEntrySearchUnion(pattern, scope);
|
||||||
whereParts.push(sql`e.id in (select entry_id from (${union}) as matches)`);
|
whereParts.push(sql`e.id in (select entry_id from (${union}) as matches)`);
|
||||||
} catch {
|
} catch {
|
||||||
whereParts.push(sql`e.id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`);
|
whereParts.push(sql`e.id in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
whereParts.push(sql`e.id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`);
|
whereParts.push(sql`e.id in (select entry_id from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (params.genreId) whereParts.push(sql`${entries.genretypeId} = ${params.genreId}`);
|
if (params.genreId) whereParts.push(sql`${entries.genretypeId} = ${params.genreId}`);
|
||||||
@@ -1741,7 +1741,7 @@ export async function searchReleases(params: ReleaseSearchParams): Promise<Paged
|
|||||||
const wherePartsQB: Array<ReturnType<typeof sql>> = [];
|
const wherePartsQB: Array<ReturnType<typeof sql>> = [];
|
||||||
if (q) {
|
if (q) {
|
||||||
const pattern = `%${q.toLowerCase().replace(/[^a-z0-9]+/g, "")}%`;
|
const pattern = `%${q.toLowerCase().replace(/[^a-z0-9]+/g, "")}%`;
|
||||||
wherePartsQB.push(sql`${releases.entryId} in (select ${searchByTitles.entryId} from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`);
|
wherePartsQB.push(sql`${releases.entryId} in (select ${searchByTitles.entryId} from ${searchByTitles} where lower(${searchByTitles.entryTitle}) like ${pattern})`);
|
||||||
}
|
}
|
||||||
if (params.year != null) {
|
if (params.year != null) {
|
||||||
wherePartsQB.push(eq(releases.releaseYear, params.year));
|
wherePartsQB.push(eq(releases.releaseYear, params.year));
|
||||||
@@ -2228,7 +2228,7 @@ export async function listMagazines(params: { q?: string; page?: number; pageSiz
|
|||||||
const page = Math.max(1, params.page ?? 1);
|
const page = Math.max(1, params.page ?? 1);
|
||||||
const offset = (page - 1) * pageSize;
|
const offset = (page - 1) * pageSize;
|
||||||
|
|
||||||
const whereExpr = q ? like(magazines.name, `%${q}%`) : sql`true`;
|
const whereExpr = q ? sql`lower(${magazines.name}) like ${`%${q.toLowerCase()}%`}` : sql`true`;
|
||||||
|
|
||||||
const [items, totalRows] = await Promise.all([
|
const [items, totalRows] = await Promise.all([
|
||||||
db
|
db
|
||||||
|
|||||||
Reference in New Issue
Block a user