Mercurial > code > home > repos > streamed-graph
annotate src/MultiStore.ts @ 150:3ce355e4f388 default tip
bye jest; hi vitest. new working test for styles.ts
author | drewp@bigasterisk.com |
---|---|
date | Mon, 08 May 2023 17:27:44 -0700 |
parents | 9347277e8311 |
children |
rev | line source |
---|---|
128 | 1 import { EventEmitter } from "events"; |
2 import { | |
3 BlankNode, | |
4 OTerm, | |
5 Quad, | |
6 QuadPredicate, | |
7 Store, | |
8 Term, | |
9 extractListOptions, | |
10 } from "n3"; | |
11 import * as RDF from "rdf-js"; | |
12 import { SubEvent } from "sub-events"; | |
144 | 13 import { Patch, PatchDirection } from "./Patch"; |
128 | 14 import { SourceGraph } from "./SourceGraph"; |
15 | |
16 // queries over multiple Store objects | |
17 export class MultiStore implements Store { | |
18 // emitted when there's been a net change to the graph data | |
19 graphChanged: SubEvent<Patch> = new SubEvent(); | |
20 | |
21 // sources of statements | |
22 private stores: Store[] = []; | |
23 private tempCombinedGraph: Store; | |
24 | |
25 constructor() { | |
26 this.tempCombinedGraph = new Store(); | |
27 } | |
28 | |
29 newStore(s: SourceGraph) { | |
146
9347277e8311
try a bit harder to notice <sg-source> children after <streamed-graph> startup
drewp@bigasterisk.com
parents:
144
diff
changeset
|
30 for (let ts of this.stores) { |
9347277e8311
try a bit harder to notice <sg-source> children after <streamed-graph> startup
drewp@bigasterisk.com
parents:
144
diff
changeset
|
31 if (ts==s.store) { |
9347277e8311
try a bit harder to notice <sg-source> children after <streamed-graph> startup
drewp@bigasterisk.com
parents:
144
diff
changeset
|
32 return; |
9347277e8311
try a bit harder to notice <sg-source> children after <streamed-graph> startup
drewp@bigasterisk.com
parents:
144
diff
changeset
|
33 } |
9347277e8311
try a bit harder to notice <sg-source> children after <streamed-graph> startup
drewp@bigasterisk.com
parents:
144
diff
changeset
|
34 } |
128 | 35 this.stores.push(s.store); |
144 | 36 const p = new Patch(PatchDirection.ADD); // todo |
128 | 37 s.sourceGraphChanged.subscribe((p) => { |
38 this.sourceGraphDataChanged(p); // todo | |
39 }); | |
40 } | |
41 | |
42 lostStore(s: Store) { | |
43 throw new Error("notimplemented"); | |
44 } | |
45 | |
46 sourceGraphDataChanged(p: Patch) { | |
47 | |
48 this.tempCombinedGraph = new Store(); | |
49 for (let st of this.stores) { | |
50 for (let q of st.getQuads(null, null, null, null)) { | |
51 this.tempCombinedGraph.addQuad(q); | |
52 } | |
53 } | |
54 this.graphChanged.emit(p); | |
55 } | |
56 | |
57 // | |
58 // Store interface follows: | |
59 // | |
60 forEach(qfn: (qfn: Quad) => void, s: OTerm, p: OTerm, o: OTerm, g: OTerm) { | |
61 this.tempCombinedGraph.forEach(qfn, s, p, o, g); | |
62 } | |
63 countQuads(s: OTerm, p: OTerm, o: OTerm, g: OTerm): number { | |
64 return this.tempCombinedGraph.countQuads(s, p, o, g); | |
65 // const seen: Set<Quad> = new Set(); | |
66 // let count = 0; | |
67 // for (let src of this.sources.currentSourceGraphs) { | |
68 // for (let q of src.store.getQuads(s, p, o, g)) { | |
69 // if (!seen.has(q)) { | |
70 // count++; | |
71 // seen.add(q); | |
72 // } | |
73 // } | |
74 // } | |
75 // return count; | |
76 } | |
77 | |
78 get size(): number { | |
79 return this.countQuads(null, null, null, null); | |
80 } | |
81 has(quad: Quad): boolean { | |
82 throw new Error("notimplemented"); | |
83 } | |
84 getQuads( | |
85 subject: OTerm, | |
86 predicate: OTerm, | |
87 object: OTerm | OTerm[], | |
88 graph: OTerm | |
89 ): Quad[] { | |
90 return this.tempCombinedGraph.getQuads(subject, predicate, object, graph); | |
91 } | |
92 match( | |
93 subject?: Term | null, | |
94 predicate?: Term | null, | |
95 object?: Term | null, | |
96 graph?: Term | null | |
97 ): RDF.Stream<Quad> & RDF.DatasetCore<Quad, Quad> { | |
98 throw new Error("notimplemented"); | |
99 } | |
100 | |
101 every( | |
102 callback: QuadPredicate<Quad>, | |
103 subject: OTerm, | |
104 predicate: OTerm, | |
105 object: OTerm, | |
106 graph: OTerm | |
107 ): boolean { | |
108 throw new Error("notimplemented"); | |
109 } | |
110 some( | |
111 callback: QuadPredicate<Quad>, | |
112 subject: OTerm, | |
113 predicate: OTerm, | |
114 object: OTerm, | |
115 graph: OTerm | |
116 ): boolean { | |
117 throw new Error("notimplemented"); | |
118 } | |
119 getSubjects( | |
120 predicate: OTerm, | |
121 object: OTerm, | |
122 graph: OTerm | |
123 ): Array<Quad["subject"]> { | |
124 throw new Error("notimplemented"); | |
125 } | |
126 forSubjects( | |
127 callback: (result: Quad["subject"]) => void, | |
128 predicate: OTerm, | |
129 object: OTerm, | |
130 graph: OTerm | |
131 ): void { | |
132 throw new Error("notimplemented"); | |
133 } | |
134 getPredicates( | |
135 subject: OTerm, | |
136 object: OTerm, | |
137 graph: OTerm | |
138 ): Array<Quad["predicate"]> { | |
139 throw new Error("notimplemented"); | |
140 return []; | |
141 } | |
142 forPredicates( | |
143 callback: (result: Quad["predicate"]) => void, | |
144 subject: OTerm, | |
145 object: OTerm, | |
146 graph: OTerm | |
147 ): void { | |
148 throw new Error("notimplemented"); | |
149 } | |
150 getObjects( | |
151 subject: OTerm, | |
152 predicate: OTerm, | |
153 graph: OTerm | |
154 ): Array<Quad["object"]> { | |
155 return this.tempCombinedGraph.getObjects(subject, predicate, graph); | |
156 } | |
157 forObjects( | |
158 callback: (result: Quad["object"]) => void, | |
159 subject: OTerm, | |
160 predicate: OTerm, | |
161 graph: OTerm | |
162 ): void { | |
163 throw new Error("notimplemented"); | |
164 } | |
165 getGraphs( | |
166 subject: OTerm, | |
167 predicate: OTerm, | |
168 object: OTerm | |
169 ): Array<Quad["graph"]> { | |
170 throw new Error("notimplemented"); | |
171 } | |
172 forGraphs( | |
173 callback: (result: Quad["graph"]) => void, | |
174 subject: OTerm, | |
175 predicate: OTerm, | |
176 object: OTerm | |
177 ): void { | |
178 throw new Error("notimplemented"); | |
179 } | |
180 extractLists(options?: extractListOptions): Record<string, RDF.Term[]> { | |
181 throw new Error("notimplemented"); | |
182 } | |
183 [Symbol.iterator](): Iterator<Quad> { | |
184 throw new Error("notimplemented"); | |
185 } | |
186 | |
187 add(): this { | |
188 throw new Error("MultiStore is readonly"); | |
189 } | |
190 addQuad() { | |
191 throw new Error("notimplemented"); | |
192 } | |
193 addQuads(): void { | |
194 throw new Error("MultiStore is readonly"); | |
195 } | |
196 delete(): this { | |
197 throw new Error("MultiStore is readonly"); | |
198 } | |
199 import(): EventEmitter { | |
200 throw new Error("MultiStore is readonly"); | |
201 } | |
202 removeQuad(): void { | |
203 throw new Error("MultiStore is readonly"); | |
204 } | |
205 removeQuads(): void { | |
206 throw new Error("MultiStore is readonly"); | |
207 } | |
208 remove(): EventEmitter { | |
209 throw new Error("MultiStore is readonly"); | |
210 } | |
211 removeMatches(): EventEmitter { | |
212 throw new Error("MultiStore is readonly"); | |
213 } | |
214 deleteGraph(): EventEmitter { | |
215 throw new Error("MultiStore is readonly"); | |
216 } | |
217 createBlankNode(): BlankNode { | |
218 throw new Error("MultiStore is readonly"); | |
219 } | |
220 } |