@comake/skl-js-engine 1.3.16 → 1.4.0

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/dist/index.d.ts CHANGED
@@ -22,6 +22,7 @@ export * from './storage/operator/LessThan';
22
22
  export * from './storage/operator/LessThanOrEqual';
23
23
  export * from './storage/operator/Not';
24
24
  export * from './storage/operator/OneOrMorePath';
25
+ export * from './storage/operator/Or';
25
26
  export * from './storage/operator/Sequence';
26
27
  export * from './storage/operator/SequencePath';
27
28
  export * from './storage/operator/ZeroOrMorePath';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrF,cAAc,eAAe,CAAC;AAE9B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAE5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAE5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,2EAA2E,CAAC;AAC1F,cAAc,2EAA2E,CAAC;AAE1F,cAAc,mDAAmD,CAAC;AAClE,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AACnE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,WAAW,IAAI,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrF,cAAc,eAAe,CAAC;AAE9B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAE5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAE5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,2EAA2E,CAAC;AAC1F,cAAc,2EAA2E,CAAC;AAE1F,cAAc,mDAAmD,CAAC;AAClE,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AACnE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -47,6 +47,7 @@ __exportStar(require("./storage/operator/LessThan"), exports);
47
47
  __exportStar(require("./storage/operator/LessThanOrEqual"), exports);
48
48
  __exportStar(require("./storage/operator/Not"), exports);
49
49
  __exportStar(require("./storage/operator/OneOrMorePath"), exports);
50
+ __exportStar(require("./storage/operator/Or"), exports);
50
51
  __exportStar(require("./storage/operator/Sequence"), exports);
51
52
  __exportStar(require("./storage/operator/SequencePath"), exports);
