@undefineds.co/drizzle-solid 0.2.6 → 0.2.8

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.
Files changed (172) hide show
  1. package/dist/core/ast-to-sparql.d.ts +1 -6
  2. package/dist/core/ast-to-sparql.d.ts.map +1 -1
  3. package/dist/core/ast-to-sparql.js +3 -22
  4. package/dist/core/ast-to-sparql.js.map +1 -1
  5. package/dist/core/execution/ldp-executor.d.ts +8 -7
  6. package/dist/core/execution/ldp-executor.d.ts.map +1 -1
  7. package/dist/core/execution/ldp-executor.js +165 -136
  8. package/dist/core/execution/ldp-executor.js.map +1 -1
  9. package/dist/core/execution/ldp-strategy.js +1 -1
  10. package/dist/core/execution/ldp-strategy.js.map +1 -1
  11. package/dist/core/execution/pod-executor.d.ts.map +1 -1
  12. package/dist/core/execution/pod-executor.js +9 -0
  13. package/dist/core/execution/pod-executor.js.map +1 -1
  14. package/dist/core/execution/sparql-strategy.d.ts +7 -26
  15. package/dist/core/execution/sparql-strategy.d.ts.map +1 -1
  16. package/dist/core/execution/sparql-strategy.js +65 -111
  17. package/dist/core/execution/sparql-strategy.js.map +1 -1
  18. package/dist/core/execution/types.d.ts +8 -8
  19. package/dist/core/execution/types.d.ts.map +1 -1
  20. package/dist/core/federated/executor.d.ts +3 -0
  21. package/dist/core/federated/executor.d.ts.map +1 -1
  22. package/dist/core/federated/executor.js +13 -8
  23. package/dist/core/federated/executor.js.map +1 -1
  24. package/dist/core/pod-database.d.ts +0 -4
  25. package/dist/core/pod-database.d.ts.map +1 -1
  26. package/dist/core/pod-database.js +10 -32
  27. package/dist/core/pod-database.js.map +1 -1
  28. package/dist/core/pod-dialect.d.ts +0 -24
  29. package/dist/core/pod-dialect.d.ts.map +1 -1
  30. package/dist/core/pod-dialect.js +0 -182
  31. package/dist/core/pod-dialect.js.map +1 -1
  32. package/dist/core/pod-session.d.ts +6 -2
  33. package/dist/core/pod-session.d.ts.map +1 -1
  34. package/dist/core/pod-session.js +8 -2
  35. package/dist/core/pod-session.js.map +1 -1
  36. package/dist/core/query-builders/select-query-builder.d.ts +7 -0
  37. package/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
  38. package/dist/core/query-builders/select-query-builder.js +56 -14
  39. package/dist/core/query-builders/select-query-builder.js.map +1 -1
  40. package/dist/core/query-conditions.d.ts.map +1 -1
  41. package/dist/core/query-conditions.js.map +1 -1
  42. package/dist/core/resource-resolver/base-resolver.d.ts +74 -3
  43. package/dist/core/resource-resolver/base-resolver.d.ts.map +1 -1
  44. package/dist/core/resource-resolver/base-resolver.js +221 -0
  45. package/dist/core/resource-resolver/base-resolver.js.map +1 -1
  46. package/dist/core/resource-resolver/document-resolver.d.ts +19 -4
  47. package/dist/core/resource-resolver/document-resolver.d.ts.map +1 -1
  48. package/dist/core/resource-resolver/document-resolver.js +72 -34
  49. package/dist/core/resource-resolver/document-resolver.js.map +1 -1
  50. package/dist/core/resource-resolver/fragment-resolver.d.ts +17 -3
  51. package/dist/core/resource-resolver/fragment-resolver.d.ts.map +1 -1
  52. package/dist/core/resource-resolver/fragment-resolver.js +28 -16
  53. package/dist/core/resource-resolver/fragment-resolver.js.map +1 -1
  54. package/dist/core/resource-resolver/types.d.ts +1 -1
  55. package/dist/core/resource-resolver/types.d.ts.map +1 -1
  56. package/dist/core/schema/pod-table.d.ts +6 -0
  57. package/dist/core/schema/pod-table.d.ts.map +1 -1
  58. package/dist/core/schema/pod-table.js +18 -9
  59. package/dist/core/schema/pod-table.js.map +1 -1
  60. package/dist/core/sparql/builder/expression-builder.d.ts +1 -0
  61. package/dist/core/sparql/builder/expression-builder.d.ts.map +1 -1
  62. package/dist/core/sparql/builder/expression-builder.js +50 -7
  63. package/dist/core/sparql/builder/expression-builder.js.map +1 -1
  64. package/dist/core/subject/resolver.d.ts +19 -0
  65. package/dist/core/subject/resolver.d.ts.map +1 -1
  66. package/dist/core/subject/resolver.js +77 -21
  67. package/dist/core/subject/resolver.js.map +1 -1
  68. package/dist/core/subject/types.d.ts +8 -1
  69. package/dist/core/subject/types.d.ts.map +1 -1
  70. package/dist/core/triple/builder.d.ts.map +1 -1
  71. package/dist/core/triple/builder.js +38 -1
  72. package/dist/core/triple/builder.js.map +1 -1
  73. package/dist/core/triple/handlers/inverse.d.ts +6 -2
  74. package/dist/core/triple/handlers/inverse.d.ts.map +1 -1
  75. package/dist/core/triple/handlers/inverse.js +37 -16
  76. package/dist/core/triple/handlers/inverse.js.map +1 -1
  77. package/dist/core/uri/resolver.d.ts +66 -2
  78. package/dist/core/uri/resolver.d.ts.map +1 -1
  79. package/dist/core/uri/resolver.js +212 -80
  80. package/dist/core/uri/resolver.js.map +1 -1
  81. package/dist/core/uri/types.d.ts +8 -1
  82. package/dist/core/uri/types.d.ts.map +1 -1
  83. package/dist/esm/core/ast-to-sparql.d.ts +1 -6
  84. package/dist/esm/core/ast-to-sparql.d.ts.map +1 -1
  85. package/dist/esm/core/ast-to-sparql.js +3 -22
  86. package/dist/esm/core/ast-to-sparql.js.map +1 -1
  87. package/dist/esm/core/execution/ldp-executor.d.ts +8 -7
  88. package/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
  89. package/dist/esm/core/execution/ldp-executor.js +165 -136
  90. package/dist/esm/core/execution/ldp-executor.js.map +1 -1
  91. package/dist/esm/core/execution/ldp-strategy.js +1 -1
  92. package/dist/esm/core/execution/ldp-strategy.js.map +1 -1
  93. package/dist/esm/core/execution/pod-executor.d.ts.map +1 -1
  94. package/dist/esm/core/execution/pod-executor.js +9 -0
  95. package/dist/esm/core/execution/pod-executor.js.map +1 -1
  96. package/dist/esm/core/execution/sparql-strategy.d.ts +7 -26
  97. package/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
  98. package/dist/esm/core/execution/sparql-strategy.js +65 -111
  99. package/dist/esm/core/execution/sparql-strategy.js.map +1 -1
  100. package/dist/esm/core/execution/types.d.ts +8 -8
  101. package/dist/esm/core/execution/types.d.ts.map +1 -1
  102. package/dist/esm/core/federated/executor.d.ts +3 -0
  103. package/dist/esm/core/federated/executor.d.ts.map +1 -1
  104. package/dist/esm/core/federated/executor.js +13 -8
  105. package/dist/esm/core/federated/executor.js.map +1 -1
  106. package/dist/esm/core/pod-database.d.ts +0 -4
  107. package/dist/esm/core/pod-database.d.ts.map +1 -1
  108. package/dist/esm/core/pod-database.js +10 -32
  109. package/dist/esm/core/pod-database.js.map +1 -1
  110. package/dist/esm/core/pod-dialect.d.ts +0 -24
  111. package/dist/esm/core/pod-dialect.d.ts.map +1 -1
  112. package/dist/esm/core/pod-dialect.js +0 -182
  113. package/dist/esm/core/pod-dialect.js.map +1 -1
  114. package/dist/esm/core/pod-session.d.ts +6 -2
  115. package/dist/esm/core/pod-session.d.ts.map +1 -1
  116. package/dist/esm/core/pod-session.js +8 -2
  117. package/dist/esm/core/pod-session.js.map +1 -1
  118. package/dist/esm/core/query-builders/select-query-builder.d.ts +7 -0
  119. package/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
  120. package/dist/esm/core/query-builders/select-query-builder.js +56 -14
  121. package/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
  122. package/dist/esm/core/query-conditions.d.ts.map +1 -1
  123. package/dist/esm/core/query-conditions.js.map +1 -1
  124. package/dist/esm/core/resource-resolver/base-resolver.d.ts +74 -3
  125. package/dist/esm/core/resource-resolver/base-resolver.d.ts.map +1 -1
  126. package/dist/esm/core/resource-resolver/base-resolver.js +221 -0
  127. package/dist/esm/core/resource-resolver/base-resolver.js.map +1 -1
  128. package/dist/esm/core/resource-resolver/document-resolver.d.ts +19 -4
  129. package/dist/esm/core/resource-resolver/document-resolver.d.ts.map +1 -1
  130. package/dist/esm/core/resource-resolver/document-resolver.js +72 -34
  131. package/dist/esm/core/resource-resolver/document-resolver.js.map +1 -1
  132. package/dist/esm/core/resource-resolver/fragment-resolver.d.ts +17 -3
  133. package/dist/esm/core/resource-resolver/fragment-resolver.d.ts.map +1 -1
  134. package/dist/esm/core/resource-resolver/fragment-resolver.js +28 -16
  135. package/dist/esm/core/resource-resolver/fragment-resolver.js.map +1 -1
  136. package/dist/esm/core/resource-resolver/types.d.ts +1 -1
  137. package/dist/esm/core/resource-resolver/types.d.ts.map +1 -1
  138. package/dist/esm/core/schema/pod-table.d.ts +6 -0
  139. package/dist/esm/core/schema/pod-table.d.ts.map +1 -1
  140. package/dist/esm/core/schema/pod-table.js +18 -9
  141. package/dist/esm/core/schema/pod-table.js.map +1 -1
  142. package/dist/esm/core/sparql/builder/expression-builder.d.ts +1 -0
  143. package/dist/esm/core/sparql/builder/expression-builder.d.ts.map +1 -1
  144. package/dist/esm/core/sparql/builder/expression-builder.js +50 -7
  145. package/dist/esm/core/sparql/builder/expression-builder.js.map +1 -1
  146. package/dist/esm/core/subject/resolver.d.ts +19 -0
  147. package/dist/esm/core/subject/resolver.d.ts.map +1 -1
  148. package/dist/esm/core/subject/resolver.js +77 -21
  149. package/dist/esm/core/subject/resolver.js.map +1 -1
  150. package/dist/esm/core/subject/types.d.ts +8 -1
  151. package/dist/esm/core/subject/types.d.ts.map +1 -1
  152. package/dist/esm/core/triple/builder.d.ts.map +1 -1
  153. package/dist/esm/core/triple/builder.js +38 -1
  154. package/dist/esm/core/triple/builder.js.map +1 -1
  155. package/dist/esm/core/triple/handlers/inverse.d.ts +6 -2
  156. package/dist/esm/core/triple/handlers/inverse.d.ts.map +1 -1
  157. package/dist/esm/core/triple/handlers/inverse.js +37 -16
  158. package/dist/esm/core/triple/handlers/inverse.js.map +1 -1
  159. package/dist/esm/core/uri/resolver.d.ts +66 -2
  160. package/dist/esm/core/uri/resolver.d.ts.map +1 -1
  161. package/dist/esm/core/uri/resolver.js +212 -80
  162. package/dist/esm/core/uri/resolver.js.map +1 -1
  163. package/dist/esm/core/uri/types.d.ts +8 -1
  164. package/dist/esm/core/uri/types.d.ts.map +1 -1
  165. package/dist/esm/index.d.ts +1 -0
  166. package/dist/esm/index.d.ts.map +1 -1
  167. package/dist/esm/index.js.map +1 -1
  168. package/dist/index.d.ts +1 -0
  169. package/dist/index.d.ts.map +1 -1
  170. package/dist/index.js.map +1 -1
  171. package/package.json +5 -1
  172. package/CHANGELOG-DRAFT.md +0 -444
