From 288c9b554ac39e08a49d2d5bff8c9ba7efc760a2 Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Wed, 26 Mar 2025 11:48:24 -0400 Subject: [PATCH] fixed searchExtensionData orm function --- apps/desktop/src/lib/orm/cmds.ts | 53 +++++++++---------- .../app/troubleshooters/orm/+page.svelte | 41 +++++++------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/apps/desktop/src/lib/orm/cmds.ts b/apps/desktop/src/lib/orm/cmds.ts index 944ac18..dd0bfa1 100644 --- a/apps/desktop/src/lib/orm/cmds.ts +++ b/apps/desktop/src/lib/orm/cmds.ts @@ -261,7 +261,16 @@ export async function searchExtensionData(searchParams: { } // Build the query - const query = db.select(selectQuery).from(schema.extensionData) + let baseQuery = db.select(selectQuery).from(schema.extensionData) + + // Add FTS join if needed + if (searchParams.searchMode === SearchModeEnum.FTS && searchParams.searchText) { + // @ts-expect-error - The join type is correct but TypeScript can't infer it properly + baseQuery = baseQuery.innerJoin( + schema.extensionDataFts, + orm.eq(schema.extensionData.dataId, schema.extensionDataFts.dataId) + ) + } // Add conditions const conditions = [orm.eq(schema.extensionData.extId, searchParams.extId)] @@ -283,7 +292,6 @@ export async function searchExtensionData(searchParams: { conditions.push(orm.like(schema.extensionData.searchText, `%${searchParams.searchText}%`)) break case SearchModeEnum.FTS: - // For FTS, we need to use a raw SQL query since Drizzle doesn't support MATCH directly conditions.push(orm.sql`${schema.extensionDataFts.searchText} MATCH ${searchParams.searchText}`) break } @@ -297,34 +305,25 @@ export async function searchExtensionData(searchParams: { conditions.push(orm.lt(schema.extensionData.createdAt, searchParams.beforeCreatedAt)) } - // Add ordering - if (searchParams.orderByCreatedAt) { - query.orderBy( - searchParams.orderByCreatedAt === SQLSortOrderEnum.Asc - ? orm.asc(schema.extensionData.createdAt) - : orm.desc(schema.extensionData.createdAt) + // Build the final query with all conditions and modifiers + const query = baseQuery + .where(orm.and(...conditions)) + .orderBy( + searchParams.orderByCreatedAt + ? searchParams.orderByCreatedAt === SQLSortOrderEnum.Asc + ? orm.asc(schema.extensionData.createdAt) + : orm.desc(schema.extensionData.createdAt) + : searchParams.orderByUpdatedAt + ? searchParams.orderByUpdatedAt === SQLSortOrderEnum.Asc + ? orm.asc(schema.extensionData.updatedAt) + : orm.desc(schema.extensionData.updatedAt) + : orm.asc(schema.extensionData.createdAt) // Default ordering ) - } - - if (searchParams.orderByUpdatedAt) { - query.orderBy( - searchParams.orderByUpdatedAt === SQLSortOrderEnum.Asc - ? orm.asc(schema.extensionData.updatedAt) - : orm.desc(schema.extensionData.updatedAt) - ) - } - - // Add limit and offset - if (searchParams.limit) { - query.limit(searchParams.limit) - } - - if (searchParams.offset) { - query.offset(searchParams.offset) - } + .limit(searchParams.limit ?? 100) // Default limit + .offset(searchParams.offset ?? 0) // Default offset // Execute query and convert results - const results = await query.where(orm.and(...conditions)).all() + const results = await query.all() return results.map((rawData) => { // @ts-expect-error - rawData is unknown, but will be safe parsed with valibot return convertRawExtDataToExtData(rawData) diff --git a/apps/desktop/src/routes/app/troubleshooters/orm/+page.svelte b/apps/desktop/src/routes/app/troubleshooters/orm/+page.svelte index 36e78c4..364ddbe 100644 --- a/apps/desktop/src/routes/app/troubleshooters/orm/+page.svelte +++ b/apps/desktop/src/routes/app/troubleshooters/orm/+page.svelte @@ -11,7 +11,7 @@ import * as schema from "@kksh/drizzle/schema" import { Button, Input } from "@kksh/svelte5" import { CmdTypeEnum, Ext } from "@kunkunapi/src/models/extension" - import { SearchModeEnum } from "@kunkunapi/src/models/sql" + import { SearchModeEnum, SQLSortOrderEnum } from "@kunkunapi/src/models/sql" import { db } from "$lib/orm/database" import * as orm from "drizzle-orm" import { Inspect } from "svelte-inspect-value" @@ -100,24 +100,25 @@ > Get Extension Data By ID -
+
{ + e.preventDefault() + const _data = await searchExtensionData({ + extId: 1, + searchMode: SearchModeEnum.FTS, + searchText: searchText, + orderByCreatedAt: SQLSortOrderEnum.Desc, + limit: 10, + fields: ["search_text", "data"] + }) + console.log(_data) + data = _data + inspectTitle = "Search Results" + }} + > - -
- + + +