datahike-browser-tests 1.0.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 (324) hide show
  1. package/.circleci/config.yml +405 -0
  2. package/.circleci/scripts/gen_ci.clj +194 -0
  3. package/.cirrus.yml +60 -0
  4. package/.clj-kondo/babashka/sci/config.edn +1 -0
  5. package/.clj-kondo/babashka/sci/sci/core.clj +9 -0
  6. package/.clj-kondo/config.edn +95 -0
  7. package/.dir-locals.el +2 -0
  8. package/.github/FUNDING.yml +3 -0
  9. package/.github/ISSUE_TEMPLATE/1-bug-report.yml +68 -0
  10. package/.github/ISSUE_TEMPLATE/2-feature-request.yml +28 -0
  11. package/.github/ISSUE_TEMPLATE/config.yml +6 -0
  12. package/.github/pull_request_template.md +24 -0
  13. package/.github/workflows/native-image.yml +84 -0
  14. package/LICENSE +203 -0
  15. package/README.md +273 -0
  16. package/bb/deps.edn +9 -0
  17. package/bb/resources/github-fingerprints +3 -0
  18. package/bb/resources/native-image-tests/run-bb-pod-tests.clj +162 -0
  19. package/bb/resources/native-image-tests/run-libdatahike-tests +12 -0
  20. package/bb/resources/native-image-tests/run-native-image-tests +74 -0
  21. package/bb/resources/native-image-tests/run-python-tests +22 -0
  22. package/bb/resources/native-image-tests/testconfig.attr-refs.edn +6 -0
  23. package/bb/resources/native-image-tests/testconfig.edn +5 -0
  24. package/bb/resources/template/.settings/org.eclipse.jdt.apt.core.prefs +2 -0
  25. package/bb/resources/template/.settings/org.eclipse.jdt.core.prefs +9 -0
  26. package/bb/resources/template/.settings/org.eclipse.m2e.core.prefs +4 -0
  27. package/bb/resources/template/pom.xml +22 -0
  28. package/bb/src/tools/build.clj +132 -0
  29. package/bb/src/tools/clj_kondo.clj +32 -0
  30. package/bb/src/tools/deploy.clj +26 -0
  31. package/bb/src/tools/examples.clj +19 -0
  32. package/bb/src/tools/npm.clj +100 -0
  33. package/bb/src/tools/python.clj +14 -0
  34. package/bb/src/tools/release.clj +94 -0
  35. package/bb/src/tools/test.clj +148 -0
  36. package/bb/src/tools/version.clj +47 -0
  37. package/bb.edn +269 -0
  38. package/benchmark/src/benchmark/cli.clj +195 -0
  39. package/benchmark/src/benchmark/compare.clj +157 -0
  40. package/benchmark/src/benchmark/config.clj +316 -0
  41. package/benchmark/src/benchmark/measure.clj +187 -0
  42. package/benchmark/src/benchmark/store.clj +190 -0
  43. package/benchmark/test/benchmark/measure_test.clj +156 -0
  44. package/build.clj +30 -0
  45. package/config.edn +49 -0
  46. package/deps.edn +138 -0
  47. package/dev/sandbox.clj +82 -0
  48. package/dev/sandbox.cljs +127 -0
  49. package/dev/sandbox_benchmarks.clj +27 -0
  50. package/dev/sandbox_client.clj +87 -0
  51. package/dev/sandbox_transact_bench.clj +109 -0
  52. package/dev/user.clj +79 -0
  53. package/doc/README.md +96 -0
  54. package/doc/adl/README.md +6 -0
  55. package/doc/adl/adr-000-adr.org +28 -0
  56. package/doc/adl/adr-001-attribute-references.org +15 -0
  57. package/doc/adl/adr-002-build-tooling.org +54 -0
  58. package/doc/adl/adr-003-db-meta-data.md +52 -0
  59. package/doc/adl/adr-004-github-flow.md +40 -0
  60. package/doc/adl/adr-XYZ-template.md +30 -0
  61. package/doc/adl/index.org +3 -0
  62. package/doc/assets/datahike-logo.svg +3 -0
  63. package/doc/assets/datahiking-invoice.org +85 -0
  64. package/doc/assets/hhtree2.png +0 -0
  65. package/doc/assets/network_topology.svg +624 -0
  66. package/doc/assets/perf.png +0 -0
  67. package/doc/assets/schema_mindmap.mm +132 -0
  68. package/doc/assets/schema_mindmap.svg +970 -0
  69. package/doc/assets/temporal_index.mm +74 -0
  70. package/doc/backend-development.md +78 -0
  71. package/doc/bb-pod.md +89 -0
  72. package/doc/benchmarking.md +360 -0
  73. package/doc/bindings/edn-conversion.md +383 -0
  74. package/doc/cli.md +162 -0
  75. package/doc/cljdoc.edn +27 -0
  76. package/doc/cljs-support.md +133 -0
  77. package/doc/config.md +406 -0
  78. package/doc/contributing.md +114 -0
  79. package/doc/datalog-vs-sql.md +210 -0
  80. package/doc/datomic_differences.md +109 -0
  81. package/doc/development/pull-api-ns.md +186 -0
  82. package/doc/development/pull-frame-state-diagram.jpg +0 -0
  83. package/doc/distributed.md +566 -0
  84. package/doc/entity_spec.md +92 -0
  85. package/doc/gc.md +273 -0
  86. package/doc/java-api.md +808 -0
  87. package/doc/javascript-api.md +421 -0
  88. package/doc/libdatahike.md +86 -0
  89. package/doc/logging_and_error_handling.md +43 -0
  90. package/doc/norms.md +66 -0
  91. package/doc/schema-migration.md +85 -0
  92. package/doc/schema.md +287 -0
  93. package/doc/storage-backends.md +363 -0
  94. package/doc/store-id-refactoring.md +596 -0
  95. package/doc/time_variance.md +325 -0
  96. package/doc/unstructured.md +167 -0
  97. package/doc/versioning.md +261 -0
  98. package/examples/basic/README.md +19 -0
  99. package/examples/basic/deps.edn +6 -0
  100. package/examples/basic/docker-compose.yml +13 -0
  101. package/examples/basic/src/examples/core.clj +60 -0
  102. package/examples/basic/src/examples/schema.clj +155 -0
  103. package/examples/basic/src/examples/store.clj +60 -0
  104. package/examples/basic/src/examples/time_travel.clj +185 -0
  105. package/examples/java/.settings/org.eclipse.core.resources.prefs +3 -0
  106. package/examples/java/.settings/org.eclipse.jdt.apt.core.prefs +2 -0
  107. package/examples/java/.settings/org.eclipse.jdt.core.prefs +9 -0
  108. package/examples/java/.settings/org.eclipse.m2e.core.prefs +4 -0
  109. package/examples/java/README.md +162 -0
  110. package/examples/java/pom.xml +62 -0
  111. package/examples/java/src/main/java/examples/QuickStart.java +115 -0
  112. package/examples/java/src/main/java/examples/SchemaExample.java +148 -0
  113. package/examples/java/src/main/java/examples/TimeTravelExample.java +121 -0
  114. package/flake.lock +27 -0
  115. package/flake.nix +27 -0
  116. package/http-server/datahike/http/middleware.clj +75 -0
  117. package/http-server/datahike/http/server.clj +269 -0
  118. package/java/src/datahike/java/Database.java +274 -0
  119. package/java/src/datahike/java/Datahike.java +281 -0
  120. package/java/src/datahike/java/DatahikeGeneratedTest.java +349 -0
  121. package/java/src/datahike/java/DatahikeTest.java +370 -0
  122. package/java/src/datahike/java/EDN.java +170 -0
  123. package/java/src/datahike/java/IEntity.java +11 -0
  124. package/java/src/datahike/java/Keywords.java +161 -0
  125. package/java/src/datahike/java/SchemaFlexibility.java +52 -0
  126. package/java/src/datahike/java/Util.java +219 -0
  127. package/karma.conf.js +19 -0
  128. package/libdatahike/compile-cpp +7 -0
  129. package/libdatahike/src/datahike/impl/LibDatahikeBase.java +203 -0
  130. package/libdatahike/src/datahike/impl/libdatahike.clj +59 -0
  131. package/libdatahike/src/test_cpp.cpp +61 -0
  132. package/npm-package/PUBLISHING.md +140 -0
  133. package/npm-package/README.md +226 -0
  134. package/npm-package/package.template.json +34 -0
  135. package/npm-package/test-isomorphic.ts +281 -0
  136. package/npm-package/test.js +557 -0
  137. package/npm-package/typescript-test.ts +70 -0
  138. package/package.json +16 -0
  139. package/pydatahike/README.md +569 -0
  140. package/pydatahike/pyproject.toml +91 -0
  141. package/pydatahike/setup.py +42 -0
  142. package/pydatahike/src/datahike/__init__.py +134 -0
  143. package/pydatahike/src/datahike/_native.py +250 -0
  144. package/pydatahike/src/datahike/_version.py +2 -0
  145. package/pydatahike/src/datahike/database.py +722 -0
  146. package/pydatahike/src/datahike/edn.py +311 -0
  147. package/pydatahike/src/datahike/py.typed +0 -0
  148. package/pydatahike/tests/conftest.py +17 -0
  149. package/pydatahike/tests/test_basic.py +170 -0
  150. package/pydatahike/tests/test_database.py +51 -0
  151. package/pydatahike/tests/test_edn_conversion.py +299 -0
  152. package/pydatahike/tests/test_query.py +99 -0
  153. package/pydatahike/tests/test_schema.py +55 -0
  154. package/resources/clj-kondo.exports/io.replikativ/datahike/config.edn +5 -0
  155. package/resources/example_server.edn +4 -0
  156. package/shadow-cljs.edn +56 -0
  157. package/src/data_readers.clj +7 -0
  158. package/src/datahike/api/impl.cljc +176 -0
  159. package/src/datahike/api/specification.cljc +633 -0
  160. package/src/datahike/api/types.cljc +261 -0
  161. package/src/datahike/api.cljc +41 -0
  162. package/src/datahike/array.cljc +99 -0
  163. package/src/datahike/cli.clj +166 -0
  164. package/src/datahike/cljs.cljs +6 -0
  165. package/src/datahike/codegen/cli.clj +406 -0
  166. package/src/datahike/codegen/clj_kondo.clj +291 -0
  167. package/src/datahike/codegen/java.clj +403 -0
  168. package/src/datahike/codegen/naming.cljc +33 -0
  169. package/src/datahike/codegen/native.clj +559 -0
  170. package/src/datahike/codegen/pod.clj +488 -0
  171. package/src/datahike/codegen/python.clj +838 -0
  172. package/src/datahike/codegen/report.clj +55 -0
  173. package/src/datahike/codegen/typescript.clj +262 -0
  174. package/src/datahike/codegen/validation.clj +145 -0
  175. package/src/datahike/config.cljc +294 -0
  176. package/src/datahike/connections.cljc +16 -0
  177. package/src/datahike/connector.cljc +265 -0
  178. package/src/datahike/constants.cljc +142 -0
  179. package/src/datahike/core.cljc +297 -0
  180. package/src/datahike/datom.cljc +459 -0
  181. package/src/datahike/db/interface.cljc +119 -0
  182. package/src/datahike/db/search.cljc +305 -0
  183. package/src/datahike/db/transaction.cljc +937 -0
  184. package/src/datahike/db/utils.cljc +338 -0
  185. package/src/datahike/db.cljc +956 -0
  186. package/src/datahike/experimental/unstructured.cljc +126 -0
  187. package/src/datahike/experimental/versioning.cljc +172 -0
  188. package/src/datahike/externs.js +31 -0
  189. package/src/datahike/gc.cljc +69 -0
  190. package/src/datahike/http/client.clj +188 -0
  191. package/src/datahike/http/writer.clj +79 -0
  192. package/src/datahike/impl/entity.cljc +218 -0
  193. package/src/datahike/index/interface.cljc +93 -0
  194. package/src/datahike/index/persistent_set.cljc +469 -0
  195. package/src/datahike/index/utils.cljc +44 -0
  196. package/src/datahike/index.cljc +32 -0
  197. package/src/datahike/js/api.cljs +172 -0
  198. package/src/datahike/js/api_macros.clj +22 -0
  199. package/src/datahike/js.cljs +163 -0
  200. package/src/datahike/json.cljc +209 -0
  201. package/src/datahike/lru.cljc +146 -0
  202. package/src/datahike/migrate.clj +39 -0
  203. package/src/datahike/norm/norm.clj +245 -0
  204. package/src/datahike/online_gc.cljc +252 -0
  205. package/src/datahike/pod.clj +155 -0
  206. package/src/datahike/pull_api.cljc +325 -0
  207. package/src/datahike/query.cljc +1945 -0
  208. package/src/datahike/query_stats.cljc +88 -0
  209. package/src/datahike/readers.cljc +62 -0
  210. package/src/datahike/remote.cljc +218 -0
  211. package/src/datahike/schema.cljc +228 -0
  212. package/src/datahike/schema_cache.cljc +42 -0
  213. package/src/datahike/spec.cljc +101 -0
  214. package/src/datahike/store.cljc +80 -0
  215. package/src/datahike/tools.cljc +308 -0
  216. package/src/datahike/transit.cljc +80 -0
  217. package/src/datahike/writer.cljc +239 -0
  218. package/src/datahike/writing.cljc +362 -0
  219. package/src/deps.cljs +1 -0
  220. package/src-hitchhiker-tree/datahike/index/hitchhiker_tree/insert.cljc +76 -0
  221. package/src-hitchhiker-tree/datahike/index/hitchhiker_tree/upsert.cljc +128 -0
  222. package/src-hitchhiker-tree/datahike/index/hitchhiker_tree.cljc +213 -0
  223. package/test/datahike/backward_compatibility_test/src/backward_test.clj +37 -0
  224. package/test/datahike/integration_test/config_record_file_test.clj +14 -0
  225. package/test/datahike/integration_test/config_record_test.clj +14 -0
  226. package/test/datahike/integration_test/depr_config_uri_test.clj +15 -0
  227. package/test/datahike/integration_test/return_map_test.clj +62 -0
  228. package/test/datahike/integration_test.cljc +67 -0
  229. package/test/datahike/norm/norm_test.clj +124 -0
  230. package/test/datahike/norm/resources/naming-and-sorting-test/001-a1-example.edn +5 -0
  231. package/test/datahike/norm/resources/naming-and-sorting-test/002-a2-example.edn +5 -0
  232. package/test/datahike/norm/resources/naming-and-sorting-test/003-tx-fn-test.edn +1 -0
  233. package/test/datahike/norm/resources/naming-and-sorting-test/004-tx-data-and-tx-fn-test.edn +5 -0
  234. package/test/datahike/norm/resources/naming-and-sorting-test/01-transact-basic-characters.edn +2 -0
  235. package/test/datahike/norm/resources/naming-and-sorting-test/02 add occupation.edn +5 -0
  236. package/test/datahike/norm/resources/naming-and-sorting-test/checksums.edn +12 -0
  237. package/test/datahike/norm/resources/simple-test/001-a1-example.edn +5 -0
  238. package/test/datahike/norm/resources/simple-test/002-a2-example.edn +5 -0
  239. package/test/datahike/norm/resources/simple-test/checksums.edn +4 -0
  240. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/001-a1-example.edn +5 -0
  241. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/002-a2-example.edn +5 -0
  242. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/003-tx-fn-test.edn +1 -0
  243. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/first/checksums.edn +6 -0
  244. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/second/004-tx-data-and-tx-fn-test.edn +5 -0
  245. package/test/datahike/norm/resources/tx-data-and-tx-fn-test/second/checksums.edn +2 -0
  246. package/test/datahike/norm/resources/tx-fn-test/first/001-a1-example.edn +5 -0
  247. package/test/datahike/norm/resources/tx-fn-test/first/002-a2-example.edn +5 -0
  248. package/test/datahike/norm/resources/tx-fn-test/first/checksums.edn +4 -0
  249. package/test/datahike/norm/resources/tx-fn-test/second/003-tx-fn-test.edn +1 -0
  250. package/test/datahike/norm/resources/tx-fn-test/second/checksums.edn +2 -0
  251. package/test/datahike/test/api_test.cljc +895 -0
  252. package/test/datahike/test/array_test.cljc +40 -0
  253. package/test/datahike/test/attribute_refs/datoms_test.cljc +140 -0
  254. package/test/datahike/test/attribute_refs/db_test.cljc +42 -0
  255. package/test/datahike/test/attribute_refs/differences_test.cljc +515 -0
  256. package/test/datahike/test/attribute_refs/entity_test.cljc +89 -0
  257. package/test/datahike/test/attribute_refs/pull_api_test.cljc +320 -0
  258. package/test/datahike/test/attribute_refs/query_find_specs_test.cljc +59 -0
  259. package/test/datahike/test/attribute_refs/query_fns_test.cljc +130 -0
  260. package/test/datahike/test/attribute_refs/query_interop_test.cljc +47 -0
  261. package/test/datahike/test/attribute_refs/query_not_test.cljc +193 -0
  262. package/test/datahike/test/attribute_refs/query_or_test.cljc +137 -0
  263. package/test/datahike/test/attribute_refs/query_pull_test.cljc +156 -0
  264. package/test/datahike/test/attribute_refs/query_rules_test.cljc +176 -0
  265. package/test/datahike/test/attribute_refs/query_test.cljc +241 -0
  266. package/test/datahike/test/attribute_refs/temporal_search.cljc +22 -0
  267. package/test/datahike/test/attribute_refs/transact_test.cljc +220 -0
  268. package/test/datahike/test/attribute_refs/utils.cljc +128 -0
  269. package/test/datahike/test/cache_test.cljc +38 -0
  270. package/test/datahike/test/components_test.cljc +92 -0
  271. package/test/datahike/test/config_test.cljc +158 -0
  272. package/test/datahike/test/core_test.cljc +105 -0
  273. package/test/datahike/test/datom_test.cljc +44 -0
  274. package/test/datahike/test/db_test.cljc +54 -0
  275. package/test/datahike/test/entity_spec_test.cljc +159 -0
  276. package/test/datahike/test/entity_test.cljc +103 -0
  277. package/test/datahike/test/explode_test.cljc +143 -0
  278. package/test/datahike/test/filter_test.cljc +75 -0
  279. package/test/datahike/test/gc_test.cljc +159 -0
  280. package/test/datahike/test/http/server_test.clj +192 -0
  281. package/test/datahike/test/http/writer_test.clj +86 -0
  282. package/test/datahike/test/ident_test.cljc +32 -0
  283. package/test/datahike/test/index_test.cljc +345 -0
  284. package/test/datahike/test/insert.cljc +125 -0
  285. package/test/datahike/test/java_bindings_test.clj +6 -0
  286. package/test/datahike/test/listen_test.cljc +41 -0
  287. package/test/datahike/test/lookup_refs_test.cljc +266 -0
  288. package/test/datahike/test/lru_test.cljc +27 -0
  289. package/test/datahike/test/migrate_test.clj +297 -0
  290. package/test/datahike/test/model/core.cljc +376 -0
  291. package/test/datahike/test/model/invariant.cljc +142 -0
  292. package/test/datahike/test/model/rng.cljc +82 -0
  293. package/test/datahike/test/model_test.clj +217 -0
  294. package/test/datahike/test/nodejs_test.cljs +262 -0
  295. package/test/datahike/test/online_gc_test.cljc +475 -0
  296. package/test/datahike/test/pod_test.clj +369 -0
  297. package/test/datahike/test/pull_api_test.cljc +474 -0
  298. package/test/datahike/test/purge_test.cljc +144 -0
  299. package/test/datahike/test/query_aggregates_test.cljc +101 -0
  300. package/test/datahike/test/query_find_specs_test.cljc +52 -0
  301. package/test/datahike/test/query_fns_test.cljc +523 -0
  302. package/test/datahike/test/query_interop_test.cljc +47 -0
  303. package/test/datahike/test/query_not_test.cljc +189 -0
  304. package/test/datahike/test/query_or_test.cljc +158 -0
  305. package/test/datahike/test/query_pull_test.cljc +147 -0
  306. package/test/datahike/test/query_rules_test.cljc +248 -0
  307. package/test/datahike/test/query_stats_test.cljc +218 -0
  308. package/test/datahike/test/query_test.cljc +984 -0
  309. package/test/datahike/test/schema_test.cljc +424 -0
  310. package/test/datahike/test/specification_test.cljc +30 -0
  311. package/test/datahike/test/store_test.cljc +78 -0
  312. package/test/datahike/test/stress_test.cljc +57 -0
  313. package/test/datahike/test/time_variance_test.cljc +518 -0
  314. package/test/datahike/test/tools_test.clj +134 -0
  315. package/test/datahike/test/transact_test.cljc +518 -0
  316. package/test/datahike/test/tuples_test.cljc +564 -0
  317. package/test/datahike/test/unstructured_test.cljc +291 -0
  318. package/test/datahike/test/upsert_impl_test.cljc +205 -0
  319. package/test/datahike/test/upsert_test.cljc +363 -0
  320. package/test/datahike/test/utils.cljc +110 -0
  321. package/test/datahike/test/validation_test.cljc +48 -0
  322. package/test/datahike/test/versioning_test.cljc +56 -0
  323. package/test/datahike/test.cljc +66 -0
  324. package/tests.edn +24 -0
