@nshiab/simple-data-analysis-core 2.0.9 → 2.1.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.
Files changed (453) hide show
  1. package/esm/class/SDAError.d.ts +6 -6
  2. package/esm/class/SDAError.js +6 -6
  3. package/esm/class/Simple.d.ts +9 -9
  4. package/esm/class/Simple.js +9 -9
  5. package/esm/class/SimpleDB.d.ts +80 -76
  6. package/esm/class/SimpleDB.d.ts.map +1 -1
  7. package/esm/class/SimpleDB.js +80 -76
  8. package/esm/class/SimpleTable.d.ts +2795 -1139
  9. package/esm/class/SimpleTable.d.ts.map +1 -1
  10. package/esm/class/SimpleTable.js +2781 -1149
  11. package/esm/helpers/buildApproximateMutualReachabilityMst.d.ts +45 -0
  12. package/esm/helpers/buildApproximateMutualReachabilityMst.d.ts.map +1 -0
  13. package/esm/helpers/buildApproximateMutualReachabilityMst.js +212 -0
  14. package/esm/helpers/buildChronologicalGraphComponentsSql.d.ts +14 -0
  15. package/esm/helpers/buildChronologicalGraphComponentsSql.d.ts.map +1 -0
  16. package/esm/helpers/buildChronologicalGraphComponentsSql.js +167 -0
  17. package/esm/helpers/buildExactMutualReachabilityMst.d.ts +28 -0
  18. package/esm/helpers/buildExactMutualReachabilityMst.d.ts.map +1 -0
  19. package/esm/helpers/buildExactMutualReachabilityMst.js +97 -0
  20. package/esm/helpers/buildGraphTemporalCostStateSql.d.ts +12 -0
  21. package/esm/helpers/buildGraphTemporalCostStateSql.d.ts.map +1 -0
  22. package/esm/helpers/buildGraphTemporalCostStateSql.js +86 -0
  23. package/esm/helpers/buildGraphTemporalReachabilitySql.d.ts +13 -0
  24. package/esm/helpers/buildGraphTemporalReachabilitySql.d.ts.map +1 -0
  25. package/esm/helpers/buildGraphTemporalReachabilitySql.js +70 -0
  26. package/esm/helpers/buildSparseMutualReachabilityMst.d.ts +10 -0
  27. package/esm/helpers/buildSparseMutualReachabilityMst.d.ts.map +1 -0
  28. package/esm/helpers/buildSparseMutualReachabilityMst.js +47 -0
  29. package/esm/helpers/buildUmapGraph.d.ts +2 -5
  30. package/esm/helpers/buildUmapGraph.d.ts.map +1 -1
  31. package/esm/helpers/buildUmapGraph.js +6 -100
  32. package/esm/helpers/buildVectorNeighbors.d.ts +45 -0
  33. package/esm/helpers/buildVectorNeighbors.d.ts.map +1 -0
  34. package/esm/helpers/buildVectorNeighbors.js +170 -0
  35. package/esm/helpers/buildWeakGraphComponentsSql.d.ts +3 -0
  36. package/esm/helpers/buildWeakGraphComponentsSql.d.ts.map +1 -0
  37. package/esm/helpers/buildWeakGraphComponentsSql.js +32 -0
  38. package/esm/helpers/camelCase.d.ts +7 -5
  39. package/esm/helpers/camelCase.d.ts.map +1 -1
  40. package/esm/helpers/camelCase.js +7 -5
  41. package/esm/helpers/capitalize.d.ts +6 -4
  42. package/esm/helpers/capitalize.d.ts.map +1 -1
  43. package/esm/helpers/capitalize.js +6 -4
  44. package/esm/helpers/clusterHdbscan.d.ts +18 -0
  45. package/esm/helpers/clusterHdbscan.d.ts.map +1 -0
  46. package/esm/helpers/clusterHdbscan.js +342 -0
  47. package/esm/helpers/computeCovariance.d.ts +16 -0
  48. package/esm/helpers/computeCovariance.d.ts.map +1 -0
  49. package/esm/helpers/computeCovariance.js +99 -0
  50. package/esm/helpers/computeMahalanobisDistances.d.ts +14 -0
  51. package/esm/helpers/computeMahalanobisDistances.d.ts.map +1 -0
  52. package/esm/helpers/computeMahalanobisDistances.js +87 -0
  53. package/esm/helpers/createDirectory.d.ts +4 -3
  54. package/esm/helpers/createDirectory.d.ts.map +1 -1
  55. package/esm/helpers/createDirectory.js +4 -3
  56. package/esm/helpers/dataToArrays.d.ts +6 -4
  57. package/esm/helpers/dataToArrays.d.ts.map +1 -1
  58. package/esm/helpers/dataToArrays.js +6 -4
  59. package/esm/helpers/extractTypes.d.ts +1 -1
  60. package/esm/helpers/extractTypes.js +4 -9
  61. package/esm/helpers/factorCovariance.d.ts +17 -0
  62. package/esm/helpers/factorCovariance.d.ts.map +1 -0
  63. package/esm/helpers/factorCovariance.js +189 -0
  64. package/esm/helpers/findGeoColumn.d.ts +6 -4
  65. package/esm/helpers/findGeoColumn.d.ts.map +1 -1
  66. package/esm/helpers/findGeoColumn.js +6 -4
  67. package/esm/helpers/findGeoColumnFromSchema.d.ts +8 -5
  68. package/esm/helpers/findGeoColumnFromSchema.d.ts.map +1 -1
  69. package/esm/helpers/findGeoColumnFromSchema.js +8 -5
  70. package/esm/helpers/formatDate.d.ts +12 -6
  71. package/esm/helpers/formatDate.d.ts.map +1 -1
  72. package/esm/helpers/formatDate.js +12 -6
  73. package/esm/helpers/formatMissingTables.d.ts +8 -5
  74. package/esm/helpers/formatMissingTables.d.ts.map +1 -1
  75. package/esm/helpers/formatMissingTables.js +8 -5
  76. package/esm/helpers/formatNumber.d.ts +19 -10
  77. package/esm/helpers/formatNumber.d.ts.map +1 -1
  78. package/esm/helpers/formatNumber.js +32 -17
  79. package/esm/helpers/getGraphEdgeIdColumn.d.ts +9 -0
  80. package/esm/helpers/getGraphEdgeIdColumn.d.ts.map +1 -0
  81. package/esm/helpers/getGraphEdgeIdColumn.js +25 -0
  82. package/esm/helpers/getGraphEndpointColumns.d.ts +11 -0
  83. package/esm/helpers/getGraphEndpointColumns.d.ts.map +1 -0
  84. package/esm/helpers/getGraphEndpointColumns.js +160 -0
  85. package/esm/helpers/getGraphWeightColumn.d.ts +10 -0
  86. package/esm/helpers/getGraphWeightColumn.d.ts.map +1 -0
  87. package/esm/helpers/getGraphWeightColumn.js +40 -0
  88. package/esm/helpers/graphRouteResultSchema.d.ts +4 -0
  89. package/esm/helpers/graphRouteResultSchema.d.ts.map +1 -0
  90. package/esm/helpers/graphRouteResultSchema.js +12 -0
  91. package/esm/helpers/graphRouteResultSelect.d.ts +4 -0
  92. package/esm/helpers/graphRouteResultSelect.d.ts.map +1 -0
  93. package/esm/helpers/graphRouteResultSelect.js +22 -0
  94. package/esm/helpers/hasGeometryColumn.d.ts +4 -3
  95. package/esm/helpers/hasGeometryColumn.d.ts.map +1 -1
  96. package/esm/helpers/hasGeometryColumn.js +4 -3
  97. package/esm/helpers/inspectGraphConnectivity.d.ts +10 -0
  98. package/esm/helpers/inspectGraphConnectivity.d.ts.map +1 -0
  99. package/esm/helpers/inspectGraphConnectivity.js +55 -0
  100. package/esm/helpers/mergeOptions.d.ts +24 -13
  101. package/esm/helpers/mergeOptions.d.ts.map +1 -1
  102. package/esm/helpers/mergeOptions.js +24 -13
  103. package/esm/helpers/parseValue.d.ts +6 -4
  104. package/esm/helpers/parseValue.d.ts.map +1 -1
  105. package/esm/helpers/parseValue.js +6 -4
  106. package/esm/helpers/prepareGraphRouteSql.d.ts +31 -0
  107. package/esm/helpers/prepareGraphRouteSql.d.ts.map +1 -0
  108. package/esm/helpers/prepareGraphRouteSql.js +86 -0
  109. package/esm/helpers/prepareGraphStarts.d.ts +9 -0
  110. package/esm/helpers/prepareGraphStarts.d.ts.map +1 -0
  111. package/esm/helpers/prepareGraphStarts.js +68 -0
  112. package/esm/helpers/prepareGraphTemporalSql.d.ts +28 -0
  113. package/esm/helpers/prepareGraphTemporalSql.d.ts.map +1 -0
  114. package/esm/helpers/prepareGraphTemporalSql.js +154 -0
  115. package/esm/helpers/prepareGraphTraversal.d.ts +19 -0
  116. package/esm/helpers/prepareGraphTraversal.d.ts.map +1 -0
  117. package/esm/helpers/prepareGraphTraversal.js +79 -0
  118. package/esm/helpers/prepareNumericFeatures.d.ts +41 -0
  119. package/esm/helpers/prepareNumericFeatures.d.ts.map +1 -0
  120. package/esm/helpers/prepareNumericFeatures.js +210 -0
  121. package/esm/helpers/prettyDuration.d.ts +14 -8
  122. package/esm/helpers/prettyDuration.d.ts.map +1 -1
  123. package/esm/helpers/prettyDuration.js +14 -8
  124. package/esm/helpers/printTable.d.ts +18 -13
  125. package/esm/helpers/printTable.d.ts.map +1 -1
  126. package/esm/helpers/printTable.js +18 -13
  127. package/esm/helpers/publishPreparedColumns.d.ts +37 -0
  128. package/esm/helpers/publishPreparedColumns.d.ts.map +1 -0
  129. package/esm/helpers/publishPreparedColumns.js +113 -0
  130. package/esm/helpers/queryDB.d.ts +24 -13
  131. package/esm/helpers/queryDB.d.ts.map +1 -1
  132. package/esm/helpers/queryDB.js +24 -13
  133. package/esm/helpers/queueAsyncBarrier.d.ts +12 -7
  134. package/esm/helpers/queueAsyncBarrier.d.ts.map +1 -1
  135. package/esm/helpers/queueAsyncBarrier.js +12 -7
  136. package/esm/helpers/queueGraphResult.d.ts +18 -0
  137. package/esm/helpers/queueGraphResult.d.ts.map +1 -0
  138. package/esm/helpers/queueGraphResult.js +39 -0
  139. package/esm/helpers/quoteIdentifier.d.ts +4 -3
  140. package/esm/helpers/quoteIdentifier.d.ts.map +1 -1
  141. package/esm/helpers/quoteIdentifier.js +4 -3
  142. package/esm/helpers/quoteQualifiedIdentifier.d.ts +6 -4
  143. package/esm/helpers/quoteQualifiedIdentifier.d.ts.map +1 -1
  144. package/esm/helpers/quoteQualifiedIdentifier.js +6 -4
  145. package/esm/helpers/runQuery.d.ts.map +1 -1
  146. package/esm/helpers/runQuery.js +17 -3
  147. package/esm/helpers/selectFuzzyReplacements.d.ts +11 -0
  148. package/esm/helpers/selectFuzzyReplacements.d.ts.map +1 -0
  149. package/esm/helpers/selectFuzzyReplacements.js +124 -0
  150. package/esm/helpers/stabilizeCosineVectors.d.ts +14 -0
  151. package/esm/helpers/stabilizeCosineVectors.d.ts.map +1 -0
  152. package/esm/helpers/stabilizeCosineVectors.js +34 -0
  153. package/esm/helpers/stringToArray.d.ts +4 -3
  154. package/esm/helpers/stringToArray.d.ts.map +1 -1
  155. package/esm/helpers/stringToArray.js +4 -3
  156. package/esm/helpers/updateColumnsWithJS.d.ts +12 -6
  157. package/esm/helpers/updateColumnsWithJS.d.ts.map +1 -1
  158. package/esm/helpers/updateColumnsWithJS.js +12 -6
  159. package/esm/helpers/validateGraphRouteResultSchema.d.ts +4 -0
  160. package/esm/helpers/validateGraphRouteResultSchema.d.ts.map +1 -0
  161. package/esm/helpers/validateGraphRouteResultSchema.js +13 -0
  162. package/esm/helpers/validateGraphTemporalEvents.d.ts +7 -0
  163. package/esm/helpers/validateGraphTemporalEvents.d.ts.map +1 -0
  164. package/esm/helpers/validateGraphTemporalEvents.js +47 -0
  165. package/esm/helpers/validateNumericalAnalysis.d.ts +10 -6
  166. package/esm/helpers/validateNumericalAnalysis.d.ts.map +1 -1
  167. package/esm/helpers/validateNumericalAnalysis.js +10 -6
  168. package/esm/helpers/validateVectorRowIds.d.ts +4 -0
  169. package/esm/helpers/validateVectorRowIds.d.ts.map +1 -0
  170. package/esm/helpers/validateVectorRowIds.js +16 -0
  171. package/esm/helpers/vectorDistanceExpression.d.ts +6 -0
  172. package/esm/helpers/vectorDistanceExpression.d.ts.map +1 -0
  173. package/esm/helpers/vectorDistanceExpression.js +11 -0
  174. package/esm/helpers/wrapString.d.ts +10 -7
  175. package/esm/helpers/wrapString.d.ts.map +1 -1
  176. package/esm/helpers/wrapString.js +10 -7
  177. package/esm/methods/addId.d.ts +5 -0
  178. package/esm/methods/addId.d.ts.map +1 -0
  179. package/esm/methods/addId.js +38 -0
  180. package/esm/methods/commonNeighbors.d.ts +10 -0
  181. package/esm/methods/commonNeighbors.d.ts.map +1 -0
  182. package/esm/methods/commonNeighbors.js +101 -0
  183. package/esm/methods/connectedComponents.d.ts +9 -0
  184. package/esm/methods/connectedComponents.d.ts.map +1 -0
  185. package/esm/methods/connectedComponents.js +147 -0
  186. package/esm/methods/degree.d.ts +9 -0
  187. package/esm/methods/degree.d.ts.map +1 -0
  188. package/esm/methods/degree.js +135 -0
  189. package/esm/methods/distances.d.ts +12 -0
  190. package/esm/methods/distances.d.ts.map +1 -0
  191. package/esm/methods/distances.js +164 -0
  192. package/esm/methods/findCycles.d.ts +12 -0
  193. package/esm/methods/findCycles.d.ts.map +1 -0
  194. package/esm/methods/findCycles.js +330 -0
  195. package/esm/methods/fuzzyClean.d.ts.map +1 -1
  196. package/esm/methods/fuzzyClean.js +17 -136
  197. package/esm/methods/fuzzyJoin.js +70 -16
  198. package/esm/methods/getTypes.d.ts +1 -1
  199. package/esm/methods/hdbscan.d.ts +5 -0
  200. package/esm/methods/hdbscan.d.ts.map +1 -0
  201. package/esm/methods/hdbscan.js +208 -0
  202. package/esm/methods/mahalanobis.d.ts +5 -0
  203. package/esm/methods/mahalanobis.d.ts.map +1 -0
  204. package/esm/methods/mahalanobis.js +92 -0
  205. package/esm/methods/neighbors.d.ts +9 -0
  206. package/esm/methods/neighbors.d.ts.map +1 -0
  207. package/esm/methods/neighbors.js +81 -0
  208. package/esm/methods/normalizeVector.d.ts +5 -0
  209. package/esm/methods/normalizeVector.d.ts.map +1 -0
  210. package/esm/methods/normalizeVector.js +132 -0
  211. package/esm/methods/paths.d.ts +12 -0
  212. package/esm/methods/paths.d.ts.map +1 -0
  213. package/esm/methods/paths.js +287 -0
  214. package/esm/methods/reachable.d.ts +11 -0
  215. package/esm/methods/reachable.d.ts.map +1 -0
  216. package/esm/methods/reachable.js +131 -0
  217. package/esm/methods/rowToVector.d.ts +5 -0
  218. package/esm/methods/rowToVector.d.ts.map +1 -0
  219. package/esm/methods/rowToVector.js +77 -0
  220. package/esm/methods/shortestPath.d.ts +12 -0
  221. package/esm/methods/shortestPath.d.ts.map +1 -0
  222. package/esm/methods/shortestPath.js +337 -0
  223. package/esm/methods/topologicalSort.d.ts +7 -0
  224. package/esm/methods/topologicalSort.d.ts.map +1 -0
  225. package/esm/methods/topologicalSort.js +164 -0
  226. package/llm.md +2106 -143
  227. package/llms.txt +1 -1
  228. package/package.json +1 -1
  229. package/script/class/SDAError.d.ts +6 -6
  230. package/script/class/SDAError.js +6 -6
  231. package/script/class/Simple.d.ts +9 -9
  232. package/script/class/Simple.js +9 -9
  233. package/script/class/SimpleDB.d.ts +80 -76
  234. package/script/class/SimpleDB.d.ts.map +1 -1
  235. package/script/class/SimpleDB.js +80 -76
  236. package/script/class/SimpleTable.d.ts +2795 -1139
  237. package/script/class/SimpleTable.d.ts.map +1 -1
  238. package/script/class/SimpleTable.js +2781 -1149
  239. package/script/helpers/buildApproximateMutualReachabilityMst.d.ts +45 -0
  240. package/script/helpers/buildApproximateMutualReachabilityMst.d.ts.map +1 -0
  241. package/script/helpers/buildApproximateMutualReachabilityMst.js +219 -0
  242. package/script/helpers/buildChronologicalGraphComponentsSql.d.ts +14 -0
  243. package/script/helpers/buildChronologicalGraphComponentsSql.d.ts.map +1 -0
  244. package/script/helpers/buildChronologicalGraphComponentsSql.js +174 -0
  245. package/script/helpers/buildExactMutualReachabilityMst.d.ts +28 -0
  246. package/script/helpers/buildExactMutualReachabilityMst.d.ts.map +1 -0
  247. package/script/helpers/buildExactMutualReachabilityMst.js +103 -0
  248. package/script/helpers/buildGraphTemporalCostStateSql.d.ts +12 -0
  249. package/script/helpers/buildGraphTemporalCostStateSql.d.ts.map +1 -0
  250. package/script/helpers/buildGraphTemporalCostStateSql.js +92 -0
  251. package/script/helpers/buildGraphTemporalReachabilitySql.d.ts +13 -0
  252. package/script/helpers/buildGraphTemporalReachabilitySql.d.ts.map +1 -0
  253. package/script/helpers/buildGraphTemporalReachabilitySql.js +76 -0
  254. package/script/helpers/buildSparseMutualReachabilityMst.d.ts +10 -0
  255. package/script/helpers/buildSparseMutualReachabilityMst.d.ts.map +1 -0
  256. package/script/helpers/buildSparseMutualReachabilityMst.js +50 -0
  257. package/script/helpers/buildUmapGraph.d.ts +2 -5
  258. package/script/helpers/buildUmapGraph.d.ts.map +1 -1
  259. package/script/helpers/buildUmapGraph.js +6 -100
  260. package/script/helpers/buildVectorNeighbors.d.ts +45 -0
  261. package/script/helpers/buildVectorNeighbors.d.ts.map +1 -0
  262. package/script/helpers/buildVectorNeighbors.js +176 -0
  263. package/script/helpers/buildWeakGraphComponentsSql.d.ts +3 -0
  264. package/script/helpers/buildWeakGraphComponentsSql.d.ts.map +1 -0
  265. package/script/helpers/buildWeakGraphComponentsSql.js +38 -0
  266. package/script/helpers/camelCase.d.ts +7 -5
  267. package/script/helpers/camelCase.d.ts.map +1 -1
  268. package/script/helpers/camelCase.js +7 -5
  269. package/script/helpers/capitalize.d.ts +6 -4
  270. package/script/helpers/capitalize.d.ts.map +1 -1
  271. package/script/helpers/capitalize.js +6 -4
  272. package/script/helpers/clusterHdbscan.d.ts +18 -0
  273. package/script/helpers/clusterHdbscan.d.ts.map +1 -0
  274. package/script/helpers/clusterHdbscan.js +346 -0
  275. package/script/helpers/computeCovariance.d.ts +16 -0
  276. package/script/helpers/computeCovariance.d.ts.map +1 -0
  277. package/script/helpers/computeCovariance.js +105 -0
  278. package/script/helpers/computeMahalanobisDistances.d.ts +14 -0
  279. package/script/helpers/computeMahalanobisDistances.d.ts.map +1 -0
  280. package/script/helpers/computeMahalanobisDistances.js +93 -0
  281. package/script/helpers/createDirectory.d.ts +4 -3
  282. package/script/helpers/createDirectory.d.ts.map +1 -1
  283. package/script/helpers/createDirectory.js +4 -3
  284. package/script/helpers/dataToArrays.d.ts +6 -4
  285. package/script/helpers/dataToArrays.d.ts.map +1 -1
  286. package/script/helpers/dataToArrays.js +6 -4
  287. package/script/helpers/extractTypes.d.ts +1 -1
  288. package/script/helpers/extractTypes.js +4 -9
  289. package/script/helpers/factorCovariance.d.ts +17 -0
  290. package/script/helpers/factorCovariance.d.ts.map +1 -0
  291. package/script/helpers/factorCovariance.js +194 -0
  292. package/script/helpers/findGeoColumn.d.ts +6 -4
  293. package/script/helpers/findGeoColumn.d.ts.map +1 -1
  294. package/script/helpers/findGeoColumn.js +6 -4
  295. package/script/helpers/findGeoColumnFromSchema.d.ts +8 -5
  296. package/script/helpers/findGeoColumnFromSchema.d.ts.map +1 -1
  297. package/script/helpers/findGeoColumnFromSchema.js +8 -5
  298. package/script/helpers/formatDate.d.ts +12 -6
  299. package/script/helpers/formatDate.d.ts.map +1 -1
  300. package/script/helpers/formatDate.js +12 -6
  301. package/script/helpers/formatMissingTables.d.ts +8 -5
  302. package/script/helpers/formatMissingTables.d.ts.map +1 -1
  303. package/script/helpers/formatMissingTables.js +8 -5
  304. package/script/helpers/formatNumber.d.ts +19 -10
  305. package/script/helpers/formatNumber.d.ts.map +1 -1
  306. package/script/helpers/formatNumber.js +32 -17
  307. package/script/helpers/getGraphEdgeIdColumn.d.ts +9 -0
  308. package/script/helpers/getGraphEdgeIdColumn.d.ts.map +1 -0
  309. package/script/helpers/getGraphEdgeIdColumn.js +31 -0
  310. package/script/helpers/getGraphEndpointColumns.d.ts +11 -0
  311. package/script/helpers/getGraphEndpointColumns.d.ts.map +1 -0
  312. package/script/helpers/getGraphEndpointColumns.js +166 -0
  313. package/script/helpers/getGraphWeightColumn.d.ts +10 -0
  314. package/script/helpers/getGraphWeightColumn.d.ts.map +1 -0
  315. package/script/helpers/getGraphWeightColumn.js +46 -0
  316. package/script/helpers/graphRouteResultSchema.d.ts +4 -0
  317. package/script/helpers/graphRouteResultSchema.d.ts.map +1 -0
  318. package/script/helpers/graphRouteResultSchema.js +18 -0
  319. package/script/helpers/graphRouteResultSelect.d.ts +4 -0
  320. package/script/helpers/graphRouteResultSelect.d.ts.map +1 -0
  321. package/script/helpers/graphRouteResultSelect.js +28 -0
  322. package/script/helpers/hasGeometryColumn.d.ts +4 -3
  323. package/script/helpers/hasGeometryColumn.d.ts.map +1 -1
  324. package/script/helpers/hasGeometryColumn.js +4 -3
  325. package/script/helpers/inspectGraphConnectivity.d.ts +10 -0
  326. package/script/helpers/inspectGraphConnectivity.d.ts.map +1 -0
  327. package/script/helpers/inspectGraphConnectivity.js +58 -0
  328. package/script/helpers/mergeOptions.d.ts +24 -13
  329. package/script/helpers/mergeOptions.d.ts.map +1 -1
  330. package/script/helpers/mergeOptions.js +24 -13
  331. package/script/helpers/parseValue.d.ts +6 -4
  332. package/script/helpers/parseValue.d.ts.map +1 -1
  333. package/script/helpers/parseValue.js +6 -4
  334. package/script/helpers/prepareGraphRouteSql.d.ts +31 -0
  335. package/script/helpers/prepareGraphRouteSql.d.ts.map +1 -0
  336. package/script/helpers/prepareGraphRouteSql.js +127 -0
  337. package/script/helpers/prepareGraphStarts.d.ts +9 -0
  338. package/script/helpers/prepareGraphStarts.d.ts.map +1 -0
  339. package/script/helpers/prepareGraphStarts.js +71 -0
  340. package/script/helpers/prepareGraphTemporalSql.d.ts +28 -0
  341. package/script/helpers/prepareGraphTemporalSql.d.ts.map +1 -0
  342. package/script/helpers/prepareGraphTemporalSql.js +161 -0
  343. package/script/helpers/prepareGraphTraversal.d.ts +19 -0
  344. package/script/helpers/prepareGraphTraversal.d.ts.map +1 -0
  345. package/script/helpers/prepareGraphTraversal.js +87 -0
  346. package/script/helpers/prepareNumericFeatures.d.ts +41 -0
  347. package/script/helpers/prepareNumericFeatures.d.ts.map +1 -0
  348. package/script/helpers/prepareNumericFeatures.js +217 -0
  349. package/script/helpers/prettyDuration.d.ts +14 -8
  350. package/script/helpers/prettyDuration.d.ts.map +1 -1
  351. package/script/helpers/prettyDuration.js +14 -8
  352. package/script/helpers/printTable.d.ts +18 -13
  353. package/script/helpers/printTable.d.ts.map +1 -1
  354. package/script/helpers/printTable.js +18 -13
  355. package/script/helpers/publishPreparedColumns.d.ts +37 -0
  356. package/script/helpers/publishPreparedColumns.d.ts.map +1 -0
  357. package/script/helpers/publishPreparedColumns.js +119 -0
  358. package/script/helpers/queryDB.d.ts +24 -13
  359. package/script/helpers/queryDB.d.ts.map +1 -1
  360. package/script/helpers/queryDB.js +24 -13
  361. package/script/helpers/queueAsyncBarrier.d.ts +12 -7
  362. package/script/helpers/queueAsyncBarrier.d.ts.map +1 -1
  363. package/script/helpers/queueAsyncBarrier.js +12 -7
  364. package/script/helpers/queueGraphResult.d.ts +18 -0
  365. package/script/helpers/queueGraphResult.d.ts.map +1 -0
  366. package/script/helpers/queueGraphResult.js +45 -0
  367. package/script/helpers/quoteIdentifier.d.ts +4 -3
  368. package/script/helpers/quoteIdentifier.d.ts.map +1 -1
  369. package/script/helpers/quoteIdentifier.js +4 -3
  370. package/script/helpers/quoteQualifiedIdentifier.d.ts +6 -4
  371. package/script/helpers/quoteQualifiedIdentifier.d.ts.map +1 -1
  372. package/script/helpers/quoteQualifiedIdentifier.js +6 -4
  373. package/script/helpers/runQuery.d.ts.map +1 -1
  374. package/script/helpers/runQuery.js +17 -3
  375. package/script/helpers/selectFuzzyReplacements.d.ts +11 -0
  376. package/script/helpers/selectFuzzyReplacements.d.ts.map +1 -0
  377. package/script/helpers/selectFuzzyReplacements.js +127 -0
  378. package/script/helpers/stabilizeCosineVectors.d.ts +14 -0
  379. package/script/helpers/stabilizeCosineVectors.d.ts.map +1 -0
  380. package/script/helpers/stabilizeCosineVectors.js +40 -0
  381. package/script/helpers/stringToArray.d.ts +4 -3
  382. package/script/helpers/stringToArray.d.ts.map +1 -1
  383. package/script/helpers/stringToArray.js +4 -3
  384. package/script/helpers/updateColumnsWithJS.d.ts +12 -6
  385. package/script/helpers/updateColumnsWithJS.d.ts.map +1 -1
  386. package/script/helpers/updateColumnsWithJS.js +12 -6
  387. package/script/helpers/validateGraphRouteResultSchema.d.ts +4 -0
  388. package/script/helpers/validateGraphRouteResultSchema.d.ts.map +1 -0
  389. package/script/helpers/validateGraphRouteResultSchema.js +19 -0
  390. package/script/helpers/validateGraphTemporalEvents.d.ts +7 -0
  391. package/script/helpers/validateGraphTemporalEvents.d.ts.map +1 -0
  392. package/script/helpers/validateGraphTemporalEvents.js +53 -0
  393. package/script/helpers/validateNumericalAnalysis.d.ts +10 -6
  394. package/script/helpers/validateNumericalAnalysis.d.ts.map +1 -1
  395. package/script/helpers/validateNumericalAnalysis.js +10 -6
  396. package/script/helpers/validateVectorRowIds.d.ts +4 -0
  397. package/script/helpers/validateVectorRowIds.d.ts.map +1 -0
  398. package/script/helpers/validateVectorRowIds.js +19 -0
  399. package/script/helpers/vectorDistanceExpression.d.ts +6 -0
  400. package/script/helpers/vectorDistanceExpression.d.ts.map +1 -0
  401. package/script/helpers/vectorDistanceExpression.js +14 -0
  402. package/script/helpers/wrapString.d.ts +10 -7
  403. package/script/helpers/wrapString.d.ts.map +1 -1
  404. package/script/helpers/wrapString.js +10 -7
  405. package/script/methods/addId.d.ts +5 -0
  406. package/script/methods/addId.d.ts.map +1 -0
  407. package/script/methods/addId.js +44 -0
  408. package/script/methods/commonNeighbors.d.ts +10 -0
  409. package/script/methods/commonNeighbors.d.ts.map +1 -0
  410. package/script/methods/commonNeighbors.js +140 -0
  411. package/script/methods/connectedComponents.d.ts +9 -0
  412. package/script/methods/connectedComponents.d.ts.map +1 -0
  413. package/script/methods/connectedComponents.js +186 -0
  414. package/script/methods/degree.d.ts +9 -0
  415. package/script/methods/degree.d.ts.map +1 -0
  416. package/script/methods/degree.js +141 -0
  417. package/script/methods/distances.d.ts +12 -0
  418. package/script/methods/distances.d.ts.map +1 -0
  419. package/script/methods/distances.js +203 -0
  420. package/script/methods/findCycles.d.ts +12 -0
  421. package/script/methods/findCycles.d.ts.map +1 -0
  422. package/script/methods/findCycles.js +369 -0
  423. package/script/methods/fuzzyClean.d.ts.map +1 -1
  424. package/script/methods/fuzzyClean.js +17 -136
  425. package/script/methods/fuzzyJoin.js +70 -16
  426. package/script/methods/getTypes.d.ts +1 -1
  427. package/script/methods/hdbscan.d.ts +5 -0
  428. package/script/methods/hdbscan.d.ts.map +1 -0
  429. package/script/methods/hdbscan.js +214 -0
  430. package/script/methods/mahalanobis.d.ts +5 -0
  431. package/script/methods/mahalanobis.d.ts.map +1 -0
  432. package/script/methods/mahalanobis.js +98 -0
  433. package/script/methods/neighbors.d.ts +9 -0
  434. package/script/methods/neighbors.d.ts.map +1 -0
  435. package/script/methods/neighbors.js +120 -0
  436. package/script/methods/normalizeVector.d.ts +5 -0
  437. package/script/methods/normalizeVector.d.ts.map +1 -0
  438. package/script/methods/normalizeVector.js +138 -0
  439. package/script/methods/paths.d.ts +12 -0
  440. package/script/methods/paths.d.ts.map +1 -0
  441. package/script/methods/paths.js +326 -0
  442. package/script/methods/reachable.d.ts +11 -0
  443. package/script/methods/reachable.d.ts.map +1 -0
  444. package/script/methods/reachable.js +170 -0
  445. package/script/methods/rowToVector.d.ts +5 -0
  446. package/script/methods/rowToVector.d.ts.map +1 -0
  447. package/script/methods/rowToVector.js +83 -0
  448. package/script/methods/shortestPath.d.ts +12 -0
  449. package/script/methods/shortestPath.d.ts.map +1 -0
  450. package/script/methods/shortestPath.js +376 -0
  451. package/script/methods/topologicalSort.d.ts +7 -0
  452. package/script/methods/topologicalSort.d.ts.map +1 -0
  453. package/script/methods/topologicalSort.js +170 -0
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = reachable;
40
+ const buildGraphTemporalReachabilitySql_js_1 = __importDefault(require("../helpers/buildGraphTemporalReachabilitySql.js"));
41
+ const prepareGraphTemporalSql_js_1 = __importStar(require("../helpers/prepareGraphTemporalSql.js"));
42
+ const prepareGraphStarts_js_1 = __importDefault(require("../helpers/prepareGraphStarts.js"));
43
+ const prepareGraphTraversal_js_1 = __importStar(require("../helpers/prepareGraphTraversal.js"));
44
+ const queueGraphResult_js_1 = __importDefault(require("../helpers/queueGraphResult.js"));
45
+ const quoteIdentifier_js_1 = __importDefault(require("../helpers/quoteIdentifier.js"));
46
+ const validateGraphTemporalEvents_js_1 = __importDefault(require("../helpers/validateGraphTemporalEvents.js"));
47
+ function reachable(simpleTable, sourceColumn, targetColumn, startNodes, options = {}) {
48
+ if (typeof sourceColumn !== "string") {
49
+ throw new TypeError("reachable() sourceColumn must be a string.");
50
+ }
51
+ if (typeof targetColumn !== "string") {
52
+ throw new TypeError("reachable() targetColumn must be a string.");
53
+ }
54
+ if (options === null || typeof options !== "object" || Array.isArray(options)) {
55
+ throw new TypeError("reachable() options must be an object.");
56
+ }
57
+ if (options.direction !== undefined &&
58
+ !["outgoing", "incoming", "both"].includes(options.direction)) {
59
+ throw new TypeError('reachable() options.direction must be "outgoing", "incoming", or "both".');
60
+ }
61
+ if (options.outputTable !== undefined &&
62
+ typeof options.outputTable !== "string" &&
63
+ typeof options.outputTable !== "boolean") {
64
+ throw new TypeError("reachable() options.outputTable must be a string or boolean.");
65
+ }
66
+ const preparedStarts = (0, prepareGraphStarts_js_1.default)(startNodes, "reachable()", "startNodes");
67
+ const direction = options.direction ?? "outgoing";
68
+ const temporalOptions = (0, prepareGraphTemporalSql_js_1.prepareGraphTemporalOptions)(options, direction, "reachable()");
69
+ options = structuredClone(options);
70
+ const parameters = {
71
+ sourceColumn,
72
+ targetColumn,
73
+ startNodes: structuredClone(startNodes),
74
+ options,
75
+ };
76
+ return (0, queueGraphResult_js_1.default)(simpleTable, {
77
+ method: "reachable()",
78
+ parameters,
79
+ outputTable: options.outputTable,
80
+ preflight: temporalOptions === undefined
81
+ ? undefined
82
+ : (input) => (0, validateGraphTemporalEvents_js_1.default)(input, temporalOptions, "reachable()", parameters),
83
+ values: (schema) => {
84
+ const { temporal } = validateInputs(schema, sourceColumn, targetColumn, preparedStarts, temporalOptions);
85
+ return temporal === undefined
86
+ ? preparedStarts.values
87
+ : [temporal.gapParameter, ...preparedStarts.values];
88
+ },
89
+ buildSelect: (input, schema) => reachableSelect(input, schema, sourceColumn, targetColumn, preparedStarts, direction, temporalOptions),
90
+ outputSchema: (schema) => {
91
+ const { endpoints } = validateInputs(schema, sourceColumn, targetColumn, preparedStarts, temporalOptions);
92
+ return {
93
+ start: endpoints.idType,
94
+ node: endpoints.idType,
95
+ };
96
+ },
97
+ });
98
+ }
99
+ function validateInputs(schema, source, target, starts, temporalOptions) {
100
+ const endpoints = (0, prepareGraphTraversal_js_1.validateGraphStarts)(schema, source, target, starts, "reachable()", "startNodes");
101
+ const temporal = temporalOptions === undefined
102
+ ? undefined
103
+ : (0, prepareGraphTemporalSql_js_1.default)(schema, temporalOptions, "reachable()");
104
+ return { endpoints, temporal };
105
+ }
106
+ function reachableSelect(input, schema, source, target, starts, direction, temporalOptions) {
107
+ const prepared = (0, prepareGraphTraversal_js_1.default)(input, schema, source, target, starts, "reachable()", "startNodes");
108
+ if (temporalOptions !== undefined) {
109
+ const temporal = (0, prepareGraphTemporalSql_js_1.default)(schema, temporalOptions, "reachable()");
110
+ return temporalReachableSelect(prepared, direction, temporal);
111
+ }
112
+ const relations = prepared.relationNames([
113
+ "graph_start_values",
114
+ "graph_starts",
115
+ "graph_edges",
116
+ "graph_reachable",
117
+ ]);
118
+ const startValuesRelation = relations.graph_start_values;
119
+ const startsRelation = relations.graph_starts;
120
+ const edgesRelation = relations.graph_edges;
121
+ const reachableRelation = relations.graph_reachable;
122
+ const start = `${(0, quoteIdentifier_js_1.default)("starts")}.${(0, quoteIdentifier_js_1.default)("start")}`;
123
+ const startKey = `${(0, quoteIdentifier_js_1.default)("starts")}.${(0, quoteIdentifier_js_1.default)("__key")}`;
124
+ const reachedStart = `${(0, quoteIdentifier_js_1.default)("reached")}.${(0, quoteIdentifier_js_1.default)("start")}`;
125
+ const reachedStartKey = `${(0, quoteIdentifier_js_1.default)("reached")}.${(0, quoteIdentifier_js_1.default)("__start_key")}`;
126
+ const edgeTo = `${(0, quoteIdentifier_js_1.default)("edges")}.${(0, quoteIdentifier_js_1.default)("__to")}`;
127
+ const edgeToKey = `${(0, quoteIdentifier_js_1.default)("edges")}.${(0, quoteIdentifier_js_1.default)("__to_key")}`;
128
+ const edgeFromKey = `${(0, quoteIdentifier_js_1.default)("edges")}.${(0, quoteIdentifier_js_1.default)("__from_key")}`;
129
+ const reachedNodeKey = `${(0, quoteIdentifier_js_1.default)("reached")}.${(0, quoteIdentifier_js_1.default)("__node_key")}`;
130
+ return `WITH RECURSIVE ${startValuesRelation}(${(0, quoteIdentifier_js_1.default)("start")}) AS (
131
+ VALUES ${prepared.startValues}
132
+ ), ${startsRelation} AS (
133
+ SELECT ${(0, quoteIdentifier_js_1.default)("start")},
134
+ ${prepared.key((0, quoteIdentifier_js_1.default)("start"))} AS ${(0, quoteIdentifier_js_1.default)("__key")}
135
+ FROM ${startValuesRelation}
136
+ ), ${edgesRelation} AS (
137
+ ${prepared.edges(direction)}
138
+ ), ${reachableRelation}(
139
+ ${(0, quoteIdentifier_js_1.default)("start")}, ${(0, quoteIdentifier_js_1.default)("node")},
140
+ ${(0, quoteIdentifier_js_1.default)("__start_key")}, ${(0, quoteIdentifier_js_1.default)("__node_key")}
141
+ ) AS (
142
+ SELECT ${start}, ${edgeTo}, ${startKey}, ${edgeToKey}
143
+ FROM ${startsRelation} AS ${(0, quoteIdentifier_js_1.default)("starts")}
144
+ INNER JOIN ${edgesRelation} AS ${(0, quoteIdentifier_js_1.default)("edges")}
145
+ ON ${startKey} = ${edgeFromKey}
146
+ UNION
147
+ SELECT ${reachedStart}, ${edgeTo}, ${reachedStartKey}, ${edgeToKey}
148
+ FROM ${reachableRelation} AS ${(0, quoteIdentifier_js_1.default)("reached")}
149
+ INNER JOIN ${edgesRelation} AS ${(0, quoteIdentifier_js_1.default)("edges")}
150
+ ON ${reachedNodeKey} = ${edgeFromKey}
151
+ )
152
+ SELECT ${(0, quoteIdentifier_js_1.default)("start")}, ${(0, quoteIdentifier_js_1.default)("node")}
153
+ FROM ${reachableRelation}
154
+ ORDER BY ${(0, quoteIdentifier_js_1.default)("__start_key")}, ${(0, quoteIdentifier_js_1.default)("__node_key")}`;
155
+ }
156
+ function temporalReachableSelect(prepared, direction, temporal) {
157
+ const q = quoteIdentifier_js_1.default;
158
+ const startsSelect = `SELECT ${q("start")},
159
+ ${prepared.key(q("start"))} AS ${q("__key")}
160
+ FROM (VALUES ${prepared.startValues}) AS ${q("start_values")}(${q("start")})`;
161
+ const reachability = (0, buildGraphTemporalReachabilitySql_js_1.default)(prepared, startsSelect, direction, temporal);
162
+ return `${reachability.withClause}
163
+ SELECT ${q("start")}, ${q("node")}
164
+ FROM (
165
+ SELECT DISTINCT ${q("start")}, ${q("node")},
166
+ ${q("__start_key")}, ${q("__node_key")}
167
+ FROM ${reachability.reachableRelation}
168
+ ) AS ${q("reachable_nodes")}
169
+ ORDER BY ${q("__start_key")}, ${q("__node_key")}`;
170
+ }
@@ -0,0 +1,5 @@
1
+ import type SimpleTable from "../class/SimpleTable.js";
2
+ export default function rowToVector(table: SimpleTable, columns: string[], newColumn: string, options?: {
3
+ type?: "float" | "double";
4
+ }): void;
5
+ //# sourceMappingURL=rowToVector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rowToVector.d.ts","sourceRoot":"","sources":["../../src/methods/rowToVector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAOvD,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;CAAO,QAyD5C"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = rowToVector;
7
+ const foldIdentifier_js_1 = __importDefault(require("../helpers/foldIdentifier.js"));
8
+ const prepareNumericFeatures_js_1 = require("../helpers/prepareNumericFeatures.js");
9
+ const queueOp_js_1 = __importDefault(require("../helpers/queueOp.js"));
10
+ const quoteIdentifier_js_1 = __importDefault(require("../helpers/quoteIdentifier.js"));
11
+ function rowToVector(table, columns, newColumn, options = {}) {
12
+ if (columns.length === 0) {
13
+ throw new Error("rowToVector() requires at least one numeric scalar input column.");
14
+ }
15
+ const duplicate = findDuplicate(columns);
16
+ if (duplicate !== undefined) {
17
+ throw new Error(`rowToVector() received duplicate input column ${(0, quoteIdentifier_js_1.default)(duplicate)}. Each input column must be listed once.`);
18
+ }
19
+ if (options.type !== undefined && !["float", "double"].includes(options.type)) {
20
+ throw new Error('rowToVector() options.type must be "float" or "double".');
21
+ }
22
+ columns = [...columns];
23
+ options = structuredClone(options);
24
+ (0, queueOp_js_1.default)(table, {
25
+ kind: "fusable",
26
+ method: "rowToVector()",
27
+ parameters: { columns, newColumn, options },
28
+ needsSchema: true,
29
+ outputSchema: (schema) => ({
30
+ ...schema,
31
+ [newColumn]: `${resolveElementType(schema, columns, newColumn, options)}[${columns.length}]`,
32
+ }),
33
+ buildSelect: (input, schema) => {
34
+ const elementType = resolveElementType(schema, columns, newColumn, options);
35
+ const resolved = resolveColumns(schema, columns);
36
+ return `SELECT *, [${resolved.map((column) => {
37
+ const value = (0, quoteIdentifier_js_1.default)(column);
38
+ // DuckDB does not implement a direct BIGNUM-to-FLOAT cast.
39
+ const convertible = schema[column] === "BIGNUM" && elementType === "FLOAT"
40
+ ? `${value}::VARCHAR`
41
+ : value;
42
+ return `${convertible}::${elementType}`;
43
+ }).join(", ")}]::${elementType}[${columns.length}] AS ${(0, quoteIdentifier_js_1.default)(newColumn)} FROM ${input}`;
44
+ },
45
+ });
46
+ }
47
+ function resolveElementType(schema, columns, newColumn, options) {
48
+ const existingOutput = Object.keys(schema).find((column) => (0, foldIdentifier_js_1.default)(column) === (0, foldIdentifier_js_1.default)(newColumn));
49
+ if (existingOutput !== undefined) {
50
+ throw new Error(`rowToVector() the column ${(0, quoteIdentifier_js_1.default)(newColumn)} already exists. Remove it first or choose a different name for the new column.`);
51
+ }
52
+ const resolved = resolveColumns(schema, columns);
53
+ const nonNumeric = resolved.filter((column) => !(0, prepareNumericFeatures_js_1.isNumericScalarType)(schema[column]));
54
+ if (nonNumeric.length > 0) {
55
+ throw new Error(`rowToVector() requires numeric scalar input columns. The following columns are not numeric: ${nonNumeric.map((column) => `${(0, quoteIdentifier_js_1.default)(column)} (${schema[column]})`).join(", ")}. Convert them to numeric types first.`);
56
+ }
57
+ if (options.type !== undefined)
58
+ return options.type.toUpperCase();
59
+ const inputTypes = resolved.map((column) => schema[column]);
60
+ if (new Set(inputTypes).size !== 1) {
61
+ throw new Error(`rowToVector() cannot infer one vector element type from columns with different types: ${resolved.map((column) => `${(0, quoteIdentifier_js_1.default)(column)} (${schema[column]})`).join(", ")}. Set options.type to "float" or "double".`);
62
+ }
63
+ return inputTypes[0];
64
+ }
65
+ function resolveColumns(schema, columns) {
66
+ const available = Object.keys(schema);
67
+ const resolved = columns.map((requested) => available.find((column) => (0, foldIdentifier_js_1.default)(column) === (0, foldIdentifier_js_1.default)(requested)));
68
+ const missing = columns.filter((_, index) => resolved[index] === undefined);
69
+ if (missing.length > 0) {
70
+ throw new Error(`rowToVector() the column${missing.length > 1 ? "s" : ""} ${missing.map(quoteIdentifier_js_1.default).join(", ")} ${missing.length > 1 ? "do" : "does"} not exist. Check for typos, or load the data first.`);
71
+ }
72
+ return resolved;
73
+ }
74
+ function findDuplicate(columns) {
75
+ const seen = new Set();
76
+ for (const column of columns) {
77
+ const folded = (0, foldIdentifier_js_1.default)(column);
78
+ if (seen.has(folded))
79
+ return column;
80
+ seen.add(folded);
81
+ }
82
+ return undefined;
83
+ }
@@ -0,0 +1,12 @@
1
+ import type SimpleTable from "../class/SimpleTable.js";
2
+ import type { GraphId } from "../helpers/prepareGraphStarts.js";
3
+ import { type GraphTemporalOptions } from "../helpers/prepareGraphTemporalSql.js";
4
+ import type { GraphDirection } from "../helpers/prepareGraphTraversal.js";
5
+ type ShortestPathOptions = GraphTemporalOptions & {
6
+ direction?: GraphDirection;
7
+ outputTable?: string | boolean;
8
+ weight?: string;
9
+ };
10
+ export default function shortestPath(simpleTable: SimpleTable, sourceColumn: string, targetColumn: string, edgeId: string, start: GraphId, end: GraphId, options?: ShortestPathOptions): SimpleTable;
11
+ export {};
12
+ //# sourceMappingURL=shortestPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortestPath.d.ts","sourceRoot":"","sources":["../../src/methods/shortestPath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAGvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAShE,OAAgC,EAC9B,KAAK,oBAAoB,EAG1B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAK1E,KAAK,mBAAmB,GAAG,oBAAoB,GAAG;IAChD,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,mBAAwB,GAChC,WAAW,CAmHb"}
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = shortestPath;
40
+ const buildGraphTemporalCostStateSql_js_1 = __importDefault(require("../helpers/buildGraphTemporalCostStateSql.js"));
41
+ const prepareGraphRouteSql_js_1 = require("../helpers/prepareGraphRouteSql.js");
42
+ const graphRouteResultSchema_js_1 = __importDefault(require("../helpers/graphRouteResultSchema.js"));
43
+ const graphRouteResultSelect_js_1 = __importDefault(require("../helpers/graphRouteResultSelect.js"));
44
+ const prepareGraphTemporalSql_js_1 = __importStar(require("../helpers/prepareGraphTemporalSql.js"));
45
+ const queueGraphResult_js_1 = __importDefault(require("../helpers/queueGraphResult.js"));
46
+ const quoteIdentifier_js_1 = __importDefault(require("../helpers/quoteIdentifier.js"));
47
+ const validateGraphTemporalEvents_js_1 = __importDefault(require("../helpers/validateGraphTemporalEvents.js"));
48
+ function shortestPath(simpleTable, sourceColumn, targetColumn, edgeId, start, end, options = {}) {
49
+ if (typeof sourceColumn !== "string") {
50
+ throw new TypeError("shortestPath() sourceColumn must be a string.");
51
+ }
52
+ if (typeof targetColumn !== "string") {
53
+ throw new TypeError("shortestPath() targetColumn must be a string.");
54
+ }
55
+ if (typeof edgeId !== "string") {
56
+ throw new TypeError("shortestPath() edgeId must be a string.");
57
+ }
58
+ if (options === null || typeof options !== "object" || Array.isArray(options)) {
59
+ throw new TypeError("shortestPath() options must be an object.");
60
+ }
61
+ if (options.direction !== undefined &&
62
+ !["outgoing", "incoming", "both"].includes(options.direction)) {
63
+ throw new TypeError('shortestPath() options.direction must be "outgoing", "incoming", or "both".');
64
+ }
65
+ if (options.weight !== undefined && typeof options.weight !== "string") {
66
+ throw new TypeError("shortestPath() options.weight must be a string.");
67
+ }
68
+ if (options.outputTable !== undefined &&
69
+ typeof options.outputTable !== "string" &&
70
+ typeof options.outputTable !== "boolean") {
71
+ throw new TypeError("shortestPath() options.outputTable must be a string or boolean.");
72
+ }
73
+ const endpoints = (0, prepareGraphRouteSql_js_1.prepareGraphRouteEndpoints)(start, end, "shortestPath()");
74
+ const direction = options.direction ?? "outgoing";
75
+ const temporalOptions = (0, prepareGraphTemporalSql_js_1.prepareGraphTemporalOptions)(options, direction, "shortestPath()");
76
+ options = structuredClone(options);
77
+ const parameters = {
78
+ sourceColumn,
79
+ targetColumn,
80
+ edgeId,
81
+ start,
82
+ end,
83
+ options,
84
+ };
85
+ return (0, queueGraphResult_js_1.default)(simpleTable, {
86
+ method: "shortestPath()",
87
+ parameters,
88
+ outputTable: options.outputTable,
89
+ preflight: temporalOptions === undefined
90
+ ? undefined
91
+ : (input) => (0, validateGraphTemporalEvents_js_1.default)(input, temporalOptions, "shortestPath()", parameters),
92
+ values: (schema) => {
93
+ (0, prepareGraphRouteSql_js_1.validateGraphRouteInputs)(schema, sourceColumn, targetColumn, edgeId, endpoints, options.weight, "shortestPath()");
94
+ const temporal = temporalOptions === undefined
95
+ ? undefined
96
+ : (0, prepareGraphTemporalSql_js_1.default)(schema, temporalOptions, "shortestPath()");
97
+ return temporal === undefined
98
+ ? endpoints.values.values
99
+ : [temporal.gapParameter, ...endpoints.values.values];
100
+ },
101
+ buildSelect: (input, schema) => shortestPathSelect(input, schema, sourceColumn, targetColumn, edgeId, endpoints, direction, options.weight, temporalOptions),
102
+ outputSchema: (schema) => {
103
+ const validated = (0, prepareGraphRouteSql_js_1.validateGraphRouteInputs)(schema, sourceColumn, targetColumn, edgeId, endpoints, options.weight, "shortestPath()");
104
+ if (temporalOptions !== undefined) {
105
+ (0, prepareGraphTemporalSql_js_1.default)(schema, temporalOptions, "shortestPath()");
106
+ }
107
+ return (0, graphRouteResultSchema_js_1.default)(schema, validated.distanceType, "shortestPath()");
108
+ },
109
+ });
110
+ }
111
+ function shortestPathSelect(input, schema, source, target, edgeId, routeEndpoints, direction, weight, temporalOptions) {
112
+ const route = (0, prepareGraphRouteSql_js_1.prepareGraphRouteSql)(input, schema, source, target, edgeId, routeEndpoints, weight, "shortestPath()");
113
+ const prepared = route.traversal;
114
+ if (temporalOptions !== undefined) {
115
+ const temporal = (0, prepareGraphTemporalSql_js_1.default)(schema, temporalOptions, "shortestPath()");
116
+ return temporalShortestPathSelect(route, direction, temporal);
117
+ }
118
+ const distanceType = route.distanceType;
119
+ // Exact shortest routes have optimal prefixes. Floating addition can erase
120
+ // a prefix-cost difference later, so retain all simple prefixes up to the
121
+ // best complete cost before selecting the full-route ties.
122
+ const floating = route.weightType === "FLOAT" ||
123
+ route.weightType === "DOUBLE";
124
+ const relations = prepared.relationNames([
125
+ "graph_route_endpoints",
126
+ "graph_edges",
127
+ "graph_nodes",
128
+ "graph_to_end",
129
+ "graph_distances",
130
+ "graph_best_total",
131
+ "graph_routes",
132
+ "graph_shortest_routes",
133
+ "graph_ranked_routes",
134
+ ]);
135
+ const endpointRelation = relations.graph_route_endpoints;
136
+ const edgesRelation = relations.graph_edges;
137
+ const nodesRelation = relations.graph_nodes;
138
+ const toEndRelation = relations.graph_to_end;
139
+ const distancesRelation = relations.graph_distances;
140
+ const bestTotalRelation = relations.graph_best_total;
141
+ const routesRelation = relations.graph_routes;
142
+ const shortestRelation = relations.graph_shortest_routes;
143
+ const rankedRelation = relations.graph_ranked_routes;
144
+ const q = quoteIdentifier_js_1.default;
145
+ const edgeFromKey = `${q("edges")}.${q("__from_key")}`;
146
+ const edgeToKey = `${q("edges")}.${q("__to_key")}`;
147
+ const edgeTo = `${q("edges")}.${q("__to")}`;
148
+ const edgeCost = `${q("edges")}.${q("__weight")}`;
149
+ const routeDistance = `${q("routes")}.${q("distance")}`;
150
+ const candidateDistance = `CAST(${routeDistance} + ${edgeCost} AS ${distanceType})`;
151
+ return `WITH RECURSIVE ${endpointRelation}(
152
+ ${q("start")}, ${q("end")}, ${q("__start_key")}, ${q("__end_key")}
153
+ ) AS (
154
+ SELECT ${q("start")}, ${q("end")},
155
+ ${prepared.key(q("start"))}, ${prepared.key(q("end"))}
156
+ FROM (SELECT ${route.endpointValue} AS ${q("start")},
157
+ ${route.endpointValue} AS ${q("end")}) AS ${q("values")}
158
+ ), ${edgesRelation} AS (
159
+ ${prepared.edges(direction, [
160
+ `${route.typedEdgeId} AS ${q("__edge_id")}`,
161
+ `${route.edgeKey} AS ${q("__edge_key")}`,
162
+ `${route.edgeWeight} AS ${q("__weight")}`,
163
+ ])}
164
+ ), ${nodesRelation} AS (
165
+ SELECT ${q("__from_key")} AS ${q("__key")} FROM ${edgesRelation}
166
+ UNION
167
+ SELECT ${q("__to_key")} AS ${q("__key")} FROM ${edgesRelation}
168
+ ), ${toEndRelation}(${q("__key")}) AS (
169
+ SELECT ${q("__end_key")}
170
+ FROM ${endpointRelation}
171
+ INNER JOIN ${nodesRelation}
172
+ ON ${q("__end_key")} = ${q("__key")}
173
+ UNION
174
+ SELECT ${edgeFromKey}
175
+ FROM ${toEndRelation} AS ${q("reached")}
176
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
177
+ ON ${q("reached")}.${q("__key")} = ${edgeToKey}
178
+ ), ${distancesRelation}(
179
+ ${q("node")}, ${q("__node_key")}, ${q("distance")}
180
+ ) USING KEY(${q("__node_key")}) AS (
181
+ SELECT ${q("start")}, ${q("__start_key")},
182
+ CAST(0 AS ${distanceType})
183
+ FROM ${endpointRelation}
184
+ INNER JOIN ${toEndRelation}
185
+ ON ${q("__start_key")} = ${q("__key")}
186
+ UNION
187
+ SELECT ${edgeTo}, ${edgeToKey},
188
+ MIN(CAST(${q("reached")}.${q("distance")} + ${edgeCost} AS ${distanceType}))
189
+ FROM ${distancesRelation} AS ${q("reached")}
190
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
191
+ ON ${q("reached")}.${q("__node_key")} = ${edgeFromKey}
192
+ INNER JOIN ${toEndRelation} AS ${q("can_reach_end")}
193
+ ON ${edgeToKey} = ${q("can_reach_end")}.${q("__key")}
194
+ LEFT JOIN recurring.${distancesRelation} AS ${q("best")}
195
+ ON ${edgeToKey} = ${q("best")}.${q("__node_key")}
196
+ GROUP BY ${edgeTo}, ${edgeToKey}, ${q("best")}.${q("distance")}
197
+ HAVING ${q("best")}.${q("distance")} IS NULL
198
+ OR MIN(CAST(${q("reached")}.${q("distance")} + ${edgeCost} AS ${distanceType})) < ${q("best")}.${q("distance")}
199
+ ), ${bestTotalRelation} AS (
200
+ SELECT ${q("distances")}.${q("distance")}
201
+ FROM ${distancesRelation} AS ${q("distances")}
202
+ INNER JOIN ${endpointRelation}
203
+ ON ${q("distances")}.${q("__node_key")} = ${q("__end_key")}
204
+ ), ${routesRelation}(
205
+ ${q("node")}, ${q("__node_key")}, ${q("__visited")},
206
+ ${q("__edge_keys")}, ${q("steps")}, ${q("distance")}
207
+ ) AS (
208
+ SELECT ${q("start")}, ${q("__start_key")},
209
+ [${q("__start_key")}], CAST([] AS ${route.keyType}[]),
210
+ CAST([] AS ${route.stepType}[]), CAST(0 AS ${distanceType})
211
+ FROM ${endpointRelation}
212
+ INNER JOIN ${bestTotalRelation} ON TRUE
213
+ UNION ALL
214
+ SELECT ${edgeTo}, ${edgeToKey},
215
+ list_append(${q("routes")}.${q("__visited")}, ${edgeToKey}),
216
+ list_append(${q("routes")}.${q("__edge_keys")}, ${q("edges")}.${q("__edge_key")}),
217
+ list_append(${q("routes")}.${q("steps")}, struct_pack(
218
+ ${q("edgeId")} := ${q("edges")}.${q("__edge_id")},
219
+ ${q("source")} := ${q("edges")}.${q("__from")},
220
+ ${q("target")} := ${edgeTo},
221
+ ${q("weight")} := ${edgeCost},
222
+ ${q("distance")} := ${candidateDistance}
223
+ )), ${candidateDistance}
224
+ FROM ${routesRelation} AS ${q("routes")}
225
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
226
+ ON ${q("routes")}.${q("__node_key")} = ${edgeFromKey}
227
+ INNER JOIN ${toEndRelation} AS ${q("can_reach_end")}
228
+ ON ${edgeToKey} = ${q("can_reach_end")}.${q("__key")}
229
+ INNER JOIN ${bestTotalRelation} AS ${q("best_total")}
230
+ ON TRUE
231
+ ${floating ? "" : `INNER JOIN ${distancesRelation} AS ${q("best_prefix")}
232
+ ON ${edgeToKey} = ${q("best_prefix")}.${q("__node_key")}`}
233
+ CROSS JOIN ${endpointRelation}
234
+ WHERE ${q("routes")}.${q("__node_key")} <> ${q("__end_key")}
235
+ AND NOT list_contains(${q("routes")}.${q("__visited")}, ${edgeToKey})
236
+ AND ${floating
237
+ ? `${candidateDistance} <= ${q("best_total")}.${q("distance")}`
238
+ : `${candidateDistance} = ${q("best_prefix")}.${q("distance")}`}
239
+ ), ${shortestRelation} AS (
240
+ SELECT ${q("__edge_keys")}, ${q("steps")}
241
+ FROM ${routesRelation}
242
+ CROSS JOIN ${endpointRelation}
243
+ CROSS JOIN ${bestTotalRelation} AS ${q("best_total")}
244
+ WHERE ${q("__node_key")} = ${q("__end_key")}
245
+ AND ${routesRelation}.${q("distance")} = ${q("best_total")}.${q("distance")}
246
+ ), ${rankedRelation} AS (
247
+ SELECT CAST(row_number() OVER (ORDER BY ${q("__edge_keys")}) - 1 AS BIGINT) AS ${q("pathId")},
248
+ ${q("steps")}
249
+ FROM ${shortestRelation}
250
+ )
251
+ ${(0, graphRouteResultSelect_js_1.default)(rankedRelation, route.input, route.edgeIdColumn)}`;
252
+ }
253
+ function temporalShortestPathSelect(route, direction, temporal) {
254
+ const prepared = route.traversal;
255
+ const q = quoteIdentifier_js_1.default;
256
+ const startsSelect = `SELECT ${q("start")},
257
+ ${prepared.key(q("start"))} AS ${q("__key")}
258
+ FROM (SELECT ${route.endpointValue} AS ${q("start")}) AS ${q("values")}`;
259
+ // Non-negative weights and no maximum gap let cycles be removed from walks.
260
+ // Their optimum bounds simple routes; retain separate histories for all ties.
261
+ const costs = (0, buildGraphTemporalCostStateSql_js_1.default)(prepared, startsSelect, direction, temporal, route.distanceType, route.edgeWeight, [
262
+ `${route.typedEdgeId} AS ${q("__edge_id")}`,
263
+ `${route.edgeKey} AS ${q("__edge_key")}`,
264
+ ]);
265
+ const relations = prepared.relationNames([
266
+ "graph_route_endpoints",
267
+ "graph_nodes",
268
+ "graph_to_end",
269
+ "graph_best_total",
270
+ "graph_routes",
271
+ "graph_shortest_routes",
272
+ "graph_ranked_routes",
273
+ ]);
274
+ const endpointRelation = relations.graph_route_endpoints;
275
+ const nodesRelation = relations.graph_nodes;
276
+ const toEndRelation = relations.graph_to_end;
277
+ const bestTotalRelation = relations.graph_best_total;
278
+ const routesRelation = relations.graph_routes;
279
+ const shortestRelation = relations.graph_shortest_routes;
280
+ const rankedRelation = relations.graph_ranked_routes;
281
+ const edgesRelation = costs.edgesRelation;
282
+ const edgeFromKey = `${q("edges")}.${q("__from_key")}`;
283
+ const edgeToKey = `${q("edges")}.${q("__to_key")}`;
284
+ const edgeTo = `${q("edges")}.${q("__to")}`;
285
+ const edgeCost = `${q("edges")}.${q("__weight")}`;
286
+ const edgeKey = `${q("edges")}.${q("__edge_key")}`;
287
+ const routeDistance = `${q("routes")}.${q("distance")}`;
288
+ const candidateDistance = `CAST(${routeDistance} + ${edgeCost} AS ${route.distanceType})`;
289
+ const gap = `${q("settings")}.${q("__gap")}`;
290
+ const step = (distance) => `struct_pack(
291
+ ${q("edgeId")} := ${q("edges")}.${q("__edge_id")},
292
+ ${q("source")} := ${q("edges")}.${q("__from")},
293
+ ${q("target")} := ${edgeTo},
294
+ ${q("weight")} := ${edgeCost},
295
+ ${q("distance")} := ${distance}
296
+ )`;
297
+ return `${costs.withClause}, ${endpointRelation}(
298
+ ${q("start")}, ${q("end")}, ${q("__start_key")}, ${q("__end_key")}
299
+ ) AS (
300
+ SELECT ${q("starts")}.${q("start")}, ${q("values")}.${q("end")},
301
+ ${q("starts")}.${q("__key")},
302
+ ${prepared.key(`${q("values")}.${q("end")}`)}
303
+ FROM ${costs.startsRelation} AS ${q("starts")}
304
+ CROSS JOIN (SELECT ${route.endpointValue} AS ${q("end")}) AS ${q("values")}
305
+ ), ${nodesRelation} AS (
306
+ SELECT ${q("__from_key")} AS ${q("__key")} FROM ${edgesRelation}
307
+ UNION
308
+ SELECT ${q("__to_key")} AS ${q("__key")} FROM ${edgesRelation}
309
+ ), ${toEndRelation}(${q("__key")}) AS (
310
+ SELECT ${q("__end_key")}
311
+ FROM ${endpointRelation}
312
+ INNER JOIN ${nodesRelation}
313
+ ON ${q("__end_key")} = ${q("__key")}
314
+ UNION
315
+ SELECT ${edgeFromKey}
316
+ FROM ${toEndRelation} AS ${q("reached")}
317
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
318
+ ON ${q("reached")}.${q("__key")} = ${edgeToKey}
319
+ ), ${bestTotalRelation} AS (
320
+ SELECT MIN(${q("costs")}.${q("distance")}) AS ${q("distance")}
321
+ FROM ${costs.costRelation} AS ${q("costs")}
322
+ INNER JOIN ${endpointRelation}
323
+ ON ${q("costs")}.${q("__node_key")} = ${q("__end_key")}
324
+ ), ${routesRelation}(
325
+ ${q("node")}, ${q("__node_key")}, ${q("__visited")},
326
+ ${q("__edge_keys")}, ${q("steps")}, ${q("distance")},
327
+ ${q("__event_id")}, ${q("__event_start")}, ${q("__event_end")}
328
+ ) AS (
329
+ SELECT ${edgeTo}, ${edgeToKey},
330
+ [${q("__start_key")}, ${edgeToKey}], [${edgeKey}],
331
+ [${step(edgeCost)}], ${edgeCost},
332
+ ${q("edges")}.${q("__event_id")},
333
+ ${q("edges")}.${q("__event_start")},
334
+ ${q("edges")}.${q("__event_end")}
335
+ FROM ${endpointRelation}
336
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
337
+ ON ${q("__start_key")} = ${edgeFromKey}
338
+ INNER JOIN ${toEndRelation} AS ${q("can_reach_end")}
339
+ ON ${edgeToKey} = ${q("can_reach_end")}.${q("__key")}
340
+ INNER JOIN ${bestTotalRelation} AS ${q("best_total")}
341
+ ON ${edgeCost} <= ${q("best_total")}.${q("distance")}
342
+ WHERE ${q("__start_key")} <> ${edgeToKey}
343
+ UNION ALL
344
+ SELECT ${edgeTo}, ${edgeToKey},
345
+ list_append(${q("routes")}.${q("__visited")}, ${edgeToKey}),
346
+ list_append(${q("routes")}.${q("__edge_keys")}, ${edgeKey}),
347
+ list_append(${q("routes")}.${q("steps")}, ${step(candidateDistance)}),
348
+ ${candidateDistance}, ${q("edges")}.${q("__event_id")},
349
+ ${q("edges")}.${q("__event_start")},
350
+ ${q("edges")}.${q("__event_end")}
351
+ FROM ${routesRelation} AS ${q("routes")}
352
+ INNER JOIN ${edgesRelation} AS ${q("edges")}
353
+ ON ${q("routes")}.${q("__node_key")} = ${edgeFromKey}
354
+ INNER JOIN ${toEndRelation} AS ${q("can_reach_end")}
355
+ ON ${edgeToKey} = ${q("can_reach_end")}.${q("__key")}
356
+ INNER JOIN ${bestTotalRelation} AS ${q("best_total")}
357
+ ON ${candidateDistance} <= ${q("best_total")}.${q("distance")}
358
+ CROSS JOIN ${endpointRelation}
359
+ CROSS JOIN ${costs.settingsRelation} AS ${q("settings")}
360
+ WHERE ${q("routes")}.${q("__node_key")} <> ${q("__end_key")}
361
+ AND NOT list_contains(${q("routes")}.${q("__visited")}, ${edgeToKey})
362
+ AND ${temporal.transition("routes", "edges", direction, gap)}
363
+ ), ${shortestRelation} AS (
364
+ SELECT ${q("__edge_keys")}, ${q("steps")}
365
+ FROM ${routesRelation} AS ${q("routes")}
366
+ CROSS JOIN ${endpointRelation}
367
+ CROSS JOIN ${bestTotalRelation} AS ${q("best_total")}
368
+ WHERE ${q("__node_key")} = ${q("__end_key")}
369
+ AND ${routeDistance} = ${q("best_total")}.${q("distance")}
370
+ ), ${rankedRelation} AS (
371
+ SELECT CAST(row_number() OVER (ORDER BY ${q("__edge_keys")}) - 1 AS BIGINT)
372
+ AS ${q("pathId")}, ${q("steps")}
373
+ FROM ${shortestRelation}
374
+ )
375
+ ${(0, graphRouteResultSelect_js_1.default)(rankedRelation, route.input, route.edgeIdColumn)}`;
376
+ }