52
53
  __exportStar(require("./storage/operator/ZeroOrMorePath"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,UAAU;AACV,8CAA4B;AAC5B,2DAAwF;AAA/E,wHAAA,kBAAkB,OAAA;AAC3B,mDAAqF;AAA5E,uGAAA,WAAW,OAAY;AAAE,yGAAA,UAAU,OAAA;AAAE,wGAAA,SAAS,OAAA;AACvD,gDAA8B;AAC9B,gBAAgB;AAChB,+CAA6B;AAC7B,mDAAiC;AACjC,8CAA4B;AAC5B,UAAU;AACV,yDAAuC;AACvC,6DAA2C;AAC3C,yDAAuC;AACvC,8DAA4C;AAC5C,mBAAmB;AACnB,2DAAyC;AACzC,4DAA0C;AAC1C,iEAA+C;AAC/C,wEAAsD;AACtD,wDAAsC;AACtC,6DAA2C;AAC3C,iEAA+C;AAC/C,qEAAmD;AACnD,0EAAwD;AACxD,8DAA4C;AAC5C,qEAAmD;AACnD,yDAAuC;AACvC,mEAAiD;AACjD,8DAA4C;AAC5C,kEAAgD;AAChD,oEAAkD;AAClD,uEAAqD;AACrD,4GAA0F;AAC1F,4GAA0F;AAC1F,iBAAiB;AACjB,oFAAkE;AAClE,oFAAkE;AAClE,qFAAmE;AACnE,mFAAiE;AACjE,OAAO;AACP,oDAAkC;AAClC,+CAA6B;AAC7B,8CAA4B;AAC5B,6DAA2C","sourcesContent":["// Mapping\nexport * from './constants';\nexport { customCapabilities, type CustomCapabilityHandler } from './customCapabilities';\nexport { globalHooks as SklHooks, HookStages, HookTypes } from './hooks/globalHooks';\nexport * from './hooks/types';\n// Code Executor\nexport * from './JsExecutor';\nexport * from './mapping/Mapper';\nexport * from './SklEngine';\n// Storage\nexport * from './storage/FindOperator';\nexport * from './storage/FindOptionsTypes';\nexport * from './storage/operator/And';\nexport * from './storage/operator/Contains';\n// Storage/Operator\nexport * from './storage/operator/Equal';\nexport * from './storage/operator/Exists';\nexport * from './storage/operator/GreaterThan';\nexport * from './storage/operator/GreaterThanOrEqual';\nexport * from './storage/operator/In';\nexport * from './storage/operator/Inverse';\nexport * from './storage/operator/InversePath';\nexport * from './storage/operator/InverseRelation';\nexport * from './storage/operator/InverseRelationOrder';\nexport * from './storage/operator/LessThan';\nexport * from './storage/operator/LessThanOrEqual';\nexport * from './storage/operator/Not';\nexport * from './storage/operator/OneOrMorePath';\nexport * from './storage/operator/Sequence';\nexport * from './storage/operator/SequencePath';\nexport * from './storage/operator/ZeroOrMorePath';\nexport * from './storage/query-adapter/QueryAdapter';\nexport * from './storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor';\nexport * from './storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor';\n// Storage/Sparql\nexport * from './storage/query-adapter/sparql/SparqlQueryAdapter';\nexport * from './storage/query-adapter/sparql/SparqlQueryBuilder';\nexport * from './storage/query-adapter/sparql/SparqlUpdateBuilder';\nexport * from './storage/query-adapter/sparql/VariableGenerator';\n// Util\nexport * from './util/TripleUtil';\nexport * from './util/Types';\nexport * from './util/Util';\nexport * from './util/Vocabularies/helper';\n\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,UAAU;AACV,8CAA4B;AAC5B,2DAAwF;AAA/E,wHAAA,kBAAkB,OAAA;AAC3B,mDAAqF;AAA5E,uGAAA,WAAW,OAAY;AAAE,yGAAA,UAAU,OAAA;AAAE,wGAAA,SAAS,OAAA;AACvD,gDAA8B;AAC9B,gBAAgB;AAChB,+CAA6B;AAC7B,mDAAiC;AACjC,8CAA4B;AAC5B,UAAU;AACV,yDAAuC;AACvC,6DAA2C;AAC3C,yDAAuC;AACvC,8DAA4C;AAC5C,mBAAmB;AACnB,2DAAyC;AACzC,4DAA0C;AAC1C,iEAA+C;AAC/C,wEAAsD;AACtD,wDAAsC;AACtC,6DAA2C;AAC3C,iEAA+C;AAC/C,qEAAmD;AACnD,0EAAwD;AACxD,8DAA4C;AAC5C,qEAAmD;AACnD,yDAAuC;AACvC,mEAAiD;AACjD,wDAAsC;AACtC,8DAA4C;AAC5C,kEAAgD;AAChD,oEAAkD;AAClD,uEAAqD;AACrD,4GAA0F;AAC1F,4GAA0F;AAC1F,iBAAiB;AACjB,oFAAkE;AAClE,oFAAkE;AAClE,qFAAmE;AACnE,mFAAiE;AACjE,OAAO;AACP,oDAAkC;AAClC,+CAA6B;AAC7B,8CAA4B;AAC5B,6DAA2C","sourcesContent":["// Mapping\nexport * from './constants';\nexport { customCapabilities, type CustomCapabilityHandler } from './customCapabilities';\nexport { globalHooks as SklHooks, HookStages, HookTypes } from './hooks/globalHooks';\nexport * from './hooks/types';\n// Code Executor\nexport * from './JsExecutor';\nexport * from './mapping/Mapper';\nexport * from './SklEngine';\n// Storage\nexport * from './storage/FindOperator';\nexport * from './storage/FindOptionsTypes';\nexport * from './storage/operator/And';\nexport * from './storage/operator/Contains';\n// Storage/Operator\nexport * from './storage/operator/Equal';\nexport * from './storage/operator/Exists';\nexport * from './storage/operator/GreaterThan';\nexport * from './storage/operator/GreaterThanOrEqual';\nexport * from './storage/operator/In';\nexport * from './storage/operator/Inverse';\nexport * from './storage/operator/InversePath';\nexport * from './storage/operator/InverseRelation';\nexport * from './storage/operator/InverseRelationOrder';\nexport * from './storage/operator/LessThan';\nexport * from './storage/operator/LessThanOrEqual';\nexport * from './storage/operator/Not';\nexport * from './storage/operator/OneOrMorePath';\nexport * from './storage/operator/Or';\nexport * from './storage/operator/Sequence';\nexport * from './storage/operator/SequencePath';\nexport * from './storage/operator/ZeroOrMorePath';\nexport * from './storage/query-adapter/QueryAdapter';\nexport * from './storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor';\nexport * from './storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor';\n// Storage/Sparql\nexport * from './storage/query-adapter/sparql/SparqlQueryAdapter';\nexport * from './storage/query-adapter/sparql/SparqlQueryBuilder';\nexport * from './storage/query-adapter/sparql/SparqlUpdateBuilder';\nexport * from './storage/query-adapter/sparql/VariableGenerator';\n// Util\nexport * from './util/TripleUtil';\nexport * from './util/Types';\nexport * from './util/Util';\nexport * from './util/Vocabularies/helper';\n\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { Variable } from 'rdf-data-factory';
2
- export declare type FindOperatorType = 'in' | 'not' | 'and' | 'equal' | 'exists' | 'gt' | 'gte' | 'lt' | 'lte' | 'inverse' | 'inverseRelation' | 'inverseRelationOrder' | 'sequencePath' | 'zeroOrMorePath' | 'inversePath' | 'oneOrMorePath' | 'contains' | 'sequence';
2
+ export declare type FindOperatorType = 'in' | 'not' | 'and' | 'or' | 'equal' | 'exists' | 'gt' | 'gte' | 'lt' | 'lte' | 'inverse' | 'inverseRelation' | 'inverseRelationOrder' | 'sequencePath' | 'zeroOrMorePath' | 'inversePath' | 'oneOrMorePath' | 'contains' | 'sequence';
3
3
  export interface FindOperatorArgs<T, TType> {
4
4
  operator: TType;
5
5
  value?: T | FindOperator<T, any>;
@@ -1 +1 @@
1
- {"version":3,"file":"FindOperator.d.ts","sourceRoot":"","sources":["../../src/storage/FindOperator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,oBAAY,gBAAgB,GACxB,IAAI,GACJ,KAAK,GACL,KAAK,GACL,OAAO,GACP,QAAQ,GACR,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,SAAS,GACT,iBAAiB,GACjB,sBAAsB,GACtB,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,eAAe,GACf,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,gBAAgB,CAAC,CAAC,EAAE,KAAK;IACxC,QAAQ,EAAE,KAAK,CAAC;IAChB,KAAK,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,YAAY,CAAC,CAAC,EAAE,KAAK,SAAS,gBAAgB;IACzD,SAAgB,IAAI,cAAc;IAClC,SAAgB,QAAQ,EAAE,KAAK,CAAC;IAChC,SAAgB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnC,SAAgB,KAAK,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,SAAgB,UAAU,CAAC,EAAE,OAAO,CAAC;gBAClB,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;WAOrC,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;WAInC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO;CAQxE"}
1
+ {"version":3,"file":"FindOperator.d.ts","sourceRoot":"","sources":["../../src/storage/FindOperator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,oBAAY,gBAAgB,GACxB,IAAI,GACJ,KAAK,GACL,KAAK,GACL,IAAI,GACJ,OAAO,GACP,QAAQ,GACR,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,SAAS,GACT,iBAAiB,GACjB,sBAAsB,GACtB,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,eAAe,GACf,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,gBAAgB,CAAC,CAAC,EAAE,KAAK;IACxC,QAAQ,EAAE,KAAK,CAAC;IAChB,KAAK,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,YAAY,CAAC,CAAC,EAAE,KAAK,SAAS,gBAAgB;IACzD,SAAgB,IAAI,cAAc;IAClC,SAAgB,QAAQ,EAAE,KAAK,CAAC;IAChC,SAAgB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnC,SAAgB,KAAK,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,SAAgB,UAAU,CAAC,EAAE,OAAO,CAAC;gBAClB,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC;WAOrC,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;WAInC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO;CAQxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"FindOperator.js","sourceRoot":"","sources":["../../src/storage/FindOperator.ts"],"names":[],"mappings":";;;AA6BA,MAAa,YAAY;IAMvB,YAAmB,IAAgC;QALnC,SAAI,GAAG,UAAU,CAAC;QAMhC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,KAAU;QACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;IACnF,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,QAAgC;QAC3D,OAAO,CACL,QAAQ,CAAC,QAAQ,KAAK,aAAa;YACnC,QAAQ,CAAC,QAAQ,KAAK,gBAAgB;YACtC,QAAQ,CAAC,QAAQ,KAAK,cAAc;YACpC,QAAQ,CAAC,QAAQ,KAAK,gBAAgB,CACvC,CAAC;IACJ,CAAC;CACF;AAzBD,oCAyBC","sourcesContent":["import type { Variable } from 'rdf-data-factory';\n\nexport type FindOperatorType =\n | 'in'\n | 'not'\n | 'and'\n | 'equal'\n | 'exists'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'inverse'\n | 'inverseRelation'\n | 'inverseRelationOrder'\n | 'sequencePath'\n | 'zeroOrMorePath'\n | 'inversePath'\n | 'oneOrMorePath'\n | 'contains'\n | 'sequence';\n\nexport interface FindOperatorArgs<T, TType> {\n operator: TType;\n value?: T | FindOperator<T, any>;\n subject?: Variable;\n isOptional?: boolean;\n}\n\nexport class FindOperator<T, TType extends FindOperatorType> {\n public readonly type = 'operator';\n public readonly operator: TType;\n public readonly subject?: Variable;\n public readonly value?: T | FindOperator<T, any>;\n public readonly isOptional?: boolean;\n public constructor(args: FindOperatorArgs<T, TType>) {\n this.operator = args.operator;\n this.value = args.value;\n this.subject = args.subject;\n this.isOptional = args.isOptional;\n }\n\n public static isFindOperator(value: any): boolean {\n return typeof value === 'object' && 'type' in value && value.type === 'operator';\n }\n\n public static isPathOperator(operator: FindOperator<any, any>): boolean {\n return (\n operator.operator === 'inversePath' ||\n operator.operator === 'zeroOrMorePath' ||\n operator.operator === 'sequencePath' ||\n operator.operator === 'zeroOrMorePath'\n );\n }\n}\n"]}
1
+ {"version":3,"file":"FindOperator.js","sourceRoot":"","sources":["../../src/storage/FindOperator.ts"],"names":[],"mappings":";;;AA8BA,MAAa,YAAY;IAMvB,YAAmB,IAAgC;QALnC,SAAI,GAAG,UAAU,CAAC;QAMhC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,KAAU;QACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;IACnF,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,QAAgC;QAC3D,OAAO,CACL,QAAQ,CAAC,QAAQ,KAAK,aAAa;YACnC,QAAQ,CAAC,QAAQ,KAAK,gBAAgB;YACtC,QAAQ,CAAC,QAAQ,KAAK,cAAc;YACpC,QAAQ,CAAC,QAAQ,KAAK,gBAAgB,CACvC,CAAC;IACJ,CAAC;CACF;AAzBD,oCAyBC","sourcesContent":["import type { Variable } from 'rdf-data-factory';\n\nexport type FindOperatorType =\n | 'in'\n | 'not'\n | 'and'\n | 'or'\n | 'equal'\n | 'exists'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'inverse'\n | 'inverseRelation'\n | 'inverseRelationOrder'\n | 'sequencePath'\n | 'zeroOrMorePath'\n | 'inversePath'\n | 'oneOrMorePath'\n | 'contains'\n | 'sequence';\n\nexport interface FindOperatorArgs<T, TType> {\n operator: TType;\n value?: T | FindOperator<T, any>;\n subject?: Variable;\n isOptional?: boolean;\n}\n\nexport class FindOperator<T, TType extends FindOperatorType> {\n public readonly type = 'operator';\n public readonly operator: TType;\n public readonly subject?: Variable;\n public readonly value?: T | FindOperator<T, any>;\n public readonly isOptional?: boolean;\n public constructor(args: FindOperatorArgs<T, TType>) {\n this.operator = args.operator;\n this.value = args.value;\n this.subject = args.subject;\n this.isOptional = args.isOptional;\n }\n\n public static isFindOperator(value: any): boolean {\n return typeof value === 'object' && 'type' in value && value.type === 'operator';\n }\n\n public static isPathOperator(operator: FindOperator<any, any>): boolean {\n return (\n operator.operator === 'inversePath' ||\n operator.operator === 'zeroOrMorePath' ||\n operator.operator === 'sequencePath' ||\n operator.operator === 'zeroOrMorePath'\n );\n }\n}\n"]}
@@ -47,7 +47,9 @@ export interface FindOptionsWhere {
47
47
  type?: TypeFindOptionsWhereField;
48
48
  id?: IdFindOptionsWhereField;
49
49
  binds?: BindPattern[];
50
- [k: string]: FindOptionsWhereField | BindPattern[] | undefined;
50
+ and?: FindOptionsWhere[];
51
+ or?: FindOptionsWhere[];
52
+ [k: string]: FindOptionsWhereField | BindPattern[] | FindOptionsWhere[] | undefined;
51
53
  }
52
54
  export interface SubQuery {
53
55
  select: Variable[];
@@ -1 +1 @@
1
- {"version":3,"file":"FindOptionsTypes.d.ts","sourceRoot":"","sources":["../../src/storage/FindOptionsTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FindOptionsTypes.d.ts","sourceRoot":"","sources":["../../src/storage/FindOptionsTypes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FindOptionsTypes.js","sourceRoot":"","sources":["../../src/storage/FindOptionsTypes.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { Expression, Variable } from 'sparqljs';\nimport type { OrArray, JSONArray, JSONObject } from '../util/Types';\nimport type { FindOperator } from './FindOperator';\nimport type { InverseRelationOperatorValue } from './operator/InverseRelation';\nimport type { InverseRelationOrderValue } from './operator/InverseRelationOrder';\n\nexport type FindOptionsSelect = string[] | {[key: string]: boolean | FindOptionsSelect };\n\nexport interface FindOneOptions {\n select?: FindOptionsSelect;\n where?: FindOptionsWhere;\n relations?: FindOptionsRelations;\n order?: FindOptionsOrder;\n skipFraming?: boolean;\n group?: Variable;\n entitySelectVariable?: Variable;\n}\n\nexport type FindOptionsRelationsValue =\n | boolean\n | FindOptionsRelations\n | FindOperator<InverseRelationOperatorValue, 'inverseRelation'>;\n\n// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style\nexport type FindOptionsRelations = {\n [k: string]: FindOptionsRelationsValue;\n};\n\nexport type FindOptionsOrderValue = 'ASC' | 'DESC' | 'asc' | 'desc' | 1 | -1;\n\nexport type FindOptionsOrder = Record<\nstring,\nFindOptionsOrderValue | FindOperator<InverseRelationOrderValue, 'inverseRelationOrder'>\n>;\n\nexport type FieldPrimitiveValue = boolean | number | string | Date;\n\nexport type JsonValueObject = {\n '@value': FieldPrimitiveValue | JSONObject | JSONArray;\n '@type': '@json';\n};\n\nexport type LanguageValueObject = {\n '@value': string;\n '@language': string;\n '@direction': string;\n};\n\nexport type NonJsonValueObject = {\n '@value': FieldPrimitiveValue;\n '@type': string;\n};\n\nexport type ValueWhereFieldObject = JsonValueObject | LanguageValueObject | NonJsonValueObject;\n\nexport type FindOptionsWhereField =\n | OrArray<FieldPrimitiveValue>\n | ValueWhereFieldObject\n | FindOptionsWhere\n | OrArray<FindOperator<any, any>>\n | BindPattern[];\n\nexport type IdFindOptionsWhereField = string | FindOperator<any, 'in' | 'not' | 'equal' | 'inversePath' | 'contains'>;\n\nexport type TypeFindOptionsWhereField =\n | string\n | FindOperator<string | string[] | FindOptionsWhere, 'in' | 'not' | 'equal' | 'inverse' | 'contains'>;\n\nexport interface BindPattern {\n expression: Expression;\n variable: Variable;\n}\n\nexport interface FindOptionsWhere {\n type?: TypeFindOptionsWhereField;\n id?: IdFindOptionsWhereField;\n binds?: BindPattern[];\n [k: string]: FindOptionsWhereField | BindPattern[] | undefined;\n}\n\n// Add these new types\nexport interface SubQuery {\n select: Variable[];\n where: FindOptionsWhere;\n groupBy?: string[];\n having?: FindOptionsWhere;\n}\n\nexport interface FindAllOptions extends FindOneOptions {\n offset?: number;\n limit?: number;\n skipHook?: boolean;\n subQueries?: SubQuery[];\n}\n\nexport interface FindExistsOptions {\n where?: FindOptionsWhere;\n relations?: FindOptionsRelations;\n}\n\nexport interface FindCountOptions {\n where?: FindOptionsWhere;\n relations?: FindOptionsRelations;\n order?: FindOptionsOrder;\n offset?: number;\n}\n"]}
1
+ {"version":3,"file":"FindOptionsTypes.js","sourceRoot":"","sources":["../../src/storage/FindOptionsTypes.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { Expression, Variable } from 'sparqljs';\nimport type { OrArray, JSONArray, JSONObject } from '../util/Types';\nimport type { FindOperator } from './FindOperator';\nimport type { InverseRelationOperatorValue } from './operator/InverseRelation';\nimport type { InverseRelationOrderValue } from './operator/InverseRelationOrder';\n\nexport type FindOptionsSelect = string[] | {[key: string]: boolean | FindOptionsSelect };\n\nexport interface FindOneOptions {\n select?: FindOptionsSelect;\n where?: FindOptionsWhere;\n relations?: FindOptionsRelations;\n order?: FindOptionsOrder;\n skipFraming?: boolean;\n group?: Variable;\n entitySelectVariable?: Variable;\n}\n\nexport type FindOptionsRelationsValue =\n | boolean\n | FindOptionsRelations\n | FindOperator<InverseRelationOperatorValue, 'inverseRelation'>;\n\n// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style\nexport type FindOptionsRelations = {\n [k: string]: FindOptionsRelationsValue;\n};\n\nexport type FindOptionsOrderValue = 'ASC' | 'DESC' | 'asc' | 'desc' | 1 | -1;\n\nexport type FindOptionsOrder = Record<\nstring,\nFindOptionsOrderValue | FindOperator<InverseRelationOrderValue, 'inverseRelationOrder'>\n>;\n\nexport type FieldPrimitiveValue = boolean | number | string | Date;\n\nexport type JsonValueObject = {\n '@value': FieldPrimitiveValue | JSONObject | JSONArray;\n '@type': '@json';\n};\n\nexport type LanguageValueObject = {\n '@value': string;\n '@language': string;\n '@direction': string;\n};\n\nexport type NonJsonValueObject = {\n '@value': FieldPrimitiveValue;\n '@type': string;\n};\n\nexport type ValueWhereFieldObject = JsonValueObject | LanguageValueObject | NonJsonValueObject;\n\nexport type FindOptionsWhereField =\n | OrArray<FieldPrimitiveValue>\n | ValueWhereFieldObject\n | FindOptionsWhere\n | OrArray<FindOperator<any, any>>\n | BindPattern[];\n\nexport type IdFindOptionsWhereField = string | FindOperator<any, 'in' | 'not' | 'equal' | 'inversePath' | 'contains'>;\n\nexport type TypeFindOptionsWhereField =\n | string\n | FindOperator<string | string[] | FindOptionsWhere, 'in' | 'not' | 'equal' | 'inverse' | 'contains'>;\n\nexport interface BindPattern {\n expression: Expression;\n variable: Variable;\n}\n\nexport interface FindOptionsWhere {\n type?: TypeFindOptionsWhereField;\n id?: IdFindOptionsWhereField;\n binds?: BindPattern[];\n and?: FindOptionsWhere[];\n or?: FindOptionsWhere[];\n [k: string]: FindOptionsWhereField | BindPattern[] | FindOptionsWhere[] | undefined;\n}\n\n// Add these new types\nexport interface SubQuery {\n select: Variable[];\n where: FindOptionsWhere;\n groupBy?: string[];\n having?: FindOptionsWhere;\n}\n\nexport interface FindAllOptions extends FindOneOptions {\n offset?: number;\n limit?: number;\n skipHook?: boolean;\n subQueries?: SubQuery[];\n}\n\nexport interface FindExistsOptions {\n where?: FindOptionsWhere;\n relations?: FindOptionsRelations;\n}\n\nexport interface FindCountOptions {\n where?: FindOptionsWhere;\n relations?: FindOptionsRelations;\n order?: FindOptionsOrder;\n offset?: number;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { ValueObject } from 'jsonld';
2
+ import { FindOperator } from '../FindOperator';
3
+ export declare function Or<T extends number | Date | string | boolean | ValueObject>(value: T[]): FindOperator<T[], 'or'>;
4
+ //# sourceMappingURL=Or.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Or.d.ts","sourceRoot":"","sources":["../../../src/storage/operator/Or.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,wBAAgB,EAAE,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAKhH"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Or = void 0;
4
+ const FindOperator_1 = require("../FindOperator");
5
+ // eslint-disable-next-line @typescript-eslint/naming-convention
6
+ function Or(value) {
7
+ return new FindOperator_1.FindOperator({
8
+ operator: 'or',
9
+ value
10
+ });
11
+ }
12
+ exports.Or = Or;
13
+ //# sourceMappingURL=Or.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Or.js","sourceRoot":"","sources":["../../../src/storage/operator/Or.ts"],"names":[],"mappings":";;;AACA,kDAA+C;AAE/C,gEAAgE;AAChE,SAAgB,EAAE,CAA2D,KAAU;IACrF,OAAO,IAAI,2BAAY,CAAC;QACtB,QAAQ,EAAE,IAAI;QACd,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AALD,gBAKC","sourcesContent":["import type { ValueObject } from 'jsonld';\nimport { FindOperator } from '../FindOperator';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function Or<T extends number | Date | string | boolean | ValueObject>(value: T[]): FindOperator<T[], 'or'> {\n return new FindOperator({\n operator: 'or',\n value\n });\n}\n\n"]}
@@ -61,6 +61,8 @@ export declare class SparqlQueryBuilder {
61
61
  }[]): ConstructQuery;
62
62
  private createWhereQueryData;
63
63
  private createWhereQueryDataForField;
64
+ private createWhereQueryDataForAndClause;
65
+ private createWhereQueryDataForOrClause;
64
66
  private createWhereQueryDataForIdValue;
65
67
  private createWhereQueryDataForType;
66
68
  private createWhereQueryDataFromKeyValue;
@@ -1 +1 @@
1
- {"version":3,"file":"SparqlQueryBuilder.d.ts","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlQueryBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SparqlQueryBuilder.d.ts","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlQueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -237,9 +237,63 @@ class SparqlQueryBuilder {
237
237
  if (field === 'type') {
238
238
  return this.createWhereQueryDataForType(subject, value);
239
239
  }
240
+ if (field === 'and') {
241
+ return this.createWhereQueryDataForAndClause(subject, value);
242
+ }
243
+ if (field === 'or') {
244
+ return this.createWhereQueryDataForOrClause(subject, value);
245
+ }
240
246
  const predicate = data_model_1.default.namedNode(field);
241
247
  return this.createWhereQueryDataFromKeyValue(subject, predicate, value);
242
248
  }
249
+ createWhereQueryDataForAndClause(subject, whereClauses) {
250
+ // Combine all nested where conditions - all must match
251
+ return whereClauses.reduce((acc, nestedWhere) => {
252
+ const nestedData = this.createWhereQueryData(subject, nestedWhere);
253
+ return {
254
+ values: [...acc.values, ...nestedData.values],
255
+ triples: [...acc.triples, ...nestedData.triples],
256
+ filters: [...acc.filters, ...nestedData.filters],
257
+ patterns: [...acc.patterns ?? [], ...nestedData.patterns ?? []],
258
+ binds: [...acc.binds ?? [], ...nestedData.binds ?? []]
259
+ };
260
+ }, { values: [], triples: [], filters: [], patterns: [], binds: [] });
261
+ }
262
+ createWhereQueryDataForOrClause(subject, whereClauses) {
263
+ // Create UNION patterns - any condition can match
264
+ const unionPatterns = whereClauses.map((nestedWhere) => {
265
+ const nestedData = this.createWhereQueryData(subject, nestedWhere);
266
+ const patterns = [];
267
+ // Add values patterns
268
+ if (nestedData.values.length > 0) {
269
+ patterns.push(...nestedData.values);
270
+ }
271
+ // Add triples as basic graph pattern
272
+ if (nestedData.triples.length > 0) {
273
+ patterns.push((0, SparqlUtil_1.createSparqlBasicGraphPattern)(nestedData.triples));
274
+ }
275
+ // Add nested patterns (for deeply nested and/or)
276
+ if (nestedData.patterns && nestedData.patterns.length > 0) {
277
+ patterns.push(...nestedData.patterns);
278
+ }
279
+ // Add filters
280
+ if (nestedData.filters.length > 0) {
281
+ patterns.push((0, SparqlUtil_1.createFilterPatternFromFilters)(nestedData.filters));
282
+ }
283
+ // Add binds
284
+ if (nestedData.binds && nestedData.binds.length > 0) {
285
+ patterns.push(...nestedData.binds);
286
+ }
287
+ return (0, SparqlUtil_1.createSparqlSelectGroup)(patterns);
288
+ });
289
+ return {
290
+ values: [],
291
+ triples: [],
292
+ filters: [],
293
+ patterns: [(0, SparqlUtil_1.createSparqlUnion)(unionPatterns)],
294
+ binds: []
295
+ };
296
+ }
243
297
  createWhereQueryDataForIdValue(term, value) {
244
298
  let filters = [];
245
299
  let values = [];
@@ -1 +1 @@
1
- {"version":3,"file":"SparqlQueryBuilder.js","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlQueryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-inline-comments */\n/* eslint-disable line-comment-position */\n/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\n/* eslint-disable @typescript-eslint/no-shadow */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable multiline-comment-style */\n/* eslint-disable capitalized-comments */\n/* eslint-disable indent */\nimport DataFactory from '@rdfjs/data-model';\nimport type { Literal, NamedNode, Term, Variable } from '@rdfjs/types';\nimport type {\n BindPattern,\n ConstructQuery,\n Expression,\n FilterPattern,\n GraphPattern,\n Grouping,\n IriTerm,\n OperationExpression,\n Ordering,\n Pattern,\n PropertyPath,\n SelectQuery,\n Triple,\n ValuePatternRow,\n ValuesPattern\n} from 'sparqljs';\nimport { EngineConstants, XSD } from '../../../constants';\nimport { PerformanceLogger } from '../../../util/PerformanceLogger';\nimport {\n allTypesAndSuperTypesPath,\n createFilterPatternFromFilters,\n createSparqlBasicGraphPattern,\n createSparqlConstructQuery,\n createSparqlContainsOperation,\n createSparqlEqualOperation,\n createSparqlExistsOperation,\n createSparqlFilterWithExpression,\n createSparqlGraphPattern,\n createSparqlGteOperation,\n createSparqlGtOperation,\n createSparqlInOperation,\n createSparqlInversePredicate,\n createSparqlLcaseOperation,\n createSparqlLteOperation,\n createSparqlLtOperation,\n createSparqlNotEqualOperation,\n createSparqlNotExistsOperation,\n createSparqlNotInOperation,\n createSparqlOneOrMorePredicate,\n createSparqlOptional,\n createSparqlSelectGroup,\n createSparqlSelectQuery,\n createSparqlSequencePredicate,\n createSparqlServicePattern,\n createSparqlUnion,\n createSparqlZeroOrMorePredicate,\n entityGraphTriple,\n entityVariable\n} from '../../../util/SparqlUtil';\nimport { valueToLiteral } from '../../../util/TripleUtil';\nimport type { OrArray } from '../../../util/Types';\nimport { isUrl } from '../../../util/Util';\nimport { RDF } from '../../../util/Vocabularies';\nimport { FindOperator } from '../../FindOperator';\nimport type {\n FieldPrimitiveValue,\n FindOptionsOrder,\n FindOptionsOrderValue,\n FindOptionsRelations,\n FindOptionsSelect,\n FindOptionsWhere,\n FindOptionsWhereField,\n IdFindOptionsWhereField,\n SubQuery,\n TypeFindOptionsWhereField,\n ValueWhereFieldObject\n} from '../../FindOptionsTypes';\nimport type { GroupByOptions } from '../../GroupOptionTypes';\nimport type { InverseRelationOperatorValue } from '../../operator/InverseRelation';\nimport type { InverseRelationOrderValue } from '../../operator/InverseRelationOrder';\nimport { VariableGenerator } from './VariableGenerator';\n\nexport interface NonGraphWhereQueryData {\n values: ValuesPattern[];\n triples: Triple[];\n filters: OperationExpression[];\n patterns?: Pattern[];\n binds?: Pattern[];\n}\n\nexport interface WhereQueryData extends NonGraphWhereQueryData {\n graphValues: ValuesPattern[];\n graphTriples: Triple[];\n graphFilters: OperationExpression[];\n serviceTriples?: Record<string, Triple[]>;\n selectVariables?: { variable: Variable; }[];\n}\n\nexport interface RelationsQueryData {\n patterns: Pattern[];\n selectionTriples: Triple[];\n unionPatterns: Pattern[];\n}\n\nexport interface OrderQueryData {\n triples: Triple[];\n filters: OperationExpression[];\n orders: Ordering[];\n groupByParent?: boolean;\n patterns?: Pattern[];\n}\n\nexport interface EntitySelectQueryData {\n where: Pattern[];\n orders: Ordering[];\n graphWhere: Pattern[];\n graphSelectionTriples: Triple[];\n group?: Variable;\n selectVariables: { variable: Variable; expression: Expression }[];\n relationsQueryData?: RelationsQueryData;\n}\n\nexport interface SparqlQueryBuilderOptions {\n where?: FindOptionsWhere;\n select?: FindOptionsSelect;\n order?: FindOptionsOrder;\n relations?: FindOptionsRelations;\n subQueries?: SubQuery[];\n}\n\nexport class SparqlQueryBuilder {\n private readonly variableGenerator: VariableGenerator;\n\n public constructor() {\n this.variableGenerator = new VariableGenerator();\n }\n\n public buildEntitySelectPatternsFromOptions(\n subject: Variable,\n options?: SparqlQueryBuilderOptions\n ): EntitySelectQueryData {\n const span = PerformanceLogger.startSpan('QueryBuilder.buildSelect', { \n hasWhere: !!options?.where, \n hasRelations: !!options?.relations \n });\n try {\n const relations = options?.select ? undefined : options?.relations;\n const whereQueryData = this.createWhereQueryData(subject, options?.where, true);\n const orderQueryData = this.createOrderQueryData(subject, options?.order);\n const relationsQueryData = this.createRelationsQueryData(subject, relations);\n // Handle subqueries\n if (options?.subQueries && options.subQueries.length > 0) {\n const subQueryPatterns = this.createSubQueryPatterns(options.subQueries);\n whereQueryData.values.unshift(...(subQueryPatterns as ValuesPattern[]));\n }\n const patterns: Pattern[] = whereQueryData.values;\n if (\n whereQueryData.triples.length === 0 &&\n (whereQueryData.filters.length > 0 ||\n orderQueryData.triples.length > 0 ||\n (whereQueryData.values.length === 0 &&\n whereQueryData.graphValues.length === 0 &&\n whereQueryData.graphTriples.length === 0))\n ) {\n if (relationsQueryData.unionPatterns.length > 0) {\n /* relationsQueryData.unionPatterns.push(\n createSparqlGraphPattern(subject, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ); */\n } else {\n const entityGraphFilterPattern = this.createEntityGraphFilterPattern(subject);\n // patterns.push(createSparqlGraphPattern(subject, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ]));\n patterns.push(entityGraphFilterPattern);\n }\n } else if (!options?.where?.id) {\n const entityGraphFilterPattern = this.createEntityGraphFilterPattern(subject);\n const entityIsGraphFilter = createSparqlExistsOperation([ entityGraphFilterPattern ]);\n whereQueryData.filters.push(entityIsGraphFilter);\n }\n\n // Add union patterns to the patterns\n if (relationsQueryData.unionPatterns.length > 0) {\n patterns.push(createSparqlUnion(relationsQueryData.unionPatterns));\n }\n\n const wherePatterns = this.createWherePatternsFromQueryData(\n patterns,\n whereQueryData.triples,\n whereQueryData.filters,\n orderQueryData.triples,\n orderQueryData.filters,\n whereQueryData.patterns ?? [],\n undefined,\n whereQueryData.binds\n );\n // For ID-only queries, we need to include union patterns in graphWhere\n // because that's what gets used in the CONSTRUCT query\n const graphWhereRelationsPatterns = relationsQueryData.unionPatterns.length > 0\n ? [ createSparqlUnion(relationsQueryData.unionPatterns), ...relationsQueryData.patterns ]\n : relationsQueryData.patterns;\n\n const graphWherePatterns = this.createWherePatternsFromQueryData(\n whereQueryData.graphValues,\n whereQueryData.graphTriples,\n whereQueryData.graphFilters,\n undefined,\n undefined,\n graphWhereRelationsPatterns\n );\n\n // Create variables for each order expression and update the orders to use them\n const selectVariables = orderQueryData.orders.map(order => {\n const variable = this.createVariable();\n return {\n variable,\n expression: order.expression\n };\n });\n\n const orders = selectVariables.map((selectVar, index) => ({\n expression: selectVar.variable,\n descending: orderQueryData.orders[index].descending\n }));\n\n if (orders.length === 0) {\n orders.push({\n expression: entityVariable\n } as any);\n }\n\n selectVariables.push(...(whereQueryData.selectVariables ?? []) as { variable: Variable; expression: Expression }[]);\n\n \n const isRelationsQueryDataEmpty = relationsQueryData.unionPatterns.length === 0 && relationsQueryData.patterns.length === 0 && relationsQueryData.selectionTriples.length === 0;\n\n const returnData: any = {\n where: wherePatterns,\n orders,\n ...orderQueryData.groupByParent ? { group: subject } : {},\n graphWhere: graphWherePatterns,\n graphSelectionTriples: relationsQueryData.selectionTriples,\n ...isRelationsQueryDataEmpty ? { } : { relationsQueryData }\n };\n if (selectVariables.length > 0) {\n returnData.selectVariables = selectVariables;\n }\n PerformanceLogger.endSpan(span, { \n patternCount: wherePatterns.length, \n tripleCount: whereQueryData.triples.length,\n hasFilters: whereQueryData.filters.length > 0,\n hasOrders: orders.length > 0\n });\n return returnData;\n } catch (error) {\n PerformanceLogger.endSpan(span, { error: true });\n throw error;\n }\n }\n\n private createSubQueryPatterns(subQueries: SubQuery[]): Pattern[] {\n return subQueries.map((subQuery: SubQuery): Pattern => {\n const subQueryWhere = this.createWhereQueryData(entityVariable, subQuery.where);\n const queryGroup: Grouping[] = [];\n if (subQuery.groupBy && Array.isArray(subQuery.groupBy)) {\n subQuery.groupBy.forEach((group: string): void => {\n queryGroup.push({\n expression: DataFactory.variable(group)\n });\n });\n }\n const selectQuery: SelectQuery = {\n type: 'query',\n queryType: 'SELECT',\n variables: subQuery.select,\n where: this.createWherePatternsFromQueryData(\n subQueryWhere.values,\n subQueryWhere.triples,\n subQueryWhere.filters,\n undefined,\n undefined,\n subQueryWhere.patterns ?? []\n ),\n group: queryGroup.length > 0 ? queryGroup : undefined,\n having: subQuery.having ? this.createWhereQueryData(entityVariable, subQuery.having).filters : undefined,\n prefixes: {}\n };\n return createSparqlSelectGroup([ selectQuery ]);\n });\n }\n\n private createEntityGraphFilterPattern(subject: Variable): GraphPattern {\n const entityFilterTriple = { subject, predicate: this.createVariable(), object: this.createVariable() };\n return createSparqlGraphPattern(subject, [ createSparqlBasicGraphPattern([ entityFilterTriple ]) ]);\n }\n\n public buildConstructFromEntitySelectQuery(\n graphWhere: Pattern[],\n graphSelectionTriples: Triple[],\n select?: FindOptionsSelect,\n selectVariables?: { variable: Variable; expression: Expression }[]\n ): ConstructQuery {\n const span = PerformanceLogger.startSpan('QueryBuilder.buildConstruct', { hasSelect: !!select });\n try {\n let triples: Triple[];\n let where: Pattern[] = [];\n if (select) {\n triples = this.createSelectPattern(select, entityVariable);\n where = [ createSparqlOptional([ createSparqlBasicGraphPattern(triples) ]), ...graphWhere ];\n } else {\n triples = [ entityGraphTriple, ...graphSelectionTriples ];\n /* Skip if the where contains a union pattern */\n if (graphWhere.some(pattern => pattern.type === 'union')) {\n where = graphWhere;\n } else {\n where = [\n ...graphWhere,\n createSparqlGraphPattern(entityVariable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ];\n }\n }\n\n // // Add select variables to the query\n // if (selectVariables?.length) {\n // where = [\n // ...where,\n // ...selectVariables.map(({ variable, expression }) => ({\n // type: 'bind' as const,\n // expression,\n // variable,\n // })),\n // ];\n // }\n\n const result = createSparqlConstructQuery(triples, where);\n PerformanceLogger.endSpan(span, { tripleCount: triples.length, patternCount: where.length });\n return result;\n } catch (error) {\n PerformanceLogger.endSpan(span, { error: true });\n throw error;\n }\n }\n\n private createWhereQueryData(subject: Variable, where?: FindOptionsWhere, isTopLevel = false): WhereQueryData {\n if (isTopLevel && Object.keys(where ?? {}).length === 1 && 'id' in where!) {\n const { values, filters, triples } = this.createWhereQueryDataForIdValue(subject, where.id!);\n return {\n values: [],\n filters: [],\n triples: [],\n graphValues: values,\n graphFilters: filters,\n graphTriples: triples,\n binds: []\n };\n }\n\n // Handle binds if specified in where options\n const binds: Pattern[] = [];\n if (where?.binds) {\n binds.push(\n ...where.binds.map(\n (bind): BindPattern => ({\n type: 'bind' as const,\n expression: bind.expression,\n variable: bind.variable as Variable\n })\n )\n );\n // Delete binds from where as it's a special key\n const { binds: _, ...restWhere } = where;\n where = restWhere;\n }\n\n const whereQueryData = Object.entries(where ?? {}).reduce(\n (obj: NonGraphWhereQueryData, [ key, value ]): NonGraphWhereQueryData => {\n const whereQueryDataForField = this.createWhereQueryDataForField(subject, key, value!);\n return {\n values: [ ...obj.values, ...whereQueryDataForField.values ],\n triples: [ ...obj.triples, ...whereQueryDataForField.triples ],\n filters: [ ...obj.filters, ...whereQueryDataForField.filters ],\n patterns: [ ...obj.patterns ?? [], ...whereQueryDataForField.patterns ?? [] ],\n binds: [ ...obj.binds ?? [], ...whereQueryDataForField.binds ?? [] ]\n };\n },\n { values: [], triples: [], filters: [], patterns: [], binds }\n );\n\n return {\n ...whereQueryData,\n graphValues: [],\n graphFilters: [],\n graphTriples: [],\n patterns: whereQueryData.patterns ?? [],\n binds: whereQueryData.binds ?? []\n };\n }\n\n private createWhereQueryDataForField(\n subject: Variable,\n field: string,\n value: IdFindOptionsWhereField | TypeFindOptionsWhereField | FindOptionsWhereField\n ): NonGraphWhereQueryData {\n if (field === 'id') {\n return this.createWhereQueryDataForIdValue(subject, value as FindOperator<any, any>);\n }\n if (field === 'type') {\n return this.createWhereQueryDataForType(subject, value as FindOperator<any, any>);\n }\n const predicate = DataFactory.namedNode(field);\n return this.createWhereQueryDataFromKeyValue(subject, predicate, value);\n }\n\n private createWhereQueryDataForIdValue(term: Variable, value: IdFindOptionsWhereField): NonGraphWhereQueryData {\n let filters: OperationExpression[] = [];\n let values: ValuesPattern[] = [];\n let triples: Triple[] = [];\n if (FindOperator.isFindOperator(value)) {\n ({ filters, values, triples } = this.resolveFindOperatorAsExpressionForId(\n term,\n value as FindOperator<string, any>\n ));\n } else {\n values = [\n {\n type: 'values',\n values: [\n {\n [`?${term.value}`]: DataFactory.namedNode(value as string)\n }\n ]\n }\n ];\n }\n return {\n values,\n filters,\n triples\n };\n }\n\n private createWhereQueryDataForType(subject: Variable, value: TypeFindOptionsWhereField): NonGraphWhereQueryData {\n if (FindOperator.isFindOperator(value)) {\n if ((value as FindOperator<any, any>).operator === 'and') {\n // For AND on types, generate a triple for each type\n const typeValues = (value as unknown as FindOperator<any[], 'and'>).value;\n\n // Create a triple for each value in the array, safely converting to string\n const triples = (typeValues as any[]).map((typeVal: any) => {\n const typeStr = typeof typeVal === 'string' ? typeVal : typeVal?.toString() || '';\n\n return {\n subject,\n predicate: allTypesAndSuperTypesPath,\n object: DataFactory.namedNode(typeStr)\n };\n });\n return {\n values: [],\n filters: [],\n triples: [\n ...triples\n ]\n };\n }\n\n if ((value as FindOperator<any, any>).operator === 'inverse') {\n const inversePredicate = createSparqlInversePredicate([ allTypesAndSuperTypesPath ]);\n const inverseWhereQueryData = this.createWhereQueryDataFromKeyValue(\n subject,\n inversePredicate,\n (value as FindOperator<any, any>).value\n );\n const variable = this.createVariable();\n return {\n values: inverseWhereQueryData.values,\n filters: inverseWhereQueryData.filters,\n triples: inverseWhereQueryData.triples\n };\n }\n if ((value as FindOperator<any, any>).operator === 'sequence') {\n const sequencePredicate = createSparqlSequencePredicate([ allTypesAndSuperTypesPath ]);\n return this.createWhereQueryDataFromKeyValue(\n subject,\n sequencePredicate,\n (value as FindOperator<any, any>).value\n );\n }\n\n if (Array.isArray(value)) {\n const triples = value.map(typeVal => ({\n subject,\n predicate: allTypesAndSuperTypesPath,\n object:\n typeof typeVal === 'string' ? DataFactory.namedNode(typeVal) : DataFactory.namedNode(typeVal.toString())\n }));\n\n return {\n values: [],\n filters: [],\n triples: [\n ...triples\n ]\n };\n }\n\n const variable = this.createVariable();\n const triple = { subject, predicate: allTypesAndSuperTypesPath, object: variable };\n const { filter, valuePattern, tripleInFilter } = this.resolveFindOperatorAsExpressionWithMultipleValues(\n variable,\n value as FindOperator<string, any>,\n triple\n );\n return {\n values: valuePattern ? [ valuePattern ] : [],\n filters: filter ? [ filter ] : [],\n triples: tripleInFilter ? [] : [ triple ]\n };\n }\n return {\n values: [],\n filters: [],\n triples: [\n {\n subject,\n predicate: allTypesAndSuperTypesPath,\n object: DataFactory.namedNode(value as string)\n }\n ]\n };\n }\n\n private createWhereQueryDataFromKeyValue(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n value: FindOptionsWhereField\n ): NonGraphWhereQueryData {\n if (Array.isArray(value) && FindOperator.isFindOperator(value[0])) {\n return this.createWhereQueryDataForMultipleFindOperators(subject, predicate, value as FindOperator<any, any>[]);\n }\n if (FindOperator.isFindOperator(value)) {\n return this.createWhereQueryDataForFindOperator(subject, predicate, value as FindOperator<any, any>);\n }\n if (Array.isArray(value)) {\n return (value as FieldPrimitiveValue[]).reduce(\n (obj: NonGraphWhereQueryData, valueItem): NonGraphWhereQueryData => {\n const valueWhereQueryData = this.createWhereQueryDataFromKeyValue(subject, predicate, valueItem);\n return {\n values: [ ...obj.values, ...valueWhereQueryData.values ],\n filters: [ ...obj.filters, ...valueWhereQueryData.filters ],\n triples: [ ...obj.triples, ...valueWhereQueryData.triples ],\n patterns: [ ...obj.patterns ?? [], ...valueWhereQueryData.patterns ?? [] ]\n };\n },\n { values: [], filters: [], triples: [], patterns: [] }\n );\n }\n if (typeof value === 'object') {\n if ('@value' in value) {\n return this.createWhereQueryDataForValueObject(\n 'subject' in value ? (value.subject as unknown as Variable) : subject,\n predicate,\n value as ValueWhereFieldObject\n );\n }\n return this.createWhereQueryDataForNestedWhere(subject, predicate, value as FindOptionsWhere);\n }\n const term = this.resolveValueToTerm(value);\n return {\n values: [],\n filters: [],\n triples: [{ subject, predicate, object: term }]\n };\n }\n\n private createWhereQueryDataForFindOperator(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n operator: FindOperator<any, any>\n ): NonGraphWhereQueryData {\n if (operator.operator === 'inverse') {\n const inversePredicate = createSparqlInversePredicate([ predicate ]);\n return this.createWhereQueryDataFromKeyValue(\n operator.subject ? operator.subject : subject,\n inversePredicate,\n operator.value\n );\n }\n if (operator.operator === 'sequence') {\n const sequencePredicate = createSparqlSequencePredicate([ predicate ]);\n return this.createWhereQueryDataFromKeyValue(\n operator.subject ? operator.subject : subject,\n sequencePredicate,\n operator.value\n );\n }\n if (FindOperator.isPathOperator(operator)) {\n const pathPredicate = this.pathOperatorToPropertyPath(operator);\n const combinedPredicate = createSparqlSequencePredicate([ predicate, pathPredicate ]);\n return this.createWhereQueryDataFromKeyValue(subject, combinedPredicate, operator.value.value);\n }\n const variable = this.createVariable();\n const triple = { subject, predicate, object: variable };\n const { filter, valuePattern, tripleInFilter } = this.resolveFindOperatorAsExpressionWithMultipleValues(\n variable,\n operator,\n triple\n );\n return {\n values: valuePattern ? [ valuePattern ] : [],\n filters: filter ? [ filter ] : [],\n triples: tripleInFilter ? [] : [ triple ]\n };\n }\n\n private pathOperatorToPropertyPath(\n operator: FindOperator<any, 'inversePath' | 'sequencePath' | 'zeroOrMorePath' | 'oneOrMorePath'>\n ): PropertyPath {\n if (operator.operator === 'inversePath') {\n let subPredicate: IriTerm | PropertyPath;\n const { subPath } = operator.value;\n if (typeof subPath === 'string') {\n subPredicate = DataFactory.namedNode(subPath);\n } else {\n subPredicate = this.pathOperatorToPropertyPath(subPath);\n }\n return createSparqlInversePredicate([ subPredicate ]);\n }\n if (operator.operator === 'sequencePath') {\n const { subPath } = operator.value;\n const subPredicates = subPath.map((sequencePart: string | FindOperator<any, any>): IriTerm | PropertyPath => {\n if (typeof sequencePart === 'string') {\n return DataFactory.namedNode(sequencePart);\n }\n return this.pathOperatorToPropertyPath(sequencePart);\n });\n return createSparqlSequencePredicate(subPredicates);\n }\n if (operator.operator === 'zeroOrMorePath') {\n const { subPath } = operator.value;\n let subPredicate: IriTerm | PropertyPath;\n if (typeof subPath === 'string') {\n subPredicate = DataFactory.namedNode(subPath);\n } else {\n subPredicate = this.pathOperatorToPropertyPath(subPath);\n }\n return createSparqlZeroOrMorePredicate([ subPredicate ]);\n }\n if (operator.operator === 'oneOrMorePath') {\n const { subPath } = operator.value;\n let subPredicate: IriTerm | PropertyPath;\n if (typeof subPath === 'string') {\n subPredicate = DataFactory.namedNode(subPath);\n } else {\n subPredicate = this.pathOperatorToPropertyPath(subPath);\n }\n return createSparqlOneOrMorePredicate([ subPredicate ]);\n }\n throw new Error(`Operator ${operator.operator} not supported`);\n }\n\n private createWhereQueryDataForMultipleFindOperators(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n operators: FindOperator<any, any>[]\n ): NonGraphWhereQueryData {\n const variable = this.createVariable();\n const triple = { subject, predicate, object: variable };\n const whereQueryData = {\n values: [],\n filters: [],\n triples: [ triple ]\n };\n return operators.reduce((obj: NonGraphWhereQueryData, operator): NonGraphWhereQueryData => {\n const { filter, valuePattern } = this.resolveFindOperatorAsExpressionWithMultipleValues(\n variable,\n operator,\n triple\n );\n if (valuePattern) {\n obj.values.push(valuePattern);\n }\n if (filter) {\n obj.filters.push(filter);\n }\n return obj;\n }, whereQueryData);\n }\n\n private createWhereQueryDataForNestedWhere(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n where: FindOptionsWhere\n ): NonGraphWhereQueryData {\n const subNodeVariable = this.createVariable();\n const subWhereQueryData = this.createWhereQueryData(subNodeVariable, where);\n return {\n values: [ ...subWhereQueryData.values, ...subWhereQueryData.graphValues ],\n filters: subWhereQueryData.filters,\n triples: [{ subject, predicate, object: subNodeVariable }, ...subWhereQueryData.triples ],\n patterns: [ ...subWhereQueryData.patterns ?? [] ]\n };\n }\n\n private createWhereQueryDataForValueObject(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n valueObject: ValueWhereFieldObject\n ): NonGraphWhereQueryData {\n const term = this.valueObjectToTerm(valueObject);\n if ((valueObject as any).isOptional) {\n return {\n values: [],\n filters: [],\n triples: [],\n patterns: [ createSparqlOptional([ createSparqlBasicGraphPattern([{ subject, predicate, object: term }]) ]) ]\n };\n }\n return {\n values: [],\n filters: [],\n triples: [{ subject, predicate, object: term }]\n };\n }\n\n private valueObjectToTerm(valueObject: ValueWhereFieldObject): Literal | Variable {\n let typeOrLanguage: string;\n let value: string;\n if ('@type' in valueObject && valueObject['@type'] === '@json') {\n typeOrLanguage = RDF.JSON;\n value = JSON.stringify(valueObject['@value']);\n } else {\n typeOrLanguage = ('@type' in valueObject ? valueObject['@type'] : valueObject['@language'])!;\n value = (valueObject['@value'] as FieldPrimitiveValue).toString();\n }\n return valueToLiteral(value, typeOrLanguage);\n }\n\n private resolveFindOperatorAsExpressionWithMultipleValues(\n leftSide: Variable,\n operator: FindOperator<any, any>,\n triple: Triple,\n dontUseValuePattern = false\n ): { filter?: OperationExpression; valuePattern?: ValuesPattern; tripleInFilter?: boolean } {\n if (operator.operator === 'and') {\n // For AND operators, we'll create an AND filter with multiple equality comparisons\n const values = operator.value as any[];\n\n if (values.length === 0) {\n // No conditions to add\n return {};\n }\n\n if (values.length === 1) {\n // If only one value, treat as equality\n return {\n filter: createSparqlEqualOperation(leftSide, this.resolveValueToExpression(values[0]) as Expression)\n };\n }\n\n // Create individual equality conditions for each value\n const equalityConditions: OperationExpression[] = values.map(val =>\n createSparqlEqualOperation(leftSide, this.resolveValueToExpression(val) as Expression));\n\n // Combine with AND operation\n return {\n filter: {\n type: 'operation',\n operator: '&&',\n args: equalityConditions\n }\n };\n }\n if (operator.operator === 'in') {\n const resolvedValue = this.resolveValueToExpression(operator.value) as (NamedNode | Literal)[];\n if (Array.isArray(resolvedValue) && !dontUseValuePattern) {\n return {\n valuePattern: {\n type: 'values',\n values: resolvedValue.map((value): ValuePatternRow => ({ [`?${leftSide.value}`]: value }))\n }\n };\n }\n return {\n filter: createSparqlInOperation(leftSide, resolvedValue as Expression)\n };\n }\n if (operator.operator === 'not') {\n const resolvedExpression = this.resolveValueToExpression(operator.value) as Expression | FindOperator<any, any>;\n return {\n filter: this.buildNotOperationForMultiValued(leftSide, resolvedExpression, triple),\n tripleInFilter: true\n };\n }\n if (operator.operator === 'exists') {\n return {\n filter: createSparqlExistsOperation([ createSparqlBasicGraphPattern([ triple ]) ]),\n tripleInFilter: true\n };\n }\n\n if (operator.operator === 'contains') {\n const searchString = this.resolveValueToExpression(operator.value) as Literal;\n const filter = createSparqlContainsOperation(\n // Directly use the variable as an expression\n createSparqlLcaseOperation(DataFactory.variable(leftSide.value)),\n createSparqlLcaseOperation(DataFactory.literal(searchString.value.toLowerCase()))\n );\n return {\n filter\n };\n }\n const resolvedExpression = this.resolveValueToExpression(operator.value) as Expression;\n switch (operator.operator) {\n case 'equal':\n return { filter: createSparqlEqualOperation(leftSide, resolvedExpression) };\n case 'gt':\n return { filter: createSparqlGtOperation(leftSide, resolvedExpression) };\n case 'gte':\n return { filter: createSparqlGteOperation(leftSide, resolvedExpression) };\n case 'lt':\n return { filter: createSparqlLtOperation(leftSide, resolvedExpression) };\n case 'lte':\n return { filter: createSparqlLteOperation(leftSide, resolvedExpression) };\n default:\n throw new Error(`Unsupported operator \"${operator.operator}\"`);\n }\n }\n\n private resolveFindOperatorAsExpressionForId(\n leftSide: Variable,\n operator: FindOperator<any, any>\n ): NonGraphWhereQueryData {\n switch (operator.operator) {\n case 'inversePath': {\n const predicate = this.pathOperatorToPropertyPath(operator);\n return this.createWhereQueryDataFromKeyValue(leftSide, predicate, operator.value.value);\n }\n case 'in': {\n const resolvedValue = this.resolveValueToExpression(operator.value) as NamedNode[];\n return {\n triples: [],\n filters: [],\n values: [\n {\n type: 'values',\n values: resolvedValue.map((value): ValuePatternRow => ({ [`?${leftSide.value}`]: value }))\n }\n ]\n };\n }\n case 'not':\n return {\n triples: [],\n values: [],\n filters: [\n this.buildNotOperationForId(\n leftSide,\n this.resolveValueToExpression(operator.value) as Expression | FindOperator<any, any>\n )\n ]\n };\n case 'equal':\n return {\n triples: [],\n values: [],\n filters: [ createSparqlEqualOperation(leftSide, this.resolveValueToExpression(operator.value) as Expression) ]\n };\n default:\n throw new Error(`Unsupported operator \"${operator.operator}\"`);\n }\n }\n\n private resolveValueToExpression(\n value: OrArray<any> | FindOperator<any, any>\n ): FindOperator<any, any> | OrArray<Term> {\n if (FindOperator.isFindOperator(value)) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((valueItem): Term => this.resolveValueToTerm(valueItem));\n }\n return this.resolveValueToTerm(value);\n }\n\n private buildNotOperationForMultiValued(\n leftSide: Variable,\n rightSide: Expression | FindOperator<any, any>,\n triple: Triple\n ): OperationExpression {\n let filterExpression: FilterPattern;\n const isFindOperator = FindOperator.isFindOperator(rightSide);\n if (isFindOperator && (rightSide as FindOperator<any, any>).operator === 'exists') {\n return createSparqlNotExistsOperation([ createSparqlBasicGraphPattern([ triple ]) ]);\n }\n if (isFindOperator) {\n let expression: OperationExpression | undefined;\n try {\n ({ filter: expression } = this.resolveFindOperatorAsExpressionWithMultipleValues(\n leftSide,\n rightSide as FindOperator<any, any>,\n triple,\n true\n ));\n } catch {\n throw new Error(`Unsupported Not sub operator \"${(rightSide as FindOperator<any, any>).operator}\"`);\n }\n filterExpression = createSparqlFilterWithExpression(expression!);\n } else {\n filterExpression = createSparqlFilterWithExpression(\n createSparqlEqualOperation(leftSide, rightSide as Expression)\n );\n }\n return createSparqlNotExistsOperation([\n createSparqlSelectGroup([ createSparqlBasicGraphPattern([ triple ]), filterExpression ])\n ]);\n }\n\n private buildNotOperationForId(\n leftSide: Expression,\n rightSide: Expression | FindOperator<any, any>\n ): OperationExpression {\n if (FindOperator.isFindOperator(rightSide)) {\n const resolvedValue = this.resolveValueToExpression((rightSide as FindOperator<string, any>).value) as Expression;\n switch ((rightSide as FindOperator<string, any>).operator) {\n case 'in':\n return createSparqlNotInOperation(leftSide, resolvedValue);\n case 'equal':\n return createSparqlNotEqualOperation(leftSide, resolvedValue);\n default:\n throw new Error(`Unsupported Not sub operator \"${(rightSide as FindOperator<string, any>).operator}\"`);\n }\n }\n return createSparqlNotEqualOperation(leftSide, rightSide as Expression);\n }\n\n private resolveValueToTerm(value: FieldPrimitiveValue | ValueWhereFieldObject): NamedNode | Literal | Variable {\n if (typeof value === 'object' && '@value' in value) {\n return valueToLiteral((value as ValueWhereFieldObject)['@value'], '@type' in value ? value['@type'] : undefined);\n }\n if (isUrl(value)) {\n return DataFactory.namedNode(value as string);\n }\n return valueToLiteral(value);\n }\n\n private createOrderQueryData(\n subject: Variable,\n order?: FindOptionsOrder | FindOperator<InverseRelationOrderValue, 'inverseRelationOrder'>,\n isNested = false\n ): OrderQueryData {\n if (!order) {\n // Default is descending by id\n return { triples: [], orders: [ ], filters: []};\n }\n return Object.entries(order).reduce(\n (obj: OrderQueryData, [ property, orderValue ]): OrderQueryData => {\n const orderQueryData = this.createOrderQueryDataForProperty(subject, property, orderValue, isNested);\n obj.orders = [ ...obj.orders, ...orderQueryData.orders ];\n obj.triples = [ ...obj.triples, ...orderQueryData.triples ];\n obj.filters = [ ...obj.filters, ...orderQueryData.filters ];\n obj.groupByParent = obj.groupByParent ?? orderQueryData.groupByParent;\n return obj;\n },\n { triples: [], orders: [], filters: []}\n );\n }\n\n private createOrderQueryDataForProperty(\n subject: Variable,\n property: string,\n orderValue: FindOptionsOrderValue | FindOperator<InverseRelationOrderValue, 'inverseRelationOrder'>,\n isNested = false\n ): OrderQueryData {\n const predicate = DataFactory.namedNode(property);\n if (FindOperator.isFindOperator(orderValue)) {\n const variable = this.createVariable();\n const inverseRelationTriple = {\n subject,\n predicate: createSparqlInversePredicate([ predicate ]),\n object: variable\n };\n const subRelationOperatorValue = (orderValue as FindOperator<InverseRelationOrderValue, 'inverseRelationOrder'>)\n .value as InverseRelationOrderValue;\n const subRelationOrderQueryData = this.createOrderQueryData(variable, subRelationOperatorValue.order, true);\n const subRelationWhereQueryData = this.createWhereQueryData(variable, subRelationOperatorValue.where);\n\n // Create aggregate expressions for each order, but don't nest aggregates\n const aggregateOrders = subRelationOrderQueryData.orders.map(order => {\n const baseExpression =\n 'type' in order.expression && (order.expression as any).type === 'aggregate'\n ? (order.expression as any).expression\n : order.expression;\n\n // Create the aggregate expression first\n const aggregateExpression = {\n type: 'aggregate',\n expression: baseExpression,\n aggregation: order.descending ? 'max' : 'min'\n } as Expression;\n\n return {\n expression: aggregateExpression,\n descending: order.descending\n };\n });\n\n return {\n triples: [ inverseRelationTriple, ...subRelationOrderQueryData.triples, ...subRelationWhereQueryData.triples ],\n filters: subRelationWhereQueryData.filters,\n orders: aggregateOrders,\n groupByParent: true,\n patterns: [ ...subRelationWhereQueryData.patterns ?? [], ...subRelationOrderQueryData.patterns ?? [] ]\n };\n }\n if (property === 'id') {\n return {\n triples: [],\n filters: [],\n orders: [\n {\n expression: subject,\n descending: orderValue === 'DESC' || orderValue === 'desc'\n }\n ]\n };\n }\n const variable = this.createVariable();\n const isDescending = orderValue === 'DESC' || orderValue === 'desc';\n return {\n triples: [{ subject, predicate, object: variable }],\n filters: [],\n orders: [\n {\n expression: isNested\n ? {\n type: 'aggregate',\n expression: variable,\n aggregation: isDescending ? 'max' : 'min'\n }\n : variable,\n descending: isDescending\n }\n ]\n };\n }\n\n private createRelationsQueryData(subject: Variable, relations?: FindOptionsRelations): RelationsQueryData {\n if (!relations) {\n return { patterns: [], selectionTriples: [], unionPatterns: []};\n }\n const response = Object.entries(relations).reduce(\n (\n obj: RelationsQueryData & { unionPatterns?: Pattern[] },\n [ property, relationsValue ]\n ): RelationsQueryData & { unionPatterns?: Pattern[] } => {\n const predicate = DataFactory.namedNode(property);\n if (typeof relationsValue === 'object') {\n if (FindOperator.isFindOperator(relationsValue)) {\n const { patterns, selectionTriples, unionPatterns } = this.createRelationsQueryDataForInverseRelation(\n subject,\n predicate,\n relationsValue as FindOperator<InverseRelationOperatorValue, 'inverseRelation'>\n );\n return {\n patterns: [ ...obj.patterns, ...patterns ],\n selectionTriples: [ ...obj.selectionTriples, ...selectionTriples ],\n unionPatterns: [ ...obj.unionPatterns ?? [], ...unionPatterns ?? [] ]\n };\n }\n const { patterns, selectionTriples, unionPatterns } = this.createRelationsQueryDataForNestedRelation(\n subject,\n predicate,\n relationsValue as FindOptionsRelations\n );\n return {\n patterns: [ ...obj.patterns, ...patterns ],\n selectionTriples: [ ...obj.selectionTriples, ...selectionTriples ],\n unionPatterns: [\n ...obj.unionPatterns ?? [],\n ...unionPatterns ?? []\n ]\n };\n }\n const variable = this.createVariable();\n const relationPattern = createSparqlSelectGroup([\n createSparqlBasicGraphPattern([{ subject, predicate, object: variable }]),\n createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ]);\n return {\n unionPatterns: [ ...obj.unionPatterns ?? [], relationPattern ],\n patterns: [ ...obj.patterns ],\n selectionTriples: [ ...obj.selectionTriples ]\n };\n },\n { patterns: [], selectionTriples: [], unionPatterns: []}\n );\n\n return {\n patterns: [ ...response?.patterns ?? [] ],\n selectionTriples: [ ...response?.selectionTriples ?? [] ],\n unionPatterns: [ ...response?.unionPatterns ?? [] ]\n };\n }\n\n private createRelationsQueryDataForInverseRelation(\n subject: Variable,\n predicate: NamedNode,\n relationsValue: FindOperator<InverseRelationOperatorValue, 'inverseRelation'>\n ): RelationsQueryData {\n const variable = this.createVariable();\n const inverseRelationTriple = {\n subject,\n predicate: createSparqlInversePredicate([ predicate ]),\n object: variable\n };\n if (typeof relationsValue.value === 'object' && (relationsValue.value as InverseRelationOperatorValue).relations) {\n const subRelationsQueryData = this.createRelationsQueryData(\n variable,\n (relationsValue.value as InverseRelationOperatorValue).relations\n );\n const unionPatterns: Pattern[] = [];\n unionPatterns.push(createSparqlSelectGroup([\n createSparqlBasicGraphPattern([ inverseRelationTriple ]),\n createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ]));\n for (const subRelationUnionPattern of subRelationsQueryData.unionPatterns) {\n unionPatterns.push(\n createSparqlSelectGroup(\n [\n createSparqlBasicGraphPattern([ inverseRelationTriple ]),\n ...subRelationUnionPattern.type === 'group'\n ? subRelationUnionPattern.patterns\n : [ subRelationUnionPattern ]\n ]\n )\n );\n }\n return {\n patterns: [ ],\n selectionTriples: [ ...subRelationsQueryData.selectionTriples ],\n unionPatterns\n };\n }\n const unionPatterns: Pattern[] = [];\n unionPatterns.push(createSparqlSelectGroup([\n createSparqlBasicGraphPattern([ inverseRelationTriple ]),\n createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ]));\n return {\n patterns: [ ],\n selectionTriples: [ ],\n unionPatterns\n };\n }\n\n private createRelationsQueryDataForNestedRelation(\n subject: Variable,\n predicate: NamedNode,\n relationsValue: FindOptionsRelations\n ): RelationsQueryData {\n const variable = this.createVariable();\n const relationTriple = { subject, predicate, object: variable };\n const unionPatterns: Pattern[] = [];\n const subRelationsQueryData = this.createRelationsQueryData(variable, relationsValue);\n // subRelationsQueryData.patterns.push(createSparqlBasicGraphPattern([ relationTriple ]));\n // unionPatterns.push(...subRelationsQueryData.patterns);\n // unionPatterns.push(\n // createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n // );\n /* const relationPattern = subRelationsQueryData.patterns.length > 0\n ? createSparqlSelectGroup([\n ...patterns,\n ...subRelationsQueryData.patterns,\n ...subRelationsQueryData.unionPatterns\n ])\n : undefined; */\n /* We always need to include the first level of the property in the union patterns */\n unionPatterns.push(\n createSparqlSelectGroup([\n createSparqlBasicGraphPattern([ relationTriple ]),\n createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ])\n );\n for (const subRelationUnionPattern of subRelationsQueryData.unionPatterns) {\n unionPatterns.push(\n createSparqlSelectGroup(\n [\n createSparqlBasicGraphPattern([ relationTriple ]),\n ...subRelationUnionPattern.type === 'group' ? subRelationUnionPattern.patterns : [ subRelationUnionPattern ]\n ]\n )\n );\n }\n return {\n patterns: [ ],\n selectionTriples: [ ...subRelationsQueryData.selectionTriples ],\n unionPatterns\n };\n }\n\n private createVariable(): Variable {\n return DataFactory.variable(this.variableGenerator.getNext());\n }\n\n private createSelectPattern(select: FindOptionsSelect, subject: Variable): Triple[] {\n if (Array.isArray(select)) {\n return select.map(\n (selectPredicate): Triple => ({\n subject,\n predicate: DataFactory.namedNode(selectPredicate),\n object: this.createVariable()\n })\n );\n }\n return Object.entries(select).reduce((arr: Triple[], [ key, value ]): Triple[] => {\n const variable = this.createVariable();\n arr.push({ subject, predicate: DataFactory.namedNode(key), object: variable });\n if (typeof value === 'object') {\n arr = [ ...arr, ...this.createSelectPattern(value, variable) ];\n }\n return arr;\n }, []);\n }\n\n private createWherePatternsFromQueryData(\n initialPatterns: Pattern[],\n triples: Triple[],\n filters: OperationExpression[],\n orderTriples?: Triple[],\n orderFilters?: OperationExpression[],\n additionalPatterns?: Pattern[],\n serviceTriples?: Record<string, Triple[]>,\n binds?: Pattern[]\n ): Pattern[] {\n let patterns = initialPatterns;\n\n // Add binds at the beginning if they exist\n if (binds && binds.length > 0) {\n patterns = [ ...patterns, ...binds ];\n }\n\n if (triples.length > 0) {\n patterns.push(createSparqlBasicGraphPattern(triples));\n }\n if (orderTriples && orderTriples.length > 0) {\n const optionalPatterns: Pattern[] = [ createSparqlBasicGraphPattern(orderTriples) ];\n if (orderFilters && orderFilters.length > 0) {\n optionalPatterns.push(createFilterPatternFromFilters(orderFilters));\n }\n patterns.push(createSparqlOptional(optionalPatterns));\n }\n if (filters.length > 0) {\n patterns.push(createFilterPatternFromFilters(filters));\n }\n if (serviceTriples) {\n for (const [ service, sTriples ] of Object.entries(serviceTriples)) {\n patterns.unshift(createSparqlServicePattern(service, sTriples));\n }\n }\n if (additionalPatterns) {\n patterns = [ ...patterns, ...additionalPatterns ];\n }\n return patterns;\n }\n\n private createGroupPatternForPath(\n entityVariable: Variable,\n path: string\n ): {\n variable: Variable;\n patterns: Pattern[];\n } {\n const segments = path.split('~');\n let currentSubject = entityVariable;\n const patterns: Pattern[] = [];\n\n // Create a chain of patterns for each segment\n segments.forEach((predicate, index) => {\n const object = this.createVariable();\n patterns.push({\n type: 'bgp',\n triples: [\n {\n subject: currentSubject,\n predicate: DataFactory.namedNode(predicate),\n object\n }\n ]\n });\n currentSubject = object;\n });\n\n // Return the final variable (last object) and all patterns\n return {\n variable: currentSubject,\n patterns\n };\n }\n\n public async buildGroupByQuery(\n options: GroupByOptions\n ): Promise<{ query: SelectQuery; variableMapping: Record<string, string> }> {\n const span = PerformanceLogger.startSpan('QueryBuilder.buildGroupBy', { \n hasGroupBy: !!options.groupBy,\n hasDateRange: !!options.dateRange \n });\n try {\n const entityVariable = DataFactory.variable('entity');\n const queryData = this.buildEntitySelectPatternsFromOptions(entityVariable, {\n where: options.where || {}\n });\n\n // Add group variables and patterns with mapping\n const groupVariables: Variable[] = [];\n const groupPatterns: Pattern[] = [];\n const variableMapping: Record<string, string> = {};\n\n if (options.groupBy) {\n options.groupBy.forEach(path => {\n const { variable: groupVar, patterns } = this.createGroupPatternForPath(entityVariable, path);\n groupVariables.push(groupVar);\n variableMapping[groupVar.value] = path;\n groupPatterns.push(...patterns);\n });\n }\n\n // Add date handling if specified\n if (options.dateRange) {\n const dateVar = this.createVariable();\n variableMapping[dateVar.value] = 'date';\n\n const datePattern: Pattern = {\n type: 'bgp',\n triples: [\n {\n subject: entityVariable,\n predicate: DataFactory.namedNode(EngineConstants.prop.dateCreated),\n object: dateVar\n }\n ]\n };\n\n const dateFilter: FilterPattern = {\n type: 'filter',\n expression: {\n type: 'operation',\n operator: '&&',\n args: [\n {\n type: 'operation',\n operator: '>=',\n args: [ dateVar, DataFactory.literal(options.dateRange.start, XSD.dateTime) ]\n },\n {\n type: 'operation',\n operator: '<=',\n args: [ dateVar, DataFactory.literal(options.dateRange.end, XSD.dateTime) ]\n }\n ]\n }\n };\n\n groupPatterns.push(datePattern, dateFilter);\n\n if (options.dateGrouping) {\n const dateGroupVar = this.createVariable();\n groupVariables.push(dateGroupVar);\n variableMapping[dateGroupVar.value] = 'dateGroup';\n\n const dateGroupBind = this.createDateGroupingBind(dateVar, dateGroupVar, options.dateGrouping);\n groupPatterns.push(dateGroupBind);\n }\n }\n\n // Create count and entityIds variables\n const countVar = this.createVariable();\n const entityIdsVar = this.createVariable();\n variableMapping[countVar.value] = 'count';\n variableMapping[entityIdsVar.value] = 'entityIds';\n\n // Combine all patterns\n const combinedWhere = [ ...queryData.where, ...groupPatterns ];\n\n // Create select query with aggregations\n const selectQuery = createSparqlSelectQuery(\n [\n ...groupVariables,\n {\n expression: {\n type: 'aggregate',\n aggregation: 'count',\n distinct: true,\n expression: entityVariable\n },\n variable: countVar\n },\n {\n expression: {\n type: 'aggregate',\n aggregation: 'group_concat',\n distinct: true,\n separator: ' ',\n expression: entityVariable\n },\n variable: entityIdsVar\n }\n ],\n combinedWhere,\n [], // Orders\n groupVariables.length > 0 ? groupVariables : undefined, // Group by\n options.limit,\n options.offset\n );\n\n const result = { query: selectQuery, variableMapping };\n PerformanceLogger.endSpan(span, { \n groupCount: groupVariables.length,\n hasDateGrouping: !!options.dateGrouping \n });\n return result;\n } catch (error) {\n PerformanceLogger.endSpan(span, { error: true });\n throw error;\n }\n }\n\n // Helper function for date grouping\n private createDateGroupingBind(dateVar: Variable, dateGroupVar: Variable, grouping: 'month' | 'day'): Pattern {\n return {\n type: 'bind',\n expression: {\n type: 'operation',\n operator: 'CONCAT',\n args: [\n this.createYearExpression(dateVar),\n DataFactory.literal('-'),\n this.createMonthExpression(dateVar),\n ...this.createDayExpressionParts(dateVar, grouping)\n ]\n },\n variable: dateGroupVar\n };\n }\n\n private createYearExpression(dateVar: Variable): Expression {\n return {\n type: 'operation',\n operator: 'STR',\n args: [\n {\n type: 'operation',\n operator: 'YEAR',\n args: [ dateVar ]\n }\n ]\n };\n }\n\n private createMonthExpression(dateVar: Variable): Expression {\n return this.createPaddedDatePartExpression(dateVar, 'MONTH');\n }\n\n private createDayExpression(dateVar: Variable): Expression {\n return this.createPaddedDatePartExpression(dateVar, 'DAY');\n }\n\n private createPaddedDatePartExpression(dateVar: Variable, datePart: 'MONTH' | 'DAY'): Expression {\n const comparisonValue = DataFactory.literal('10', XSD.integer);\n\n return {\n type: 'operation',\n operator: 'IF',\n args: [\n this.createLessThanComparison(dateVar, datePart, comparisonValue),\n this.createPaddedStringExpression(dateVar, datePart),\n this.createUnpaddedStringExpression(dateVar, datePart)\n ]\n };\n }\n\n private createLessThanComparison(dateVar: Variable, datePart: 'MONTH' | 'DAY', comparisonValue: Term): Expression {\n return {\n type: 'operation',\n operator: '<',\n args: [\n {\n type: 'operation',\n operator: datePart,\n args: [ dateVar ]\n } as Expression,\n comparisonValue as Expression\n ]\n };\n }\n\n private createPaddedStringExpression(dateVar: Variable, datePart: 'MONTH' | 'DAY'): Expression {\n return {\n type: 'operation',\n operator: 'CONCAT',\n args: [ DataFactory.literal('0'), this.createUnpaddedStringExpression(dateVar, datePart) ]\n };\n }\n\n private createUnpaddedStringExpression(dateVar: Variable, datePart: 'MONTH' | 'DAY'): Expression {\n return {\n type: 'operation',\n operator: 'STR',\n args: [\n {\n type: 'operation',\n operator: datePart,\n args: [ dateVar ]\n }\n ]\n };\n }\n\n private createDayExpressionParts(dateVar: Variable, grouping: 'month' | 'day'): Expression[] {\n if (grouping === 'day') {\n return [ DataFactory.literal('-'), this.createDayExpression(dateVar) ];\n }\n return [ DataFactory.literal('') ];\n }\n}\n"]}
1
+ {"version":3,"file":"SparqlQueryBuilder.js","sourceRoot":"","sources":["../../../../src/storage/query-adapter/sparql/SparqlQueryBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-inline-comments */\n/* eslint-disable line-comment-position */\n/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */\n/* eslint-disable @typescript-eslint/no-shadow */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable multiline-comment-style */\n/* eslint-disable capitalized-comments */\n/* eslint-disable indent */\nimport DataFactory from '@rdfjs/data-model';\nimport type { Literal, NamedNode, Term, Variable } from '@rdfjs/types';\nimport type {\n BindPattern,\n ConstructQuery,\n Expression,\n FilterPattern,\n GraphPattern,\n Grouping,\n IriTerm,\n OperationExpression,\n Ordering,\n Pattern,\n PropertyPath,\n SelectQuery,\n Triple,\n ValuePatternRow,\n ValuesPattern\n} from 'sparqljs';\nimport { EngineConstants, XSD } from '../../../constants';\nimport { PerformanceLogger } from '../../../util/PerformanceLogger';\nimport {\n allTypesAndSuperTypesPath,\n createFilterPatternFromFilters,\n createSparqlBasicGraphPattern,\n createSparqlConstructQuery,\n createSparqlContainsOperation,\n createSparqlEqualOperation,\n createSparqlExistsOperation,\n createSparqlFilterWithExpression,\n createSparqlGraphPattern,\n createSparqlGteOperation,\n createSparqlGtOperation,\n createSparqlInOperation,\n createSparqlInversePredicate,\n createSparqlLcaseOperation,\n createSparqlLteOperation,\n createSparqlLtOperation,\n createSparqlNotEqualOperation,\n createSparqlNotExistsOperation,\n createSparqlNotInOperation,\n createSparqlOneOrMorePredicate,\n createSparqlOptional,\n createSparqlSelectGroup,\n createSparqlSelectQuery,\n createSparqlSequencePredicate,\n createSparqlServicePattern,\n createSparqlUnion,\n createSparqlZeroOrMorePredicate,\n entityGraphTriple,\n entityVariable\n} from '../../../util/SparqlUtil';\nimport { valueToLiteral } from '../../../util/TripleUtil';\nimport type { OrArray } from '../../../util/Types';\nimport { isUrl } from '../../../util/Util';\nimport { RDF } from '../../../util/Vocabularies';\nimport { FindOperator } from '../../FindOperator';\nimport type {\n FieldPrimitiveValue,\n FindOptionsOrder,\n FindOptionsOrderValue,\n FindOptionsRelations,\n FindOptionsSelect,\n FindOptionsWhere,\n FindOptionsWhereField,\n IdFindOptionsWhereField,\n SubQuery,\n TypeFindOptionsWhereField,\n ValueWhereFieldObject\n} from '../../FindOptionsTypes';\nimport type { GroupByOptions } from '../../GroupOptionTypes';\nimport type { InverseRelationOperatorValue } from '../../operator/InverseRelation';\nimport type { InverseRelationOrderValue } from '../../operator/InverseRelationOrder';\nimport { VariableGenerator } from './VariableGenerator';\n\nexport interface NonGraphWhereQueryData {\n values: ValuesPattern[];\n triples: Triple[];\n filters: OperationExpression[];\n patterns?: Pattern[];\n binds?: Pattern[];\n}\n\nexport interface WhereQueryData extends NonGraphWhereQueryData {\n graphValues: ValuesPattern[];\n graphTriples: Triple[];\n graphFilters: OperationExpression[];\n serviceTriples?: Record<string, Triple[]>;\n selectVariables?: { variable: Variable; }[];\n}\n\nexport interface RelationsQueryData {\n patterns: Pattern[];\n selectionTriples: Triple[];\n unionPatterns: Pattern[];\n}\n\nexport interface OrderQueryData {\n triples: Triple[];\n filters: OperationExpression[];\n orders: Ordering[];\n groupByParent?: boolean;\n patterns?: Pattern[];\n}\n\nexport interface EntitySelectQueryData {\n where: Pattern[];\n orders: Ordering[];\n graphWhere: Pattern[];\n graphSelectionTriples: Triple[];\n group?: Variable;\n selectVariables: { variable: Variable; expression: Expression }[];\n relationsQueryData?: RelationsQueryData;\n}\n\nexport interface SparqlQueryBuilderOptions {\n where?: FindOptionsWhere;\n select?: FindOptionsSelect;\n order?: FindOptionsOrder;\n relations?: FindOptionsRelations;\n subQueries?: SubQuery[];\n}\n\nexport class SparqlQueryBuilder {\n private readonly variableGenerator: VariableGenerator;\n\n public constructor() {\n this.variableGenerator = new VariableGenerator();\n }\n\n public buildEntitySelectPatternsFromOptions(\n subject: Variable,\n options?: SparqlQueryBuilderOptions\n ): EntitySelectQueryData {\n const span = PerformanceLogger.startSpan('QueryBuilder.buildSelect', { \n hasWhere: !!options?.where, \n hasRelations: !!options?.relations \n });\n try {\n const relations = options?.select ? undefined : options?.relations;\n const whereQueryData = this.createWhereQueryData(subject, options?.where, true);\n const orderQueryData = this.createOrderQueryData(subject, options?.order);\n const relationsQueryData = this.createRelationsQueryData(subject, relations);\n // Handle subqueries\n if (options?.subQueries && options.subQueries.length > 0) {\n const subQueryPatterns = this.createSubQueryPatterns(options.subQueries);\n whereQueryData.values.unshift(...(subQueryPatterns as ValuesPattern[]));\n }\n const patterns: Pattern[] = whereQueryData.values;\n if (\n whereQueryData.triples.length === 0 &&\n (whereQueryData.filters.length > 0 ||\n orderQueryData.triples.length > 0 ||\n (whereQueryData.values.length === 0 &&\n whereQueryData.graphValues.length === 0 &&\n whereQueryData.graphTriples.length === 0))\n ) {\n if (relationsQueryData.unionPatterns.length > 0) {\n /* relationsQueryData.unionPatterns.push(\n createSparqlGraphPattern(subject, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ); */\n } else {\n const entityGraphFilterPattern = this.createEntityGraphFilterPattern(subject);\n // patterns.push(createSparqlGraphPattern(subject, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ]));\n patterns.push(entityGraphFilterPattern);\n }\n } else if (!options?.where?.id) {\n const entityGraphFilterPattern = this.createEntityGraphFilterPattern(subject);\n const entityIsGraphFilter = createSparqlExistsOperation([ entityGraphFilterPattern ]);\n whereQueryData.filters.push(entityIsGraphFilter);\n }\n\n // Add union patterns to the patterns\n if (relationsQueryData.unionPatterns.length > 0) {\n patterns.push(createSparqlUnion(relationsQueryData.unionPatterns));\n }\n\n const wherePatterns = this.createWherePatternsFromQueryData(\n patterns,\n whereQueryData.triples,\n whereQueryData.filters,\n orderQueryData.triples,\n orderQueryData.filters,\n whereQueryData.patterns ?? [],\n undefined,\n whereQueryData.binds\n );\n // For ID-only queries, we need to include union patterns in graphWhere\n // because that's what gets used in the CONSTRUCT query\n const graphWhereRelationsPatterns = relationsQueryData.unionPatterns.length > 0\n ? [ createSparqlUnion(relationsQueryData.unionPatterns), ...relationsQueryData.patterns ]\n : relationsQueryData.patterns;\n\n const graphWherePatterns = this.createWherePatternsFromQueryData(\n whereQueryData.graphValues,\n whereQueryData.graphTriples,\n whereQueryData.graphFilters,\n undefined,\n undefined,\n graphWhereRelationsPatterns\n );\n\n // Create variables for each order expression and update the orders to use them\n const selectVariables = orderQueryData.orders.map(order => {\n const variable = this.createVariable();\n return {\n variable,\n expression: order.expression\n };\n });\n\n const orders = selectVariables.map((selectVar, index) => ({\n expression: selectVar.variable,\n descending: orderQueryData.orders[index].descending\n }));\n\n if (orders.length === 0) {\n orders.push({\n expression: entityVariable\n } as any);\n }\n\n selectVariables.push(...(whereQueryData.selectVariables ?? []) as { variable: Variable; expression: Expression }[]);\n\n \n const isRelationsQueryDataEmpty = relationsQueryData.unionPatterns.length === 0 && relationsQueryData.patterns.length === 0 && relationsQueryData.selectionTriples.length === 0;\n\n const returnData: any = {\n where: wherePatterns,\n orders,\n ...orderQueryData.groupByParent ? { group: subject } : {},\n graphWhere: graphWherePatterns,\n graphSelectionTriples: relationsQueryData.selectionTriples,\n ...isRelationsQueryDataEmpty ? { } : { relationsQueryData }\n };\n if (selectVariables.length > 0) {\n returnData.selectVariables = selectVariables;\n }\n PerformanceLogger.endSpan(span, { \n patternCount: wherePatterns.length, \n tripleCount: whereQueryData.triples.length,\n hasFilters: whereQueryData.filters.length > 0,\n hasOrders: orders.length > 0\n });\n return returnData;\n } catch (error) {\n PerformanceLogger.endSpan(span, { error: true });\n throw error;\n }\n }\n\n private createSubQueryPatterns(subQueries: SubQuery[]): Pattern[] {\n return subQueries.map((subQuery: SubQuery): Pattern => {\n const subQueryWhere = this.createWhereQueryData(entityVariable, subQuery.where);\n const queryGroup: Grouping[] = [];\n if (subQuery.groupBy && Array.isArray(subQuery.groupBy)) {\n subQuery.groupBy.forEach((group: string): void => {\n queryGroup.push({\n expression: DataFactory.variable(group)\n });\n });\n }\n const selectQuery: SelectQuery = {\n type: 'query',\n queryType: 'SELECT',\n variables: subQuery.select,\n where: this.createWherePatternsFromQueryData(\n subQueryWhere.values,\n subQueryWhere.triples,\n subQueryWhere.filters,\n undefined,\n undefined,\n subQueryWhere.patterns ?? []\n ),\n group: queryGroup.length > 0 ? queryGroup : undefined,\n having: subQuery.having ? this.createWhereQueryData(entityVariable, subQuery.having).filters : undefined,\n prefixes: {}\n };\n return createSparqlSelectGroup([ selectQuery ]);\n });\n }\n\n private createEntityGraphFilterPattern(subject: Variable): GraphPattern {\n const entityFilterTriple = { subject, predicate: this.createVariable(), object: this.createVariable() };\n return createSparqlGraphPattern(subject, [ createSparqlBasicGraphPattern([ entityFilterTriple ]) ]);\n }\n\n public buildConstructFromEntitySelectQuery(\n graphWhere: Pattern[],\n graphSelectionTriples: Triple[],\n select?: FindOptionsSelect,\n selectVariables?: { variable: Variable; expression: Expression }[]\n ): ConstructQuery {\n const span = PerformanceLogger.startSpan('QueryBuilder.buildConstruct', { hasSelect: !!select });\n try {\n let triples: Triple[];\n let where: Pattern[] = [];\n if (select) {\n triples = this.createSelectPattern(select, entityVariable);\n where = [ createSparqlOptional([ createSparqlBasicGraphPattern(triples) ]), ...graphWhere ];\n } else {\n triples = [ entityGraphTriple, ...graphSelectionTriples ];\n /* Skip if the where contains a union pattern */\n if (graphWhere.some(pattern => pattern.type === 'union')) {\n where = graphWhere;\n } else {\n where = [\n ...graphWhere,\n createSparqlGraphPattern(entityVariable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ];\n }\n }\n\n // // Add select variables to the query\n // if (selectVariables?.length) {\n // where = [\n // ...where,\n // ...selectVariables.map(({ variable, expression }) => ({\n // type: 'bind' as const,\n // expression,\n // variable,\n // })),\n // ];\n // }\n\n const result = createSparqlConstructQuery(triples, where);\n PerformanceLogger.endSpan(span, { tripleCount: triples.length, patternCount: where.length });\n return result;\n } catch (error) {\n PerformanceLogger.endSpan(span, { error: true });\n throw error;\n }\n }\n\n private createWhereQueryData(subject: Variable, where?: FindOptionsWhere, isTopLevel = false): WhereQueryData {\n if (isTopLevel && Object.keys(where ?? {}).length === 1 && 'id' in where!) {\n const { values, filters, triples } = this.createWhereQueryDataForIdValue(subject, where.id!);\n return {\n values: [],\n filters: [],\n triples: [],\n graphValues: values,\n graphFilters: filters,\n graphTriples: triples,\n binds: []\n };\n }\n\n // Handle binds if specified in where options\n const binds: Pattern[] = [];\n if (where?.binds) {\n binds.push(\n ...where.binds.map(\n (bind): BindPattern => ({\n type: 'bind' as const,\n expression: bind.expression,\n variable: bind.variable as Variable\n })\n )\n );\n // Delete binds from where as it's a special key\n const { binds: _, ...restWhere } = where;\n where = restWhere;\n }\n\n const whereQueryData = Object.entries(where ?? {}).reduce(\n (obj: NonGraphWhereQueryData, [ key, value ]): NonGraphWhereQueryData => {\n const whereQueryDataForField = this.createWhereQueryDataForField(subject, key, value!);\n return {\n values: [ ...obj.values, ...whereQueryDataForField.values ],\n triples: [ ...obj.triples, ...whereQueryDataForField.triples ],\n filters: [ ...obj.filters, ...whereQueryDataForField.filters ],\n patterns: [ ...obj.patterns ?? [], ...whereQueryDataForField.patterns ?? [] ],\n binds: [ ...obj.binds ?? [], ...whereQueryDataForField.binds ?? [] ]\n };\n },\n { values: [], triples: [], filters: [], patterns: [], binds }\n );\n\n return {\n ...whereQueryData,\n graphValues: [],\n graphFilters: [],\n graphTriples: [],\n patterns: whereQueryData.patterns ?? [],\n binds: whereQueryData.binds ?? []\n };\n }\n\n private createWhereQueryDataForField(\n subject: Variable,\n field: string,\n value: IdFindOptionsWhereField | TypeFindOptionsWhereField | FindOptionsWhereField | FindOptionsWhere[]\n ): NonGraphWhereQueryData {\n if (field === 'id') {\n return this.createWhereQueryDataForIdValue(subject, value as FindOperator<any, any>);\n }\n if (field === 'type') {\n return this.createWhereQueryDataForType(subject, value as FindOperator<any, any>);\n }\n if (field === 'and') {\n return this.createWhereQueryDataForAndClause(subject, value as FindOptionsWhere[]);\n }\n if (field === 'or') {\n return this.createWhereQueryDataForOrClause(subject, value as FindOptionsWhere[]);\n }\n const predicate = DataFactory.namedNode(field);\n return this.createWhereQueryDataFromKeyValue(subject, predicate, value as FindOptionsWhereField);\n }\n\n private createWhereQueryDataForAndClause(\n subject: Variable,\n whereClauses: FindOptionsWhere[]\n ): NonGraphWhereQueryData {\n // Combine all nested where conditions - all must match\n return whereClauses.reduce(\n (acc: NonGraphWhereQueryData, nestedWhere): NonGraphWhereQueryData => {\n const nestedData = this.createWhereQueryData(subject, nestedWhere);\n return {\n values: [ ...acc.values, ...nestedData.values ],\n triples: [ ...acc.triples, ...nestedData.triples ],\n filters: [ ...acc.filters, ...nestedData.filters ],\n patterns: [ ...acc.patterns ?? [], ...nestedData.patterns ?? [] ],\n binds: [ ...acc.binds ?? [], ...nestedData.binds ?? [] ]\n };\n },\n { values: [], triples: [], filters: [], patterns: [], binds: [] }\n );\n }\n\n private createWhereQueryDataForOrClause(\n subject: Variable,\n whereClauses: FindOptionsWhere[]\n ): NonGraphWhereQueryData {\n // Create UNION patterns - any condition can match\n const unionPatterns = whereClauses.map((nestedWhere): Pattern => {\n const nestedData = this.createWhereQueryData(subject, nestedWhere);\n const patterns: Pattern[] = [];\n\n // Add values patterns\n if (nestedData.values.length > 0) {\n patterns.push(...nestedData.values);\n }\n\n // Add triples as basic graph pattern\n if (nestedData.triples.length > 0) {\n patterns.push(createSparqlBasicGraphPattern(nestedData.triples));\n }\n\n // Add nested patterns (for deeply nested and/or)\n if (nestedData.patterns && nestedData.patterns.length > 0) {\n patterns.push(...nestedData.patterns);\n }\n\n // Add filters\n if (nestedData.filters.length > 0) {\n patterns.push(createFilterPatternFromFilters(nestedData.filters));\n }\n\n // Add binds\n if (nestedData.binds && nestedData.binds.length > 0) {\n patterns.push(...nestedData.binds);\n }\n\n return createSparqlSelectGroup(patterns);\n });\n\n return {\n values: [],\n triples: [],\n filters: [],\n patterns: [ createSparqlUnion(unionPatterns) ],\n binds: []\n };\n }\n\n private createWhereQueryDataForIdValue(term: Variable, value: IdFindOptionsWhereField): NonGraphWhereQueryData {\n let filters: OperationExpression[] = [];\n let values: ValuesPattern[] = [];\n let triples: Triple[] = [];\n if (FindOperator.isFindOperator(value)) {\n ({ filters, values, triples } = this.resolveFindOperatorAsExpressionForId(\n term,\n value as FindOperator<string, any>\n ));\n } else {\n values = [\n {\n type: 'values',\n values: [\n {\n [`?${term.value}`]: DataFactory.namedNode(value as string)\n }\n ]\n }\n ];\n }\n return {\n values,\n filters,\n triples\n };\n }\n\n private createWhereQueryDataForType(subject: Variable, value: TypeFindOptionsWhereField): NonGraphWhereQueryData {\n if (FindOperator.isFindOperator(value)) {\n if ((value as FindOperator<any, any>).operator === 'and') {\n // For AND on types, generate a triple for each type\n const typeValues = (value as unknown as FindOperator<any[], 'and'>).value;\n\n // Create a triple for each value in the array, safely converting to string\n const triples = (typeValues as any[]).map((typeVal: any) => {\n const typeStr = typeof typeVal === 'string' ? typeVal : typeVal?.toString() || '';\n\n return {\n subject,\n predicate: allTypesAndSuperTypesPath,\n object: DataFactory.namedNode(typeStr)\n };\n });\n return {\n values: [],\n filters: [],\n triples: [\n ...triples\n ]\n };\n }\n\n if ((value as FindOperator<any, any>).operator === 'inverse') {\n const inversePredicate = createSparqlInversePredicate([ allTypesAndSuperTypesPath ]);\n const inverseWhereQueryData = this.createWhereQueryDataFromKeyValue(\n subject,\n inversePredicate,\n (value as FindOperator<any, any>).value\n );\n const variable = this.createVariable();\n return {\n values: inverseWhereQueryData.values,\n filters: inverseWhereQueryData.filters,\n triples: inverseWhereQueryData.triples\n };\n }\n if ((value as FindOperator<any, any>).operator === 'sequence') {\n const sequencePredicate = createSparqlSequencePredicate([ allTypesAndSuperTypesPath ]);\n return this.createWhereQueryDataFromKeyValue(\n subject,\n sequencePredicate,\n (value as FindOperator<any, any>).value\n );\n }\n\n if (Array.isArray(value)) {\n const triples = value.map(typeVal => ({\n subject,\n predicate: allTypesAndSuperTypesPath,\n object:\n typeof typeVal === 'string' ? DataFactory.namedNode(typeVal) : DataFactory.namedNode(typeVal.toString())\n }));\n\n return {\n values: [],\n filters: [],\n triples: [\n ...triples\n ]\n };\n }\n\n const variable = this.createVariable();\n const triple = { subject, predicate: allTypesAndSuperTypesPath, object: variable };\n const { filter, valuePattern, tripleInFilter } = this.resolveFindOperatorAsExpressionWithMultipleValues(\n variable,\n value as FindOperator<string, any>,\n triple\n );\n return {\n values: valuePattern ? [ valuePattern ] : [],\n filters: filter ? [ filter ] : [],\n triples: tripleInFilter ? [] : [ triple ]\n };\n }\n return {\n values: [],\n filters: [],\n triples: [\n {\n subject,\n predicate: allTypesAndSuperTypesPath,\n object: DataFactory.namedNode(value as string)\n }\n ]\n };\n }\n\n private createWhereQueryDataFromKeyValue(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n value: FindOptionsWhereField\n ): NonGraphWhereQueryData {\n if (Array.isArray(value) && FindOperator.isFindOperator(value[0])) {\n return this.createWhereQueryDataForMultipleFindOperators(subject, predicate, value as FindOperator<any, any>[]);\n }\n if (FindOperator.isFindOperator(value)) {\n return this.createWhereQueryDataForFindOperator(subject, predicate, value as FindOperator<any, any>);\n }\n if (Array.isArray(value)) {\n return (value as FieldPrimitiveValue[]).reduce(\n (obj: NonGraphWhereQueryData, valueItem): NonGraphWhereQueryData => {\n const valueWhereQueryData = this.createWhereQueryDataFromKeyValue(subject, predicate, valueItem);\n return {\n values: [ ...obj.values, ...valueWhereQueryData.values ],\n filters: [ ...obj.filters, ...valueWhereQueryData.filters ],\n triples: [ ...obj.triples, ...valueWhereQueryData.triples ],\n patterns: [ ...obj.patterns ?? [], ...valueWhereQueryData.patterns ?? [] ]\n };\n },\n { values: [], filters: [], triples: [], patterns: [] }\n );\n }\n if (typeof value === 'object') {\n if ('@value' in value) {\n return this.createWhereQueryDataForValueObject(\n 'subject' in value ? (value.subject as unknown as Variable) : subject,\n predicate,\n value as ValueWhereFieldObject\n );\n }\n return this.createWhereQueryDataForNestedWhere(subject, predicate, value as FindOptionsWhere);\n }\n const term = this.resolveValueToTerm(value);\n return {\n values: [],\n filters: [],\n triples: [{ subject, predicate, object: term }]\n };\n }\n\n private createWhereQueryDataForFindOperator(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n operator: FindOperator<any, any>\n ): NonGraphWhereQueryData {\n if (operator.operator === 'inverse') {\n const inversePredicate = createSparqlInversePredicate([ predicate ]);\n return this.createWhereQueryDataFromKeyValue(\n operator.subject ? operator.subject : subject,\n inversePredicate,\n operator.value\n );\n }\n if (operator.operator === 'sequence') {\n const sequencePredicate = createSparqlSequencePredicate([ predicate ]);\n return this.createWhereQueryDataFromKeyValue(\n operator.subject ? operator.subject : subject,\n sequencePredicate,\n operator.value\n );\n }\n if (FindOperator.isPathOperator(operator)) {\n const pathPredicate = this.pathOperatorToPropertyPath(operator);\n const combinedPredicate = createSparqlSequencePredicate([ predicate, pathPredicate ]);\n return this.createWhereQueryDataFromKeyValue(subject, combinedPredicate, operator.value.value);\n }\n const variable = this.createVariable();\n const triple = { subject, predicate, object: variable };\n const { filter, valuePattern, tripleInFilter } = this.resolveFindOperatorAsExpressionWithMultipleValues(\n variable,\n operator,\n triple\n );\n return {\n values: valuePattern ? [ valuePattern ] : [],\n filters: filter ? [ filter ] : [],\n triples: tripleInFilter ? [] : [ triple ]\n };\n }\n\n private pathOperatorToPropertyPath(\n operator: FindOperator<any, 'inversePath' | 'sequencePath' | 'zeroOrMorePath' | 'oneOrMorePath'>\n ): PropertyPath {\n if (operator.operator === 'inversePath') {\n let subPredicate: IriTerm | PropertyPath;\n const { subPath } = operator.value;\n if (typeof subPath === 'string') {\n subPredicate = DataFactory.namedNode(subPath);\n } else {\n subPredicate = this.pathOperatorToPropertyPath(subPath);\n }\n return createSparqlInversePredicate([ subPredicate ]);\n }\n if (operator.operator === 'sequencePath') {\n const { subPath } = operator.value;\n const subPredicates = subPath.map((sequencePart: string | FindOperator<any, any>): IriTerm | PropertyPath => {\n if (typeof sequencePart === 'string') {\n return DataFactory.namedNode(sequencePart);\n }\n return this.pathOperatorToPropertyPath(sequencePart);\n });\n return createSparqlSequencePredicate(subPredicates);\n }\n if (operator.operator === 'zeroOrMorePath') {\n const { subPath } = operator.value;\n let subPredicate: IriTerm | PropertyPath;\n if (typeof subPath === 'string') {\n subPredicate = DataFactory.namedNode(subPath);\n } else {\n subPredicate = this.pathOperatorToPropertyPath(subPath);\n }\n return createSparqlZeroOrMorePredicate([ subPredicate ]);\n }\n if (operator.operator === 'oneOrMorePath') {\n const { subPath } = operator.value;\n let subPredicate: IriTerm | PropertyPath;\n if (typeof subPath === 'string') {\n subPredicate = DataFactory.namedNode(subPath);\n } else {\n subPredicate = this.pathOperatorToPropertyPath(subPath);\n }\n return createSparqlOneOrMorePredicate([ subPredicate ]);\n }\n throw new Error(`Operator ${operator.operator} not supported`);\n }\n\n private createWhereQueryDataForMultipleFindOperators(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n operators: FindOperator<any, any>[]\n ): NonGraphWhereQueryData {\n const variable = this.createVariable();\n const triple = { subject, predicate, object: variable };\n const whereQueryData = {\n values: [],\n filters: [],\n triples: [ triple ]\n };\n return operators.reduce((obj: NonGraphWhereQueryData, operator): NonGraphWhereQueryData => {\n const { filter, valuePattern } = this.resolveFindOperatorAsExpressionWithMultipleValues(\n variable,\n operator,\n triple\n );\n if (valuePattern) {\n obj.values.push(valuePattern);\n }\n if (filter) {\n obj.filters.push(filter);\n }\n return obj;\n }, whereQueryData);\n }\n\n private createWhereQueryDataForNestedWhere(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n where: FindOptionsWhere\n ): NonGraphWhereQueryData {\n const subNodeVariable = this.createVariable();\n const subWhereQueryData = this.createWhereQueryData(subNodeVariable, where);\n return {\n values: [ ...subWhereQueryData.values, ...subWhereQueryData.graphValues ],\n filters: subWhereQueryData.filters,\n triples: [{ subject, predicate, object: subNodeVariable }, ...subWhereQueryData.triples ],\n patterns: [ ...subWhereQueryData.patterns ?? [] ]\n };\n }\n\n private createWhereQueryDataForValueObject(\n subject: Variable,\n predicate: IriTerm | PropertyPath,\n valueObject: ValueWhereFieldObject\n ): NonGraphWhereQueryData {\n const term = this.valueObjectToTerm(valueObject);\n if ((valueObject as any).isOptional) {\n return {\n values: [],\n filters: [],\n triples: [],\n patterns: [ createSparqlOptional([ createSparqlBasicGraphPattern([{ subject, predicate, object: term }]) ]) ]\n };\n }\n return {\n values: [],\n filters: [],\n triples: [{ subject, predicate, object: term }]\n };\n }\n\n private valueObjectToTerm(valueObject: ValueWhereFieldObject): Literal | Variable {\n let typeOrLanguage: string;\n let value: string;\n if ('@type' in valueObject && valueObject['@type'] === '@json') {\n typeOrLanguage = RDF.JSON;\n value = JSON.stringify(valueObject['@value']);\n } else {\n typeOrLanguage = ('@type' in valueObject ? valueObject['@type'] : valueObject['@language'])!;\n value = (valueObject['@value'] as FieldPrimitiveValue).toString();\n }\n return valueToLiteral(value, typeOrLanguage);\n }\n\n private resolveFindOperatorAsExpressionWithMultipleValues(\n leftSide: Variable,\n operator: FindOperator<any, any>,\n triple: Triple,\n dontUseValuePattern = false\n ): { filter?: OperationExpression; valuePattern?: ValuesPattern; tripleInFilter?: boolean } {\n if (operator.operator === 'and') {\n // For AND operators, we'll create an AND filter with multiple equality comparisons\n const values = operator.value as any[];\n\n if (values.length === 0) {\n // No conditions to add\n return {};\n }\n\n if (values.length === 1) {\n // If only one value, treat as equality\n return {\n filter: createSparqlEqualOperation(leftSide, this.resolveValueToExpression(values[0]) as Expression)\n };\n }\n\n // Create individual equality conditions for each value\n const equalityConditions: OperationExpression[] = values.map(val =>\n createSparqlEqualOperation(leftSide, this.resolveValueToExpression(val) as Expression));\n\n // Combine with AND operation\n return {\n filter: {\n type: 'operation',\n operator: '&&',\n args: equalityConditions\n }\n };\n }\n if (operator.operator === 'in') {\n const resolvedValue = this.resolveValueToExpression(operator.value) as (NamedNode | Literal)[];\n if (Array.isArray(resolvedValue) && !dontUseValuePattern) {\n return {\n valuePattern: {\n type: 'values',\n values: resolvedValue.map((value): ValuePatternRow => ({ [`?${leftSide.value}`]: value }))\n }\n };\n }\n return {\n filter: createSparqlInOperation(leftSide, resolvedValue as Expression)\n };\n }\n if (operator.operator === 'not') {\n const resolvedExpression = this.resolveValueToExpression(operator.value) as Expression | FindOperator<any, any>;\n return {\n filter: this.buildNotOperationForMultiValued(leftSide, resolvedExpression, triple),\n tripleInFilter: true\n };\n }\n if (operator.operator === 'exists') {\n return {\n filter: createSparqlExistsOperation([ createSparqlBasicGraphPattern([ triple ]) ]),\n tripleInFilter: true\n };\n }\n\n if (operator.operator === 'contains') {\n const searchString = this.resolveValueToExpression(operator.value) as Literal;\n const filter = createSparqlContainsOperation(\n // Directly use the variable as an expression\n createSparqlLcaseOperation(DataFactory.variable(leftSide.value)),\n createSparqlLcaseOperation(DataFactory.literal(searchString.value.toLowerCase()))\n );\n return {\n filter\n };\n }\n const resolvedExpression = this.resolveValueToExpression(operator.value) as Expression;\n switch (operator.operator) {\n case 'equal':\n return { filter: createSparqlEqualOperation(leftSide, resolvedExpression) };\n case 'gt':\n return { filter: createSparqlGtOperation(leftSide, resolvedExpression) };\n case 'gte':\n return { filter: createSparqlGteOperation(leftSide, resolvedExpression) };\n case 'lt':\n return { filter: createSparqlLtOperation(leftSide, resolvedExpression) };\n case 'lte':\n return { filter: createSparqlLteOperation(leftSide, resolvedExpression) };\n default:\n throw new Error(`Unsupported operator \"${operator.operator}\"`);\n }\n }\n\n private resolveFindOperatorAsExpressionForId(\n leftSide: Variable,\n operator: FindOperator<any, any>\n ): NonGraphWhereQueryData {\n switch (operator.operator) {\n case 'inversePath': {\n const predicate = this.pathOperatorToPropertyPath(operator);\n return this.createWhereQueryDataFromKeyValue(leftSide, predicate, operator.value.value);\n }\n case 'in': {\n const resolvedValue = this.resolveValueToExpression(operator.value) as NamedNode[];\n return {\n triples: [],\n filters: [],\n values: [\n {\n type: 'values',\n values: resolvedValue.map((value): ValuePatternRow => ({ [`?${leftSide.value}`]: value }))\n }\n ]\n };\n }\n case 'not':\n return {\n triples: [],\n values: [],\n filters: [\n this.buildNotOperationForId(\n leftSide,\n this.resolveValueToExpression(operator.value) as Expression | FindOperator<any, any>\n )\n ]\n };\n case 'equal':\n return {\n triples: [],\n values: [],\n filters: [ createSparqlEqualOperation(leftSide, this.resolveValueToExpression(operator.value) as Expression) ]\n };\n default:\n throw new Error(`Unsupported operator \"${operator.operator}\"`);\n }\n }\n\n private resolveValueToExpression(\n value: OrArray<any> | FindOperator<any, any>\n ): FindOperator<any, any> | OrArray<Term> {\n if (FindOperator.isFindOperator(value)) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((valueItem): Term => this.resolveValueToTerm(valueItem));\n }\n return this.resolveValueToTerm(value);\n }\n\n private buildNotOperationForMultiValued(\n leftSide: Variable,\n rightSide: Expression | FindOperator<any, any>,\n triple: Triple\n ): OperationExpression {\n let filterExpression: FilterPattern;\n const isFindOperator = FindOperator.isFindOperator(rightSide);\n if (isFindOperator && (rightSide as FindOperator<any, any>).operator === 'exists') {\n return createSparqlNotExistsOperation([ createSparqlBasicGraphPattern([ triple ]) ]);\n }\n if (isFindOperator) {\n let expression: OperationExpression | undefined;\n try {\n ({ filter: expression } = this.resolveFindOperatorAsExpressionWithMultipleValues(\n leftSide,\n rightSide as FindOperator<any, any>,\n triple,\n true\n ));\n } catch {\n throw new Error(`Unsupported Not sub operator \"${(rightSide as FindOperator<any, any>).operator}\"`);\n }\n filterExpression = createSparqlFilterWithExpression(expression!);\n } else {\n filterExpression = createSparqlFilterWithExpression(\n createSparqlEqualOperation(leftSide, rightSide as Expression)\n );\n }\n return createSparqlNotExistsOperation([\n createSparqlSelectGroup([ createSparqlBasicGraphPattern([ triple ]), filterExpression ])\n ]);\n }\n\n private buildNotOperationForId(\n leftSide: Expression,\n rightSide: Expression | FindOperator<any, any>\n ): OperationExpression {\n if (FindOperator.isFindOperator(rightSide)) {\n const resolvedValue = this.resolveValueToExpression((rightSide as FindOperator<string, any>).value) as Expression;\n switch ((rightSide as FindOperator<string, any>).operator) {\n case 'in':\n return createSparqlNotInOperation(leftSide, resolvedValue);\n case 'equal':\n return createSparqlNotEqualOperation(leftSide, resolvedValue);\n default:\n throw new Error(`Unsupported Not sub operator \"${(rightSide as FindOperator<string, any>).operator}\"`);\n }\n }\n return createSparqlNotEqualOperation(leftSide, rightSide as Expression);\n }\n\n private resolveValueToTerm(value: FieldPrimitiveValue | ValueWhereFieldObject): NamedNode | Literal | Variable {\n if (typeof value === 'object' && '@value' in value) {\n return valueToLiteral((value as ValueWhereFieldObject)['@value'], '@type' in value ? value['@type'] : undefined);\n }\n if (isUrl(value)) {\n return DataFactory.namedNode(value as string);\n }\n return valueToLiteral(value);\n }\n\n private createOrderQueryData(\n subject: Variable,\n order?: FindOptionsOrder | FindOperator<InverseRelationOrderValue, 'inverseRelationOrder'>,\n isNested = false\n ): OrderQueryData {\n if (!order) {\n // Default is descending by id\n return { triples: [], orders: [ ], filters: []};\n }\n return Object.entries(order).reduce(\n (obj: OrderQueryData, [ property, orderValue ]): OrderQueryData => {\n const orderQueryData = this.createOrderQueryDataForProperty(subject, property, orderValue, isNested);\n obj.orders = [ ...obj.orders, ...orderQueryData.orders ];\n obj.triples = [ ...obj.triples, ...orderQueryData.triples ];\n obj.filters = [ ...obj.filters, ...orderQueryData.filters ];\n obj.groupByParent = obj.groupByParent ?? orderQueryData.groupByParent;\n return obj;\n },\n { triples: [], orders: [], filters: []}\n );\n }\n\n private createOrderQueryDataForProperty(\n subject: Variable,\n property: string,\n orderValue: FindOptionsOrderValue | FindOperator<InverseRelationOrderValue, 'inverseRelationOrder'>,\n isNested = false\n ): OrderQueryData {\n const predicate = DataFactory.namedNode(property);\n if (FindOperator.isFindOperator(orderValue)) {\n const variable = this.createVariable();\n const inverseRelationTriple = {\n subject,\n predicate: createSparqlInversePredicate([ predicate ]),\n object: variable\n };\n const subRelationOperatorValue = (orderValue as FindOperator<InverseRelationOrderValue, 'inverseRelationOrder'>)\n .value as InverseRelationOrderValue;\n const subRelationOrderQueryData = this.createOrderQueryData(variable, subRelationOperatorValue.order, true);\n const subRelationWhereQueryData = this.createWhereQueryData(variable, subRelationOperatorValue.where);\n\n // Create aggregate expressions for each order, but don't nest aggregates\n const aggregateOrders = subRelationOrderQueryData.orders.map(order => {\n const baseExpression =\n 'type' in order.expression && (order.expression as any).type === 'aggregate'\n ? (order.expression as any).expression\n : order.expression;\n\n // Create the aggregate expression first\n const aggregateExpression = {\n type: 'aggregate',\n expression: baseExpression,\n aggregation: order.descending ? 'max' : 'min'\n } as Expression;\n\n return {\n expression: aggregateExpression,\n descending: order.descending\n };\n });\n\n return {\n triples: [ inverseRelationTriple, ...subRelationOrderQueryData.triples, ...subRelationWhereQueryData.triples ],\n filters: subRelationWhereQueryData.filters,\n orders: aggregateOrders,\n groupByParent: true,\n patterns: [ ...subRelationWhereQueryData.patterns ?? [], ...subRelationOrderQueryData.patterns ?? [] ]\n };\n }\n if (property === 'id') {\n return {\n triples: [],\n filters: [],\n orders: [\n {\n expression: subject,\n descending: orderValue === 'DESC' || orderValue === 'desc'\n }\n ]\n };\n }\n const variable = this.createVariable();\n const isDescending = orderValue === 'DESC' || orderValue === 'desc';\n return {\n triples: [{ subject, predicate, object: variable }],\n filters: [],\n orders: [\n {\n expression: isNested\n ? {\n type: 'aggregate',\n expression: variable,\n aggregation: isDescending ? 'max' : 'min'\n }\n : variable,\n descending: isDescending\n }\n ]\n };\n }\n\n private createRelationsQueryData(subject: Variable, relations?: FindOptionsRelations): RelationsQueryData {\n if (!relations) {\n return { patterns: [], selectionTriples: [], unionPatterns: []};\n }\n const response = Object.entries(relations).reduce(\n (\n obj: RelationsQueryData & { unionPatterns?: Pattern[] },\n [ property, relationsValue ]\n ): RelationsQueryData & { unionPatterns?: Pattern[] } => {\n const predicate = DataFactory.namedNode(property);\n if (typeof relationsValue === 'object') {\n if (FindOperator.isFindOperator(relationsValue)) {\n const { patterns, selectionTriples, unionPatterns } = this.createRelationsQueryDataForInverseRelation(\n subject,\n predicate,\n relationsValue as FindOperator<InverseRelationOperatorValue, 'inverseRelation'>\n );\n return {\n patterns: [ ...obj.patterns, ...patterns ],\n selectionTriples: [ ...obj.selectionTriples, ...selectionTriples ],\n unionPatterns: [ ...obj.unionPatterns ?? [], ...unionPatterns ?? [] ]\n };\n }\n const { patterns, selectionTriples, unionPatterns } = this.createRelationsQueryDataForNestedRelation(\n subject,\n predicate,\n relationsValue as FindOptionsRelations\n );\n return {\n patterns: [ ...obj.patterns, ...patterns ],\n selectionTriples: [ ...obj.selectionTriples, ...selectionTriples ],\n unionPatterns: [\n ...obj.unionPatterns ?? [],\n ...unionPatterns ?? []\n ]\n };\n }\n const variable = this.createVariable();\n const relationPattern = createSparqlSelectGroup([\n createSparqlBasicGraphPattern([{ subject, predicate, object: variable }]),\n createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ]);\n return {\n unionPatterns: [ ...obj.unionPatterns ?? [], relationPattern ],\n patterns: [ ...obj.patterns ],\n selectionTriples: [ ...obj.selectionTriples ]\n };\n },\n { patterns: [], selectionTriples: [], unionPatterns: []}\n );\n\n return {\n patterns: [ ...response?.patterns ?? [] ],\n selectionTriples: [ ...response?.selectionTriples ?? [] ],\n unionPatterns: [ ...response?.unionPatterns ?? [] ]\n };\n }\n\n private createRelationsQueryDataForInverseRelation(\n subject: Variable,\n predicate: NamedNode,\n relationsValue: FindOperator<InverseRelationOperatorValue, 'inverseRelation'>\n ): RelationsQueryData {\n const variable = this.createVariable();\n const inverseRelationTriple = {\n subject,\n predicate: createSparqlInversePredicate([ predicate ]),\n object: variable\n };\n if (typeof relationsValue.value === 'object' && (relationsValue.value as InverseRelationOperatorValue).relations) {\n const subRelationsQueryData = this.createRelationsQueryData(\n variable,\n (relationsValue.value as InverseRelationOperatorValue).relations\n );\n const unionPatterns: Pattern[] = [];\n unionPatterns.push(createSparqlSelectGroup([\n createSparqlBasicGraphPattern([ inverseRelationTriple ]),\n createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ]));\n for (const subRelationUnionPattern of subRelationsQueryData.unionPatterns) {\n unionPatterns.push(\n createSparqlSelectGroup(\n [\n createSparqlBasicGraphPattern([ inverseRelationTriple ]),\n ...subRelationUnionPattern.type === 'group'\n ? subRelationUnionPattern.patterns\n : [ subRelationUnionPattern ]\n ]\n )\n );\n }\n return {\n patterns: [ ],\n selectionTriples: [ ...subRelationsQueryData.selectionTriples ],\n unionPatterns\n };\n }\n const unionPatterns: Pattern[] = [];\n unionPatterns.push(createSparqlSelectGroup([\n createSparqlBasicGraphPattern([ inverseRelationTriple ]),\n createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ]));\n return {\n patterns: [ ],\n selectionTriples: [ ],\n unionPatterns\n };\n }\n\n private createRelationsQueryDataForNestedRelation(\n subject: Variable,\n predicate: NamedNode,\n relationsValue: FindOptionsRelations\n ): RelationsQueryData {\n const variable = this.createVariable();\n const relationTriple = { subject, predicate, object: variable };\n const unionPatterns: Pattern[] = [];\n const subRelationsQueryData = this.createRelationsQueryData(variable, relationsValue);\n // subRelationsQueryData.patterns.push(createSparqlBasicGraphPattern([ relationTriple ]));\n // unionPatterns.push(...subRelationsQueryData.patterns);\n // unionPatterns.push(\n // createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n // );\n /* const relationPattern = subRelationsQueryData.patterns.length > 0\n ? createSparqlSelectGroup([\n ...patterns,\n ...subRelationsQueryData.patterns,\n ...subRelationsQueryData.unionPatterns\n ])\n : undefined; */\n /* We always need to include the first level of the property in the union patterns */\n unionPatterns.push(\n createSparqlSelectGroup([\n createSparqlBasicGraphPattern([ relationTriple ]),\n createSparqlGraphPattern(variable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])\n ])\n );\n for (const subRelationUnionPattern of subRelationsQueryData.unionPatterns) {\n unionPatterns.push(\n createSparqlSelectGroup(\n [\n createSparqlBasicGraphPattern([ relationTriple ]),\n ...subRelationUnionPattern.type === 'group' ? subRelationUnionPattern.patterns : [ subRelationUnionPattern ]\n ]\n )\n );\n }\n return {\n patterns: [ ],\n selectionTriples: [ ...subRelationsQueryData.selectionTriples ],\n unionPatterns\n };\n }\n\n private createVariable(): Variable {\n return DataFactory.variable(this.variableGenerator.getNext());\n }\n\n private createSelectPattern(select: FindOptionsSelect, subject: Variable): Triple[] {\n if (Array.isArray(select)) {\n return select.map(\n (selectPredicate): Triple => ({\n subject,\n predicate: DataFactory.namedNode(selectPredicate),\n object: this.createVariable()\n })\n );\n }\n return Object.entries(select).reduce((arr: Triple[], [ key, value ]): Triple[] => {\n const variable = this.createVariable();\n arr.push({ subject, predicate: DataFactory.namedNode(key), object: variable });\n if (typeof value === 'object') {\n arr = [ ...arr, ...this.createSelectPattern(value, variable) ];\n }\n return arr;\n }, []);\n }\n\n private createWherePatternsFromQueryData(\n initialPatterns: Pattern[],\n triples: Triple[],\n filters: OperationExpression[],\n orderTriples?: Triple[],\n orderFilters?: OperationExpression[],\n additionalPatterns?: Pattern[],\n serviceTriples?: Record<string, Triple[]>,\n binds?: Pattern[]\n ): Pattern[] {\n let patterns = initialPatterns;\n\n // Add binds at the beginning if they exist\n if (binds && binds.length > 0) {\n patterns = [ ...patterns, ...binds ];\n }\n\n if (triples.length > 0) {\n patterns.push(createSparqlBasicGraphPattern(triples));\n }\n if (orderTriples && orderTriples.length > 0) {\n const optionalPatterns: Pattern[] = [ createSparqlBasicGraphPattern(orderTriples) ];\n if (orderFilters && orderFilters.length > 0) {\n optionalPatterns.push(createFilterPatternFromFilters(orderFilters));\n }\n patterns.push(createSparqlOptional(optionalPatterns));\n }\n if (filters.length > 0) {\n patterns.push(createFilterPatternFromFilters(filters));\n }\n if (serviceTriples) {\n for (const [ service, sTriples ] of Object.entries(serviceTriples)) {\n patterns.unshift(createSparqlServicePattern(service, sTriples));\n }\n }\n if (additionalPatterns) {\n patterns = [ ...patterns, ...additionalPatterns ];\n }\n return patterns;\n }\n\n private createGroupPatternForPath(\n entityVariable: Variable,\n path: string\n ): {\n variable: Variable;\n patterns: Pattern[];\n } {\n const segments = path.split('~');\n let currentSubject = entityVariable;\n const patterns: Pattern[] = [];\n\n // Create a chain of patterns for each segment\n segments.forEach((predicate, index) => {\n const object = this.createVariable();\n patterns.push({\n type: 'bgp',\n triples: [\n {\n subject: currentSubject,\n predicate: DataFactory.namedNode(predicate),\n object\n }\n ]\n });\n currentSubject = object;\n });\n\n // Return the final variable (last object) and all patterns\n return {\n variable: currentSubject,\n patterns\n };\n }\n\n public async buildGroupByQuery(\n options: GroupByOptions\n ): Promise<{ query: SelectQuery; variableMapping: Record<string, string> }> {\n const span = PerformanceLogger.startSpan('QueryBuilder.buildGroupBy', { \n hasGroupBy: !!options.groupBy,\n hasDateRange: !!options.dateRange \n });\n try {\n const entityVariable = DataFactory.variable('entity');\n const queryData = this.buildEntitySelectPatternsFromOptions(entityVariable, {\n where: options.where || {}\n });\n\n // Add group variables and patterns with mapping\n const groupVariables: Variable[] = [];\n const groupPatterns: Pattern[] = [];\n const variableMapping: Record<string, string> = {};\n\n if (options.groupBy) {\n options.groupBy.forEach(path => {\n const { variable: groupVar, patterns } = this.createGroupPatternForPath(entityVariable, path);\n groupVariables.push(groupVar);\n variableMapping[groupVar.value] = path;\n groupPatterns.push(...patterns);\n });\n }\n\n // Add date handling if specified\n if (options.dateRange) {\n const dateVar = this.createVariable();\n variableMapping[dateVar.value] = 'date';\n\n const datePattern: Pattern = {\n type: 'bgp',\n triples: [\n {\n subject: entityVariable,\n predicate: DataFactory.namedNode(EngineConstants.prop.dateCreated),\n object: dateVar\n }\n ]\n };\n\n const dateFilter: FilterPattern = {\n type: 'filter',\n expression: {\n type: 'operation',\n operator: '&&',\n args: [\n {\n type: 'operation',\n operator: '>=',\n args: [ dateVar, DataFactory.literal(options.dateRange.start, XSD.dateTime) ]\n },\n {\n type: 'operation',\n operator: '<=',\n args: [ dateVar, DataFactory.literal(options.dateRange.end, XSD.dateTime) ]\n }\n ]\n }\n };\n\n groupPatterns.push(datePattern, dateFilter);\n\n if (options.dateGrouping) {\n const dateGroupVar = this.createVariable();\n groupVariables.push(dateGroupVar);\n variableMapping[dateGroupVar.value] = 'dateGroup';\n\n const dateGroupBind = this.createDateGroupingBind(dateVar, dateGroupVar, options.dateGrouping);\n groupPatterns.push(dateGroupBind);\n }\n }\n\n // Create count and entityIds variables\n const countVar = this.createVariable();\n const entityIdsVar = this.createVariable();\n variableMapping[countVar.value] = 'count';\n variableMapping[entityIdsVar.value] = 'entityIds';\n\n // Combine all patterns\n const combinedWhere = [ ...queryData.where, ...groupPatterns ];\n\n // Create select query with aggregations\n const selectQuery = createSparqlSelectQuery(\n [\n ...groupVariables,\n {\n expression: {\n type: 'aggregate',\n aggregation: 'count',\n distinct: true,\n expression: entityVariable\n },\n variable: countVar\n },\n {\n expression: {\n type: 'aggregate',\n aggregation: 'group_concat',\n distinct: true,\n separator: ' ',\n expression: entityVariable\n },\n variable: entityIdsVar\n }\n ],\n combinedWhere,\n [], // Orders\n groupVariables.length > 0 ? groupVariables : undefined, // Group by\n options.limit,\n options.offset\n );\n\n const result = { query: selectQuery, variableMapping };\n PerformanceLogger.endSpan(span, { \n groupCount: groupVariables.length,\n hasDateGrouping: !!options.dateGrouping \n });\n return result;\n } catch (error) {\n PerformanceLogger.endSpan(span, { error: true });\n throw error;\n }\n }\n\n // Helper function for date grouping\n private createDateGroupingBind(dateVar: Variable, dateGroupVar: Variable, grouping: 'month' | 'day'): Pattern {\n return {\n type: 'bind',\n expression: {\n type: 'operation',\n operator: 'CONCAT',\n args: [\n this.createYearExpression(dateVar),\n DataFactory.literal('-'),\n this.createMonthExpression(dateVar),\n ...this.createDayExpressionParts(dateVar, grouping)\n ]\n },\n variable: dateGroupVar\n };\n }\n\n private createYearExpression(dateVar: Variable): Expression {\n return {\n type: 'operation',\n operator: 'STR',\n args: [\n {\n type: 'operation',\n operator: 'YEAR',\n args: [ dateVar ]\n }\n ]\n };\n }\n\n private createMonthExpression(dateVar: Variable): Expression {\n return this.createPaddedDatePartExpression(dateVar, 'MONTH');\n }\n\n private createDayExpression(dateVar: Variable): Expression {\n return this.createPaddedDatePartExpression(dateVar, 'DAY');\n }\n\n private createPaddedDatePartExpression(dateVar: Variable, datePart: 'MONTH' | 'DAY'): Expression {\n const comparisonValue = DataFactory.literal('10', XSD.integer);\n\n return {\n type: 'operation',\n operator: 'IF',\n args: [\n this.createLessThanComparison(dateVar, datePart, comparisonValue),\n this.createPaddedStringExpression(dateVar, datePart),\n this.createUnpaddedStringExpression(dateVar, datePart)\n ]\n };\n }\n\n private createLessThanComparison(dateVar: Variable, datePart: 'MONTH' | 'DAY', comparisonValue: Term): Expression {\n return {\n type: 'operation',\n operator: '<',\n args: [\n {\n type: 'operation',\n operator: datePart,\n args: [ dateVar ]\n } as Expression,\n comparisonValue as Expression\n ]\n };\n }\n\n private createPaddedStringExpression(dateVar: Variable, datePart: 'MONTH' | 'DAY'): Expression {\n return {\n type: 'operation',\n operator: 'CONCAT',\n args: [ DataFactory.literal('0'), this.createUnpaddedStringExpression(dateVar, datePart) ]\n };\n }\n\n private createUnpaddedStringExpression(dateVar: Variable, datePart: 'MONTH' | 'DAY'): Expression {\n return {\n type: 'operation',\n operator: 'STR',\n args: [\n {\n type: 'operation',\n operator: datePart,\n args: [ dateVar ]\n }\n ]\n };\n }\n\n private createDayExpressionParts(dateVar: Variable, grouping: 'month' | 'day'): Expression[] {\n if (grouping === 'day') {\n return [ DataFactory.literal('-'), this.createDayExpression(dateVar) ];\n }\n return [ DataFactory.literal('') ];\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comake/skl-js-engine",
3
- "version": "1.3.16",
3
+ "version": "1.4.0",
4
4
  "description": "Standard Knowledge Language Javascript Engine",
5
5
  "keywords": [
6
6
  "skl",
package/src/index.ts CHANGED
@@ -26,6 +26,7 @@ export * from './storage/operator/LessThan';
26
26
  export * from './storage/operator/LessThanOrEqual';
27
27
  export * from './storage/operator/Not';
28
28
  export * from './storage/operator/OneOrMorePath';
29
+ export * from './storage/operator/Or';
29
30
  export * from './storage/operator/Sequence';
30
31
  export * from './storage/operator/SequencePath';
31
32
  export * from './storage/operator/ZeroOrMorePath';
@@ -4,6 +4,7 @@ export type FindOperatorType =
4
4
  | 'in'
5
5
  | 'not'
6
6
  | 'and'
7
+ | 'or'
7
8
  | 'equal'
8
9
  | 'exists'
9
10
  | 'gt'
@@ -76,7 +76,9 @@ export interface FindOptionsWhere {
76
76
  type?: TypeFindOptionsWhereField;
77
77
  id?: IdFindOptionsWhereField;
78
78
  binds?: BindPattern[];
79
- [k: string]: FindOptionsWhereField | BindPattern[] | undefined;
79
+ and?: FindOptionsWhere[];
80
+ or?: FindOptionsWhere[];
81
+ [k: string]: FindOptionsWhereField | BindPattern[] | FindOptionsWhere[] | undefined;
80
82
  }
81
83
 
82
84
  // Add these new types
@@ -0,0 +1,11 @@
1
+ import type { ValueObject } from 'jsonld';
2
+ import { FindOperator } from '../FindOperator';
3
+
4
+ // eslint-disable-next-line @typescript-eslint/naming-convention
5
+ export function Or<T extends number | Date | string | boolean | ValueObject>(value: T[]): FindOperator<T[], 'or'> {
6
+ return new FindOperator({
7
+ operator: 'or',
8
+ value
9
+ });
10
+ }
11
+
@@ -398,7 +398,7 @@ export class SparqlQueryBuilder {
398
398
  private createWhereQueryDataForField(
399
399
  subject: Variable,
400
400
  field: string,
401
- value: IdFindOptionsWhereField | TypeFindOptionsWhereField | FindOptionsWhereField
401
+ value: IdFindOptionsWhereField | TypeFindOptionsWhereField | FindOptionsWhereField | FindOptionsWhere[]
402
402
  ): NonGraphWhereQueryData {
403
403
  if (field === 'id') {
404
404
  return this.createWhereQueryDataForIdValue(subject, value as FindOperator<any, any>);
@@ -406,8 +406,80 @@ export class SparqlQueryBuilder {
406
406
  if (field === 'type') {
407
407
  return this.createWhereQueryDataForType(subject, value as FindOperator<any, any>);
408
408
  }
409
+ if (field === 'and') {
410
+ return this.createWhereQueryDataForAndClause(subject, value as FindOptionsWhere[]);
411
+ }
412
+ if (field === 'or') {
413
+ return this.createWhereQueryDataForOrClause(subject, value as FindOptionsWhere[]);
414
+ }
409
415
  const predicate = DataFactory.namedNode(field);
410
- return this.createWhereQueryDataFromKeyValue(subject, predicate, value);
416
+ return this.createWhereQueryDataFromKeyValue(subject, predicate, value as FindOptionsWhereField);
417
+ }
418
+
419
+ private createWhereQueryDataForAndClause(
420
+ subject: Variable,
421
+ whereClauses: FindOptionsWhere[]
422
+ ): NonGraphWhereQueryData {
423
+ // Combine all nested where conditions - all must match
424
+ return whereClauses.reduce(
425
+ (acc: NonGraphWhereQueryData, nestedWhere): NonGraphWhereQueryData => {
426
+ const nestedData = this.createWhereQueryData(subject, nestedWhere);
427
+ return {
428
+ values: [ ...acc.values, ...nestedData.values ],
429
+ triples: [ ...acc.triples, ...nestedData.triples ],
430
+ filters: [ ...acc.filters, ...nestedData.filters ],
431
+ patterns: [ ...acc.patterns ?? [], ...nestedData.patterns ?? [] ],
432
+ binds: [ ...acc.binds ?? [], ...nestedData.binds ?? [] ]
433
+ };
434
+ },
435
+ { values: [], triples: [], filters: [], patterns: [], binds: [] }
436
+ );
437
+ }
438
+
439
+ private createWhereQueryDataForOrClause(
440
+ subject: Variable,
441
+ whereClauses: FindOptionsWhere[]
442
+ ): NonGraphWhereQueryData {
443
+ // Create UNION patterns - any condition can match
444
+ const unionPatterns = whereClauses.map((nestedWhere): Pattern => {
445
+ const nestedData = this.createWhereQueryData(subject, nestedWhere);
446
+ const patterns: Pattern[] = [];
447
+
448
+ // Add values patterns
449
+ if (nestedData.values.length > 0) {
450
+ patterns.push(...nestedData.values);
451
+ }
452
+
453
+ // Add triples as basic graph pattern
454
+ if (nestedData.triples.length > 0) {
455
+ patterns.push(createSparqlBasicGraphPattern(nestedData.triples));
456
+ }
457
+
458
+ // Add nested patterns (for deeply nested and/or)
459
+ if (nestedData.patterns && nestedData.patterns.length > 0) {
460
+ patterns.push(...nestedData.patterns);
461
+ }
462
+
463
+ // Add filters
464
+ if (nestedData.filters.length > 0) {
465
+ patterns.push(createFilterPatternFromFilters(nestedData.filters));
466
+ }
467
+
468
+ // Add binds
469
+ if (nestedData.binds && nestedData.binds.length > 0) {
470
+ patterns.push(...nestedData.binds);
471
+ }
472
+
473
+ return createSparqlSelectGroup(patterns);
474
+ });
475
+
476
+ return {
477
+ values: [],
478
+ triples: [],
479
+ filters: [],
480
+ patterns: [ createSparqlUnion(unionPatterns) ],
481
+ binds: []
482
+ };
411
483
  }
412
484
 
413
485
  private createWhereQueryDataForIdValue(term: Variable, value: IdFindOptionsWhereField): NonGraphWhereQueryData {