@@ -0,0 +1,156 @@
1
+ (ns benchmark.measure-test
2
+ (:require [clojure.test :refer [is deftest testing]]
3
+ [benchmark.measure :as b]
4
+ [benchmark.config :as c]))
5
+
6
+ (def options {:output-format "edn"
7
+ :db-samples 1
8
+ :data-types [:int :str]
9
+ :iterations 1,
10
+ :data-found-opts :all
11
+ :tx-entity-counts [1 10]
12
+ :index :all
13
+ :backend :all
14
+ :history :all
15
+ :schema :all
16
+ :tag #{test}
17
+ :function :all
18
+ :query :all
19
+ :cache [0]
20
+ :db-entity-counts [1 10]})
21
+
22
+ ;; -> (count configs) = (count cache) (count index) (count backend) (count history) (count schema) = 16
23
+ ;; -> (count common-loop) = (* (count configs) db-samples iterations (count db-entity-counts)) = 32
24
+
25
+ (deftest transaction-test
26
+ (is (= 64
27
+ ; (* (count common-loop) (count tx-entities-count))
28
+ ; (* 32 2 )
29
+ (count (b/get-measurements (assoc options :function :transaction))))))
30
+
31
+ (deftest query-test
32
+ (testing "single query"
33
+ (is (= 128
34
+ ; (* (count common-loop) (count :data-types) (count :data-found-opts?))
35
+ ; (* 32 2 2 )
36
+ (count (b/get-measurements (assoc options :function :query
37
+ :query :simple-query))))))
38
+ (testing "all queries"
39
+ (is (= 1728
40
+ ; (* (count common-loop) (+ (* (count var-queries) (count :data-types) (count :data-found-opts?))))
41
+ ; (* (count non-var-queries) (count :data-types))
42
+ ; (count aggregate-queries)
43
+ ; (* (count cache-check-queries) (count :data-types) (count :data-found-opts?))
44
+ ; (* 32 (+ (* 6 2 2)
45
+ ; (* 8 2)
46
+ ; 6
47
+ ; (* 2 2 2))
48
+ ; (* (32 54))
49
+ (count (b/get-measurements (assoc options :function :query
50
+ :cache [10])))))))
51
+
52
+ (deftest connection-test
53
+ (let [measurements (b/get-measurements (assoc options :function :connection))]
54
+ (is (= #{:mean :median :std :min :max :count :observations}
55
+ (set (keys (:time (first measurements))))))
56
+ (is (= 1
57
+ (get-in (first measurements) [:time :count])))
58
+ (is (= 32
59
+ ; (count common-loop)
60
+ (count measurements)))))
61
+
62
+ (deftest preset-configs
63
+ (is (= '({:db-datoms 4
64
+ :db-entities 1
65
+ :dh-config {:backend :mem
66
+ :search-cache-size 0
67
+ :store-cache-size 1
68
+ :index :datahike.index/persistent-set
69
+ :keep-history? false
70
+ :schema-flexibility :write}
71
+ :function :connection}
72
+ {:db-datoms 40
73
+ :db-entities 10
74
+ :dh-config {:backend :mem
75
+ :search-cache-size 0
76
+ :store-cache-size 1
77
+ :index :datahike.index/persistent-set
78
+ :keep-history? false
79
+ :schema-flexibility :write}
80
+ :function :connection})
81
+ (map :context (b/get-measurements (assoc options :config-name "mem-set"
82
+ :function :connection)))))
83
+ (is (= '({:db-datoms 4
84
+ :db-entities 1
85
+ :dh-config {:backend :mem
86
+ :search-cache-size 0
87
+ :store-cache-size 1
88
+ :index :datahike.index/persistent-set
89
+ :keep-history? false
90
+ :schema-flexibility :write}
91
+ :function :connection}
92
+ {:db-datoms 40
93
+ :db-entities 10
94
+ :dh-config {:backend :mem
95
+ :search-cache-size 0
96
+ :store-cache-size 1
97
+ :index :datahike.index/persistent-set
98
+ :keep-history? false
99
+ :schema-flexibility :write}
100
+ :function :connection}
101
+ {:db-datoms 4
102
+ :db-entities 1
103
+ :dh-config {:backend :mem
104
+ :search-cache-size 0
105
+ :store-cache-size 1
106
+ :index :datahike.index/hitchhiker-tree
107
+ :keep-history? false
108
+ :schema-flexibility :write}
109
+ :function :connection}
110
+ {:db-datoms 40
111
+ :db-entities 10
112
+ :dh-config {:backend :mem
113
+ :search-cache-size 0
114
+ :store-cache-size 1
115
+ :index :datahike.index/hitchhiker-tree
116
+ :keep-history? false
117
+ :schema-flexibility :write}
118
+ :function :connection}
119
+ {:db-datoms 4
120
+ :db-entities 1
121
+ :dh-config {:backend :file
122
+ :search-cache-size 0
123
+ :store-cache-size 1
124
+ :index :datahike.index/persistent-set
125
+ :keep-history? false
126
+ :schema-flexibility :write}
127
+ :function :connection}
128
+ {:db-datoms 40
129
+ :db-entities 10
130
+ :dh-config {:backend :file
131
+ :search-cache-size 0
132
+ :store-cache-size 1
133
+ :index :datahike.index/persistent-set
134
+ :keep-history? false
135
+ :schema-flexibility :write}
136
+ :function :connection}
137
+ {:db-datoms 4
138
+ :db-entities 1
139
+ :dh-config {:backend :file
140
+ :search-cache-size 0
141
+ :store-cache-size 1
142
+ :index :datahike.index/hitchhiker-tree
143
+ :keep-history? false
144
+ :schema-flexibility :write}
145
+ :function :connection}
146
+ {:db-datoms 40
147
+ :db-entities 10
148
+ :dh-config {:backend :file
149
+ :search-cache-size 0
150
+ :store-cache-size 1
151
+ :index :datahike.index/hitchhiker-tree
152
+ :keep-history? false
153
+ :schema-flexibility :write}
154
+ :function :connection})
155
+ (map :context (b/get-measurements (assoc options :function :connection)
156
+ (vals c/named-db-configs))))))
package/build.clj ADDED
@@ -0,0 +1,30 @@
1
+ (ns build
2
+ (:refer-clojure :exclude [compile])
3
+ (:require [clojure.edn :as edn]
4
+ [clojure.tools.build.api :as b]))
5
+
6
+ (def class-dir "target/classes")
7
+ (def basis (b/create-basis {:project "deps.edn"}))
8
+
9
+ (defn compile-java
10
+ [_]
11
+ (b/javac {:src-dirs ["java"]
12
+ :class-dir class-dir
13
+ :basis basis
14
+ :javac-opts ["--release" "8"
15
+ "-Xlint:deprecation"]}))
16
+
17
+ (defn javadoc
18
+ "Generate Javadoc for the Java API.
19
+ Output will be in target/javadoc and automatically included in the jar."
20
+ [_]
21
+ (b/javadoc {:src-dirs ["java/src"]
22
+ :output-dir "target/javadoc"
23
+ :javadoc-opts ["-public"
24
+ "-Xdoclint:none"
25
+ "-windowtitle" "Datahike Java API"
26
+ "-doctitle" "Datahike Java API Documentation"
27
+ "-link" "https://docs.oracle.com/javase/8/docs/api/"
28
+ "-link" "https://clojure.github.io/clojure/"]})
29
+ (println "Javadoc generated in target/javadoc")
30
+ (println "Javadoc will be automatically published to javadoc.io when released to Clojars"))
package/config.edn ADDED
@@ -0,0 +1,49 @@
1
+ {:org "replikativ"
2
+ :lib "datahike"
3
+ :version {:major 0
4
+ :minor 7}
5
+ :git-url "git@github.com:replikativ/datahike.git"
6
+
7
+ :pom-template "./bb/resources/template/pom.xml"
8
+ :scm {:connection "scm:git:git@github.com:replikativ/datahike.git"
9
+ :developerConnection "scm:git:git@github.com:replikativ/datahike.git"
10
+ :url "https://github.com/replikativ/datahike"}
11
+
12
+ :build {:clj {:src-dirs ["src" "src-kabel" "src-hitchhiker-tree"]
13
+ :resource-dir "resources"
14
+ :java-src-dirs ["java"]
15
+ :target-dir "target"
16
+ :class-dir "target/classes"
17
+ :deps-file "deps.edn"
18
+ :jar-pattern "{{repo.lib}}-{{version-str}}.jar"
19
+ :lib org.replikativ/datahike}
20
+ :http-server-clj {:src-dirs ["src" "http-server" "resources"]
21
+ :java-src-dirs ["java"]
22
+ :target-dir "target-http-server"
23
+ :class-dir "target-http-server/classes"
24
+ :deps-file "deps.edn"
25
+ :jar-pattern "{{repo.lib}}-http-server-{{version-str}}.jar"
26
+ :aliases [:http-server]
27
+ :main datahike.http.server
28
+ :lib org.replikativ/datahike-http-server}
29
+ :native {:src-dirs ["src" "libdatahike/src"]
30
+ :java-src-dirs ["java"]
31
+ :resource-dir "resources"
32
+ :target-dir "target"
33
+ :class-dir "target/classes"
34
+ :deps-file "deps.edn"
35
+ :aliases [:libdatahike]
36
+ :jar-pattern "{{repo.lib}}-{{version-str}}-native-shared-library.jar"
37
+ :main datahike.cli
38
+ ;; native build
39
+ :artifact "libdatahike.zip"
40
+ :project-target-dir "libdatahike/target"
41
+ :project-name "libdatahike"
42
+ :class-path "libdatahike/src"
43
+ :java-interface "libdatahike/src/datahike/impl/LibDatahike.java"}}
44
+
45
+ :release {:native-cli {:target-dir "."
46
+ :binary-name "dthk"
47
+ :zip-pattern "{{lib}}-{{version}}-{{platform}}-{{arch}}.zip"}
48
+ :libdatahike {:target-dir "libdatahike/target"
49
+ :zip-pattern "{{lib}}-{{version}}-{{platform}}-{{arch}}.zip"}}}
package/deps.edn ADDED
@@ -0,0 +1,138 @@
1
+ {:deps {org.clojure/clojure {:mvn/version "1.11.1"}
2
+ org.replikativ/hasch {:mvn/version "0.3.96"
3
+ :exclusions [org.clojure/clojurescript]}
4
+ org.replikativ/konserve {:mvn/version "0.9.345"
5
+ :exclusions [org.clojure/clojurescript
6
+ org.clojars.mmb90/cljs-cache]
7
+ }
8
+ org.replikativ/superv.async {:mvn/version "0.3.50"
9
+ :exclusions [org.clojure/clojurescript]}
10
+ io.replikativ/datalog-parser {:mvn/version "0.2.30"}
11
+ org.replikativ/persistent-sorted-set {:mvn/version "0.4.119"}
12
+ environ/environ {:mvn/version "1.2.0"}
13
+ nrepl/bencode {:mvn/version "1.1.0"}
14
+ com.taoensso/timbre {:mvn/version "6.8.0"}
15
+ junit/junit {:mvn/version "4.13.2"}
16
+ medley/medley {:mvn/version "1.4.0"}
17
+ metosin/spec-tools {:mvn/version "0.10.6"}
18
+ metosin/malli {:mvn/version "0.20.0"}
19
+ mvxcvi/clj-cbor {:mvn/version "1.1.1"}
20
+ org.babashka/http-client {:mvn/version "0.3.11"}
21
+ metosin/jsonista {:mvn/version "0.3.7"}
22
+ com.github.pkpkpk/cljs-cache {:mvn/version "1.0.21"}}
23
+
24
+ :paths ["src" "target/classes" "resources"]
25
+
26
+ :deps/prep-lib {:ensure "target/classes"
27
+ :alias :build
28
+ :fn compile-java}
29
+
30
+ :aliases {;; Development
31
+
32
+ :1.9 {:override-deps {org.clojure/clojure {:mvn/version "1.9.0"}}}
33
+
34
+ :1.10 {:override-deps {org.clojure/clojure {:mvn/version "1.10.0"}}}
35
+
36
+ :cljs {:extra-deps {org.clojure/clojurescript {:mvn/version "1.11.132"}
37
+ thheller/shadow-cljs {:mvn/version "2.28.20"}}
38
+ :extra-paths ["test"]}
39
+
40
+ :dev {:extra-paths ["dev" "benchmark/src"]
41
+ :extra-deps {org.clojure/tools.namespace {:mvn/version "1.4.4"}
42
+ org.clojure/clojurescript {:mvn/version "1.11.132"}
43
+ thheller/shadow-cljs {:mvn/version "2.28.20"}
44
+ clj-http/clj-http {:mvn/version "3.12.3"}
45
+ com.gfredericks/user.clj {:mvn/version "0.1.0"}
46
+ org.clojure/tools.cli {:mvn/version "1.0.219"}
47
+ incanter/incanter-core {:mvn/version "1.9.3"}
48
+ incanter/incanter-charts {:mvn/version "1.9.3"}
49
+ hashp/hashp {:mvn/version "0.2.2"}
50
+ orchestra/orchestra {:mvn/version "2021.01.01-1"}}}
51
+
52
+ :test {:extra-paths ["test" "bechmark/src" "benchmark/test" "http-server" "src-hitchhiker-tree" "src-kabel"]
53
+ :jvm-opts ["-ea"] ;; Enable Java assertions to catch bugs early
54
+ :extra-deps {lambdaisland/kaocha {:mvn/version "1.87.1366"}
55
+ lambdaisland/kaocha-cljs {:mvn/version "1.5.154"}
56
+ org.clojure/test.check {:mvn/version "1.1.1"}
57
+ orchestra/orchestra {:mvn/version "2021.01.01-1"}
58
+
59
+ ;; hitchhiker-tree index (optional, for testing)
60
+ io.replikativ/hitchhiker-tree {:mvn/version "0.2.222"
61
+ :exclusions [org.clojure/clojurescript
62
+ io.replikativ/konserve]}
63
+
64
+ ;; http server
65
+ buddy/buddy-auth {:mvn/version "3.0.323"}
66
+ ring/ring-core {:mvn/version "1.9.5"}
67
+ ring/ring-jetty-adapter {:mvn/version "1.9.5"}
68
+ metosin/reitit {:mvn/version "0.5.18"}
69
+ ring-cors/ring-cors {:mvn/version "0.1.13"}
70
+
71
+ ;; kabel integration for distributed datahike
72
+ org.replikativ/kabel {:mvn/version "0.3.93"}
73
+ is.simm/distributed-scope {:mvn/version "0.1.2"}
74
+ org.replikativ/konserve-sync {:mvn/version "0.1.13"}
75
+ http-kit/http-kit {:mvn/version "2.8.0"}}}
76
+
77
+ :datomic {:extra-deps {com.datomic/datomic-free {:mvn/version "0.9.5703"}}}
78
+
79
+ :ffix {:extra-deps {cljfmt/cljfmt {:mvn/version "0.9.2"}}
80
+ :main-opts ["-m" "cljfmt.main" "fix"]}
81
+
82
+ ;; Build
83
+
84
+ :build {:deps {io.github.clojure/tools.build {:mvn/version "0.9.5"}}
85
+ :ns-default build}
86
+
87
+ :deploy {:extra-deps {slipset/deps-deploy {:mvn/version "0.2.1"}}}
88
+
89
+ :http-server {:extra-paths ["http-server"]
90
+ :extra-deps {buddy/buddy-auth {:mvn/version "3.0.323"}
91
+ ring/ring-core {:mvn/version "1.9.5"}
92
+ ring/ring-jetty-adapter {:mvn/version "1.9.5"}
93
+ metosin/reitit {:mvn/version "0.5.18"}
94
+ ring-cors/ring-cors {:mvn/version "0.1.13"}
95
+ nrepl/bencode {:mvn/version "1.1.0"}
96
+ org.slf4j/slf4j-simple {:mvn/version "2.0.9"}}
97
+ :main-opts ["-m" "datahike.http.server"]}
98
+
99
+ :libdatahike {:main-opts ["-e" "(set! *warn-on-reflection* true)"]
100
+ :extra-paths ["libdatahike/src"]}
101
+
102
+ :native-cli {:main-opts ["-e" "(set! *warn-on-reflection* true)"
103
+ "-m" "clj.native-image" "datahike.cli"
104
+ "--initialize-at-build-time"
105
+ "--no-fallback"
106
+ "-H:IncludeResources=DATAHIKE_VERSION"
107
+ ; "--future-defaults=all"
108
+ "-J-Xmx4g"
109
+ "-o dthk"]
110
+ :jvm-opts ["-Dclojure.compiler.direct-linking=true"]
111
+ :extra-deps
112
+ {clj.native-image/clj.native-image
113
+ {:git/url "https://github.com/taylorwood/clj.native-image.git"
114
+ :sha "7708e7fd4572459c81f6a6b8e44c96f41cdd92d4"}
115
+ com.cognitect/transit-clj {:mvn/version "1.0.333"}
116
+ babashka/pods {:git/url "https://github.com/babashka/pods"
117
+ :git/sha "ed5e1f3390b9dfca564f66b6e79c739c3cd82d78"}}}
118
+
119
+ :pod {:extra-deps {com.cognitect/transit-clj {:mvn/version "1.0.333"}
120
+ babashka/pods {:git/url "https://github.com/babashka/pods"
121
+ :git/sha "ed5e1f3390b9dfca564f66b6e79c739c3cd82d78"}
122
+
123
+ }}
124
+
125
+ ;; Checks
126
+
127
+ :benchmark {:extra-paths ["benchmark/src"]
128
+ :extra-deps {clj-http/clj-http {:mvn/version "3.12.3"}
129
+ org.clojure/tools.cli {:mvn/version "1.0.219"}
130
+ incanter/incanter-core {:mvn/version "1.9.3"}
131
+ incanter/incanter-charts {:mvn/version "1.9.3"}}
132
+ :main-opts ["-m" "benchmark.cli"]}
133
+
134
+ :format {:extra-deps {cljfmt/cljfmt {:mvn/version "0.9.2"}}
135
+ :main-opts ["-m" "cljfmt.main" "check"]}
136
+
137
+ :outdated {:extra-deps {com.github.liquidz/antq {:mvn/version "2.6.1121"}}
138
+ :main-opts ["-m" "antq.core"]}}}
@@ -0,0 +1,82 @@
1
+ (ns sandbox
2
+ (:require [datahike.api :as d]))
3
+
4
+ (comment
5
+
6
+ (def schema [{:db/ident :name
7
+ :db/cardinality :db.cardinality/one
8
+ :db/index true
9
+ :db/unique :db.unique/identity
10
+ :db/valueType :db.type/string}
11
+ {:db/ident :sibling
12
+ :db/cardinality :db.cardinality/many
13
+ :db/valueType :db.type/ref}
14
+ {:db/ident :age
15
+ :db/cardinality :db.cardinality/one
16
+ :db/valueType :db.type/long}])
17
+
18
+ (def cfg {:store {:backend :mem :id "sandbox"}
19
+ :keep-history? true
20
+ :schema-flexibility :write
21
+ :attribute-refs? false})
22
+
23
+ (def cfg {:store {:backend :mem :id "sandbox"}
24
+ :keep-history? true
25
+ :schema-flexibility :write
26
+ :attribute-refs? true})
27
+
28
+ (def conn (do
29
+ (d/delete-database cfg)
30
+ (d/create-database cfg)
31
+ (d/connect cfg)))
32
+
33
+ (d/transact conn schema)
34
+
35
+ (d/datoms @conn :avet)
36
+ (d/datoms @conn :aevt)
37
+ (d/datoms @conn :eavt)
38
+
39
+ (:max-eid @conn)
40
+
41
+ (d/transact conn [{:name "Alice"
42
+ :age 25}])
43
+
44
+ (d/transact conn [{:name "Charlie"
45
+ :age 45
46
+ :sibling [{:name "Alice"} {:name "Bob"}]}])
47
+
48
+ (d/q '[:find ?e ?a ?v ?t
49
+ :in $ ?a
50
+ :where
51
+ [?e :name ?v ?t]
52
+ [?e :age ?a]]
53
+ @conn
54
+ 25)
55
+
56
+ (d/q '[:find ?e ?at ?v
57
+ :where
58
+ [?e ?a ?v]
59
+ [?a :db/ident ?at]]
60
+ @conn)
61
+
62
+ (d/q '[:find ?e :where [?e :name "Alice"]] @conn)
63
+
64
+ (:schema @conn)
65
+
66
+ (d/transact conn (vec (repeatedly 5000 (fn [] {:age (long (rand-int 1000))
67
+ :name (str (rand-int 1000))}))))
68
+
69
+ (time
70
+ (d/q {:query '[:find ?e ?v
71
+ :in $
72
+ :where [?e :name ?v]]
73
+ :args [@conn]
74
+ :offset 0
75
+ :limit 10}))
76
+
77
+ (time
78
+ (do (d/q {:query '[:find ?v1 ?v2
79
+ :in $
80
+ :where [?e1 :name ?v1] [?e2 :name ?v2]]
81
+ :args [@conn]})
82
+ nil)))
@@ -0,0 +1,127 @@
1
+ (ns sandbox
2
+ (:require
3
+ [datahike.api :as d]
4
+ [konserve.core :as k]
5
+ #_[datahike.nodejs]
6
+ [konserve.indexeddb :as idb]
7
+ [datahike.store :as ds]
8
+ [konserve.tiered :as kt]
9
+ [org.replikativ.persistent-sorted-set :as pss]
10
+ [clojure.core.async :refer [<! >! chan put! close!]])
11
+ (:require-macros [clojure.core.async :refer [go]]))
12
+
13
+ #_(go
14
+ (def idb-store (<! (idb/connect-idb-store "sandbox-store39"))))
15
+
16
+ (def idb-store (ds/add-cache-and-handlers idb-store cfg ))
17
+
18
+ (go (prn (<! (k/get idb-store :db nil {:sync? false}))))
19
+
20
+ (def store (:store @(:wrapped-atom conn)))
21
+
22
+ (keys @(:state (:frontend-store store)))
23
+
24
+ (:backend-store store)
25
+
26
+ (def eavt-address (.-address (:eavt-key (k/get store :db nil {:sync? true}))))
27
+
28
+ (def first-address (first (.-addresses (k/get store eavt-address nil {:sync? true}))))
29
+
30
+ (.-keys (k/get store (last (.-addresses (k/get store first-address nil {:sync? true}))) nil {:sync? true}))
31
+
32
+
33
+ (pss/slice (:eavt-key (k/get store :db nil {:sync? true})) nil nil)
34
+
35
+
36
+ (uuid [1 2 3])
37
+
38
+ (uuid 1)
39
+
40
+
41
+
42
+
43
+ (go
44
+ (def tiered-store (<! (kt/connect-memory-tiered-store fs-store))))
45
+
46
+ #_(go
47
+ (prn (<! (k/assoc tiered-store "foo" "bar2"))))
48
+
49
+ #_(go (prn (<! (k/get tiered-store "foo"))))
50
+
51
+ #_(k/get tiered-store "foo" nil {:sync? true})
52
+
53
+
54
+ (def schema [{:db/ident :name
55
+ :db/cardinality :db.cardinality/one
56
+ :db/index true
57
+ :db/unique :db.unique/identity
58
+ :db/valueType :db.type/string}
59
+ {:db/ident :sibling
60
+ :db/cardinality :db.cardinality/many
61
+ :db/valueType :db.type/ref}
62
+ {:db/ident :age
63
+ :db/cardinality :db.cardinality/one
64
+ :db/valueType :db.type/long}])
65
+
66
+ (def cfg {:store {:backend :file
67
+ :path "/tmp/file-store2"}
68
+ #_{:backend :tiered
69
+ :frontend-store {:backend :mem :id (hasch.core/uuid)}
70
+ :backend-store {:backend :indexeddb
71
+ :name "sandbox-store46"}
72
+ #_{:backend :file :path "/tmp/sandbox-store9"}}
73
+ :keep-history? true
74
+ :schema-flexibility :write
75
+ :attribute-refs? false})
76
+
77
+
78
+
79
+ (go
80
+ (def cfg (<! (d/create-database cfg))))
81
+
82
+ (throw cfg)
83
+
84
+ (go
85
+ (def test-connected (<! (ds/empty-store (assoc (:store cfg) :opts {:sync? false})))))
86
+
87
+ (go
88
+ (def conn (<! (d/connect cfg {:sync? false}))))
89
+
90
+
91
+ (go (.log js/console "synced" (<! (kt/maybe-sync-on-connect (:store @(:wrapped-atom conn)) {:sync? false}))))
92
+
93
+ (throw conn)
94
+
95
+
96
+ (go
97
+ (def tx-report (<! (d/transact! conn schema))))
98
+
99
+ (throw tx-report)
100
+
101
+ (go
102
+ (def tx-report2 (<! (d/transact! conn [{:name "Peters"
103
+ :age 42}]))))
104
+
105
+ ;; transact 1000 dummy entities
106
+ (go
107
+ (def tx-report3 (<! (d/transact! conn (map (fn [i] {:name (str "Name" i)
108
+ :age i})
109
+ (range 1000))))))
110
+
111
+ ;; this does not properly load after restart
112
+ (d/q '[:find (count ?e) :where [?e :name ?n]] @conn)
113
+
114
+
115
+ (into {} (d/entity @conn 4))
116
+
117
+
118
+ (d/pull @conn '[:db/id :name] 4)
119
+
120
+ (d/q '[:find (count ?e) :where [?e :name ?n]] (d/as-of @conn (js/Date.)))
121
+
122
+
123
+ (d/history @conn)
124
+
125
+ (d/q '[:find (count ?e) :where [?e :name ?n]] (d/history @conn))
126
+
127
+ (d/datoms @conn :eavt)
@@ -0,0 +1,27 @@
1
+ (ns sandbox-benchmarks
2
+ (:require [benchmark.cli :as b]
3
+ [benchmark.store :as s]))
4
+
5
+ ;(b/-main) ;; TIMBRE_LEVEL=':fatal' clj -M:benchmark
6
+
7
+ ;(b/-main "-t" "test-id") ;; TIMBRE_LEVEL=':fatal' clj -M:benchmark -t test-id
8
+
9
+ ;(b/-main "-t" "test-id" "-t" "test-id2") ;; TIMBRE_LEVEL=':fatal' clj -M:benchmark -t test-id -t test-id2
10
+
11
+ ;(b/-main "-t" "test-id" "-u" "http://localhost:3001" "-n" "benchmarks" "-g" "test-token") ;; TIMBRE_LEVEL=':fatal' clj -M:benchmark run -o remote-db -t test-id -u http://localhost:3001 -n benchmarks -g test-token
12
+
13
+
14
+ ;; docker run -d --name datahike-server -p 3001:3000 -e DATAHIKE_SERVER_TOKEN=test-token -e DATAHIKE_SCHEMA_FLEXIBILITY=write -e DATAHIKE_STORE_BACKEND=file -e DATAHIKE_NAME=benchmarks -e DATAHIKE_STORE_PATH=/opt/datahike-server/benchmarks replikativ/datahike-server:snapshot
15
+
16
+ ;(def db (s/->RemoteDB "http://localhost:3001" "test-token" "benchmarks"))
17
+
18
+ ;(s/list-databases db)
19
+
20
+ ;(s/transact-missing-schema db)
21
+ ;(s/get-datoms db)
22
+ ;(s/request-data db '[:find ?e ?a ?v :where [?e ?a ?v]])
23
+ ;(s/request-data db '[:find ?e ?a ?v :where [1 ?a ?v]]) ;; -> error status 500
24
+ ;(s/request-data db '[:find ?e ?a ?v :where [?e :db ?v]])
25
+ ;(s/request-data db '[:find ?e ?v ?t :where [?e :dh-backend ?v ?t]])
26
+ ;(s/get-schema db)
27
+