1- import { defineStore } from 'pinia' ;
2- import { ref } from 'vue' ;
3- import { db as indexedDB } from '@/db/SlideRuleDb' ;
4- import { createDuckDbClient } from '@/utils/SrDuckDb' ;
5- import { createLogger } from '@/utils/logger' ;
1+ import { defineStore } from 'pinia'
2+ import { ref } from 'vue'
3+ import { db as indexedDB } from '@/db/SlideRuleDb'
4+ import { createDuckDbClient } from '@/utils/SrDuckDb'
5+ import { createLogger } from '@/utils/logger'
66
7- const logger = createLogger ( 'SrcIdTblStore' ) ;
7+ const logger = createLogger ( 'SrcIdTblStore' )
88
99export const useSrcIdTblStore = defineStore ( 'srcIdTblStore' , ( ) => {
10- const sourceTable = ref < string [ ] > ( [ ] ) ;
11-
12- async function setSrcIdTblWithFileName ( fileName : string ) {
13- const db = await createDuckDbClient ( ) ;
14- if ( ! db ) {
15- logger . error ( 'Failed to create DuckDB client for file' , { fileName } ) ;
16- sourceTable . value = [ ] ;
17- return ;
10+ // Map to store multiple source tables keyed by reqId
11+ const sourceTables = ref < Map < number , string [ ] > > ( new Map ( ) )
12+
13+ // Legacy support: keep sourceTable for backward compatibility
14+ const sourceTable = ref < string [ ] > ( [ ] )
15+
16+ async function setSrcIdTblWithFileName ( fileName : string , reqId ?: number ) {
17+ const db = await createDuckDbClient ( )
18+ if ( ! db ) {
19+ logger . error ( 'Failed to create DuckDB client for file' , { fileName } )
20+ if ( reqId !== undefined ) {
21+ sourceTables . value . set ( reqId , [ ] )
22+ }
23+ sourceTable . value = [ ]
24+ return
25+ }
26+ await db . insertOpfsParquet ( fileName )
27+ try {
28+ const parsed = ( await db . getJsonMetaDataForKey ( 'meta' , fileName ) ) . parsedMetadata
29+ if ( parsed && parsed . srctbl && typeof parsed . srctbl === 'object' ) {
30+ // Convert object with numeric keys to an array
31+ const srcArray = Object . values ( parsed . srctbl ) as string [ ]
32+ if ( reqId !== undefined ) {
33+ sourceTables . value . set ( reqId , srcArray )
34+ }
35+ sourceTable . value = srcArray
36+ } else {
37+ if ( reqId !== undefined ) {
38+ sourceTables . value . set ( reqId , [ ] )
1839 }
19- await db . insertOpfsParquet ( fileName ) ;
20- try {
21- const parsed = ( await db . getJsonMetaDataForKey ( 'meta' , fileName ) ) . parsedMetadata ;
22- if ( parsed && parsed . srctbl && typeof parsed . srctbl === 'object' ) {
23- // Convert object with numeric keys to an array
24- sourceTable . value = Object . values ( parsed . srctbl ) ;
25- } else {
26- sourceTable . value = [ ] ;
27- logger . warn ( 'setSrcIdTblWithFileName: Missing or invalid srctbl field in JSON' , { fileName } ) ;
28- }
29- } catch ( error ) {
30- // If meta metadata is not found, just log and continue with empty source table
31- logger . warn ( 'setSrcIdTblWithFileName: Could not load meta metadata, source table will be empty' , {
32- fileName,
33- error : error instanceof Error ? error . message : String ( error )
34- } ) ;
35- sourceTable . value = [ ] ;
40+ sourceTable . value = [ ]
41+ logger . warn ( 'setSrcIdTblWithFileName: Missing or invalid srctbl field in JSON' , {
42+ fileName
43+ } )
44+ }
45+ } catch ( error ) {
46+ // If meta metadata is not found, just log and continue with empty source table
47+ logger . warn (
48+ 'setSrcIdTblWithFileName: Could not load meta metadata, source table will be empty' ,
49+ {
50+ fileName,
51+ error : error instanceof Error ? error . message : String ( error )
3652 }
53+ )
54+ if ( reqId !== undefined ) {
55+ sourceTables . value . set ( reqId , [ ] )
56+ }
57+ sourceTable . value = [ ]
3758 }
59+ }
3860
39- async function setSourceTbl ( reqId :number ) {
40- const fileName = await indexedDB . getFilename ( reqId ) ;
41- return setSrcIdTblWithFileName ( fileName ) ;
42- }
61+ async function setSourceTbl ( reqId : number ) {
62+ const fileName = await indexedDB . getFilename ( reqId )
63+ return setSrcIdTblWithFileName ( fileName , reqId )
64+ }
4365
44- async function getUniqueSourceCount ( req_id : number ) : Promise < number > {
45- await setSourceTbl ( req_id ) ;
46- return new Set ( sourceTable . value ) . size ;
47- }
66+ async function getUniqueSourceCount ( req_id : number ) : Promise < number > {
67+ await setSourceTbl ( req_id )
68+ const table = sourceTables . value . get ( req_id ) || [ ]
69+ return new Set ( table ) . size
70+ }
4871
49- async function getSourceTblForFile ( fileName : string ) : Promise < string [ ] > {
50- await setSrcIdTblWithFileName ( fileName ) ;
51- return sourceTable . value ;
52- }
72+ async function getSourceTblForFile ( fileName : string ) : Promise < string [ ] > {
73+ await setSrcIdTblWithFileName ( fileName )
74+ return sourceTable . value
75+ }
76+
77+ function getSourceTableForReqId ( reqId : number ) : string [ ] {
78+ return sourceTables . value . get ( reqId ) || [ ]
79+ }
5380
54- return {
55- sourceTable,
56- getUniqueSourceCount,
57- getSourceTblForFile,
58- } ;
59- } ) ;
81+ return {
82+ sourceTable,
83+ sourceTables,
84+ getUniqueSourceCount,
85+ getSourceTblForFile,
86+ getSourceTableForReqId
87+ }
88+ } )
0 commit comments