@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.3

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 (446) hide show
  1. package/bin/BinObjects.js +17 -0
  2. package/bin/cliOperations.js +157 -0
  3. package/bin/copyDb.ts +280 -0
  4. package/bin/harper.js +156 -0
  5. package/bin/install.js +15 -0
  6. package/bin/lite.js +5 -0
  7. package/bin/restart.js +201 -0
  8. package/bin/run.js +409 -0
  9. package/bin/status.js +65 -0
  10. package/bin/stop.js +22 -0
  11. package/bin/upgrade.js +134 -0
  12. package/components/Application.ts +646 -0
  13. package/components/ApplicationScope.ts +49 -0
  14. package/components/Component.ts +53 -0
  15. package/components/ComponentV1.ts +342 -0
  16. package/components/DEFAULT_CONFIG.ts +18 -0
  17. package/components/EntryHandler.ts +227 -0
  18. package/components/Logger.ts +14 -0
  19. package/components/OptionsWatcher.ts +354 -0
  20. package/components/PluginModule.ts +6 -0
  21. package/components/Scope.ts +329 -0
  22. package/components/componentLoader.ts +529 -0
  23. package/components/deriveCommonPatternBase.ts +31 -0
  24. package/components/deriveGlobOptions.ts +44 -0
  25. package/components/deriveURLPath.ts +57 -0
  26. package/components/operations.js +658 -0
  27. package/components/operationsValidation.js +246 -0
  28. package/components/packageComponent.ts +39 -0
  29. package/components/requestRestart.ts +26 -0
  30. package/components/resolveBaseURLPath.ts +38 -0
  31. package/components/status/ComponentStatus.ts +110 -0
  32. package/components/status/ComponentStatusRegistry.ts +251 -0
  33. package/components/status/api.ts +153 -0
  34. package/components/status/crossThread.ts +405 -0
  35. package/components/status/errors.ts +152 -0
  36. package/components/status/index.ts +44 -0
  37. package/components/status/internal.ts +65 -0
  38. package/components/status/registry.ts +12 -0
  39. package/components/status/types.ts +96 -0
  40. package/config/RootConfigWatcher.ts +59 -0
  41. package/config/configHelpers.ts +11 -0
  42. package/config/configUtils.js +967 -0
  43. package/config/harperConfigEnvVars.ts +641 -0
  44. package/dataLayer/CreateAttributeObject.js +25 -0
  45. package/dataLayer/CreateTableObject.js +11 -0
  46. package/dataLayer/DataLayerObjects.js +43 -0
  47. package/dataLayer/DeleteBeforeObject.js +22 -0
  48. package/dataLayer/DeleteObject.js +25 -0
  49. package/dataLayer/DropAttributeObject.js +11 -0
  50. package/dataLayer/GetBackupObject.js +22 -0
  51. package/dataLayer/InsertObject.js +24 -0
  52. package/dataLayer/ReadAuditLogObject.js +24 -0
  53. package/dataLayer/SQLSearch.js +1335 -0
  54. package/dataLayer/SearchByConditionsObject.js +61 -0
  55. package/dataLayer/SearchByHashObject.js +21 -0
  56. package/dataLayer/SearchObject.js +45 -0
  57. package/dataLayer/SqlSearchObject.js +14 -0
  58. package/dataLayer/UpdateObject.js +23 -0
  59. package/dataLayer/UpsertObject.js +23 -0
  60. package/dataLayer/bulkLoad.js +813 -0
  61. package/dataLayer/dataObjects/BulkLoadObjects.js +27 -0
  62. package/dataLayer/dataObjects/UpsertObject.js +23 -0
  63. package/dataLayer/delete.js +164 -0
  64. package/dataLayer/export.js +381 -0
  65. package/dataLayer/getBackup.js +40 -0
  66. package/dataLayer/harperBridge/BridgeMethods.js +81 -0
  67. package/dataLayer/harperBridge/ResourceBridge.ts +633 -0
  68. package/dataLayer/harperBridge/bridgeUtility/insertUpdateReturnObj.js +28 -0
  69. package/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +88 -0
  70. package/dataLayer/harperBridge/harperBridge.js +21 -0
  71. package/dataLayer/harperBridge/lmdbBridge/LMDBBridge.js +119 -0
  72. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +19 -0
  73. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +112 -0
  74. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +67 -0
  75. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +31 -0
  76. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +94 -0
  77. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +98 -0
  78. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +89 -0
  79. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +109 -0
  80. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +107 -0
  81. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +137 -0
  82. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +35 -0
  83. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +111 -0
  84. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +28 -0
  85. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +29 -0
  86. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +207 -0
  87. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +156 -0
  88. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +21 -0
  89. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +30 -0
  90. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbTransaction.js +19 -0
  91. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +64 -0
  92. package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +70 -0
  93. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +22 -0
  94. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBDeleteTransactionObject.js +23 -0
  95. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBInsertTransactionObject.js +22 -0
  96. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBTransactionObject.js +23 -0
  97. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpdateTransactionObject.js +24 -0
  98. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpsertTransactionObject.js +24 -0
  99. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +25 -0
  100. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +21 -0
  101. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +157 -0
  102. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +94 -0
  103. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +39 -0
  104. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +34 -0
  105. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +100 -0
  106. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +371 -0
  107. package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +109 -0
  108. package/dataLayer/hdbInfoController.js +254 -0
  109. package/dataLayer/insert.js +266 -0
  110. package/dataLayer/readAuditLog.js +59 -0
  111. package/dataLayer/schema.js +366 -0
  112. package/dataLayer/schemaDescribe.js +289 -0
  113. package/dataLayer/search.js +60 -0
  114. package/dataLayer/transaction.js +17 -0
  115. package/dataLayer/update.js +124 -0
  116. package/dist/components/Logger.d.ts +12 -0
  117. package/dist/{resources/ResourceInterfaceV2.js → components/Logger.js} +1 -1
  118. package/dist/components/Logger.js.map +1 -0
  119. package/dist/components/Scope.d.ts +14 -4
  120. package/dist/components/Scope.js +18 -10
  121. package/dist/components/Scope.js.map +1 -1
  122. package/dist/components/componentLoader.js +17 -10
  123. package/dist/components/componentLoader.js.map +1 -1
  124. package/dist/components/operations.js +2 -2
  125. package/dist/components/operations.js.map +1 -1
  126. package/dist/config/configUtils.d.ts +1 -1
  127. package/dist/config/configUtils.js +1 -1
  128. package/dist/config/configUtils.js.map +1 -1
  129. package/dist/dataLayer/CreateTableObject.d.ts +2 -2
  130. package/dist/dataLayer/CreateTableObject.js +2 -2
  131. package/dist/dataLayer/CreateTableObject.js.map +1 -1
  132. package/dist/dataLayer/delete.d.ts +1 -1
  133. package/dist/dataLayer/schema.js +6 -5
  134. package/dist/dataLayer/schema.js.map +1 -1
  135. package/dist/dataLayer/schemaDescribe.js +1 -1
  136. package/dist/dataLayer/schemaDescribe.js.map +1 -1
  137. package/dist/index.d.ts +1 -1
  138. package/dist/index.js +2 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/resources/DatabaseTransaction.d.ts +1 -1
  141. package/dist/resources/IterableEventQueue.d.ts +1 -1
  142. package/dist/resources/LMDBTransaction.d.ts +5 -1
  143. package/dist/resources/Resource.d.ts +1 -1
  144. package/dist/resources/ResourceInterface.d.ts +1 -1
  145. package/dist/resources/RocksIndexStore.d.ts +3 -3
  146. package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
  147. package/dist/resources/Table.d.ts +15 -6
  148. package/dist/resources/Table.js +12 -4
  149. package/dist/resources/Table.js.map +1 -1
  150. package/dist/resources/analytics/read.js +32 -22
  151. package/dist/resources/analytics/read.js.map +1 -1
  152. package/dist/resources/analytics/write.js +3 -6
  153. package/dist/resources/analytics/write.js.map +1 -1
  154. package/dist/resources/auditStore.d.ts +3 -3
  155. package/dist/resources/blob.d.ts +25 -2
  156. package/dist/resources/databases.d.ts +12 -2
  157. package/dist/resources/databases.js +22 -19
  158. package/dist/resources/databases.js.map +1 -1
  159. package/dist/resources/search.js +11 -5
  160. package/dist/resources/search.js.map +1 -1
  161. package/dist/resources/transaction.d.ts +2 -1
  162. package/dist/security/auth.js +1 -1
  163. package/dist/security/auth.js.map +1 -1
  164. package/dist/security/cryptoHash.d.ts +2 -2
  165. package/dist/security/jsLoader.js +265 -73
  166. package/dist/security/jsLoader.js.map +1 -1
  167. package/dist/security/keys.js +11 -12
  168. package/dist/security/keys.js.map +1 -1
  169. package/dist/security/user.js +3 -3
  170. package/dist/security/user.js.map +1 -1
  171. package/dist/server/REST.js +16 -2
  172. package/dist/server/REST.js.map +1 -1
  173. package/dist/server/Server.d.ts +2 -1
  174. package/dist/server/Server.js.map +1 -1
  175. package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
  176. package/dist/server/fastifyRoutes.js +2 -0
  177. package/dist/server/fastifyRoutes.js.map +1 -1
  178. package/dist/server/http.js +12 -6
  179. package/dist/server/http.js.map +1 -1
  180. package/dist/server/jobs/JobObject.d.ts +3 -3
  181. package/dist/server/loadRootComponents.js +1 -0
  182. package/dist/server/loadRootComponents.js.map +1 -1
  183. package/dist/server/operationsServer.js +3 -1
  184. package/dist/server/operationsServer.js.map +1 -1
  185. package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
  186. package/dist/server/serverHelpers/Request.d.ts +5 -5
  187. package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
  188. package/dist/server/threads/manageThreads.d.ts +2 -2
  189. package/dist/server/threads/manageThreads.js +52 -35
  190. package/dist/server/threads/manageThreads.js.map +1 -1
  191. package/dist/server/threads/socketRouter.d.ts +1 -1
  192. package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
  193. package/dist/utility/AWS/AWSConnector.d.ts +3 -2
  194. package/dist/utility/common_utils.d.ts +3 -3
  195. package/dist/utility/environment/systemInformation.d.ts +1 -0
  196. package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
  197. package/dist/utility/globalSchema.d.ts +1 -1
  198. package/dist/utility/hdbTerms.d.ts +3 -0
  199. package/dist/utility/hdbTerms.js +3 -0
  200. package/dist/utility/hdbTerms.js.map +1 -1
  201. package/dist/utility/installation.d.ts +2 -4
  202. package/dist/utility/installation.js.map +1 -1
  203. package/dist/utility/lmdb/commonUtility.d.ts +2 -1
  204. package/dist/utility/lmdb/commonUtility.js +20 -13
  205. package/dist/utility/lmdb/commonUtility.js.map +1 -1
  206. package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
  207. package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
  208. package/dist/utility/lmdb/searchUtility.d.ts +2 -1
  209. package/dist/utility/lmdb/writeUtility.d.ts +1 -0
  210. package/dist/utility/logging/harper_logger.d.ts +6 -6
  211. package/dist/utility/processManagement/processManagement.d.ts +1 -1
  212. package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
  213. package/dist/validation/common_validators.d.ts +4 -3
  214. package/dist/validation/configValidator.d.ts +3 -2
  215. package/index.d.ts +56 -0
  216. package/index.js +41 -0
  217. package/json/systemSchema.json +373 -0
  218. package/launchServiceScripts/launchHarperDB.js +3 -0
  219. package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
  220. package/package.json +35 -16
  221. package/resources/DatabaseTransaction.ts +378 -0
  222. package/resources/ErrorResource.ts +57 -0
  223. package/resources/IterableEventQueue.ts +94 -0
  224. package/resources/LMDBTransaction.ts +349 -0
  225. package/resources/RecordEncoder.ts +702 -0
  226. package/resources/RequestTarget.ts +134 -0
  227. package/resources/Resource.ts +789 -0
  228. package/resources/ResourceInterface.ts +221 -0
  229. package/resources/Resources.ts +162 -0
  230. package/resources/RocksIndexStore.ts +70 -0
  231. package/resources/RocksTransactionLogStore.ts +352 -0
  232. package/resources/Table.ts +4531 -0
  233. package/resources/analytics/hostnames.ts +72 -0
  234. package/resources/analytics/metadata.ts +10 -0
  235. package/resources/analytics/read.ts +252 -0
  236. package/resources/analytics/write.ts +803 -0
  237. package/resources/auditStore.ts +556 -0
  238. package/resources/blob.ts +1268 -0
  239. package/resources/crdt.ts +125 -0
  240. package/resources/dataLoader.ts +527 -0
  241. package/resources/databases.ts +1290 -0
  242. package/resources/graphql.ts +221 -0
  243. package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
  244. package/resources/indexes/customIndexes.ts +7 -0
  245. package/resources/indexes/vector.ts +38 -0
  246. package/resources/jsResource.ts +86 -0
  247. package/resources/loadEnv.ts +22 -0
  248. package/resources/login.ts +18 -0
  249. package/resources/openApi.ts +409 -0
  250. package/resources/registrationDeprecated.ts +8 -0
  251. package/resources/replayLogs.ts +136 -0
  252. package/resources/roles.ts +98 -0
  253. package/resources/search.ts +1301 -0
  254. package/resources/tracked.ts +584 -0
  255. package/resources/transaction.ts +89 -0
  256. package/resources/transactionBroadcast.ts +258 -0
  257. package/security/auth.ts +376 -0
  258. package/security/certificateVerification/certificateVerificationSource.ts +84 -0
  259. package/security/certificateVerification/configValidation.ts +107 -0
  260. package/security/certificateVerification/crlVerification.ts +623 -0
  261. package/security/certificateVerification/index.ts +121 -0
  262. package/security/certificateVerification/ocspVerification.ts +148 -0
  263. package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
  264. package/security/certificateVerification/types.ts +128 -0
  265. package/security/certificateVerification/verificationConfig.ts +138 -0
  266. package/security/certificateVerification/verificationUtils.ts +447 -0
  267. package/security/cryptoHash.js +42 -0
  268. package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
  269. package/security/data_objects/PermissionResponseObject.js +115 -0
  270. package/security/data_objects/PermissionTableResponseObject.js +20 -0
  271. package/security/fastifyAuth.js +169 -0
  272. package/security/impersonation.ts +160 -0
  273. package/security/jsLoader.ts +733 -0
  274. package/security/keys.js +948 -0
  275. package/security/permissionsTranslator.js +300 -0
  276. package/security/role.js +218 -0
  277. package/security/tokenAuthentication.ts +228 -0
  278. package/security/user.ts +449 -0
  279. package/server/DurableSubscriptionsSession.ts +503 -0
  280. package/server/REST.ts +407 -0
  281. package/server/Server.ts +89 -0
  282. package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
  283. package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
  284. package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
  285. package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
  286. package/server/fastifyRoutes.ts +205 -0
  287. package/server/graphqlQuerying.ts +700 -0
  288. package/server/http.ts +640 -0
  289. package/server/itc/serverHandlers.js +161 -0
  290. package/server/itc/utility/ITCEventObject.js +10 -0
  291. package/server/jobs/JobObject.js +24 -0
  292. package/server/jobs/jobProcess.js +69 -0
  293. package/server/jobs/jobRunner.js +162 -0
  294. package/server/jobs/jobs.js +304 -0
  295. package/server/loadRootComponents.js +44 -0
  296. package/server/mqtt.ts +485 -0
  297. package/server/nodeName.ts +75 -0
  298. package/server/operationsServer.ts +313 -0
  299. package/server/serverHelpers/Headers.ts +108 -0
  300. package/server/serverHelpers/JSONStream.ts +269 -0
  301. package/server/serverHelpers/OperationFunctionObject.ts +13 -0
  302. package/server/serverHelpers/Request.ts +158 -0
  303. package/server/serverHelpers/contentTypes.ts +637 -0
  304. package/server/serverHelpers/requestTimePlugin.js +57 -0
  305. package/server/serverHelpers/serverHandlers.js +148 -0
  306. package/server/serverHelpers/serverUtilities.ts +473 -0
  307. package/server/serverRegistry.ts +8 -0
  308. package/server/static.ts +187 -0
  309. package/server/status/definitions.ts +37 -0
  310. package/server/status/index.ts +125 -0
  311. package/server/storageReclamation.ts +93 -0
  312. package/server/threads/itc.js +89 -0
  313. package/server/threads/manageThreads.js +596 -0
  314. package/server/threads/socketRouter.ts +360 -0
  315. package/server/threads/threadServer.js +279 -0
  316. package/server/throttle.ts +73 -0
  317. package/sqlTranslator/SelectValidator.js +330 -0
  318. package/sqlTranslator/alasqlFunctionImporter.js +62 -0
  319. package/sqlTranslator/deleteTranslator.js +67 -0
  320. package/sqlTranslator/index.js +242 -0
  321. package/sqlTranslator/sql_statement_bucket.js +472 -0
  322. package/static/defaultConfig.yaml +3 -0
  323. package/studio/web/HDBDogOnly.svg +78 -0
  324. package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
  325. package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
  326. package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
  327. package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
  328. package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
  329. package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
  330. package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
  331. package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
  332. package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
  333. package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
  334. package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
  335. package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
  336. package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
  337. package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
  338. package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
  339. package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
  340. package/studio/web/assets/index-C1G-Jo6n.js +37 -0
  341. package/studio/web/assets/index-C1G-Jo6n.js.map +1 -0
  342. package/studio/web/assets/index-D-CahN0-.js +2 -0
  343. package/studio/web/assets/index-D-CahN0-.js.map +1 -0
  344. package/studio/web/assets/index-DxlZI0PX.js +235 -0
  345. package/studio/web/assets/index-DxlZI0PX.js.map +1 -0
  346. package/studio/web/assets/index-Y2g_iFpU.css +1 -0
  347. package/studio/web/assets/index-jiPwkrsB.css +1 -0
  348. package/studio/web/assets/index.lazy-BUXDDqq9.js +266 -0
  349. package/studio/web/assets/index.lazy-BUXDDqq9.js.map +1 -0
  350. package/studio/web/assets/profiler-CU93QiSW.js +2 -0
  351. package/studio/web/assets/profiler-CU93QiSW.js.map +1 -0
  352. package/studio/web/assets/react-redux-B8k9Ep7e.js +6 -0
  353. package/studio/web/assets/react-redux-B8k9Ep7e.js.map +1 -0
  354. package/studio/web/assets/startRecording-DFeBXGk6.js +3 -0
  355. package/studio/web/assets/startRecording-DFeBXGk6.js.map +1 -0
  356. package/studio/web/fabric-signup-background.webp +0 -0
  357. package/studio/web/fabric-signup-text.png +0 -0
  358. package/studio/web/favicon_purple.png +0 -0
  359. package/studio/web/github-icon.svg +15 -0
  360. package/studio/web/harper-fabric_black.png +0 -0
  361. package/studio/web/harper-fabric_white.png +0 -0
  362. package/studio/web/harper-studio_white.png +0 -0
  363. package/studio/web/index.html +16 -0
  364. package/studio/web/running.css +148 -0
  365. package/studio/web/running.html +147 -0
  366. package/studio/web/running.js +111 -0
  367. package/upgrade/UpgradeObjects.js +13 -0
  368. package/upgrade/directives/directivesController.js +90 -0
  369. package/upgrade/directivesManager.js +139 -0
  370. package/upgrade/upgradePrompt.js +124 -0
  371. package/upgrade/upgradeUtilities.js +28 -0
  372. package/utility/AWS/AWSConnector.js +29 -0
  373. package/utility/OperationFunctionCaller.js +63 -0
  374. package/utility/assignCmdEnvVariables.js +62 -0
  375. package/utility/common_utils.js +867 -0
  376. package/utility/environment/environmentManager.js +208 -0
  377. package/utility/environment/systemInformation.js +355 -0
  378. package/utility/errors/commonErrors.js +267 -0
  379. package/utility/errors/hdbError.js +146 -0
  380. package/utility/functions/date/dateFunctions.js +65 -0
  381. package/utility/functions/geo.js +355 -0
  382. package/utility/functions/sql/alaSQLExtension.js +104 -0
  383. package/utility/globalSchema.js +35 -0
  384. package/utility/hdbTerms.ts +819 -0
  385. package/utility/install/checkJWTTokensExist.js +62 -0
  386. package/utility/install/harperdb.conf +15 -0
  387. package/utility/install/harperdb.service +14 -0
  388. package/utility/install/installer.js +635 -0
  389. package/utility/installation.ts +30 -0
  390. package/utility/lmdb/DBIDefinition.js +20 -0
  391. package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
  392. package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
  393. package/utility/lmdb/OpenDBIObject.js +31 -0
  394. package/utility/lmdb/OpenEnvironmentObject.js +41 -0
  395. package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
  396. package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
  397. package/utility/lmdb/cleanLMDBMap.js +65 -0
  398. package/utility/lmdb/commonUtility.js +130 -0
  399. package/utility/lmdb/deleteUtility.js +128 -0
  400. package/utility/lmdb/environmentUtility.js +477 -0
  401. package/utility/lmdb/searchCursorFunctions.js +187 -0
  402. package/utility/lmdb/searchUtility.js +918 -0
  403. package/utility/lmdb/terms.js +57 -0
  404. package/utility/lmdb/writeUtility.js +407 -0
  405. package/utility/logging/harper_logger.js +876 -0
  406. package/utility/logging/logRotator.js +157 -0
  407. package/utility/logging/logger.ts +24 -0
  408. package/utility/logging/readLog.js +355 -0
  409. package/utility/logging/transactionLog.js +57 -0
  410. package/utility/mount_hdb.js +59 -0
  411. package/utility/npmUtilities.js +102 -0
  412. package/utility/operationPermissions.ts +112 -0
  413. package/utility/operation_authorization.js +836 -0
  414. package/utility/packageUtils.js +55 -0
  415. package/utility/password.ts +99 -0
  416. package/utility/processManagement/processManagement.js +187 -0
  417. package/utility/processManagement/servicesConfig.js +56 -0
  418. package/utility/scripts/restartHdb.js +24 -0
  419. package/utility/scripts/user_data.sh +13 -0
  420. package/utility/signalling.js +36 -0
  421. package/utility/terms/certificates.js +81 -0
  422. package/utility/when.ts +20 -0
  423. package/validation/bulkDeleteValidator.js +24 -0
  424. package/validation/check_permissions.js +19 -0
  425. package/validation/common_validators.js +95 -0
  426. package/validation/configValidator.js +331 -0
  427. package/validation/deleteValidator.js +15 -0
  428. package/validation/fileLoadValidator.js +153 -0
  429. package/validation/insertValidator.js +40 -0
  430. package/validation/installValidator.js +37 -0
  431. package/validation/readLogValidator.js +64 -0
  432. package/validation/role_validation.js +320 -0
  433. package/validation/schemaMetadataValidator.js +42 -0
  434. package/validation/searchValidator.js +166 -0
  435. package/validation/statusValidator.ts +66 -0
  436. package/validation/transactionLogValidator.js +33 -0
  437. package/validation/user_validation.js +55 -0
  438. package/validation/validationWrapper.js +105 -0
  439. package/dist/resources/ResourceInterfaceV2.d.ts +0 -21
  440. package/dist/resources/ResourceInterfaceV2.js.map +0 -1
  441. package/dist/resources/ResourceV2.d.ts +0 -30
  442. package/dist/resources/ResourceV2.js +0 -27
  443. package/dist/resources/ResourceV2.js.map +0 -1
  444. package/dist/resources/analytics/profile.d.ts +0 -2
  445. package/dist/resources/analytics/profile.js +0 -144
  446. package/dist/resources/analytics/profile.js.map +0 -1