@@ -51,12 +51,7 @@ export declare class ASTToSPARQLConverter {
51
51
  getPredicateForColumnPublic(column: any, table: PodTable): string;
52
52
  formatLiteralValue(value: any, column?: any): string | string[];
53
53
  generateSubjectUri(record: any, table: PodTable): string;
54
- /**
55
- * @deprecated Use parseDrizzleAST() + convertSelect() with table context instead
56
- * Direct SQL conversion without table context is limited and may not work correctly
57
- */
58
- convert(sql: SQL): SPARQLQuery;
59
- parseDrizzleAST(sql: SQL, table: PodTable): any;
54
+ parseDrizzleAST(sql: SQL, _table?: PodTable): any;
60
55
  private parseWhereClause;
61
56
  }
62
57
  //# sourceMappingURL=ast-to-sparql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast-to-sparql.d.ts","sourceRoot":"","sources":["../../src/core/ast-to-sparql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast-to-sparql.d.ts","sourceRoot":"","sources":["../../src/core/ast-to-sparql.ts"],"names":[],"mappings":"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"}
@@ -60,10 +60,6 @@ class ASTToSPARQLConverter {
60
60
  }
61
61
  addPrefix(prefix, uri) {
62
62
  this.prefixes[prefix] = uri;
63
- // Re-instantiate builders to propagate prefixes if necessary,
64
- // or make builders reference this.prefixes object (passed by reference).
65
- // Since we passed object ref in constructor, it should update automatically
66
- // if we mutate the object.
67
63
  }
