@ifc-lite/query 1.14.14 → 1.14.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/dist/entity-node.d.ts +18 -0
- package/dist/entity-node.d.ts.map +1 -1
- package/dist/entity-node.js +21 -3
- package/dist/entity-node.js.map +1 -1
- package/dist/entity-query.d.ts +53 -0
- package/dist/entity-query.d.ts.map +1 -1
- package/dist/entity-query.js +139 -5
- package/dist/entity-query.js.map +1 -1
- package/dist/property-filter.d.ts +32 -0
- package/dist/property-filter.d.ts.map +1 -0
- package/dist/property-filter.js +59 -0
- package/dist/property-filter.js.map +1 -0
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -48,11 +48,26 @@ query.spaces().execute();
|
|
|
48
48
|
query
|
|
49
49
|
.ofType('IfcWall')
|
|
50
50
|
.whereProperty('Qto_WallBaseQuantities', 'NetVolume', '>', 5.0)
|
|
51
|
-
.whereProperty('Pset_WallCommon', 'FireRating', '
|
|
51
|
+
.whereProperty('Pset_WallCommon', 'FireRating', 'startsWith', 'REI')
|
|
52
52
|
.execute();
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
Supported: `=`, `!=`, `>`, `<`, `>=`, `<=`, `contains`, `startsWith`.
|
|
55
|
+
Supported: `=`, `!=`, `>`, `<`, `>=`, `<=`, `contains`, `startsWith`. The first
|
|
56
|
+
argument names either a property set (`Pset_*`) or a quantity set (`Qto_*`).
|
|
57
|
+
|
|
58
|
+
Comparisons are same-type only — `'60'` does not match `60` — and a `null` on
|
|
59
|
+
either side never matches, including with `!=`. A filter matches when *any*
|
|
60
|
+
property of that name, in *any* set of that name, satisfies it.
|
|
61
|
+
|
|
62
|
+
On a STEP (`.ifc`) model the property sets are resolved lazily from the source
|
|
63
|
+
buffer rather than from a pre-built index, so `whereProperty` does work per
|
|
64
|
+
*candidate* entity. Narrow with `ofType(...)` / `onStorey(...)` before filtering:
|
|
65
|
+
`query.all().whereProperty(...)` resolves every entity in the model and on a
|
|
66
|
+
large one costs many times the type-scoped form. A cache-restored `.ifc` model
|
|
67
|
+
behaves the same way: the cache stores the property table as it was built, and a
|
|
68
|
+
STEP parse leaves it empty. What decides the path is the store rather than the
|
|
69
|
+
file format — a query answers from the property index whenever the store carries
|
|
70
|
+
table rows. Both paths return the same entities.
|
|
56
71
|
|
|
57
72
|
## Graph traversal
|
|
58
73
|
|
package/dist/entity-node.d.ts
CHANGED
|
@@ -36,9 +36,27 @@ export declare class EntityNode {
|
|
|
36
36
|
containedIn(): EntityNode | null;
|
|
37
37
|
decomposes(): EntityNode[];
|
|
38
38
|
decomposedBy(): EntityNode | null;
|
|
39
|
+
/**
|
|
40
|
+
* The type object defining this occurrence.
|
|
41
|
+
*
|
|
42
|
+
* `IfcRelDefinesByType` has the type as its relating object, and the parser
|
|
43
|
+
* stores edges relating -> related, so the type is the source and each
|
|
44
|
+
* occurrence the target. Reaching the type from an occurrence is therefore
|
|
45
|
+
* an inverse traversal — matching the element -> type lookups in
|
|
46
|
+
* `on-demand-extractors.ts`.
|
|
47
|
+
*/
|
|
39
48
|
definingType(): EntityNode | null;
|
|
49
|
+
/** The occurrences defined by this type — forward, from the type source. */
|
|
40
50
|
instances(): EntityNode[];
|
|
41
51
|
voids(): EntityNode[];
|
|
52
|
+
/**
|
|
53
|
+
* The elements filling this opening (doors, windows).
|
|
54
|
+
*
|
|
55
|
+
* `IfcRelFillsElement` is (RelatingOpeningElement, RelatedBuildingElement),
|
|
56
|
+
* so the opening is the relating object and the filler the related one —
|
|
57
|
+
* reaching the filler from the opening is a forward traversal, the same
|
|
58
|
+
* orientation `voids()` uses to reach the opening from its host.
|
|
59
|
+
*/
|
|
42
60
|
filledBy(): EntityNode[];
|
|
43
61
|
traverse(relType: RelationshipType, depth: number, direction?: 'forward' | 'inverse'): EntityNode[];
|
|
44
62
|
building(): EntityNode | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-node.d.ts","sourceRoot":"","sources":["../src/entity-node.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,IAAI,YAAY,EAAE,SAAS,EAAqB,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE1I,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AA0BlD,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,SAAS,GAChB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAO3D;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAe;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,iBAAiB,CAAyG;gBAEtH,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM;IAKlD;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAa7B,IAAI,QAAQ,IAAI,MAAM,CAMrB;IAED,IAAI,IAAI,IAAI,MAAM,CAMjB;IAED,IAAI,WAAW,IAAI,MAAM,CAMxB;IAED,IAAI,UAAU,IAAI,MAAM,CAMvB;IAED,IAAI,GAAG,IAAI,MAAM,CAGhB;IAED;;;;OAIG;IACH,aAAa,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAe1E,IAAI,IAAI,IAAI,MAAM,CAEjB;IAGD,QAAQ,IAAI,UAAU,EAAE;IAIxB,WAAW,IAAI,UAAU,GAAG,IAAI;IAMhC,UAAU,IAAI,UAAU,EAAE;IAI1B,YAAY,IAAI,UAAU,GAAG,IAAI;IAMjC,YAAY,IAAI,UAAU,GAAG,IAAI;IAKjC,SAAS,IAAI,UAAU,EAAE;IAKzB,KAAK,IAAI,UAAU,EAAE;IAIrB,QAAQ,IAAI,UAAU,EAAE;IAKxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,GAAG,SAAqB,GAAG,UAAU,EAAE;IA+B9G,QAAQ,IAAI,UAAU,GAAG,IAAI;IAY7B,MAAM,IAAI,UAAU,GAAG,IAAI;IAa3B,UAAU,IAAI,WAAW,EAAE;IAI3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAMlE,UAAU,IAAI,WAAW,EAAE;IAI3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM/D,OAAO,CAAC,UAAU;CAInB"}
|
|
1
|
+
{"version":3,"file":"entity-node.d.ts","sourceRoot":"","sources":["../src/entity-node.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,IAAI,YAAY,EAAE,SAAS,EAAqB,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE1I,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AA0BlD,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,SAAS,GAChB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAO3D;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAe;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,iBAAiB,CAAyG;gBAEtH,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM;IAKlD;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAa7B,IAAI,QAAQ,IAAI,MAAM,CAMrB;IAED,IAAI,IAAI,IAAI,MAAM,CAMjB;IAED,IAAI,WAAW,IAAI,MAAM,CAMxB;IAED,IAAI,UAAU,IAAI,MAAM,CAMvB;IAED,IAAI,GAAG,IAAI,MAAM,CAGhB;IAED;;;;OAIG;IACH,aAAa,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAe1E,IAAI,IAAI,IAAI,MAAM,CAEjB;IAGD,QAAQ,IAAI,UAAU,EAAE;IAIxB,WAAW,IAAI,UAAU,GAAG,IAAI;IAMhC,UAAU,IAAI,UAAU,EAAE;IAI1B,YAAY,IAAI,UAAU,GAAG,IAAI;IAMjC;;;;;;;;OAQG;IACH,YAAY,IAAI,UAAU,GAAG,IAAI;IAKjC,4EAA4E;IAC5E,SAAS,IAAI,UAAU,EAAE;IAKzB,KAAK,IAAI,UAAU,EAAE;IAIrB;;;;;;;OAOG;IACH,QAAQ,IAAI,UAAU,EAAE;IAKxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,GAAG,SAAqB,GAAG,UAAU,EAAE;IA+B9G,QAAQ,IAAI,UAAU,GAAG,IAAI;IAY7B,MAAM,IAAI,UAAU,GAAG,IAAI;IAa3B,UAAU,IAAI,WAAW,EAAE;IAI3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAMlE,UAAU,IAAI,WAAW,EAAE;IAI3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM/D,OAAO,CAAC,UAAU;CAInB"}
|
package/dist/entity-node.js
CHANGED
|
@@ -145,19 +145,37 @@ export class EntityNode {
|
|
|
145
145
|
return nodes[0] ?? null;
|
|
146
146
|
}
|
|
147
147
|
// Types
|
|
148
|
+
/**
|
|
149
|
+
* The type object defining this occurrence.
|
|
150
|
+
*
|
|
151
|
+
* `IfcRelDefinesByType` has the type as its relating object, and the parser
|
|
152
|
+
* stores edges relating -> related, so the type is the source and each
|
|
153
|
+
* occurrence the target. Reaching the type from an occurrence is therefore
|
|
154
|
+
* an inverse traversal — matching the element -> type lookups in
|
|
155
|
+
* `on-demand-extractors.ts`.
|
|
156
|
+
*/
|
|
148
157
|
definingType() {
|
|
149
|
-
const nodes = this.getRelated(RelationshipType.DefinesByType, '
|
|
158
|
+
const nodes = this.getRelated(RelationshipType.DefinesByType, 'inverse');
|
|
150
159
|
return nodes[0] ?? null;
|
|
151
160
|
}
|
|
161
|
+
/** The occurrences defined by this type — forward, from the type source. */
|
|
152
162
|
instances() {
|
|
153
|
-
return this.getRelated(RelationshipType.DefinesByType, '
|
|
163
|
+
return this.getRelated(RelationshipType.DefinesByType, 'forward');
|
|
154
164
|
}
|
|
155
165
|
// Openings
|
|
156
166
|
voids() {
|
|
157
167
|
return this.getRelated(RelationshipType.VoidsElement, 'forward');
|
|
158
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* The elements filling this opening (doors, windows).
|
|
171
|
+
*
|
|
172
|
+
* `IfcRelFillsElement` is (RelatingOpeningElement, RelatedBuildingElement),
|
|
173
|
+
* so the opening is the relating object and the filler the related one —
|
|
174
|
+
* reaching the filler from the opening is a forward traversal, the same
|
|
175
|
+
* orientation `voids()` uses to reach the opening from its host.
|
|
176
|
+
*/
|
|
159
177
|
filledBy() {
|
|
160
|
-
return this.getRelated(RelationshipType.FillsElement, '
|
|
178
|
+
return this.getRelated(RelationshipType.FillsElement, 'forward');
|
|
161
179
|
}
|
|
162
180
|
// Multi-hop traversal
|
|
163
181
|
traverse(relType, depth, direction = 'forward') {
|
package/dist/entity-node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-node.js","sourceRoot":"","sources":["../src/entity-node.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entity-node.js","sourceRoot":"","sources":["../src/entity-node.ts"],"names":[],"mappings":"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"}
|
package/dist/entity-query.d.ts
CHANGED
|
@@ -26,6 +26,59 @@ export declare class EntityQuery {
|
|
|
26
26
|
count(): Promise<number>;
|
|
27
27
|
first(): Promise<QueryResultEntity | null>;
|
|
28
28
|
private getCandidateIds;
|
|
29
|
+
/**
|
|
30
|
+
* Narrow `ids` to those satisfying every registered property filter.
|
|
31
|
+
*
|
|
32
|
+
* A filter's first argument names either a property set or a quantity set,
|
|
33
|
+
* so both tables are consulted and their matches unioned. Two strategies,
|
|
34
|
+
* picked per store:
|
|
35
|
+
*
|
|
36
|
+
* - **Indexed** whenever `store.properties` does not report an explicit zero
|
|
37
|
+
* row count. It is the store that decides this, not the file format:
|
|
38
|
+
* `@ifc-lite/ifcx` builds real rows via `PropertyTableBuilder`, so an IFCX
|
|
39
|
+
* file carrying properties lands here (one carrying none still reports zero
|
|
40
|
+
* rows and takes the branch below), as does a cache written from such an
|
|
41
|
+
* already materialised store. `findByProperty` and `findByQuantity` answer off the
|
|
42
|
+
* name indices, so cost scales with the number of rows carrying that name,
|
|
43
|
+
* not with the candidate count.
|
|
44
|
+
* - **Resolved sets** when the property table reports `count === 0`. A STEP
|
|
45
|
+
* parse deliberately leaves the property/quantity tables at zero rows and
|
|
46
|
+
* routes reads through the on-demand maps (issue #577), so `findByProperty`
|
|
47
|
+
* there can only ever return `[]` — which is what made `whereProperty`
|
|
48
|
+
* silently match nothing on every `.ifc` file. This also covers a
|
|
49
|
+
* **cache restored from a STEP parse**: the writer serialises
|
|
50
|
+
* `dataStore.properties` verbatim, so an empty table round-trips empty
|
|
51
|
+
* (`findByProperty` survives as a method but indexes nothing) and the
|
|
52
|
+
* viewer rebuilds the on-demand maps on restore. Since the viewer only
|
|
53
|
+
* writes caches on the `.ifc` load path, cache-restored models take this
|
|
54
|
+
* branch in practice. The server-converted viewer store also reports
|
|
55
|
+
* `count: 0` and lands here. The filter then resolves the candidates
|
|
56
|
+
* through `store.getProperties` / `store.getQuantities`, the same
|
|
57
|
+
* accessors the read path (`EntityNode.property`,
|
|
58
|
+
* `QueryResultEntity.getProperty`) uses.
|
|
59
|
+
*
|
|
60
|
+
* Only an *explicit* zero selects the fallback: a store whose table omits
|
|
61
|
+
* `count` altogether keeps the indexed path, because every store predating
|
|
62
|
+
* `count` on `IfcStoreBase` implements `findByProperty` for real.
|
|
63
|
+
*
|
|
64
|
+
* The fallback is candidate-scoped, never store-wide: only the ids that
|
|
65
|
+
* survived the type/id filter are resolved, and each is resolved at most once
|
|
66
|
+
* *per source* across all filters — `psetCache` and `qsetCache` are separate,
|
|
67
|
+
* so an entity reached by both sides costs one `getProperties` and one
|
|
68
|
+
* `getQuantities`, never one per filter. It is still O(candidates x source
|
|
69
|
+
* extraction), so scope
|
|
70
|
+
* with `ofType(...)` before `whereProperty(...)` on large models — the note in
|
|
71
|
+
* `docs/guide/querying.md` says the same thing to callers.
|
|
72
|
+
*
|
|
73
|
+
* Matching is ANY-match: an entity passes when *any* property of that name in
|
|
74
|
+
* *any* set of that name satisfies the operator. That is what
|
|
75
|
+
* `PropertyTable.findByProperty` does (it walks every row of that property
|
|
76
|
+
* name), so the two strategies agree with each other. It deliberately does
|
|
77
|
+
* *not* agree with the single-value read path (`EntityNode.property` and
|
|
78
|
+
* `QueryResultEntity.getProperty` return the *first* match), which differs
|
|
79
|
+
* only for an entity carrying the same property name twice; that divergence
|
|
80
|
+
* is pinned by a test in `where-property-fallback.test.ts`.
|
|
81
|
+
*/
|
|
29
82
|
private applyPropertyFilters;
|
|
30
83
|
}
|
|
31
84
|
//# sourceMappingURL=entity-query.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-query.d.ts","sourceRoot":"","sources":["../src/entity-query.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"entity-query.d.ts","sourceRoot":"","sources":["../src/entity-query.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,IAAI,YAAY,EAA4B,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,MAAM,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,UAAU,GAAG,YAAY,CAAC;AAElG,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,eAAe,CAAiF;IACxG,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,YAAY,CAA0E;gBAElF,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,GAAE,MAAM,EAAE,GAAG,IAAW;IAUzF,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAKjG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3B,eAAe,IAAI,IAAI;IAKvB,iBAAiB,IAAI,IAAI;IAKzB,iBAAiB,IAAI,IAAI;IAKzB,UAAU,IAAI,IAAI;IASlB,OAAO,IAAI,iBAAiB,EAAE;IA6BxB,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQxB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAMxB,KAAK,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAoBhD,OAAO,CAAC,eAAe;IAiBvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoDG;IACH,OAAO,CAAC,oBAAoB;CAgF7B"}
|
package/dist/entity-query.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
import { QueryResultEntity } from './query-result-entity.js';
|
|
5
|
+
import { matchesPsetFilter, matchesQsetFilter } from './property-filter.js';
|
|
5
6
|
export class EntityQuery {
|
|
6
7
|
store;
|
|
7
8
|
typeFilter;
|
|
@@ -91,8 +92,20 @@ export class EntityQuery {
|
|
|
91
92
|
return ids.length;
|
|
92
93
|
}
|
|
93
94
|
async first() {
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
// Narrow to one row for this call only. `this.limit(1)` mutates the query
|
|
96
|
+
// itself, so the cap outlived the call and every later
|
|
97
|
+
// execute()/ids()/first() on the same object returned at most one row --
|
|
98
|
+
// including one the caller had set a different limit on. Restore whatever
|
|
99
|
+
// was there before rather than clearing it, so an explicit limit survives.
|
|
100
|
+
const previousLimit = this.limitCount;
|
|
101
|
+
this.limitCount = 1;
|
|
102
|
+
try {
|
|
103
|
+
const results = this.execute();
|
|
104
|
+
return results[0] ?? null;
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
this.limitCount = previousLimit;
|
|
108
|
+
}
|
|
96
109
|
}
|
|
97
110
|
// ═══════════════════════════════════════════════════════════════
|
|
98
111
|
// PRIVATE
|
|
@@ -114,14 +127,135 @@ export class EntityQuery {
|
|
|
114
127
|
}
|
|
115
128
|
return allIds;
|
|
116
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Narrow `ids` to those satisfying every registered property filter.
|
|
132
|
+
*
|
|
133
|
+
* A filter's first argument names either a property set or a quantity set,
|
|
134
|
+
* so both tables are consulted and their matches unioned. Two strategies,
|
|
135
|
+
* picked per store:
|
|
136
|
+
*
|
|
137
|
+
* - **Indexed** whenever `store.properties` does not report an explicit zero
|
|
138
|
+
* row count. It is the store that decides this, not the file format:
|
|
139
|
+
* `@ifc-lite/ifcx` builds real rows via `PropertyTableBuilder`, so an IFCX
|
|
140
|
+
* file carrying properties lands here (one carrying none still reports zero
|
|
141
|
+
* rows and takes the branch below), as does a cache written from such an
|
|
142
|
+
* already materialised store. `findByProperty` and `findByQuantity` answer off the
|
|
143
|
+
* name indices, so cost scales with the number of rows carrying that name,
|
|
144
|
+
* not with the candidate count.
|
|
145
|
+
* - **Resolved sets** when the property table reports `count === 0`. A STEP
|
|
146
|
+
* parse deliberately leaves the property/quantity tables at zero rows and
|
|
147
|
+
* routes reads through the on-demand maps (issue #577), so `findByProperty`
|
|
148
|
+
* there can only ever return `[]` — which is what made `whereProperty`
|
|
149
|
+
* silently match nothing on every `.ifc` file. This also covers a
|
|
150
|
+
* **cache restored from a STEP parse**: the writer serialises
|
|
151
|
+
* `dataStore.properties` verbatim, so an empty table round-trips empty
|
|
152
|
+
* (`findByProperty` survives as a method but indexes nothing) and the
|
|
153
|
+
* viewer rebuilds the on-demand maps on restore. Since the viewer only
|
|
154
|
+
* writes caches on the `.ifc` load path, cache-restored models take this
|
|
155
|
+
* branch in practice. The server-converted viewer store also reports
|
|
156
|
+
* `count: 0` and lands here. The filter then resolves the candidates
|
|
157
|
+
* through `store.getProperties` / `store.getQuantities`, the same
|
|
158
|
+
* accessors the read path (`EntityNode.property`,
|
|
159
|
+
* `QueryResultEntity.getProperty`) uses.
|
|
160
|
+
*
|
|
161
|
+
* Only an *explicit* zero selects the fallback: a store whose table omits
|
|
162
|
+
* `count` altogether keeps the indexed path, because every store predating
|
|
163
|
+
* `count` on `IfcStoreBase` implements `findByProperty` for real.
|
|
164
|
+
*
|
|
165
|
+
* The fallback is candidate-scoped, never store-wide: only the ids that
|
|
166
|
+
* survived the type/id filter are resolved, and each is resolved at most once
|
|
167
|
+
* *per source* across all filters — `psetCache` and `qsetCache` are separate,
|
|
168
|
+
* so an entity reached by both sides costs one `getProperties` and one
|
|
169
|
+
* `getQuantities`, never one per filter. It is still O(candidates x source
|
|
170
|
+
* extraction), so scope
|
|
171
|
+
* with `ofType(...)` before `whereProperty(...)` on large models — the note in
|
|
172
|
+
* `docs/guide/querying.md` says the same thing to callers.
|
|
173
|
+
*
|
|
174
|
+
* Matching is ANY-match: an entity passes when *any* property of that name in
|
|
175
|
+
* *any* set of that name satisfies the operator. That is what
|
|
176
|
+
* `PropertyTable.findByProperty` does (it walks every row of that property
|
|
177
|
+
* name), so the two strategies agree with each other. It deliberately does
|
|
178
|
+
* *not* agree with the single-value read path (`EntityNode.property` and
|
|
179
|
+
* `QueryResultEntity.getProperty` return the *first* match), which differs
|
|
180
|
+
* only for an entity carrying the same property name twice; that divergence
|
|
181
|
+
* is pinned by a test in `where-property-fallback.test.ts`.
|
|
182
|
+
*/
|
|
117
183
|
applyPropertyFilters(ids) {
|
|
118
184
|
if (this.propertyFilters.length === 0)
|
|
119
185
|
return ids;
|
|
186
|
+
const properties = this.store.properties;
|
|
187
|
+
const quantities = this.store.quantities;
|
|
188
|
+
// Explicit zero only — see the doc comment above and the `count` contract
|
|
189
|
+
// on `IfcStoreBase`'s property table.
|
|
190
|
+
const useTable = properties.count !== 0;
|
|
191
|
+
// The two tables choose independently. Gating the quantity side off
|
|
192
|
+
// `properties.count` would mean a store that materialised one table but not
|
|
193
|
+
// the other got the wrong strategy for the other: a populated property table
|
|
194
|
+
// beside an empty quantity table would query an empty `findByQuantity` and
|
|
195
|
+
// match no quantities at all, and the inverse would resolve candidates one
|
|
196
|
+
// at a time while a populated quantity index sat unused.
|
|
197
|
+
const useQuantityTable = quantities.count !== 0;
|
|
198
|
+
// `quantities` and `getQuantities` are both REQUIRED on `IfcStoreBase`, so
|
|
199
|
+
// neither is guarded here: a store missing either is already out of
|
|
200
|
+
// contract, and half-guarding it (optional-chaining the table but calling
|
|
201
|
+
// `getQuantities` unconditionally two branches down) would only move the
|
|
202
|
+
// TypeError, not prevent it. `findByQuantity` is the one genuinely optional
|
|
203
|
+
// member, so that is the only existence check.
|
|
204
|
+
// Bound to the table so the optional method keeps its receiver.
|
|
205
|
+
const findByQuantity = useQuantityTable && quantities.findByQuantity
|
|
206
|
+
? quantities.findByQuantity.bind(quantities)
|
|
207
|
+
: undefined;
|
|
208
|
+
// Shared across all filters: resolving a pset/qset costs a source
|
|
209
|
+
// extraction on the on-demand path, so never resolve the same entity twice.
|
|
210
|
+
const psetCache = new Map();
|
|
211
|
+
const qsetCache = new Map();
|
|
120
212
|
let filteredIds = ids;
|
|
121
213
|
for (const filter of this.propertyFilters) {
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
214
|
+
const matches = new Set();
|
|
215
|
+
if (useTable) {
|
|
216
|
+
for (const id of properties.findByProperty(filter.prop, filter.op, filter.value, filter.pset)) {
|
|
217
|
+
matches.add(id);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
for (const id of filteredIds) {
|
|
222
|
+
let psets = psetCache.get(id);
|
|
223
|
+
if (!psets) {
|
|
224
|
+
psets = this.store.getProperties(id);
|
|
225
|
+
psetCache.set(id, psets);
|
|
226
|
+
}
|
|
227
|
+
if (matchesPsetFilter(psets, filter.pset, filter.prop, filter.op, filter.value))
|
|
228
|
+
matches.add(id);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Quantity side: `whereProperty('Qto_WallBaseQuantities', 'NetArea', '>', 10)`
|
|
232
|
+
// is documented (docs/guide/querying.md, packages/query/README.md) but
|
|
233
|
+
// quantities live in a separate table, so a Qto_ filter matched nothing on
|
|
234
|
+
// every path. Union rather than "only when the property side came back
|
|
235
|
+
// empty" — a conditional would drop entities matched via quantities as
|
|
236
|
+
// soon as any other entity matched via properties.
|
|
237
|
+
if (findByQuantity) {
|
|
238
|
+
for (const id of findByQuantity(filter.prop, filter.op, filter.value, filter.pset)) {
|
|
239
|
+
matches.add(id);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
// No index available: the on-demand path (where the columnar quantity
|
|
244
|
+
// table is empty by construction), or a duck-typed table that does not
|
|
245
|
+
// implement `findByQuantity`.
|
|
246
|
+
for (const id of filteredIds) {
|
|
247
|
+
if (matches.has(id))
|
|
248
|
+
continue;
|
|
249
|
+
let qsets = qsetCache.get(id);
|
|
250
|
+
if (!qsets) {
|
|
251
|
+
qsets = this.store.getQuantities(id);
|
|
252
|
+
qsetCache.set(id, qsets);
|
|
253
|
+
}
|
|
254
|
+
if (matchesQsetFilter(qsets, filter.pset, filter.prop, filter.op, filter.value))
|
|
255
|
+
matches.add(id);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
filteredIds = filteredIds.filter(id => matches.has(id));
|
|
125
259
|
}
|
|
126
260
|
return filteredIds;
|
|
127
261
|
}
|
package/dist/entity-query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-query.js","sourceRoot":"","sources":["../src/entity-query.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAQ/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"entity-query.js","sourceRoot":"","sources":["../src/entity-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set-shaped property/quantity matching for `EntityQuery.whereProperty`.
|
|
3
|
+
*
|
|
4
|
+
* Used only when the store's columnar property table is empty and the filter
|
|
5
|
+
* has to be answered from resolved `PropertySet[]` / `QuantitySet[]` instead
|
|
6
|
+
* (the STEP on-demand shape, see `applyPropertyFilters`). The comparison itself
|
|
7
|
+
* is `comparePropertyValues` from `@ifc-lite/data` — the same function
|
|
8
|
+
* `PropertyTable.findByProperty` uses — so the two strategies cannot drift.
|
|
9
|
+
*
|
|
10
|
+
* Internal to the package: not re-exported from `index.ts`.
|
|
11
|
+
*/
|
|
12
|
+
import { type PropertySet, type PropertyValue, type QuantitySet } from '@ifc-lite/data';
|
|
13
|
+
/**
|
|
14
|
+
* True when ANY property named `propName`, in ANY property set named
|
|
15
|
+
* `psetName`, satisfies `operator`/`value`.
|
|
16
|
+
*
|
|
17
|
+
* ANY-match rather than first-match is what `findByProperty` does: it walks
|
|
18
|
+
* every row of that property name. A model may legitimately carry the same
|
|
19
|
+
* property in two same-named sets (two `IfcRelDefinesByProperties` pointing at
|
|
20
|
+
* distinct `IfcPropertySet`s), and stopping at the first hit would answer
|
|
21
|
+
* differently from the table path for exactly those entities.
|
|
22
|
+
*/
|
|
23
|
+
export declare function matchesPsetFilter(psets: readonly PropertySet[], psetName: string, propName: string, operator: string, value: PropertyValue): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* True when ANY quantity named `quantityName`, in ANY quantity set named
|
|
26
|
+
* `qsetName`, satisfies `operator`/`value`.
|
|
27
|
+
*
|
|
28
|
+
* `Quantity.value` is always a number, so only the numeric branch of
|
|
29
|
+
* `comparePropertyValues` can fire here.
|
|
30
|
+
*/
|
|
31
|
+
export declare function matchesQsetFilter(qsets: readonly QuantitySet[], qsetName: string, quantityName: string, operator: string, value: PropertyValue): boolean;
|
|
32
|
+
//# sourceMappingURL=property-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-filter.d.ts","sourceRoot":"","sources":["../src/property-filter.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,EAAyB,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE/G;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,GACnB,OAAO,CAST;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,GACnB,OAAO,CAST"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* Set-shaped property/quantity matching for `EntityQuery.whereProperty`.
|
|
6
|
+
*
|
|
7
|
+
* Used only when the store's columnar property table is empty and the filter
|
|
8
|
+
* has to be answered from resolved `PropertySet[]` / `QuantitySet[]` instead
|
|
9
|
+
* (the STEP on-demand shape, see `applyPropertyFilters`). The comparison itself
|
|
10
|
+
* is `comparePropertyValues` from `@ifc-lite/data` — the same function
|
|
11
|
+
* `PropertyTable.findByProperty` uses — so the two strategies cannot drift.
|
|
12
|
+
*
|
|
13
|
+
* Internal to the package: not re-exported from `index.ts`.
|
|
14
|
+
*/
|
|
15
|
+
import { comparePropertyValues } from '@ifc-lite/data';
|
|
16
|
+
/**
|
|
17
|
+
* True when ANY property named `propName`, in ANY property set named
|
|
18
|
+
* `psetName`, satisfies `operator`/`value`.
|
|
19
|
+
*
|
|
20
|
+
* ANY-match rather than first-match is what `findByProperty` does: it walks
|
|
21
|
+
* every row of that property name. A model may legitimately carry the same
|
|
22
|
+
* property in two same-named sets (two `IfcRelDefinesByProperties` pointing at
|
|
23
|
+
* distinct `IfcPropertySet`s), and stopping at the first hit would answer
|
|
24
|
+
* differently from the table path for exactly those entities.
|
|
25
|
+
*/
|
|
26
|
+
export function matchesPsetFilter(psets, psetName, propName, operator, value) {
|
|
27
|
+
for (const pset of psets) {
|
|
28
|
+
if (pset.name !== psetName)
|
|
29
|
+
continue;
|
|
30
|
+
for (const prop of pset.properties) {
|
|
31
|
+
if (prop.name !== propName)
|
|
32
|
+
continue;
|
|
33
|
+
if (comparePropertyValues(prop.value, operator, value))
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* True when ANY quantity named `quantityName`, in ANY quantity set named
|
|
41
|
+
* `qsetName`, satisfies `operator`/`value`.
|
|
42
|
+
*
|
|
43
|
+
* `Quantity.value` is always a number, so only the numeric branch of
|
|
44
|
+
* `comparePropertyValues` can fire here.
|
|
45
|
+
*/
|
|
46
|
+
export function matchesQsetFilter(qsets, qsetName, quantityName, operator, value) {
|
|
47
|
+
for (const qset of qsets) {
|
|
48
|
+
if (qset.name !== qsetName)
|
|
49
|
+
continue;
|
|
50
|
+
for (const quantity of qset.quantities) {
|
|
51
|
+
if (quantity.name !== quantityName)
|
|
52
|
+
continue;
|
|
53
|
+
if (comparePropertyValues(quantity.value, operator, value))
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=property-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-filter.js","sourceRoot":"","sources":["../src/property-filter.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,qBAAqB,EAA0D,MAAM,gBAAgB,CAAC;AAE/G;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA6B,EAC7B,QAAgB,EAChB,QAAgB,EAChB,QAAgB,EAChB,KAAoB;IAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACrC,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA6B,EAC7B,QAAgB,EAChB,YAAoB,EACpB,QAAgB,EAChB,KAAoB;IAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACrC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY;gBAAE,SAAS;YAC7C,IAAI,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/query",
|
|
3
|
-
"version": "1.14.
|
|
3
|
+
"version": "1.14.16",
|
|
4
4
|
"description": "Query system for IFC-Lite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@ifc-lite/parser": "^
|
|
17
|
-
"@ifc-lite/data": "^3.
|
|
18
|
-
"@ifc-lite/spatial": "^1.14.
|
|
19
|
-
"@ifc-lite/geometry": "^3.
|
|
16
|
+
"@ifc-lite/parser": "^4.0.0",
|
|
17
|
+
"@ifc-lite/data": "^3.2.2",
|
|
18
|
+
"@ifc-lite/spatial": "^1.14.13",
|
|
19
|
+
"@ifc-lite/geometry": "^3.7.1"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"typescript": "^6.0.3",
|