@@ -0,0 +1,73 @@
1
+ import { logger } from '../utility/logging/logger.ts';
2
+ const MAX_EVENT_DELAY_TIME = 3000;
3
+ const DEFAULT_MAX_QUEUE_TIME = 20_000; // 20 seconds
4
+ let lastWarning = 0;
5
+ const WARNING_INTERVAL = 30000;
6
+ const EVENT_QUEUE_MONITORING_INTERVAL = 3000;
7
+ let lastEventQueueCheck = performance.now() + EVENT_QUEUE_MONITORING_INTERVAL;
8
+ let averageEventCycleTime = 0;
9
+ /**
10
+ * Throttle function to limit the number of calls to a function so that the event queue doesn't get overwhelmed.
11
+ * @param fn
12
+ * @param onLimitExceeded
13
+ * @param maxQueueTimeLimit
14
+ */
15
+ export function throttle(
16
+ fn: (...args: any) => any,
17
+ onLimitExceeded?: (...args: any) => any,
18
+ maxQueueTimeLimit = DEFAULT_MAX_QUEUE_TIME
19
+ ) {
20
+ let queuedCalls: any[];
21
+ return function (...args: any[]) {
22
+ if (queuedCalls) {
23
+ // this is an estimate of the time an event will take to process, based on the average event cycle time and the queue depth
24
+ if (queuedCalls.length * averageEventCycleTime > maxQueueTimeLimit) {
25
+ return onLimitExceeded(...args);
26
+ }
27
+ return new Promise((resolve, reject) => {
28
+ queuedCalls.push({
29
+ args,
30
+ fn() {
31
+ try {
32
+ const result = fn(...args);
33
+ resolve(result);
34
+ } catch (e) {
35
+ reject(e);
36
+ }
37
+ },
38
+ });
39
+ });
40
+ }
41
+ queuedCalls = [];
42
+ waitForNextCycle(performance.now());
43
+ return fn(...args);
44
+ };
45
+ function waitForNextCycle(startTime: number) {
46
+ setImmediate(() => {
47
+ const now = performance.now();
48
+ // get the decaying/running average of the event cycle time
49
+ averageEventCycleTime = (averageEventCycleTime * 4 + now - startTime) / 5;
50
+ const nextCall = queuedCalls.shift();
51
+ if (nextCall) {
52
+ const { fn: nextFunction } = nextCall;
53
+ nextFunction();
54
+ waitForNextCycle(now);
55
+ } else {
56
+ queuedCalls = null;
57
+ }
58
+ });
59
+ }
60
+ }
61
+ setInterval(() => {
62
+ const now = performance.now();
63
+ if (
64
+ now - lastEventQueueCheck - EVENT_QUEUE_MONITORING_INTERVAL > MAX_EVENT_DELAY_TIME &&
65
+ lastWarning + WARNING_INTERVAL < now
66
+ ) {
67
+ logger.warn?.(
68
+ `JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration`
69
+ );
70
+ lastWarning = now;
71
+ }
72
+ lastEventQueueCheck = now;
73
+ }, EVENT_QUEUE_MONITORING_INTERVAL).unref();
@@ -0,0 +1,330 @@
1
+ 'use strict';
2
+
3
+ const RecursiveIterator = require('recursive-iterator');
4
+ const alasql = require('alasql');
5
+ const clone = require('clone');
6
+ const commonUtils = require('../utility/common_utils.js');
7
+ const { handleHDBError, hdbErrors } = require('../utility/errors/hdbError.js');
8
+ const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
9
+ const { getDatabases } = require('../resources/databases.ts');
10
+
11
+ //exclusion list for validation on group bys
12
+ const customAggregators = ['DISTINCT_ARRAY'];
13
+
14
+ const validateTables = Symbol('validateTables'),
15
+ validateTable = Symbol('validateTable'),
16
+ validateAllColumns = Symbol('validateAllColumns'),
17
+ findColumn = Symbol('findColumn'),
18
+ validateOrderBy = Symbol('validateOrderBy'),
19
+ validateSegment = Symbol('validateSegment'),
20
+ validateColumn = Symbol('validateColumn'),
21
+ setColumnsForTable = Symbol('setColumnsForTable'),
22
+ checkColumnsForAsterisk = Symbol('checkColumnsForAsterisk'),
23
+ validateGroupBy = Symbol('validateGroupBy'),
24
+ hasColumns = Symbol('hasColumns');
25
+
26
+ /**
27
+ * Validates the tables and attributes against the actual schema
28
+ * Validates general SQL rules
29
+ */
30
+ class SelectValidator {
31
+ constructor(statement) {
32
+ this.statement = statement;
33
+ this.attributes = [];
34
+ }
35
+
36
+ /**
37
+ * entry point for validation
38
+ * @returns {*}
39
+ */
40
+ validate() {
41
+ if (!this.statement) {
42
+ throw new Error('invalid sql statement');
43
+ }
44
+
45
+ this[validateTables]();
46
+ this[checkColumnsForAsterisk]();
47
+ this[validateAllColumns]();
48
+ }
49
+
50
+ /**
51
+ * if the statement has columns in it:
52
+ * loops thru the from and join arrays of the AST and passes individual entries into validateTable
53
+ */
54
+ [validateTables]() {
55
+ if (this[hasColumns]()) {
56
+ if (!this.statement.from || this.statement.from.length === 0) {
57
+ throw `no from clause`;
58
+ }
59
+
60
+ this.statement.from.forEach((table) => {
61
+ this[validateTable](table);
62
+ });
63
+
64
+ if (this.statement.joins) {
65
+ this.statement.joins.forEach((join) => {
66
+ join.table.as = join.as;
67
+ this[validateTable](join.table);
68
+ });
69
+ }
70
+ }
71
+ }
72
+
73
+ /**
74
+ * check to see if there are columns in any part of the select
75
+ * @returns {boolean}
76
+ */
77
+ [hasColumns]() {
78
+ let hasColumns = false;
79
+ let iterator = new RecursiveIterator(this.statement);
80
+ for (let { node } of iterator) {
81
+ if (node && node.columnid) {
82
+ hasColumns = true;
83
+ break;
84
+ }
85
+ }
86
+ return hasColumns;
87
+ }
88
+
89
+ /**
90
+ * Checks that the table exists in the schema, adds all of it's attributes to the class level collection this.attributes
91
+ * @param table
92
+ */
93
+ [validateTable](table) {
94
+ if (!table.databaseid) {
95
+ throw `schema not defined for table ${table.tableid}`;
96
+ }
97
+ let databases = getDatabases();
98
+ if (!databases[table.databaseid]) {
99
+ throw handleHDBError(new Error(), HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(table.databaseid), HTTP_STATUS_CODES.NOT_FOUND);
100
+ }
101
+
102
+ if (!databases[table.databaseid][table.tableid]) {
103
+ throw handleHDBError(
104
+ new Error(),
105
+ HDB_ERROR_MSGS.TABLE_NOT_FOUND(table.databaseid, table.tableid),
106
+ HTTP_STATUS_CODES.NOT_FOUND
107
+ );
108
+ }
109
+
110
+ //let theTable = clone(table);
111
+ let schemaTable = databases[table.databaseid][table.tableid];
112
+ /*TODO rather than putting every attribute in an array we will create a Map there will be a map element for every table and every table alias
113
+ (this will create duplicate map elements) this will have downstream effects in comparison functions like findColumn*/
114
+ schemaTable.attributes.forEach((attribute) => {
115
+ let attributeClone = clone(attribute);
116
+ attributeClone.table = clone(table);
117
+ this.attributes.push(attributeClone);
118
+ });
119
+ }
120
+
121
+ /**
122
+ * validates the column against the schema
123
+ * @param column
124
+ * @returns {*[]}
125
+ */
126
+ [findColumn](column) {
127
+ //look to see if this attribute exists on one of the tables we are selecting from
128
+ return this.attributes.filter((attribute) => {
129
+ if (column.tableid) {
130
+ return (
131
+ (attribute.table.as === column.tableid || attribute.table.tableid === column.tableid) &&
132
+ attribute.attribute === column.columnid
133
+ );
134
+ } else {
135
+ return attribute.attribute === column.columnid;
136
+ }
137
+ });
138
+ }
139
+
140
+ /**
141
+ * detects * in the select, if found adds all columns to the select
142
+ */
143
+ [checkColumnsForAsterisk]() {
144
+ let iterator = new RecursiveIterator(this.statement.columns);
145
+
146
+ for (let { node, path } of iterator) {
147
+ //we check the path to make sure the '*' is not wrapped in some form of expression like count(*)
148
+ if (node && node.columnid === '*' && path.indexOf('expression') < 0) {
149
+ this[setColumnsForTable](node.tableid);
150
+ }
151
+ }
152
+ }
153
+
154
+ /**
155
+ * takes a table and adds all of it's columns to the select. if no table it adds every column from every table in the select
156
+ * @param tableName
157
+ */
158
+ [setColumnsForTable](tableName) {
159
+ this.attributes.forEach((attribute) => {
160
+ if (
161
+ (!tableName || (tableName && (attribute.table.tableid === tableName || attribute.table.as === tableName))) &&
162
+ !attribute.relation
163
+ ) {
164
+ this.statement.columns.push(
165
+ new alasql.yy.Column({
166
+ columnid: attribute.attribute,
167
+ tableid: attribute.table.as ? attribute.table.as : attribute.table.tableid,
168
+ })
169
+ );
170
+ }
171
+ });
172
+ }
173
+
174
+ /**
175
+ * passes segments to ValidateSegment for validation
176
+ */
177
+ [validateAllColumns]() {
178
+ this[validateSegment](this.statement.columns, false);
179
+ this[validateSegment](this.statement.joins, false);
180
+ this[validateSegment](this.statement.where, false);
181
+ this[validateGroupBy](this.statement.group, false);
182
+ this[validateSegment](this.statement.order, true);
183
+ }
184
+
185
+ /**
186
+ * iterates the attributes in a segment and validates them against the schema
187
+ * @param segment
188
+ * @param isOrderBy
189
+ * @returns {*}
190
+ */
191
+ [validateSegment](segment, isOrderBy) {
192
+ if (!segment) {
193
+ return;
194
+ }
195
+
196
+ let iterator = new RecursiveIterator(segment);
197
+ let attributes = [];
198
+ for (let { node } of iterator) {
199
+ if (!commonUtils.isEmpty(node) && !commonUtils.isEmpty(node.columnid) && node.columnid !== '*') {
200
+ if (isOrderBy) {
201
+ this[validateOrderBy](node);
202
+ } else {
203
+ attributes.push(this[validateColumn](node));
204
+ }
205
+ }
206
+ }
207
+
208
+ return attributes;
209
+ }
210
+
211
+ /**
212
+ * validation specific for GROUP BY
213
+ * makes sure that the non-aggregate functions and columns from the select are represented in the group by and the columns match the schema
214
+ * @param segment
215
+ */
216
+ [validateGroupBy](segment) {
217
+ if (!segment) {
218
+ return;
219
+ }
220
+ //check select for aggregates and non-aggregates, if it has both non-aggregates need to be in group by
221
+ let selectColumns = [];
222
+ //here we are pulling out all non-aggregate functions into an array for comparison to the group by
223
+ this.statement.columns.forEach((column) => {
224
+ //this keeps white listed custom functions from being validated
225
+ if (column.funcid && customAggregators.indexOf(column.funcid.toUpperCase()) >= 0) {
226
+ return;
227
+ }
228
+
229
+ if (!column.aggregatorid && !column.columnid) {
230
+ //this is to make sure functions or any type of evaluation statement is being compared to the select.
231
+ //i.e. "GROUP BY UPPER(name)" needs to have UPPER(name) in the select
232
+ let columnClone = clone(column);
233
+ delete columnClone.as;
234
+ selectColumns.push(columnClone);
235
+ } else if (column.columnid) {
236
+ let found = this[findColumn](column)[0];
237
+ if (found) {
238
+ selectColumns.push(found);
239
+ }
240
+ }
241
+ });
242
+
243
+ //here we iterate the group by and compare to what is in the select and make sure they match appropriately
244
+ this.statement.group.forEach((groupColumn) => {
245
+ let foundColumn = null;
246
+
247
+ if (!groupColumn.columnid) {
248
+ //TODO can use for of to break out of the loop rather than this janky way
249
+ selectColumns.forEach((column, x) => {
250
+ if (column.toString() === groupColumn.toString()) {
251
+ foundColumn = column;
252
+ selectColumns.splice(x, 1);
253
+ return;
254
+ }
255
+ });
256
+ } else {
257
+ let foundGroupColumn = this[findColumn](groupColumn);
258
+
259
+ if (!foundGroupColumn || foundGroupColumn.length === 0) {
260
+ throw `unknown column '${groupColumn.toString()}' in group by`;
261
+ }
262
+
263
+ if (foundGroupColumn.length > 1) {
264
+ throw `ambiguously defined column '${groupColumn.toString()}' in group by`;
265
+ }
266
+
267
+ //TODO can use for of to break out of the loop rather than this janky way
268
+ selectColumns.forEach((column, x) => {
269
+ if (
270
+ column.attribute === foundGroupColumn[0].attribute &&
271
+ column.table.tableid === foundGroupColumn[0].table.tableid
272
+ ) {
273
+ foundColumn = column;
274
+ selectColumns.splice(x, 1);
275
+ return;
276
+ }
277
+ });
278
+ }
279
+
280
+ if (!foundColumn) {
281
+ throw `group by column '${groupColumn.toString()}' must be in select`;
282
+ }
283
+ });
284
+
285
+ if (selectColumns.length > 0) {
286
+ throw `select column '${
287
+ selectColumns[0].attribute ? selectColumns[0].attribute : selectColumns[0].toString()
288
+ }' must be in group by`;
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Order BY specific validation
294
+ *
295
+ * @param column
296
+ */
297
+ [validateOrderBy](column) {
298
+ let foundColumns = this.statement.columns.filter((col) => col.as === column.columnid);
299
+
300
+ if (foundColumns.length > 1) {
301
+ let columnName = (column.tableid ? column.tableid + '.' : '') + column.columnid;
302
+ throw `ambiguous column reference ${columnName} in order by`;
303
+ } else if (foundColumns.length === 0) {
304
+ this[validateColumn](column);
305
+ }
306
+ }
307
+
308
+ /**
309
+ * validates a column to the schema
310
+ * @param column
311
+ * @returns {*}
312
+ */
313
+ [validateColumn](column) {
314
+ let foundColumns = this[findColumn](column);
315
+
316
+ let columnName = (column.tableid ? column.tableid + '.' : '') + column.columnid;
317
+
318
+ if (foundColumns.length === 0) {
319
+ throw `unknown column ${columnName}`;
320
+ }
321
+
322
+ if (foundColumns.length > 1) {
323
+ throw `ambiguous column reference ${columnName}`;
324
+ }
325
+
326
+ return foundColumns[0];
327
+ }
328
+ }
329
+
330
+ module.exports = SelectValidator;
@@ -0,0 +1,62 @@
1
+ /***
2
+ * alasqlFunctionImporter.js
3
+ *
4
+ * PUrpose of this is to set up a central module to define and import custom functions into alasql
5
+ */
6
+
7
+ const alasqlExtension = require('../utility/functions/sql/alaSQLExtension.js'),
8
+ dateFunctions = require('../utility/functions/date/dateFunctions.js'),
9
+ geo = require('../utility/functions/geo.js');
10
+
11
+ //import the custom function, need to define an upper and lower case version of the function so it is parsed properly in alasql
12
+ module.exports = (alasql) => {
13
+ /*
14
+ AGGREGATE FUNCTIONS
15
+ */
16
+
17
+ alasql.aggr.mad = alasql.aggr.MAD = alasqlExtension.mad;
18
+ alasql.aggr.mean = alasql.aggr.MEAN = alasqlExtension.mean;
19
+ alasql.aggr.mode = alasql.aggr.MODE = alasqlExtension.mode;
20
+ alasql.aggr.prod = alasql.aggr.PROD = alasqlExtension.prod;
21
+ //we are overriding alasql's median function as their algorithm is incorrect
22
+ alasql.aggr.median = alasql.aggr.MEDIAN = alasqlExtension.median;
23
+
24
+ /*
25
+ CUSTOM FUNCTIONS
26
+ */
27
+ alasql.fn.distinct_array = alasql.fn.DISTINCT_ARRAY = alasqlExtension.distinct_array;
28
+ alasql.fn.search_json = alasql.fn.SEARCH_JSON = alasqlExtension.searchJSON;
29
+ alasql.fn.__ala__ = alasql;
30
+
31
+ //Date Functions...
32
+
33
+ alasql.fn.current_date = alasql.fn.CURRENT_DATE = dateFunctions.current_date;
34
+ alasql.fn.current_time = alasql.fn.CURRENT_TIME = dateFunctions.current_time;
35
+ alasql.fn.extract = alasql.fn.EXTRACT = dateFunctions.extract;
36
+ alasql.fn.date = alasql.fn.DATE = dateFunctions.date;
37
+ alasql.fn.date_format = alasql.fn.DATE_FORMAT = dateFunctions.date_format;
38
+ alasql.fn.date_add = alasql.fn.DATE_ADD = dateFunctions.date_add;
39
+ alasql.fn.date_sub = alasql.fn.DATE_SUB = dateFunctions.date_sub;
40
+ alasql.fn.date_diff = alasql.fn.DATE_DIFF = alasql.fn.datediff = alasql.fn.DATEDIFF = dateFunctions.date_diff;
41
+ alasql.fn.now = alasql.fn.NOW = dateFunctions.now;
42
+ alasql.fn.offset_utc = alasql.fn.OFFSET_UTC = dateFunctions.offset_utc;
43
+ alasql.fn.get_server_time = alasql.fn.GET_SERVER_TIME = dateFunctions.get_server_time;
44
+ //GETDATE() and CURRENT_TIMESTAMP reference the date/time value from NOW() in alasql but we need to monkey patch
45
+ // them here as well with the new now logic
46
+ alasql.fn.getdate = alasql.fn.GETDATE = dateFunctions.now;
47
+ alasql.fn.current_timestamp = alasql.fn.CURRENT_TIMESTAMP = dateFunctions.now;
48
+
49
+ /*
50
+ CUSTOM GEO FUNCTIONS
51
+ */
52
+ alasql.fn.geoarea = alasql.fn.GEOAREA = alasql.fn.geoArea = geo.geoArea;
53
+ alasql.fn.geocircle = alasql.fn.GEOCIRCLE = alasql.fn.geoCircle = geo.geoCircle;
54
+ alasql.fn.geocontains = alasql.fn.GEOCONTAINS = alasql.fn.geoContains = geo.geoContains;
55
+ alasql.fn.geoconvert = alasql.fn.GEOCONVERT = alasql.fn.geoConvert = geo.geoConvert;
56
+ alasql.fn.geocrosses = alasql.fn.GEOCROSSES = alasql.fn.geoCrosses = geo.geoCrosses;
57
+ alasql.fn.geodifference = alasql.fn.GEODIFFERENCE = alasql.fn.geoDifference = geo.geoDifference;
58
+ alasql.fn.geodistance = alasql.fn.GEODISTANCE = alasql.fn.geoDistance = geo.geoDistance;
59
+ alasql.fn.geoequal = alasql.fn.GEOEQUAL = alasql.fn.geoEqual = geo.geoEqual;
60
+ alasql.fn.geolength = alasql.fn.GEOLENGTH = alasql.fn.geoLength = geo.geoLength;
61
+ alasql.fn.geonear = alasql.fn.GEONEAR = alasql.fn.geoNear = geo.geoNear;
62
+ };
@@ -0,0 +1,67 @@
1
+ const alasql = require('alasql');
2
+ const search = require('../dataLayer/search.js');
3
+ const log = require('../utility/logging/harper_logger.js');
4
+ const harperBridge = require('../dataLayer/harperBridge/harperBridge.js');
5
+ const util = require('util');
6
+ const hdbUtils = require('../utility/common_utils.js');
7
+ const terms = require('../utility/hdbTerms.ts');
8
+ const globalSchema = require('../utility/globalSchema.js');
9
+
10
+ const RECORD = 'record';
11
+ const SUCCESS = 'successfully deleted';
12
+
13
+ const cbConvertDelete = util.callbackify(convertDelete);
14
+ const pSearchSearch = util.promisify(search.search);
15
+ const pGetTableSchema = util.promisify(globalSchema.getTableSchema);
16
+
17
+ module.exports = {
18
+ convertDelete: cbConvertDelete,
19
+ };
20
+
21
+ function generateReturnMessage(deleteResultsObject) {
22
+ return `${deleteResultsObject.deleted_hashes.length} ${RECORD}${
23
+ deleteResultsObject.deleted_hashes.length === 1 ? `` : `s`
24
+ } ${SUCCESS}`;
25
+ }
26
+
27
+ async function convertDelete({ statement, hdb_user }) {
28
+ //convert this update statement to a search capable statement
29
+ let tableInfo = await pGetTableSchema(statement.table.databaseid, statement.table.tableid);
30
+
31
+ //convert this delete statement to a SQL search capable statement
32
+ hdbUtils.backtickASTSchemaItems(statement);
33
+ let { table: from, where } = statement;
34
+
35
+ let whereString = hdbUtils.isEmpty(where) ? '' : ` WHERE ${where.toString()}`;
36
+ let selectString = `SELECT ${tableInfo.hash_attribute} FROM ${from.toString()} ${whereString}`;
37
+ let searchStatement = alasql.parse(selectString).statements[0];
38
+
39
+ let deleteObj = {
40
+ operation: terms.OPERATIONS_ENUM.DELETE,
41
+ schema: from.databaseid_orig,
42
+ table: from.tableid_orig,
43
+ hdb_user,
44
+ };
45
+
46
+ try {
47
+ //let result = await transaction.writeTransaction(tableInfo.schema, tableInfo.name, async () => {
48
+ deleteObj.records = await pSearchSearch(searchStatement);
49
+ let result = await harperBridge.deleteRecords(deleteObj);
50
+ //});
51
+ //await write.flush({ schema: tableInfo.schema, table: tableInfo.name });
52
+
53
+ if (hdbUtils.isEmptyOrZeroLength(result.message)) {
54
+ result.message = generateReturnMessage(result);
55
+ }
56
+
57
+ delete result.txn_time;
58
+
59
+ return result;
60
+ } catch (err) {
61
+ log.error(err);
62
+ if (err.hdb_code) {
63
+ throw err.message;
64
+ }
65
+ throw err;
66
+ }
67
+ }