68
64
  // Legacy / Helper methods exposed for other modules
69
65
  getPredicateForColumnPublic(column, table) {
@@ -75,23 +71,8 @@ class ASTToSPARQLConverter {
75
71
  generateSubjectUri(record, table) {
76
72
  return (0, helpers_1.generateSubjectUri)(record, table, this.uriResolver);
77
73
  }
78
- /**
79
- * @deprecated Use parseDrizzleAST() + convertSelect() with table context instead
80
- * Direct SQL conversion without table context is limited and may not work correctly
81
- */
82
- convert(sql) {
83
- const sqlString = sql.queryChunks.join('');
84
- if (sqlString.toLowerCase().includes('select')) {
85
- return this.convertSelect({
86
- select: undefined,
87
- columns: '*',
88
- where: this.parseWhereClause(sql)
89
- }, {});
90
- }
91
- throw new Error(`Direct SQL conversion without table context is limited: ${sqlString}`);
92
- }
93
- parseDrizzleAST(sql, table) {
94
- // Basic placeholder
74
+ parseDrizzleAST(sql, _table) {
75
+ void _table;
95
76
  return {
96
77
  type: 'select',
97
78
  columns: '*',
@@ -99,7 +80,7 @@ class ASTToSPARQLConverter {
99
80
  };
100
81
  }
101
82
  parseWhereClause(sql) {
102
- // Placeholder for AST parsing
83
+ void sql;
103
84
  return {};
104
85
  }
105
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ast-to-sparql.js","sourceRoot":"","sources":["../../src/core/ast-to-sparql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast-to-sparql.js","sourceRoot":"","sources":["../../src/core/ast-to-sparql.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,6 @@ export declare class LdpExecutor {
11
11
  private fetchFn;
12
12
  private tripleBuilder;
13
13
  private uriResolver;
14
- private n3PatchCounter;
15
14
  constructor(sparqlExecutor: ComunicaSPARQLExecutor, fetchFn: typeof fetch, uriResolver: UriResolver);
16
15
  /**
17
16
  * 设置表注册表(用于 URI 引用自动补全)
@@ -35,7 +34,14 @@ export declare class LdpExecutor {
35
34
  * 执行 DELETE 操作
36
35
  */
37
36
  executeDelete(subjects: string[], table: PodTable, resourceUrl: string): Promise<any[]>;
38
- private resourceExists;
37
+ /**
38
+ * Execute a function with exponential backoff retry on server errors
39
+ */
40
+ private retryWithBackoff;
41
+ /**
42
+ * Build error from failed response
43
+ */
44
+ private buildPatchError;
39
45
  private buildUpdatePatchPayload;
40
46
  /**
41
47
  * 执行更新操作
@@ -53,11 +59,6 @@ export declare class LdpExecutor {
53
59
  * 内部 N3 Patch 实现(作为 SPARQL UPDATE 的回退)
54
60
  */
55
61
  private executeN3PatchInternal;
56
- /**
57
- * 尝试使用 SPARQL UPDATE 进行 Patch
58
- * 保留此方法供将来 SPARQL endpoint 增强使用
59
- */
60
- private trySparqlPatch;
61
62
  private formatTerm;
62
63
  private fetchRecursiveTriplesToDelete;
63
64
  private fetchExistingObjects;
@@ -1 +1 @@
1
- {"version":3,"file":"ldp-executor.d.ts","sourceRoot":"","sources":["../../../src/core/execution/ldp-executor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,cAAc,CAAK;gBAEf,cAAc,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW;IAOnG;;;;OAIG;IACH,gBAAgB,CACd,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EACtC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAClC,IAAI;IAIP;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACG,aAAa,CACjB,IAAI,EAAE,GAAG,EAAE,EACX,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,EAAE,CAAC;IA8IjB;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,EAAE,CAAC;IA2FjB;;OAEG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,EAAE,CAAC;YAmCH,cAAc;YAWd,uBAAuB;IAqFrC;;;;;;OAMG;YACW,cAAc;IAwE5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;OAEG;YACW,sBAAsB;IA8DpC;;;OAGG;YACW,cAAc;IAa5B,OAAO,CAAC,UAAU;YA2BJ,6BAA6B;YA+C7B,oBAAoB;YAgBpB,oBAAoB;CAUnC"}
1
+ {"version":3,"file":"ldp-executor.d.ts","sourceRoot":"","sources":["../../../src/core/execution/ldp-executor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,WAAW,CAAc;gBAErB,cAAc,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW;IAOnG;;;;OAIG;IACH,gBAAgB,CACd,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EACtC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAClC,IAAI;IAIP;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACG,aAAa,CACjB,IAAI,EAAE,GAAG,EAAE,EACX,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,EAAE,CAAC;IAsMjB;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,EAAE,CAAC;IA2FjB;;OAEG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,GAAG,EAAE,CAAC;IAmCjB;;OAEG;YACW,gBAAgB;IAqC9B;;OAEG;YACW,eAAe;YAaf,uBAAuB;IAqFrC;;;;;;OAMG;YACW,cAAc;IAwD5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;OAEG;YACW,sBAAsB;IAoDpC,OAAO,CAAC,UAAU;YA2BJ,6BAA6B;YA+C7B,oBAAoB;YAgBpB,oBAAoB;CAUnC"}
@@ -9,8 +9,6 @@ exports.LdpExecutor = void 0;
9
9
  const builder_1 = require("../triple/builder");
10
10
  class LdpExecutor {
11
11
  constructor(sparqlExecutor, fetchFn, uriResolver) {
12
- // 用于跟踪 N3 Patch 请求数
13
- this.n3PatchCounter = 0;
14
12
  this.sparqlExecutor = sparqlExecutor;
15
13
  this.fetchFn = fetchFn;
16
14
  this.uriResolver = uriResolver;
@@ -34,11 +32,22 @@ class LdpExecutor {
34
32
  * 执行 INSERT 操作
35
33
  */
36
34
  async executeInsert(rows, table, resourceUrl) {
37
- const deleteTriples = [];
38
35
  const insertTriples = [];
36
+ // DEBUG: Log insert operation details
37
+ console.log('[DEBUG executeInsert]', {
38
+ tableName: table.config?.name,
39
+ resourceUrl,
40
+ rowCount: rows.length,
41
+ template: table.config?.subjectTemplate,
42
+ base: table.config?.base,
43
+ });
39
44
  rows.forEach((row, idx) => {
45
+ // DEBUG: Log row data
46
+ console.log(`[DEBUG executeInsert] Row ${idx}:`, JSON.stringify(row));
40
47
  // 使用 SubjectResolver 生成 URI
41
48
  const subject = this.uriResolver.resolveSubject(table, row, idx);
49
+ // DEBUG: Log generated subject URI
50
+ console.log(`[DEBUG executeInsert] Generated subject URI: ${subject}`);
42
51
  // 1. rdf:type
43
52
  const typeTriple = this.tripleBuilder.buildTypeTriple(subject, table.config.type);
44
53
  insertTriples.push(...this.tripleBuilder.toN3Strings([typeTriple]));
@@ -62,12 +71,17 @@ class LdpExecutor {
62
71
  });
63
72
  });
64
73
  if (insertTriples.length === 0) {
74
+ console.log('[DEBUG executeInsert] No triples to insert, returning empty');
65
75
  return [];
66
76
  }
67
77
  const mode = this.uriResolver.getResourceMode(table);
68
- // Document Mode: 每条记录单独写入各自的文件
78
+ console.log(`[DEBUG executeInsert] Mode for table ${table.config?.name}: ${mode}`);
79
+ // Document Mode: 每条记录写入各自的文件
80
+ // 但如果多条记录共享同一个资源 URL(如同一天的 messages.ttl),则合并写入
69
81
  if (mode === 'document') {
70
- const results = [];
82
+ console.log('[DEBUG executeInsert] Entering Document mode branch');
83
+ // 按 resourceUrl 分组收集三元组
84
+ const resourceTriples = new Map();
71
85
  for (let idx = 0; idx < rows.length; idx++) {
72
86
  const row = rows[idx];
73
87
  const subject = this.uriResolver.resolveSubject(table, row, idx);
@@ -94,15 +108,43 @@ class LdpExecutor {
94
108
  });
95
109
  if (recordTriples.length === 0)
96
110
  continue;
97
- const body = recordTriples.join('\n');
98
- const response = await this.fetchFn(docResourceUrl, {
99
- method: 'PUT',
100
- headers: { 'Content-Type': 'text/turtle' },
101
- body
102
- });
111
+ // resourceUrl 分组
112
+ const existing = resourceTriples.get(docResourceUrl) || [];
113
+ existing.push(...recordTriples);
114
+ resourceTriples.set(docResourceUrl, existing);
115
+ }
116
+ // 对每个唯一的 resourceUrl 执行一次写入
117
+ const results = [];
118
+ for (const [docResourceUrl, triples] of resourceTriples.entries()) {
119
+ // 检查资源是否已存在,如果存在则使用 PATCH 追加
120
+ const headRes = await this.fetchFn(docResourceUrl, { method: 'HEAD' });
121
+ const resourceExists = headRes.ok || headRes.status === 405;
122
+ let response;
123
+ if (resourceExists) {
124
+ // 资源已存在,使用 SPARQL UPDATE 追加三元组
125
+ const sparql = `INSERT DATA {\n${triples.join('\n')}\n}`;
126
+ console.log(`[DEBUG executeInsert] Document mode PATCH to: ${docResourceUrl}`);
127
+ console.log(`[DEBUG executeInsert] Triples being added:\n${triples.join('\n')}`);
128
+ response = await this.fetchFn(docResourceUrl, {
129
+ method: 'PATCH',
130
+ headers: { 'Content-Type': 'application/sparql-update' },
131
+ body: sparql
132
+ });
133
+ }
134
+ else {
135
+ // 资源不存在,使用 PUT 创建
136
+ const body = triples.join('\n');
137
+ console.log(`[DEBUG executeInsert] Document mode PUT to: ${docResourceUrl}`);
138
+ console.log(`[DEBUG executeInsert] Triples being stored:\n${body}`);
139
+ response = await this.fetchFn(docResourceUrl, {
140
+ method: 'PUT',
141
+ headers: { 'Content-Type': 'text/turtle' },
142
+ body
143
+ });
144
+ }
103
145
  if (![200, 201, 202, 204, 205].includes(response.status)) {
104
146
  const text = await response.text().catch(() => '');
105
- throw new Error(`PUT failed for ${docResourceUrl}: ${response.status} ${response.statusText}${text ? ` - ${text}` : ''}`);
147
+ throw new Error(`Write failed for ${docResourceUrl}: ${response.status} ${response.statusText}${text ? ` - ${text}` : ''}`);
106
148
  }
107
149
  await this.sparqlExecutor.invalidateHttpCache(docResourceUrl);
108
150
  const lastSlash = docResourceUrl.lastIndexOf('/');
@@ -110,7 +152,9 @@ class LdpExecutor {
110
152
  const containerUrl = docResourceUrl.slice(0, lastSlash + 1);
111
153
  await this.sparqlExecutor.invalidateHttpCache(containerUrl);
112
154
  }
113
- results.push({ success: true, source: docResourceUrl, status: response.status, via: 'put' });
155
+ // Also invalidate global cache to ensure SPARQL endpoint queries see the new data
156
+ await this.sparqlExecutor.invalidateHttpCache(undefined).catch(() => undefined);
157
+ results.push({ success: true, source: docResourceUrl, status: response.status, via: resourceExists ? 'patch' : 'put' });
114
158
  }
115
159
  return results;
116
160
  }
@@ -157,6 +201,8 @@ class LdpExecutor {
157
201
  const containerUrl = resourceUrl.slice(0, lastSlash + 1);
158
202
  await this.sparqlExecutor.invalidateHttpCache(containerUrl);
159
203
  }
204
+ // Also invalidate global cache to ensure SPARQL endpoint queries see the new data
205
+ await this.sparqlExecutor.invalidateHttpCache(undefined).catch(() => undefined);
160
206
  return [{ success: true, source: resourceUrl, status: response.status, via: 'sparql-update' }];
161
207
  }
162
208
  /**
@@ -183,7 +229,7 @@ class LdpExecutor {
183
229
  // 这里需要特殊的逻辑来处理"更新"语义:先删旧的,再插新的
184
230
  // 额外的内联对象清理逻辑
185
231
  const entries = Object.entries(data).filter(([_, value]) => value !== undefined);
186
- for (const [key, rawValue] of entries) {
232
+ for (const [key] of entries) {
187
233
  // 跳过系统字段
188
234
  if (key === '@id' || key === 'subject')
189
235
  continue;
@@ -263,18 +309,47 @@ class LdpExecutor {
263
309
  return results;
264
310
  }
265
311
  // ================= Private Helpers =================
266
- async resourceExists(resourceUrl) {
267
- try {
268
- const response = await this.fetchFn(resourceUrl, { method: 'HEAD' });
269
- if (response.ok || response.status === 405)
270
- return true;
271
- if (response.status === 404)
272
- return false;
273
- return response.ok;
274
- }
275
- catch {
276
- return false;
312
+ /**
313
+ * Execute a function with exponential backoff retry on server errors
314
+ */
315
+ async retryWithBackoff(fn, maxRetries = 3) {
316
+ let response = null;
317
+ let lastError;
318
+ for (let i = 0; i < maxRetries; i++) {
319
+ try {
320
+ const outcome = await fn();
321
+ response = outcome.response;
322
+ if (outcome.result !== undefined) {
323
+ return { response, result: outcome.result };
324
+ }
325
+ if (outcome.fallback) {
326
+ const fallbackResult = await outcome.fallback();
327
+ return { response, result: fallbackResult };
328
+ }
329
+ if (!outcome.shouldRetry) {
330
+ break;
331
+ }
332
+ await new Promise(r => setTimeout(r, 1000 * (i + 1)));
333
+ }
334
+ catch (e) {
335
+ lastError = e;
336
+ if (i < maxRetries - 1) {
337
+ await new Promise(r => setTimeout(r, 1000 * (i + 1)));
338
+ }
339
+ }
277
340
  }
341
+ return { response, lastError };
342
+ }
343
+ /**
344
+ * Build error from failed response
345
+ */
346
+ async buildPatchError(response, lastError, errorPrefix) {
347
+ const text = response ? await response.text().catch(() => '') : '';
348
+ const status = response ? response.status : 'Network Error';
349
+ const statusText = response ? response.statusText : (lastError instanceof Error ? lastError.message : String(lastError));
350
+ const error = new Error(`${errorPrefix} failed: ${status} ${statusText}${text ? ` - ${text}` : ''}`);
351
+ error.status = status;
352
+ return error;
278
353
  }
279
354
  async buildUpdatePatchPayload(subject, table, data, resourceUrl) {
280
355
  const deleteTriples = [];
@@ -355,59 +430,43 @@ class LdpExecutor {
355
430
  if (deleteTriples.length === 0 && insertTriples.length === 0 && deleteWherePatterns.length === 0) {
356
431
  return [];
357
432
  }
358
- this.n3PatchCounter++;
359
- // 构建 SPARQL UPDATE 查询
360
433
  const sparqlUpdate = this.buildSparqlUpdate(deleteTriples, insertTriples, deleteWherePatterns);
361
- let response;
362
- let lastError;
363
- // 首先尝试 SPARQL UPDATE
364
- for (let i = 0; i < 3; i++) {
365
- try {
366
- response = await this.fetchFn(resourceUrl, {
367
- method: 'PATCH',
368
- headers: {
369
- 'Content-Type': 'application/sparql-update'
370
- },
371
- body: sparqlUpdate
372
- });
373
- if (response.ok) {
374
- await this.sparqlExecutor.invalidateHttpCache(resourceUrl);
375
- return [{ success: true, source: resourceUrl, status: response.status, via: 'sparql-update' }];
376
- }
377
- // 如果 SPARQL UPDATE 不被支持 (415/405),尝试 N3 Patch
378
- // 如果 SPARQL UPDATE 不被支持 (415/405),尝试 N3 Patch
379
- if (response.status === 415 || response.status === 405) {
380
- const fallbackDeletes = deleteWherePatterns.length > 0
381
- ? [...deleteTriples, ...deleteWherePatterns]
382
- : deleteTriples;
383
- const fallbackWhere = deleteWherePatterns.length > 0
384
- ? deleteWherePatterns
385
- : wherePatterns;
386
- return await this.executeN3PatchInternal(resourceUrl, fallbackDeletes, insertTriples, fallbackWhere);
387
- }
388
- // 服务器错误,重试
389
- if (response.status >= 500 || response.status === 409) {
390
- await new Promise(r => setTimeout(r, 1000 * (i + 1)));
391
- continue;
392
- }
393
- break;
434
+ const { response, result, lastError } = await this.retryWithBackoff(async () => {
435
+ const res = await this.fetchFn(resourceUrl, {
436
+ method: 'PATCH',
437
+ headers: { 'Content-Type': 'application/sparql-update' },
438
+ body: sparqlUpdate
439
+ });
440
+ if (res.ok) {
441
+ await this.sparqlExecutor.invalidateHttpCache(resourceUrl);
442
+ return {
443
+ response: res,
444
+ result: [{ success: true, source: resourceUrl, status: res.status, via: 'sparql-update' }],
445
+ shouldRetry: false
446
+ };
394
447
  }
395
- catch (e) {
396
- lastError = e;
397
- if (i < 2)
398
- await new Promise(r => setTimeout(r, 1000 * (i + 1)));
448
+ // SPARQL UPDATE not supported, fallback to N3 Patch
449
+ if (res.status === 415 || res.status === 405) {
450
+ const fallbackDeletes = deleteWherePatterns.length > 0
451
+ ? [...deleteTriples, ...deleteWherePatterns]
452
+ : deleteTriples;
453
+ const fallbackWhere = deleteWherePatterns.length > 0
454
+ ? deleteWherePatterns
455
+ : wherePatterns;
456
+ return {
457
+ response: res,
458
+ shouldRetry: false,
459
+ fallback: () => this.executeN3PatchInternal(resourceUrl, fallbackDeletes, insertTriples, fallbackWhere)
460
+ };
399
461
  }
462
+ // Server error, retry
463
+ const shouldRetry = res.status >= 500 || res.status === 409;
464
+ return { response: res, shouldRetry };
465
+ });
466
+ if (result) {
467
+ return result;
400
468
  }
401
- if (!response || !response.ok) {
402
- const text = response ? await response.text().catch(() => '') : '';
403
- const status = response ? response.status : 'Network Error';
404
- const statusText = response ? response.statusText : (lastError instanceof Error ? lastError.message : String(lastError));
405
- const error = new Error(`SPARQL UPDATE failed: ${status} ${statusText}${text ? ` - ${text}` : ''}`);
406
- error.status = status;
407
- throw error;
408
- }
409
- await this.sparqlExecutor.invalidateHttpCache(resourceUrl);
410
- return [{ success: true, source: resourceUrl, status: response.status, via: 'sparql-update' }];
469
+ throw await this.buildPatchError(response, lastError, 'SPARQL UPDATE');
411
470
  }
412
471
  /**
413
472
  * 构建 SPARQL UPDATE 查询
@@ -433,73 +492,43 @@ class LdpExecutor {
433
492
  */
434
493
  async executeN3PatchInternal(resourceUrl, deleteTriples, insertTriples, wherePatterns = []) {
435
494
  const patch = this.tripleBuilder.buildN3Patch(deleteTriples, insertTriples, wherePatterns);
436
- let response;
437
- let lastError;
438
- for (let i = 0; i < 3; i++) {
439
- try {
440
- response = await this.fetchFn(resourceUrl, {
495
+ const { response, result, lastError } = await this.retryWithBackoff(async () => {
496
+ let res = await this.fetchFn(resourceUrl, {
497
+ method: 'PATCH',
498
+ headers: { 'Content-Type': 'text/n3' },
499
+ body: patch
500
+ });
501
+ // Resource not found, create it and retry
502
+ if (res.status === 404) {
503
+ const createRes = await this.fetchFn(resourceUrl, {
504
+ method: 'PUT',
505
+ headers: { 'Content-Type': 'text/turtle' },
506
+ body: ''
507
+ });
508
+ if (!createRes.ok && createRes.status !== 409) {
509
+ throw new Error(`Failed to create resource ${resourceUrl}: ${createRes.status} ${createRes.statusText}`);
510
+ }
511
+ res = await this.fetchFn(resourceUrl, {
441
512
  method: 'PATCH',
442
- headers: {
443
- 'Content-Type': 'text/n3'
444
- },
513
+ headers: { 'Content-Type': 'text/n3' },
445
514
  body: patch
446
515
  });
447
- if (response.status === 404) {
448
- const createRes = await this.fetchFn(resourceUrl, {
449
- method: 'PUT',
450
- headers: { 'Content-Type': 'text/turtle' },
451
- body: ''
452
- });
453
- if (!createRes.ok && createRes.status !== 409) {
454
- throw new Error(`Failed to create resource ${resourceUrl}: ${createRes.status} ${createRes.statusText}`);
455
- }
456
- response = await this.fetchFn(resourceUrl, {
457
- method: 'PATCH',
458
- headers: { 'Content-Type': 'text/n3' },
459
- body: patch
460
- });
461
- }
462
- if (response.ok)
463
- break;
464
- if (response.status >= 500 || response.status === 409) {
465
- await new Promise(r => setTimeout(r, 1000 * (i + 1)));
466
- continue;
467
- }
468
- break;
469
516
  }
470
- catch (e) {
471
- lastError = e;
472
- if (i < 2)
473
- await new Promise(r => setTimeout(r, 1000 * (i + 1)));
517
+ if (res.ok) {
518
+ await this.sparqlExecutor.invalidateHttpCache(resourceUrl);
519
+ return {
520
+ response: res,
521
+ result: [{ success: true, source: resourceUrl, status: res.status, via: 'n3' }],
522
+ shouldRetry: false
523
+ };
474
524
  }
525
+ const shouldRetry = res.status >= 500 || res.status === 409;
526
+ return { response: res, shouldRetry };
527
+ });
528
+ if (result) {
529
+ return result;
475
530
  }
476
- if (!response || !response.ok) {
477
- const text = response ? await response.text().catch(() => '') : '';
478
- const status = response ? response.status : 'Network Error';
479
- const statusText = response ? response.statusText : (lastError instanceof Error ? lastError.message : String(lastError));
480
- const error = new Error(`N3 PATCH failed: ${status} ${statusText}${text ? ` - ${text}` : ''}`);
481
- error.status = status;
482
- throw error;
483
- }
484
- await this.sparqlExecutor.invalidateHttpCache(resourceUrl);
485
- return [{ success: true, source: resourceUrl, status: response.status, via: 'n3' }];
486
- }
487
- /**
488
- * 尝试使用 SPARQL UPDATE 进行 Patch
489
- * 保留此方法供将来 SPARQL endpoint 增强使用
490
- */
491
- async trySparqlPatch(resourceUrl, sparql) {
492
- try {
493
- const response = await this.fetchFn(resourceUrl, {
494
- method: 'PATCH',
495
- headers: { 'Content-Type': 'application/sparql-update' },
496
- body: sparql
497
- });
498
- return response.ok;
499
- }
500
- catch (error) {
501
- return false;
502
- }
531
+ throw await this.buildPatchError(response, lastError, 'N3 PATCH');
503
532
  }
504
533
  formatTerm(term) {
505
534
  if (!term)
@@ -547,7 +576,7 @@ class LdpExecutor {
547
576
  if (o.termType === 'NamedNode') {
548
577
  // Check against table schema to see if this is an inline column
549
578
  const pVal = p.value;
550
- for (const [colName, col] of Object.entries(table.columns)) {
579
+ for (const [, col] of Object.entries(table.columns)) {
551
580
  const predicate = this.tripleBuilder.getPredicateUri(col, table);
552
581
  // Check if column is inline
553
582
  const isInline = col.dataType === 'object' || col.dataType === 'json' ||