@nxtedition/rocksdb 5.2.1 → 5.2.10

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 (1054) hide show
  1. package/binding.cc +516 -1020
  2. package/binding.gyp +5 -4
  3. package/chained-batch.js +29 -20
  4. package/deps/rocksdb/rocksdb/CMakeLists.txt +1356 -0
  5. package/deps/rocksdb/rocksdb/COPYING +339 -0
  6. package/deps/rocksdb/rocksdb/LICENSE.Apache +202 -0
  7. package/deps/rocksdb/rocksdb/LICENSE.leveldb +29 -0
  8. package/deps/rocksdb/rocksdb/Makefile +2521 -0
  9. package/deps/rocksdb/rocksdb/TARGETS +2100 -0
  10. package/deps/rocksdb/rocksdb/cache/cache.cc +63 -0
  11. package/deps/rocksdb/rocksdb/cache/cache_bench.cc +381 -0
  12. package/deps/rocksdb/rocksdb/cache/cache_helpers.h +114 -0
  13. package/deps/rocksdb/rocksdb/cache/cache_test.cc +775 -0
  14. package/deps/rocksdb/rocksdb/cache/clock_cache.cc +769 -0
  15. package/deps/rocksdb/rocksdb/cache/clock_cache.h +16 -0
  16. package/deps/rocksdb/rocksdb/cache/lru_cache.cc +574 -0
  17. package/deps/rocksdb/rocksdb/cache/lru_cache.h +339 -0
  18. package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +199 -0
  19. package/deps/rocksdb/rocksdb/cache/sharded_cache.cc +162 -0
  20. package/deps/rocksdb/rocksdb/cache/sharded_cache.h +111 -0
  21. package/deps/rocksdb/rocksdb/cmake/RocksDBConfig.cmake.in +54 -0
  22. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +7 -0
  23. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +29 -0
  24. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +29 -0
  25. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +29 -0
  26. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +33 -0
  27. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +29 -0
  28. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +29 -0
  29. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +29 -0
  30. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +10 -0
  31. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.cc +108 -0
  32. package/deps/rocksdb/rocksdb/db/arena_wrapped_db_iter.h +115 -0
  33. package/deps/rocksdb/rocksdb/db/blob/blob_constants.h +16 -0
  34. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.cc +154 -0
  35. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition.h +67 -0
  36. package/deps/rocksdb/rocksdb/db/blob/blob_file_addition_test.cc +206 -0
  37. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +316 -0
  38. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.h +91 -0
  39. package/deps/rocksdb/rocksdb/db/blob/blob_file_builder_test.cc +660 -0
  40. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +99 -0
  41. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +49 -0
  42. package/deps/rocksdb/rocksdb/db/blob/blob_file_cache_test.cc +268 -0
  43. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage.cc +134 -0
  44. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage.h +57 -0
  45. package/deps/rocksdb/rocksdb/db/blob/blob_file_garbage_test.cc +173 -0
  46. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.cc +55 -0
  47. package/deps/rocksdb/rocksdb/db/blob/blob_file_meta.h +164 -0
  48. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +423 -0
  49. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.h +81 -0
  50. package/deps/rocksdb/rocksdb/db/blob/blob_file_reader_test.cc +771 -0
  51. package/deps/rocksdb/rocksdb/db/blob/blob_index.h +184 -0
  52. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.cc +145 -0
  53. package/deps/rocksdb/rocksdb/db/blob/blob_log_format.h +148 -0
  54. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.cc +132 -0
  55. package/deps/rocksdb/rocksdb/db/blob/blob_log_sequential_reader.h +76 -0
  56. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.cc +168 -0
  57. package/deps/rocksdb/rocksdb/db/blob/blob_log_writer.h +83 -0
  58. package/deps/rocksdb/rocksdb/db/blob/db_blob_basic_test.cc +307 -0
  59. package/deps/rocksdb/rocksdb/db/blob/db_blob_index_test.cc +464 -0
  60. package/deps/rocksdb/rocksdb/db/builder.cc +358 -0
  61. package/deps/rocksdb/rocksdb/db/builder.h +95 -0
  62. package/deps/rocksdb/rocksdb/db/c.cc +5281 -0
  63. package/deps/rocksdb/rocksdb/db/c_test.c +2883 -0
  64. package/deps/rocksdb/rocksdb/db/column_family.cc +1602 -0
  65. package/deps/rocksdb/rocksdb/db/column_family.h +787 -0
  66. package/deps/rocksdb/rocksdb/db/column_family_test.cc +3427 -0
  67. package/deps/rocksdb/rocksdb/db/compact_files_test.cc +425 -0
  68. package/deps/rocksdb/rocksdb/db/compacted_db_impl.cc +169 -0
  69. package/deps/rocksdb/rocksdb/db/compacted_db_impl.h +118 -0
  70. package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +591 -0
  71. package/deps/rocksdb/rocksdb/db/compaction/compaction.h +389 -0
  72. package/deps/rocksdb/rocksdb/db/compaction/compaction_iteration_stats.h +37 -0
  73. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +1023 -0
  74. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +353 -0
  75. package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator_test.cc +1254 -0
  76. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1917 -0
  77. package/deps/rocksdb/rocksdb/db/compaction/compaction_job.h +208 -0
  78. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_stats_test.cc +1037 -0
  79. package/deps/rocksdb/rocksdb/db/compaction/compaction_job_test.cc +1224 -0
  80. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.cc +1135 -0
  81. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker.h +318 -0
  82. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.cc +255 -0
  83. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_fifo.h +57 -0
  84. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.cc +510 -0
  85. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_level.h +33 -0
  86. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_test.cc +2190 -0
  87. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.cc +1103 -0
  88. package/deps/rocksdb/rocksdb/db/compaction/compaction_picker_universal.h +32 -0
  89. package/deps/rocksdb/rocksdb/db/compaction/sst_partitioner.cc +44 -0
  90. package/deps/rocksdb/rocksdb/db/comparator_db_test.cc +660 -0
  91. package/deps/rocksdb/rocksdb/db/convenience.cc +78 -0
  92. package/deps/rocksdb/rocksdb/db/corruption_test.cc +921 -0
  93. package/deps/rocksdb/rocksdb/db/cuckoo_table_db_test.cc +359 -0
  94. package/deps/rocksdb/rocksdb/db/db_basic_test.cc +3820 -0
  95. package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +1058 -0
  96. package/deps/rocksdb/rocksdb/db/db_bloom_filter_test.cc +2128 -0
  97. package/deps/rocksdb/rocksdb/db/db_compaction_filter_test.cc +851 -0
  98. package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +6292 -0
  99. package/deps/rocksdb/rocksdb/db/db_dynamic_level_test.cc +509 -0
  100. package/deps/rocksdb/rocksdb/db/db_encryption_test.cc +130 -0
  101. package/deps/rocksdb/rocksdb/db/db_filesnapshot.cc +137 -0
  102. package/deps/rocksdb/rocksdb/db/db_flush_test.cc +1119 -0
  103. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +5057 -0
  104. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +2274 -0
  105. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +3421 -0
  106. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_debug.cc +298 -0
  107. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_experimental.cc +151 -0
  108. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +967 -0
  109. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +1806 -0
  110. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.cc +270 -0
  111. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_readonly.h +146 -0
  112. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +683 -0
  113. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +333 -0
  114. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +2024 -0
  115. package/deps/rocksdb/rocksdb/db/db_impl/db_secondary_test.cc +932 -0
  116. package/deps/rocksdb/rocksdb/db/db_info_dumper.cc +137 -0
  117. package/deps/rocksdb/rocksdb/db/db_info_dumper.h +15 -0
  118. package/deps/rocksdb/rocksdb/db/db_inplace_update_test.cc +178 -0
  119. package/deps/rocksdb/rocksdb/db/db_io_failure_test.cc +592 -0
  120. package/deps/rocksdb/rocksdb/db/db_iter.cc +1493 -0
  121. package/deps/rocksdb/rocksdb/db/db_iter.h +390 -0
  122. package/deps/rocksdb/rocksdb/db/db_iter_stress_test.cc +657 -0
  123. package/deps/rocksdb/rocksdb/db/db_iter_test.cc +3268 -0
  124. package/deps/rocksdb/rocksdb/db/db_iterator_test.cc +3197 -0
  125. package/deps/rocksdb/rocksdb/db/db_log_iter_test.cc +299 -0
  126. package/deps/rocksdb/rocksdb/db/db_logical_block_size_cache_test.cc +513 -0
  127. package/deps/rocksdb/rocksdb/db/db_memtable_test.cc +329 -0
  128. package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +241 -0
  129. package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +671 -0
  130. package/deps/rocksdb/rocksdb/db/db_options_test.cc +1022 -0
  131. package/deps/rocksdb/rocksdb/db/db_properties_test.cc +1723 -0
  132. package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +1694 -0
  133. package/deps/rocksdb/rocksdb/db/db_sst_test.cc +1261 -0
  134. package/deps/rocksdb/rocksdb/db/db_statistics_test.cc +164 -0
  135. package/deps/rocksdb/rocksdb/db/db_table_properties_test.cc +488 -0
  136. package/deps/rocksdb/rocksdb/db/db_tailing_iter_test.cc +567 -0
  137. package/deps/rocksdb/rocksdb/db/db_test.cc +6736 -0
  138. package/deps/rocksdb/rocksdb/db/db_test2.cc +5408 -0
  139. package/deps/rocksdb/rocksdb/db/db_test_util.cc +1633 -0
  140. package/deps/rocksdb/rocksdb/db/db_test_util.h +1194 -0
  141. package/deps/rocksdb/rocksdb/db/db_universal_compaction_test.cc +2235 -0
  142. package/deps/rocksdb/rocksdb/db/db_wal_test.cc +1780 -0
  143. package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +2520 -0
  144. package/deps/rocksdb/rocksdb/db/db_with_timestamp_compaction_test.cc +119 -0
  145. package/deps/rocksdb/rocksdb/db/db_write_test.cc +465 -0
  146. package/deps/rocksdb/rocksdb/db/dbformat.cc +222 -0
  147. package/deps/rocksdb/rocksdb/db/dbformat.h +786 -0
  148. package/deps/rocksdb/rocksdb/db/dbformat_test.cc +206 -0
  149. package/deps/rocksdb/rocksdb/db/deletefile_test.cc +580 -0
  150. package/deps/rocksdb/rocksdb/db/error_handler.cc +726 -0
  151. package/deps/rocksdb/rocksdb/db/error_handler.h +117 -0
  152. package/deps/rocksdb/rocksdb/db/error_handler_fs_test.cc +2598 -0
  153. package/deps/rocksdb/rocksdb/db/event_helpers.cc +233 -0
  154. package/deps/rocksdb/rocksdb/db/event_helpers.h +57 -0
  155. package/deps/rocksdb/rocksdb/db/experimental.cc +50 -0
  156. package/deps/rocksdb/rocksdb/db/external_sst_file_basic_test.cc +1559 -0
  157. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.cc +910 -0
  158. package/deps/rocksdb/rocksdb/db/external_sst_file_ingestion_job.h +195 -0
  159. package/deps/rocksdb/rocksdb/db/external_sst_file_test.cc +2936 -0
  160. package/deps/rocksdb/rocksdb/db/fault_injection_test.cc +556 -0
  161. package/deps/rocksdb/rocksdb/db/file_indexer.cc +216 -0
  162. package/deps/rocksdb/rocksdb/db/file_indexer.h +142 -0
  163. package/deps/rocksdb/rocksdb/db/file_indexer_test.cc +350 -0
  164. package/deps/rocksdb/rocksdb/db/filename_test.cc +179 -0
  165. package/deps/rocksdb/rocksdb/db/flush_job.cc +514 -0
  166. package/deps/rocksdb/rocksdb/db/flush_job.h +169 -0
  167. package/deps/rocksdb/rocksdb/db/flush_job_test.cc +647 -0
  168. package/deps/rocksdb/rocksdb/db/flush_scheduler.cc +86 -0
  169. package/deps/rocksdb/rocksdb/db/flush_scheduler.h +54 -0
  170. package/deps/rocksdb/rocksdb/db/forward_iterator.cc +1023 -0
  171. package/deps/rocksdb/rocksdb/db/forward_iterator.h +163 -0
  172. package/deps/rocksdb/rocksdb/db/forward_iterator_bench.cc +377 -0
  173. package/deps/rocksdb/rocksdb/db/import_column_family_job.cc +282 -0
  174. package/deps/rocksdb/rocksdb/db/import_column_family_job.h +75 -0
  175. package/deps/rocksdb/rocksdb/db/import_column_family_test.cc +632 -0
  176. package/deps/rocksdb/rocksdb/db/internal_stats.cc +1461 -0
  177. package/deps/rocksdb/rocksdb/db/internal_stats.h +712 -0
  178. package/deps/rocksdb/rocksdb/db/job_context.h +226 -0
  179. package/deps/rocksdb/rocksdb/db/listener_test.cc +1118 -0
  180. package/deps/rocksdb/rocksdb/db/log_format.h +48 -0
  181. package/deps/rocksdb/rocksdb/db/log_reader.cc +654 -0
  182. package/deps/rocksdb/rocksdb/db/log_reader.h +192 -0
  183. package/deps/rocksdb/rocksdb/db/log_test.cc +901 -0
  184. package/deps/rocksdb/rocksdb/db/log_writer.cc +164 -0
  185. package/deps/rocksdb/rocksdb/db/log_writer.h +115 -0
  186. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.cc +67 -0
  187. package/deps/rocksdb/rocksdb/db/logs_with_prep_tracker.h +63 -0
  188. package/deps/rocksdb/rocksdb/db/lookup_key.h +66 -0
  189. package/deps/rocksdb/rocksdb/db/malloc_stats.cc +54 -0
  190. package/deps/rocksdb/rocksdb/db/malloc_stats.h +24 -0
  191. package/deps/rocksdb/rocksdb/db/manual_compaction_test.cc +296 -0
  192. package/deps/rocksdb/rocksdb/db/memtable.cc +1169 -0
  193. package/deps/rocksdb/rocksdb/db/memtable.h +554 -0
  194. package/deps/rocksdb/rocksdb/db/memtable_list.cc +888 -0
  195. package/deps/rocksdb/rocksdb/db/memtable_list.h +438 -0
  196. package/deps/rocksdb/rocksdb/db/memtable_list_test.cc +935 -0
  197. package/deps/rocksdb/rocksdb/db/merge_context.h +134 -0
  198. package/deps/rocksdb/rocksdb/db/merge_helper.cc +421 -0
  199. package/deps/rocksdb/rocksdb/db/merge_helper.h +197 -0
  200. package/deps/rocksdb/rocksdb/db/merge_helper_test.cc +290 -0
  201. package/deps/rocksdb/rocksdb/db/merge_operator.cc +86 -0
  202. package/deps/rocksdb/rocksdb/db/merge_test.cc +608 -0
  203. package/deps/rocksdb/rocksdb/db/obsolete_files_test.cc +338 -0
  204. package/deps/rocksdb/rocksdb/db/options_file_test.cc +119 -0
  205. package/deps/rocksdb/rocksdb/db/output_validator.cc +30 -0
  206. package/deps/rocksdb/rocksdb/db/output_validator.h +47 -0
  207. package/deps/rocksdb/rocksdb/db/perf_context_test.cc +993 -0
  208. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.cc +113 -0
  209. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler.h +76 -0
  210. package/deps/rocksdb/rocksdb/db/periodic_work_scheduler_test.cc +231 -0
  211. package/deps/rocksdb/rocksdb/db/pinned_iterators_manager.h +87 -0
  212. package/deps/rocksdb/rocksdb/db/plain_table_db_test.cc +1374 -0
  213. package/deps/rocksdb/rocksdb/db/pre_release_callback.h +38 -0
  214. package/deps/rocksdb/rocksdb/db/prefix_test.cc +910 -0
  215. package/deps/rocksdb/rocksdb/db/range_del_aggregator.cc +489 -0
  216. package/deps/rocksdb/rocksdb/db/range_del_aggregator.h +446 -0
  217. package/deps/rocksdb/rocksdb/db/range_del_aggregator_bench.cc +260 -0
  218. package/deps/rocksdb/rocksdb/db/range_del_aggregator_test.cc +709 -0
  219. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.cc +439 -0
  220. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter.h +256 -0
  221. package/deps/rocksdb/rocksdb/db/range_tombstone_fragmenter_test.cc +552 -0
  222. package/deps/rocksdb/rocksdb/db/read_callback.h +53 -0
  223. package/deps/rocksdb/rocksdb/db/repair.cc +722 -0
  224. package/deps/rocksdb/rocksdb/db/repair_test.cc +390 -0
  225. package/deps/rocksdb/rocksdb/db/snapshot_checker.h +61 -0
  226. package/deps/rocksdb/rocksdb/db/snapshot_impl.cc +26 -0
  227. package/deps/rocksdb/rocksdb/db/snapshot_impl.h +167 -0
  228. package/deps/rocksdb/rocksdb/db/table_cache.cc +704 -0
  229. package/deps/rocksdb/rocksdb/db/table_cache.h +233 -0
  230. package/deps/rocksdb/rocksdb/db/table_properties_collector.cc +75 -0
  231. package/deps/rocksdb/rocksdb/db/table_properties_collector.h +107 -0
  232. package/deps/rocksdb/rocksdb/db/table_properties_collector_test.cc +517 -0
  233. package/deps/rocksdb/rocksdb/db/transaction_log_impl.cc +318 -0
  234. package/deps/rocksdb/rocksdb/db/transaction_log_impl.h +128 -0
  235. package/deps/rocksdb/rocksdb/db/trim_history_scheduler.cc +54 -0
  236. package/deps/rocksdb/rocksdb/db/trim_history_scheduler.h +44 -0
  237. package/deps/rocksdb/rocksdb/db/version_builder.cc +1078 -0
  238. package/deps/rocksdb/rocksdb/db/version_builder.h +69 -0
  239. package/deps/rocksdb/rocksdb/db/version_builder_test.cc +1551 -0
  240. package/deps/rocksdb/rocksdb/db/version_edit.cc +955 -0
  241. package/deps/rocksdb/rocksdb/db/version_edit.h +609 -0
  242. package/deps/rocksdb/rocksdb/db/version_edit_handler.cc +699 -0
  243. package/deps/rocksdb/rocksdb/db/version_edit_handler.h +252 -0
  244. package/deps/rocksdb/rocksdb/db/version_edit_test.cc +597 -0
  245. package/deps/rocksdb/rocksdb/db/version_set.cc +6333 -0
  246. package/deps/rocksdb/rocksdb/db/version_set.h +1485 -0
  247. package/deps/rocksdb/rocksdb/db/version_set_test.cc +3035 -0
  248. package/deps/rocksdb/rocksdb/db/wal_edit.cc +204 -0
  249. package/deps/rocksdb/rocksdb/db/wal_edit.h +166 -0
  250. package/deps/rocksdb/rocksdb/db/wal_edit_test.cc +214 -0
  251. package/deps/rocksdb/rocksdb/db/wal_manager.cc +517 -0
  252. package/deps/rocksdb/rocksdb/db/wal_manager.h +119 -0
  253. package/deps/rocksdb/rocksdb/db/wal_manager_test.cc +340 -0
  254. package/deps/rocksdb/rocksdb/db/write_batch.cc +2174 -0
  255. package/deps/rocksdb/rocksdb/db/write_batch_base.cc +94 -0
  256. package/deps/rocksdb/rocksdb/db/write_batch_internal.h +250 -0
  257. package/deps/rocksdb/rocksdb/db/write_batch_test.cc +907 -0
  258. package/deps/rocksdb/rocksdb/db/write_callback.h +27 -0
  259. package/deps/rocksdb/rocksdb/db/write_callback_test.cc +457 -0
  260. package/deps/rocksdb/rocksdb/db/write_controller.cc +128 -0
  261. package/deps/rocksdb/rocksdb/db/write_controller.h +144 -0
  262. package/deps/rocksdb/rocksdb/db/write_controller_test.cc +135 -0
  263. package/deps/rocksdb/rocksdb/db/write_thread.cc +796 -0
  264. package/deps/rocksdb/rocksdb/db/write_thread.h +433 -0
  265. package/deps/rocksdb/rocksdb/db_stress_tool/CMakeLists.txt +14 -0
  266. package/deps/rocksdb/rocksdb/db_stress_tool/batched_ops_stress.cc +341 -0
  267. package/deps/rocksdb/rocksdb/db_stress_tool/cf_consistency_stress.cc +520 -0
  268. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress.cc +23 -0
  269. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.cc +337 -0
  270. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_common.h +554 -0
  271. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_compaction_filter.h +79 -0
  272. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.cc +173 -0
  273. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_driver.h +17 -0
  274. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_env_wrapper.h +38 -0
  275. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_gflags.cc +763 -0
  276. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_listener.h +222 -0
  277. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.cc +27 -0
  278. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_shared_state.h +428 -0
  279. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_stat.h +218 -0
  280. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_table_properties_collector.h +64 -0
  281. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.cc +2430 -0
  282. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_test_base.h +237 -0
  283. package/deps/rocksdb/rocksdb/db_stress_tool/db_stress_tool.cc +343 -0
  284. package/deps/rocksdb/rocksdb/db_stress_tool/no_batched_ops_stress.cc +800 -0
  285. package/deps/rocksdb/rocksdb/env/composite_env_wrapper.h +920 -0
  286. package/deps/rocksdb/rocksdb/env/env.cc +733 -0
  287. package/deps/rocksdb/rocksdb/env/env_basic_test.cc +352 -0
  288. package/deps/rocksdb/rocksdb/env/env_chroot.cc +346 -0
  289. package/deps/rocksdb/rocksdb/env/env_chroot.h +22 -0
  290. package/deps/rocksdb/rocksdb/env/env_encryption.cc +1148 -0
  291. package/deps/rocksdb/rocksdb/env/env_encryption_ctr.h +137 -0
  292. package/deps/rocksdb/rocksdb/env/env_hdfs.cc +648 -0
  293. package/deps/rocksdb/rocksdb/env/env_posix.cc +514 -0
  294. package/deps/rocksdb/rocksdb/env/env_test.cc +2230 -0
  295. package/deps/rocksdb/rocksdb/env/file_system.cc +132 -0
  296. package/deps/rocksdb/rocksdb/env/file_system_tracer.cc +448 -0
  297. package/deps/rocksdb/rocksdb/env/file_system_tracer.h +415 -0
  298. package/deps/rocksdb/rocksdb/env/fs_posix.cc +1086 -0
  299. package/deps/rocksdb/rocksdb/env/io_posix.cc +1499 -0
  300. package/deps/rocksdb/rocksdb/env/io_posix.h +402 -0
  301. package/deps/rocksdb/rocksdb/env/io_posix_test.cc +140 -0
  302. package/deps/rocksdb/rocksdb/env/mock_env.cc +1066 -0
  303. package/deps/rocksdb/rocksdb/env/mock_env.h +41 -0
  304. package/deps/rocksdb/rocksdb/env/mock_env_test.cc +85 -0
  305. package/deps/rocksdb/rocksdb/file/delete_scheduler.cc +402 -0
  306. package/deps/rocksdb/rocksdb/file/delete_scheduler.h +150 -0
  307. package/deps/rocksdb/rocksdb/file/delete_scheduler_test.cc +717 -0
  308. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +156 -0
  309. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +99 -0
  310. package/deps/rocksdb/rocksdb/file/file_util.cc +268 -0
  311. package/deps/rocksdb/rocksdb/file/file_util.h +96 -0
  312. package/deps/rocksdb/rocksdb/file/filename.cc +473 -0
  313. package/deps/rocksdb/rocksdb/file/filename.h +182 -0
  314. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +188 -0
  315. package/deps/rocksdb/rocksdb/file/random_access_file_reader.cc +315 -0
  316. package/deps/rocksdb/rocksdb/file/random_access_file_reader.h +142 -0
  317. package/deps/rocksdb/rocksdb/file/random_access_file_reader_test.cc +482 -0
  318. package/deps/rocksdb/rocksdb/file/read_write_util.cc +67 -0
  319. package/deps/rocksdb/rocksdb/file/read_write_util.h +34 -0
  320. package/deps/rocksdb/rocksdb/file/readahead_raf.cc +169 -0
  321. package/deps/rocksdb/rocksdb/file/readahead_raf.h +29 -0
  322. package/deps/rocksdb/rocksdb/file/sequence_file_reader.cc +237 -0
  323. package/deps/rocksdb/rocksdb/file/sequence_file_reader.h +63 -0
  324. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.cc +552 -0
  325. package/deps/rocksdb/rocksdb/file/sst_file_manager_impl.h +203 -0
  326. package/deps/rocksdb/rocksdb/file/writable_file_writer.cc +523 -0
  327. package/deps/rocksdb/rocksdb/file/writable_file_writer.h +251 -0
  328. package/deps/rocksdb/rocksdb/hdfs/env_hdfs.h +386 -0
  329. package/deps/rocksdb/rocksdb/include/rocksdb/advanced_options.h +839 -0
  330. package/deps/rocksdb/rocksdb/include/rocksdb/c.h +2218 -0
  331. package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +294 -0
  332. package/deps/rocksdb/rocksdb/include/rocksdb/cleanable.h +71 -0
  333. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_filter.h +214 -0
  334. package/deps/rocksdb/rocksdb/include/rocksdb/compaction_job_stats.h +98 -0
  335. package/deps/rocksdb/rocksdb/include/rocksdb/comparator.h +137 -0
  336. package/deps/rocksdb/rocksdb/include/rocksdb/compression_type.h +40 -0
  337. package/deps/rocksdb/rocksdb/include/rocksdb/concurrent_task_limiter.h +46 -0
  338. package/deps/rocksdb/rocksdb/include/rocksdb/configurable.h +359 -0
  339. package/deps/rocksdb/rocksdb/include/rocksdb/convenience.h +499 -0
  340. package/deps/rocksdb/rocksdb/include/rocksdb/customizable.h +138 -0
  341. package/deps/rocksdb/rocksdb/include/rocksdb/db.h +1697 -0
  342. package/deps/rocksdb/rocksdb/include/rocksdb/db_bench_tool.h +11 -0
  343. package/deps/rocksdb/rocksdb/include/rocksdb/db_dump_tool.h +45 -0
  344. package/deps/rocksdb/rocksdb/include/rocksdb/db_stress_tool.h +11 -0
  345. package/deps/rocksdb/rocksdb/include/rocksdb/env.h +1671 -0
  346. package/deps/rocksdb/rocksdb/include/rocksdb/env_encryption.h +405 -0
  347. package/deps/rocksdb/rocksdb/include/rocksdb/experimental.h +29 -0
  348. package/deps/rocksdb/rocksdb/include/rocksdb/file_checksum.h +129 -0
  349. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +1472 -0
  350. package/deps/rocksdb/rocksdb/include/rocksdb/filter_policy.h +238 -0
  351. package/deps/rocksdb/rocksdb/include/rocksdb/flush_block_policy.h +61 -0
  352. package/deps/rocksdb/rocksdb/include/rocksdb/io_status.h +269 -0
  353. package/deps/rocksdb/rocksdb/include/rocksdb/iostats_context.h +56 -0
  354. package/deps/rocksdb/rocksdb/include/rocksdb/iterator.h +128 -0
  355. package/deps/rocksdb/rocksdb/include/rocksdb/ldb_tool.h +43 -0
  356. package/deps/rocksdb/rocksdb/include/rocksdb/listener.h +556 -0
  357. package/deps/rocksdb/rocksdb/include/rocksdb/memory_allocator.h +77 -0
  358. package/deps/rocksdb/rocksdb/include/rocksdb/memtablerep.h +385 -0
  359. package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +257 -0
  360. package/deps/rocksdb/rocksdb/include/rocksdb/metadata.h +155 -0
  361. package/deps/rocksdb/rocksdb/include/rocksdb/options.h +1702 -0
  362. package/deps/rocksdb/rocksdb/include/rocksdb/perf_context.h +237 -0
  363. package/deps/rocksdb/rocksdb/include/rocksdb/perf_level.h +35 -0
  364. package/deps/rocksdb/rocksdb/include/rocksdb/persistent_cache.h +73 -0
  365. package/deps/rocksdb/rocksdb/include/rocksdb/rate_limiter.h +139 -0
  366. package/deps/rocksdb/rocksdb/include/rocksdb/rocksdb_namespace.h +10 -0
  367. package/deps/rocksdb/rocksdb/include/rocksdb/slice.h +269 -0
  368. package/deps/rocksdb/rocksdb/include/rocksdb/slice_transform.h +103 -0
  369. package/deps/rocksdb/rocksdb/include/rocksdb/snapshot.h +48 -0
  370. package/deps/rocksdb/rocksdb/include/rocksdb/sst_dump_tool.h +19 -0
  371. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_manager.h +136 -0
  372. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_reader.h +47 -0
  373. package/deps/rocksdb/rocksdb/include/rocksdb/sst_file_writer.h +145 -0
  374. package/deps/rocksdb/rocksdb/include/rocksdb/sst_partitioner.h +135 -0
  375. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +592 -0
  376. package/deps/rocksdb/rocksdb/include/rocksdb/stats_history.h +69 -0
  377. package/deps/rocksdb/rocksdb/include/rocksdb/status.h +608 -0
  378. package/deps/rocksdb/rocksdb/include/rocksdb/table.h +711 -0
  379. package/deps/rocksdb/rocksdb/include/rocksdb/table_properties.h +280 -0
  380. package/deps/rocksdb/rocksdb/include/rocksdb/thread_status.h +188 -0
  381. package/deps/rocksdb/rocksdb/include/rocksdb/threadpool.h +58 -0
  382. package/deps/rocksdb/rocksdb/include/rocksdb/trace_reader_writer.h +48 -0
  383. package/deps/rocksdb/rocksdb/include/rocksdb/transaction_log.h +121 -0
  384. package/deps/rocksdb/rocksdb/include/rocksdb/types.h +74 -0
  385. package/deps/rocksdb/rocksdb/include/rocksdb/universal_compaction.h +86 -0
  386. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/backupable_db.h +535 -0
  387. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/checkpoint.h +61 -0
  388. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/convenience.h +10 -0
  389. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/db_ttl.h +72 -0
  390. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/debug.h +49 -0
  391. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_librados.h +175 -0
  392. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/env_mirror.h +180 -0
  393. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/info_log_finder.h +19 -0
  394. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd.h +288 -0
  395. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/ldb_cmd_execute_result.h +71 -0
  396. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/leveldb_options.h +145 -0
  397. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_custom_library.h +43 -0
  398. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/lua/rocks_lua_util.h +55 -0
  399. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/memory_util.h +50 -0
  400. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/object_registry.h +205 -0
  401. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/optimistic_transaction_db.h +100 -0
  402. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/option_change_migration.h +19 -0
  403. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_type.h +876 -0
  404. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/options_util.h +128 -0
  405. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/sim_cache.h +94 -0
  406. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/stackable_db.h +504 -0
  407. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/table_properties_collectors.h +95 -0
  408. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction.h +626 -0
  409. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db.h +432 -0
  410. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/transaction_db_mutex.h +92 -0
  411. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/utility_db.h +34 -0
  412. package/deps/rocksdb/rocksdb/include/rocksdb/utilities/write_batch_with_index.h +279 -0
  413. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +16 -0
  414. package/deps/rocksdb/rocksdb/include/rocksdb/wal_filter.h +102 -0
  415. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch.h +377 -0
  416. package/deps/rocksdb/rocksdb/include/rocksdb/write_batch_base.h +127 -0
  417. package/deps/rocksdb/rocksdb/include/rocksdb/write_buffer_manager.h +106 -0
  418. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.cc +300 -0
  419. package/deps/rocksdb/rocksdb/logging/auto_roll_logger.h +165 -0
  420. package/deps/rocksdb/rocksdb/logging/auto_roll_logger_test.cc +684 -0
  421. package/deps/rocksdb/rocksdb/logging/env_logger.h +165 -0
  422. package/deps/rocksdb/rocksdb/logging/env_logger_test.cc +162 -0
  423. package/deps/rocksdb/rocksdb/logging/event_logger.cc +70 -0
  424. package/deps/rocksdb/rocksdb/logging/event_logger.h +203 -0
  425. package/deps/rocksdb/rocksdb/logging/event_logger_test.cc +43 -0
  426. package/deps/rocksdb/rocksdb/logging/log_buffer.cc +92 -0
  427. package/deps/rocksdb/rocksdb/logging/log_buffer.h +56 -0
  428. package/deps/rocksdb/rocksdb/logging/logging.h +68 -0
  429. package/deps/rocksdb/rocksdb/logging/posix_logger.h +185 -0
  430. package/deps/rocksdb/rocksdb/memory/allocator.h +57 -0
  431. package/deps/rocksdb/rocksdb/memory/arena.cc +233 -0
  432. package/deps/rocksdb/rocksdb/memory/arena.h +141 -0
  433. package/deps/rocksdb/rocksdb/memory/arena_test.cc +204 -0
  434. package/deps/rocksdb/rocksdb/memory/concurrent_arena.cc +47 -0
  435. package/deps/rocksdb/rocksdb/memory/concurrent_arena.h +218 -0
  436. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.cc +206 -0
  437. package/deps/rocksdb/rocksdb/memory/jemalloc_nodump_allocator.h +78 -0
  438. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.cc +33 -0
  439. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator.h +27 -0
  440. package/deps/rocksdb/rocksdb/memory/memkind_kmem_allocator_test.cc +102 -0
  441. package/deps/rocksdb/rocksdb/memory/memory_allocator.h +38 -0
  442. package/deps/rocksdb/rocksdb/memory/memory_usage.h +25 -0
  443. package/deps/rocksdb/rocksdb/memtable/alloc_tracker.cc +62 -0
  444. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.cc +844 -0
  445. package/deps/rocksdb/rocksdb/memtable/hash_linklist_rep.h +49 -0
  446. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.cc +349 -0
  447. package/deps/rocksdb/rocksdb/memtable/hash_skiplist_rep.h +44 -0
  448. package/deps/rocksdb/rocksdb/memtable/inlineskiplist.h +997 -0
  449. package/deps/rocksdb/rocksdb/memtable/inlineskiplist_test.cc +663 -0
  450. package/deps/rocksdb/rocksdb/memtable/memtablerep_bench.cc +677 -0
  451. package/deps/rocksdb/rocksdb/memtable/skiplist.h +496 -0
  452. package/deps/rocksdb/rocksdb/memtable/skiplist_test.cc +388 -0
  453. package/deps/rocksdb/rocksdb/memtable/skiplistrep.cc +280 -0
  454. package/deps/rocksdb/rocksdb/memtable/stl_wrappers.h +33 -0
  455. package/deps/rocksdb/rocksdb/memtable/vectorrep.cc +301 -0
  456. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager.cc +148 -0
  457. package/deps/rocksdb/rocksdb/memtable/write_buffer_manager_test.cc +203 -0
  458. package/deps/rocksdb/rocksdb/monitoring/file_read_sample.h +23 -0
  459. package/deps/rocksdb/rocksdb/monitoring/histogram.cc +287 -0
  460. package/deps/rocksdb/rocksdb/monitoring/histogram.h +149 -0
  461. package/deps/rocksdb/rocksdb/monitoring/histogram_test.cc +231 -0
  462. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.cc +200 -0
  463. package/deps/rocksdb/rocksdb/monitoring/histogram_windowing.h +84 -0
  464. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.cc +49 -0
  465. package/deps/rocksdb/rocksdb/monitoring/in_memory_stats_history.h +74 -0
  466. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.cc +71 -0
  467. package/deps/rocksdb/rocksdb/monitoring/instrumented_mutex.h +98 -0
  468. package/deps/rocksdb/rocksdb/monitoring/iostats_context.cc +62 -0
  469. package/deps/rocksdb/rocksdb/monitoring/iostats_context_imp.h +60 -0
  470. package/deps/rocksdb/rocksdb/monitoring/iostats_context_test.cc +29 -0
  471. package/deps/rocksdb/rocksdb/monitoring/perf_context.cc +566 -0
  472. package/deps/rocksdb/rocksdb/monitoring/perf_context_imp.h +97 -0
  473. package/deps/rocksdb/rocksdb/monitoring/perf_level.cc +28 -0
  474. package/deps/rocksdb/rocksdb/monitoring/perf_level_imp.h +18 -0
  475. package/deps/rocksdb/rocksdb/monitoring/perf_step_timer.h +79 -0
  476. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.cc +169 -0
  477. package/deps/rocksdb/rocksdb/monitoring/persistent_stats_history.h +83 -0
  478. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +431 -0
  479. package/deps/rocksdb/rocksdb/monitoring/statistics.h +138 -0
  480. package/deps/rocksdb/rocksdb/monitoring/statistics_test.cc +47 -0
  481. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +652 -0
  482. package/deps/rocksdb/rocksdb/monitoring/thread_status_impl.cc +163 -0
  483. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.cc +314 -0
  484. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater.h +233 -0
  485. package/deps/rocksdb/rocksdb/monitoring/thread_status_updater_debug.cc +43 -0
  486. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.cc +206 -0
  487. package/deps/rocksdb/rocksdb/monitoring/thread_status_util.h +134 -0
  488. package/deps/rocksdb/rocksdb/monitoring/thread_status_util_debug.cc +32 -0
  489. package/deps/rocksdb/rocksdb/options/cf_options.cc +1026 -0
  490. package/deps/rocksdb/rocksdb/options/cf_options.h +308 -0
  491. package/deps/rocksdb/rocksdb/options/configurable.cc +681 -0
  492. package/deps/rocksdb/rocksdb/options/configurable_helper.h +251 -0
  493. package/deps/rocksdb/rocksdb/options/configurable_test.cc +757 -0
  494. package/deps/rocksdb/rocksdb/options/configurable_test.h +127 -0
  495. package/deps/rocksdb/rocksdb/options/customizable.cc +77 -0
  496. package/deps/rocksdb/rocksdb/options/customizable_helper.h +216 -0
  497. package/deps/rocksdb/rocksdb/options/customizable_test.cc +625 -0
  498. package/deps/rocksdb/rocksdb/options/db_options.cc +835 -0
  499. package/deps/rocksdb/rocksdb/options/db_options.h +126 -0
  500. package/deps/rocksdb/rocksdb/options/options.cc +664 -0
  501. package/deps/rocksdb/rocksdb/options/options_helper.cc +1391 -0
  502. package/deps/rocksdb/rocksdb/options/options_helper.h +118 -0
  503. package/deps/rocksdb/rocksdb/options/options_parser.cc +721 -0
  504. package/deps/rocksdb/rocksdb/options/options_parser.h +151 -0
  505. package/deps/rocksdb/rocksdb/options/options_settable_test.cc +583 -0
  506. package/deps/rocksdb/rocksdb/options/options_test.cc +3794 -0
  507. package/deps/rocksdb/rocksdb/port/jemalloc_helper.h +106 -0
  508. package/deps/rocksdb/rocksdb/port/lang.h +16 -0
  509. package/deps/rocksdb/rocksdb/port/likely.h +18 -0
  510. package/deps/rocksdb/rocksdb/port/malloc.h +17 -0
  511. package/deps/rocksdb/rocksdb/port/port.h +21 -0
  512. package/deps/rocksdb/rocksdb/port/port_dirent.h +44 -0
  513. package/deps/rocksdb/rocksdb/port/port_example.h +101 -0
  514. package/deps/rocksdb/rocksdb/port/port_posix.cc +266 -0
  515. package/deps/rocksdb/rocksdb/port/port_posix.h +223 -0
  516. package/deps/rocksdb/rocksdb/port/stack_trace.cc +179 -0
  517. package/deps/rocksdb/rocksdb/port/stack_trace.h +28 -0
  518. package/deps/rocksdb/rocksdb/port/sys_time.h +47 -0
  519. package/deps/rocksdb/rocksdb/port/util_logger.h +20 -0
  520. package/deps/rocksdb/rocksdb/port/win/env_default.cc +45 -0
  521. package/deps/rocksdb/rocksdb/port/win/env_win.cc +1449 -0
  522. package/deps/rocksdb/rocksdb/port/win/env_win.h +294 -0
  523. package/deps/rocksdb/rocksdb/port/win/io_win.cc +1084 -0
  524. package/deps/rocksdb/rocksdb/port/win/io_win.h +494 -0
  525. package/deps/rocksdb/rocksdb/port/win/port_win.cc +283 -0
  526. package/deps/rocksdb/rocksdb/port/win/port_win.h +411 -0
  527. package/deps/rocksdb/rocksdb/port/win/win_jemalloc.cc +79 -0
  528. package/deps/rocksdb/rocksdb/port/win/win_logger.cc +194 -0
  529. package/deps/rocksdb/rocksdb/port/win/win_logger.h +67 -0
  530. package/deps/rocksdb/rocksdb/port/win/win_thread.cc +183 -0
  531. package/deps/rocksdb/rocksdb/port/win/win_thread.h +122 -0
  532. package/deps/rocksdb/rocksdb/port/win/xpress_win.cc +221 -0
  533. package/deps/rocksdb/rocksdb/port/win/xpress_win.h +26 -0
  534. package/deps/rocksdb/rocksdb/port/xpress.h +17 -0
  535. package/deps/rocksdb/rocksdb/src.mk +631 -0
  536. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.cc +126 -0
  537. package/deps/rocksdb/rocksdb/table/adaptive/adaptive_table_factory.h +57 -0
  538. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.cc +73 -0
  539. package/deps/rocksdb/rocksdb/table/block_based/binary_search_index_reader.h +48 -0
  540. package/deps/rocksdb/rocksdb/table/block_based/block.cc +1049 -0
  541. package/deps/rocksdb/rocksdb/table/block_based/block.h +720 -0
  542. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.cc +348 -0
  543. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block.h +119 -0
  544. package/deps/rocksdb/rocksdb/table/block_based/block_based_filter_block_test.cc +434 -0
  545. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +1835 -0
  546. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +193 -0
  547. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +839 -0
  548. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.h +95 -0
  549. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.cc +383 -0
  550. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_iterator.h +251 -0
  551. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +3563 -0
  552. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +681 -0
  553. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +190 -0
  554. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +347 -0
  555. package/deps/rocksdb/rocksdb/table/block_based/block_builder.cc +201 -0
  556. package/deps/rocksdb/rocksdb/table/block_based/block_builder.h +78 -0
  557. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.cc +66 -0
  558. package/deps/rocksdb/rocksdb/table/block_based/block_prefetcher.h +32 -0
  559. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.cc +232 -0
  560. package/deps/rocksdb/rocksdb/table/block_based/block_prefix_index.h +66 -0
  561. package/deps/rocksdb/rocksdb/table/block_based/block_test.cc +623 -0
  562. package/deps/rocksdb/rocksdb/table/block_based/block_type.h +30 -0
  563. package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +220 -0
  564. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.cc +59 -0
  565. package/deps/rocksdb/rocksdb/table/block_based/data_block_footer.h +25 -0
  566. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.cc +93 -0
  567. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index.h +136 -0
  568. package/deps/rocksdb/rocksdb/table/block_based/data_block_hash_index_test.cc +717 -0
  569. package/deps/rocksdb/rocksdb/table/block_based/filter_block.h +180 -0
  570. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +102 -0
  571. package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +55 -0
  572. package/deps/rocksdb/rocksdb/table/block_based/filter_policy.cc +1407 -0
  573. package/deps/rocksdb/rocksdb/table/block_based/filter_policy_internal.h +168 -0
  574. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.cc +88 -0
  575. package/deps/rocksdb/rocksdb/table/block_based/flush_block_policy.h +41 -0
  576. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +344 -0
  577. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.h +139 -0
  578. package/deps/rocksdb/rocksdb/table/block_based/full_filter_block_test.cc +333 -0
  579. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.cc +147 -0
  580. package/deps/rocksdb/rocksdb/table/block_based/hash_index_reader.h +49 -0
  581. package/deps/rocksdb/rocksdb/table/block_based/index_builder.cc +248 -0
  582. package/deps/rocksdb/rocksdb/table/block_based/index_builder.h +444 -0
  583. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +54 -0
  584. package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.h +85 -0
  585. package/deps/rocksdb/rocksdb/table/block_based/mock_block_based_table.h +56 -0
  586. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.cc +22 -0
  587. package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +40 -0
  588. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +521 -0
  589. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +144 -0
  590. package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +424 -0
  591. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.cc +163 -0
  592. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_iterator.h +142 -0
  593. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +186 -0
  594. package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.h +51 -0
  595. package/deps/rocksdb/rocksdb/table/block_based/reader_common.cc +64 -0
  596. package/deps/rocksdb/rocksdb/table/block_based/reader_common.h +38 -0
  597. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +120 -0
  598. package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.h +59 -0
  599. package/deps/rocksdb/rocksdb/table/block_fetcher.cc +324 -0
  600. package/deps/rocksdb/rocksdb/table/block_fetcher.h +129 -0
  601. package/deps/rocksdb/rocksdb/table/block_fetcher_test.cc +534 -0
  602. package/deps/rocksdb/rocksdb/table/cleanable_test.cc +277 -0
  603. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.cc +543 -0
  604. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder.h +136 -0
  605. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_builder_test.cc +663 -0
  606. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.cc +107 -0
  607. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_factory.h +81 -0
  608. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.cc +404 -0
  609. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader.h +101 -0
  610. package/deps/rocksdb/rocksdb/table/cuckoo/cuckoo_table_reader_test.cc +585 -0
  611. package/deps/rocksdb/rocksdb/table/format.cc +422 -0
  612. package/deps/rocksdb/rocksdb/table/format.h +348 -0
  613. package/deps/rocksdb/rocksdb/table/get_context.cc +408 -0
  614. package/deps/rocksdb/rocksdb/table/get_context.h +212 -0
  615. package/deps/rocksdb/rocksdb/table/internal_iterator.h +205 -0
  616. package/deps/rocksdb/rocksdb/table/iter_heap.h +42 -0
  617. package/deps/rocksdb/rocksdb/table/iterator.cc +210 -0
  618. package/deps/rocksdb/rocksdb/table/iterator_wrapper.h +180 -0
  619. package/deps/rocksdb/rocksdb/table/merger_test.cc +180 -0
  620. package/deps/rocksdb/rocksdb/table/merging_iterator.cc +481 -0
  621. package/deps/rocksdb/rocksdb/table/merging_iterator.h +64 -0
  622. package/deps/rocksdb/rocksdb/table/meta_blocks.cc +541 -0
  623. package/deps/rocksdb/rocksdb/table/meta_blocks.h +154 -0
  624. package/deps/rocksdb/rocksdb/table/mock_table.cc +328 -0
  625. package/deps/rocksdb/rocksdb/table/mock_table.h +89 -0
  626. package/deps/rocksdb/rocksdb/table/multiget_context.h +282 -0
  627. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.cc +116 -0
  628. package/deps/rocksdb/rocksdb/table/persistent_cache_helper.h +44 -0
  629. package/deps/rocksdb/rocksdb/table/persistent_cache_options.h +34 -0
  630. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.cc +78 -0
  631. package/deps/rocksdb/rocksdb/table/plain/plain_table_bloom.h +135 -0
  632. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.cc +332 -0
  633. package/deps/rocksdb/rocksdb/table/plain/plain_table_builder.h +153 -0
  634. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.cc +263 -0
  635. package/deps/rocksdb/rocksdb/table/plain/plain_table_factory.h +182 -0
  636. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.cc +211 -0
  637. package/deps/rocksdb/rocksdb/table/plain/plain_table_index.h +249 -0
  638. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.cc +506 -0
  639. package/deps/rocksdb/rocksdb/table/plain/plain_table_key_coding.h +201 -0
  640. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.cc +781 -0
  641. package/deps/rocksdb/rocksdb/table/plain/plain_table_reader.h +247 -0
  642. package/deps/rocksdb/rocksdb/table/scoped_arena_iterator.h +61 -0
  643. package/deps/rocksdb/rocksdb/table/sst_file_dumper.cc +502 -0
  644. package/deps/rocksdb/rocksdb/table/sst_file_dumper.h +96 -0
  645. package/deps/rocksdb/rocksdb/table/sst_file_reader.cc +98 -0
  646. package/deps/rocksdb/rocksdb/table/sst_file_reader_test.cc +228 -0
  647. package/deps/rocksdb/rocksdb/table/sst_file_writer.cc +340 -0
  648. package/deps/rocksdb/rocksdb/table/sst_file_writer_collectors.h +94 -0
  649. package/deps/rocksdb/rocksdb/table/table_builder.h +203 -0
  650. package/deps/rocksdb/rocksdb/table/table_factory.cc +38 -0
  651. package/deps/rocksdb/rocksdb/table/table_properties.cc +300 -0
  652. package/deps/rocksdb/rocksdb/table/table_properties_internal.h +30 -0
  653. package/deps/rocksdb/rocksdb/table/table_reader.h +147 -0
  654. package/deps/rocksdb/rocksdb/table/table_reader_bench.cc +347 -0
  655. package/deps/rocksdb/rocksdb/table/table_reader_caller.h +39 -0
  656. package/deps/rocksdb/rocksdb/table/table_test.cc +4769 -0
  657. package/deps/rocksdb/rocksdb/table/two_level_iterator.cc +215 -0
  658. package/deps/rocksdb/rocksdb/table/two_level_iterator.h +43 -0
  659. package/deps/rocksdb/rocksdb/test_util/mock_time_env.cc +38 -0
  660. package/deps/rocksdb/rocksdb/test_util/mock_time_env.h +74 -0
  661. package/deps/rocksdb/rocksdb/test_util/sync_point.cc +93 -0
  662. package/deps/rocksdb/rocksdb/test_util/sync_point.h +161 -0
  663. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.cc +129 -0
  664. package/deps/rocksdb/rocksdb/test_util/sync_point_impl.h +74 -0
  665. package/deps/rocksdb/rocksdb/test_util/testharness.cc +56 -0
  666. package/deps/rocksdb/rocksdb/test_util/testharness.h +53 -0
  667. package/deps/rocksdb/rocksdb/test_util/testutil.cc +566 -0
  668. package/deps/rocksdb/rocksdb/test_util/testutil.h +887 -0
  669. package/deps/rocksdb/rocksdb/test_util/testutil_test.cc +43 -0
  670. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.cc +388 -0
  671. package/deps/rocksdb/rocksdb/test_util/transaction_test_util.h +132 -0
  672. package/deps/rocksdb/rocksdb/third-party/folly/folly/CPortability.h +27 -0
  673. package/deps/rocksdb/rocksdb/third-party/folly/folly/ConstexprMath.h +45 -0
  674. package/deps/rocksdb/rocksdb/third-party/folly/folly/Indestructible.h +166 -0
  675. package/deps/rocksdb/rocksdb/third-party/folly/folly/Optional.h +570 -0
  676. package/deps/rocksdb/rocksdb/third-party/folly/folly/Portability.h +92 -0
  677. package/deps/rocksdb/rocksdb/third-party/folly/folly/ScopeGuard.h +54 -0
  678. package/deps/rocksdb/rocksdb/third-party/folly/folly/Traits.h +152 -0
  679. package/deps/rocksdb/rocksdb/third-party/folly/folly/Unit.h +59 -0
  680. package/deps/rocksdb/rocksdb/third-party/folly/folly/Utility.h +141 -0
  681. package/deps/rocksdb/rocksdb/third-party/folly/folly/chrono/Hardware.h +33 -0
  682. package/deps/rocksdb/rocksdb/third-party/folly/folly/container/Array.h +74 -0
  683. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex-inl.h +117 -0
  684. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.cpp +263 -0
  685. package/deps/rocksdb/rocksdb/third-party/folly/folly/detail/Futex.h +96 -0
  686. package/deps/rocksdb/rocksdb/third-party/folly/folly/functional/Invoke.h +40 -0
  687. package/deps/rocksdb/rocksdb/third-party/folly/folly/hash/Hash.h +29 -0
  688. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Align.h +144 -0
  689. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Bits.h +30 -0
  690. package/deps/rocksdb/rocksdb/third-party/folly/folly/lang/Launder.h +51 -0
  691. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/Asm.h +28 -0
  692. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysSyscall.h +10 -0
  693. package/deps/rocksdb/rocksdb/third-party/folly/folly/portability/SysTypes.h +26 -0
  694. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification-inl.h +138 -0
  695. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.cpp +23 -0
  696. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicNotification.h +57 -0
  697. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil-inl.h +260 -0
  698. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/AtomicUtil.h +52 -0
  699. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/Baton.h +328 -0
  700. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex-inl.h +1703 -0
  701. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.cpp +16 -0
  702. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutex.h +304 -0
  703. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/DistributedMutexSpecializations.h +39 -0
  704. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.cpp +26 -0
  705. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/ParkingLot.h +318 -0
  706. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.cpp +12 -0
  707. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/WaitOptions.h +57 -0
  708. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/InlineFunctionRef.h +219 -0
  709. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable-inl.h +207 -0
  710. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/ProxyLockable.h +164 -0
  711. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Sleeper.h +57 -0
  712. package/deps/rocksdb/rocksdb/third-party/folly/folly/synchronization/detail/Spin.h +77 -0
  713. package/deps/rocksdb/rocksdb/third-party/gcc/ppc-asm.h +390 -0
  714. package/deps/rocksdb/rocksdb/thirdparty.inc +268 -0
  715. package/deps/rocksdb/rocksdb/tools/CMakeLists.txt +30 -0
  716. package/deps/rocksdb/rocksdb/tools/blob_dump.cc +110 -0
  717. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/__init__.py +2 -0
  718. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.py +2000 -0
  719. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim.sh +156 -0
  720. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_pysim_test.py +734 -0
  721. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.cc +2307 -0
  722. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer.h +395 -0
  723. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_plot.py +721 -0
  724. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +719 -0
  725. package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_tool.cc +25 -0
  726. package/deps/rocksdb/rocksdb/tools/db_bench.cc +21 -0
  727. package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +7416 -0
  728. package/deps/rocksdb/rocksdb/tools/db_bench_tool_test.cc +328 -0
  729. package/deps/rocksdb/rocksdb/tools/db_repl_stress.cc +130 -0
  730. package/deps/rocksdb/rocksdb/tools/db_sanity_test.cc +297 -0
  731. package/deps/rocksdb/rocksdb/tools/dump/db_dump_tool.cc +259 -0
  732. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_dump.cc +63 -0
  733. package/deps/rocksdb/rocksdb/tools/dump/rocksdb_undump.cc +62 -0
  734. package/deps/rocksdb/rocksdb/tools/io_tracer_parser.cc +25 -0
  735. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_test.cc +187 -0
  736. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.cc +120 -0
  737. package/deps/rocksdb/rocksdb/tools/io_tracer_parser_tool.h +40 -0
  738. package/deps/rocksdb/rocksdb/tools/ldb.cc +21 -0
  739. package/deps/rocksdb/rocksdb/tools/ldb_cmd.cc +3609 -0
  740. package/deps/rocksdb/rocksdb/tools/ldb_cmd_impl.h +665 -0
  741. package/deps/rocksdb/rocksdb/tools/ldb_cmd_test.cc +746 -0
  742. package/deps/rocksdb/rocksdb/tools/ldb_tool.cc +159 -0
  743. package/deps/rocksdb/rocksdb/tools/reduce_levels_test.cc +221 -0
  744. package/deps/rocksdb/rocksdb/tools/sst_dump.cc +20 -0
  745. package/deps/rocksdb/rocksdb/tools/sst_dump_test.cc +427 -0
  746. package/deps/rocksdb/rocksdb/tools/sst_dump_tool.cc +541 -0
  747. package/deps/rocksdb/rocksdb/tools/trace_analyzer.cc +25 -0
  748. package/deps/rocksdb/rocksdb/tools/trace_analyzer_test.cc +752 -0
  749. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.cc +2001 -0
  750. package/deps/rocksdb/rocksdb/tools/trace_analyzer_tool.h +292 -0
  751. package/deps/rocksdb/rocksdb/tools/write_stress.cc +305 -0
  752. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +496 -0
  753. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.h +294 -0
  754. package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer_test.cc +379 -0
  755. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.cc +229 -0
  756. package/deps/rocksdb/rocksdb/trace_replay/io_tracer.h +174 -0
  757. package/deps/rocksdb/rocksdb/trace_replay/io_tracer_test.cc +215 -0
  758. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +491 -0
  759. package/deps/rocksdb/rocksdb/trace_replay/trace_replay.h +195 -0
  760. package/deps/rocksdb/rocksdb/util/aligned_buffer.h +255 -0
  761. package/deps/rocksdb/rocksdb/util/autovector.h +367 -0
  762. package/deps/rocksdb/rocksdb/util/autovector_test.cc +330 -0
  763. package/deps/rocksdb/rocksdb/util/bloom_impl.h +485 -0
  764. package/deps/rocksdb/rocksdb/util/bloom_test.cc +1191 -0
  765. package/deps/rocksdb/rocksdb/util/build_version.cc.in +5 -0
  766. package/deps/rocksdb/rocksdb/util/build_version.h +15 -0
  767. package/deps/rocksdb/rocksdb/util/cast_util.h +20 -0
  768. package/deps/rocksdb/rocksdb/util/channel.h +67 -0
  769. package/deps/rocksdb/rocksdb/util/coding.cc +89 -0
  770. package/deps/rocksdb/rocksdb/util/coding.h +419 -0
  771. package/deps/rocksdb/rocksdb/util/coding_lean.h +101 -0
  772. package/deps/rocksdb/rocksdb/util/coding_test.cc +217 -0
  773. package/deps/rocksdb/rocksdb/util/compaction_job_stats_impl.cc +92 -0
  774. package/deps/rocksdb/rocksdb/util/comparator.cc +219 -0
  775. package/deps/rocksdb/rocksdb/util/compression.h +1529 -0
  776. package/deps/rocksdb/rocksdb/util/compression_context_cache.cc +108 -0
  777. package/deps/rocksdb/rocksdb/util/compression_context_cache.h +47 -0
  778. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.cc +67 -0
  779. package/deps/rocksdb/rocksdb/util/concurrent_task_limiter_impl.h +67 -0
  780. package/deps/rocksdb/rocksdb/util/core_local.h +83 -0
  781. package/deps/rocksdb/rocksdb/util/crc32c.cc +1283 -0
  782. package/deps/rocksdb/rocksdb/util/crc32c.h +51 -0
  783. package/deps/rocksdb/rocksdb/util/crc32c_arm64.cc +169 -0
  784. package/deps/rocksdb/rocksdb/util/crc32c_arm64.h +50 -0
  785. package/deps/rocksdb/rocksdb/util/crc32c_ppc.c +94 -0
  786. package/deps/rocksdb/rocksdb/util/crc32c_ppc.h +19 -0
  787. package/deps/rocksdb/rocksdb/util/crc32c_ppc_asm.S +756 -0
  788. package/deps/rocksdb/rocksdb/util/crc32c_ppc_constants.h +900 -0
  789. package/deps/rocksdb/rocksdb/util/crc32c_test.cc +180 -0
  790. package/deps/rocksdb/rocksdb/util/defer.h +52 -0
  791. package/deps/rocksdb/rocksdb/util/defer_test.cc +39 -0
  792. package/deps/rocksdb/rocksdb/util/duplicate_detector.h +68 -0
  793. package/deps/rocksdb/rocksdb/util/dynamic_bloom.cc +70 -0
  794. package/deps/rocksdb/rocksdb/util/dynamic_bloom.h +214 -0
  795. package/deps/rocksdb/rocksdb/util/dynamic_bloom_test.cc +323 -0
  796. package/deps/rocksdb/rocksdb/util/fastrange.h +112 -0
  797. package/deps/rocksdb/rocksdb/util/file_checksum_helper.cc +136 -0
  798. package/deps/rocksdb/rocksdb/util/file_checksum_helper.h +98 -0
  799. package/deps/rocksdb/rocksdb/util/file_reader_writer_test.cc +449 -0
  800. package/deps/rocksdb/rocksdb/util/filelock_test.cc +152 -0
  801. package/deps/rocksdb/rocksdb/util/filter_bench.cc +781 -0
  802. package/deps/rocksdb/rocksdb/util/gflags_compat.h +20 -0
  803. package/deps/rocksdb/rocksdb/util/hash.cc +83 -0
  804. package/deps/rocksdb/rocksdb/util/hash.h +107 -0
  805. package/deps/rocksdb/rocksdb/util/hash_map.h +67 -0
  806. package/deps/rocksdb/rocksdb/util/hash_test.cc +593 -0
  807. package/deps/rocksdb/rocksdb/util/heap.h +166 -0
  808. package/deps/rocksdb/rocksdb/util/heap_test.cc +139 -0
  809. package/deps/rocksdb/rocksdb/util/kv_map.h +33 -0
  810. package/deps/rocksdb/rocksdb/util/log_write_bench.cc +86 -0
  811. package/deps/rocksdb/rocksdb/util/math.h +186 -0
  812. package/deps/rocksdb/rocksdb/util/math128.h +298 -0
  813. package/deps/rocksdb/rocksdb/util/murmurhash.cc +191 -0
  814. package/deps/rocksdb/rocksdb/util/murmurhash.h +42 -0
  815. package/deps/rocksdb/rocksdb/util/mutexlock.h +186 -0
  816. package/deps/rocksdb/rocksdb/util/ppc-opcode.h +27 -0
  817. package/deps/rocksdb/rocksdb/util/random.cc +56 -0
  818. package/deps/rocksdb/rocksdb/util/random.h +186 -0
  819. package/deps/rocksdb/rocksdb/util/random_test.cc +105 -0
  820. package/deps/rocksdb/rocksdb/util/rate_limiter.cc +340 -0
  821. package/deps/rocksdb/rocksdb/util/rate_limiter.h +113 -0
  822. package/deps/rocksdb/rocksdb/util/rate_limiter_test.cc +251 -0
  823. package/deps/rocksdb/rocksdb/util/repeatable_thread.h +151 -0
  824. package/deps/rocksdb/rocksdb/util/repeatable_thread_test.cc +107 -0
  825. package/deps/rocksdb/rocksdb/util/ribbon_alg.h +1201 -0
  826. package/deps/rocksdb/rocksdb/util/ribbon_impl.h +1062 -0
  827. package/deps/rocksdb/rocksdb/util/ribbon_test.cc +931 -0
  828. package/deps/rocksdb/rocksdb/util/set_comparator.h +22 -0
  829. package/deps/rocksdb/rocksdb/util/slice.cc +243 -0
  830. package/deps/rocksdb/rocksdb/util/slice_test.cc +163 -0
  831. package/deps/rocksdb/rocksdb/util/slice_transform_test.cc +153 -0
  832. package/deps/rocksdb/rocksdb/util/status.cc +149 -0
  833. package/deps/rocksdb/rocksdb/util/stderr_logger.h +31 -0
  834. package/deps/rocksdb/rocksdb/util/stop_watch.h +118 -0
  835. package/deps/rocksdb/rocksdb/util/string_util.cc +422 -0
  836. package/deps/rocksdb/rocksdb/util/string_util.h +144 -0
  837. package/deps/rocksdb/rocksdb/util/thread_list_test.cc +354 -0
  838. package/deps/rocksdb/rocksdb/util/thread_local.cc +554 -0
  839. package/deps/rocksdb/rocksdb/util/thread_local.h +101 -0
  840. package/deps/rocksdb/rocksdb/util/thread_local_test.cc +583 -0
  841. package/deps/rocksdb/rocksdb/util/thread_operation.h +121 -0
  842. package/deps/rocksdb/rocksdb/util/threadpool_imp.cc +506 -0
  843. package/deps/rocksdb/rocksdb/util/threadpool_imp.h +112 -0
  844. package/deps/rocksdb/rocksdb/util/timer.h +331 -0
  845. package/deps/rocksdb/rocksdb/util/timer_queue.h +230 -0
  846. package/deps/rocksdb/rocksdb/util/timer_queue_test.cc +72 -0
  847. package/deps/rocksdb/rocksdb/util/timer_test.cc +399 -0
  848. package/deps/rocksdb/rocksdb/util/user_comparator_wrapper.h +80 -0
  849. package/deps/rocksdb/rocksdb/util/vector_iterator.h +101 -0
  850. package/deps/rocksdb/rocksdb/util/work_queue.h +148 -0
  851. package/deps/rocksdb/rocksdb/util/work_queue_test.cc +268 -0
  852. package/deps/rocksdb/rocksdb/util/xxh3p.h +1392 -0
  853. package/deps/rocksdb/rocksdb/util/xxhash.cc +1158 -0
  854. package/deps/rocksdb/rocksdb/util/xxhash.h +598 -0
  855. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db.cc +2354 -0
  856. package/deps/rocksdb/rocksdb/utilities/backupable/backupable_db_test.cc +2955 -0
  857. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.cc +488 -0
  858. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_compaction_filter.h +199 -0
  859. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.cc +112 -0
  860. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db.h +266 -0
  861. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_gc_stats.h +52 -0
  862. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.cc +2167 -0
  863. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl.h +500 -0
  864. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_impl_filesnapshot.cc +113 -0
  865. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_iterator.h +147 -0
  866. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_listener.h +66 -0
  867. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_db_test.cc +2386 -0
  868. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.cc +281 -0
  869. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_dump_tool.h +58 -0
  870. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.cc +314 -0
  871. package/deps/rocksdb/rocksdb/utilities/blob_db/blob_file.h +244 -0
  872. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.cc +47 -0
  873. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_compaction_filter.h +42 -0
  874. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_format_test.cc +375 -0
  875. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_functional_test.cc +327 -0
  876. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc +114 -0
  877. package/deps/rocksdb/rocksdb/utilities/cassandra/cassandra_serialize_test.cc +187 -0
  878. package/deps/rocksdb/rocksdb/utilities/cassandra/format.cc +390 -0
  879. package/deps/rocksdb/rocksdb/utilities/cassandra/format.h +184 -0
  880. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.cc +67 -0
  881. package/deps/rocksdb/rocksdb/utilities/cassandra/merge_operator.h +44 -0
  882. package/deps/rocksdb/rocksdb/utilities/cassandra/serialize.h +75 -0
  883. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.cc +72 -0
  884. package/deps/rocksdb/rocksdb/utilities/cassandra/test_utils.h +43 -0
  885. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.cc +588 -0
  886. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_impl.h +82 -0
  887. package/deps/rocksdb/rocksdb/utilities/checkpoint/checkpoint_test.cc +821 -0
  888. package/deps/rocksdb/rocksdb/utilities/compaction_filters/layered_compaction_filter_base.h +37 -0
  889. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc +29 -0
  890. package/deps/rocksdb/rocksdb/utilities/compaction_filters/remove_emptyvalue_compactionfilter.h +27 -0
  891. package/deps/rocksdb/rocksdb/utilities/convenience/info_log_finder.cc +25 -0
  892. package/deps/rocksdb/rocksdb/utilities/debug.cc +82 -0
  893. package/deps/rocksdb/rocksdb/utilities/env_librados.cc +1497 -0
  894. package/deps/rocksdb/rocksdb/utilities/env_librados_test.cc +1146 -0
  895. package/deps/rocksdb/rocksdb/utilities/env_mirror.cc +262 -0
  896. package/deps/rocksdb/rocksdb/utilities/env_mirror_test.cc +223 -0
  897. package/deps/rocksdb/rocksdb/utilities/env_timed.cc +145 -0
  898. package/deps/rocksdb/rocksdb/utilities/env_timed_test.cc +44 -0
  899. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.cc +490 -0
  900. package/deps/rocksdb/rocksdb/utilities/fault_injection_env.h +242 -0
  901. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.cc +581 -0
  902. package/deps/rocksdb/rocksdb/utilities/fault_injection_fs.h +437 -0
  903. package/deps/rocksdb/rocksdb/utilities/leveldb_options/leveldb_options.cc +56 -0
  904. package/deps/rocksdb/rocksdb/utilities/memory/memory_test.cc +275 -0
  905. package/deps/rocksdb/rocksdb/utilities/memory/memory_util.cc +52 -0
  906. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.cc +59 -0
  907. package/deps/rocksdb/rocksdb/utilities/merge_operators/bytesxor.h +39 -0
  908. package/deps/rocksdb/rocksdb/utilities/merge_operators/max.cc +77 -0
  909. package/deps/rocksdb/rocksdb/utilities/merge_operators/put.cc +83 -0
  910. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.cc +97 -0
  911. package/deps/rocksdb/rocksdb/utilities/merge_operators/sortlist.h +38 -0
  912. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.cc +59 -0
  913. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend.h +31 -0
  914. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.cc +117 -0
  915. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend2.h +49 -0
  916. package/deps/rocksdb/rocksdb/utilities/merge_operators/string_append/stringappend_test.cc +598 -0
  917. package/deps/rocksdb/rocksdb/utilities/merge_operators/uint64add.cc +69 -0
  918. package/deps/rocksdb/rocksdb/utilities/merge_operators.h +55 -0
  919. package/deps/rocksdb/rocksdb/utilities/object_registry.cc +87 -0
  920. package/deps/rocksdb/rocksdb/utilities/object_registry_test.cc +174 -0
  921. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration.cc +168 -0
  922. package/deps/rocksdb/rocksdb/utilities/option_change_migration/option_change_migration_test.cc +431 -0
  923. package/deps/rocksdb/rocksdb/utilities/options/options_util.cc +159 -0
  924. package/deps/rocksdb/rocksdb/utilities/options/options_util_test.cc +655 -0
  925. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.cc +425 -0
  926. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier.h +156 -0
  927. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.cc +609 -0
  928. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file.h +296 -0
  929. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_file_buffer.h +127 -0
  930. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.cc +86 -0
  931. package/deps/rocksdb/rocksdb/utilities/persistent_cache/block_cache_tier_metadata.h +125 -0
  932. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table.h +238 -0
  933. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_bench.cc +308 -0
  934. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_evictable.h +168 -0
  935. package/deps/rocksdb/rocksdb/utilities/persistent_cache/hash_table_test.cc +160 -0
  936. package/deps/rocksdb/rocksdb/utilities/persistent_cache/lrulist.h +174 -0
  937. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_bench.cc +360 -0
  938. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.cc +456 -0
  939. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_test.h +286 -0
  940. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.cc +167 -0
  941. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_tier.h +339 -0
  942. package/deps/rocksdb/rocksdb/utilities/persistent_cache/persistent_cache_util.h +67 -0
  943. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.cc +140 -0
  944. package/deps/rocksdb/rocksdb/utilities/persistent_cache/volatile_tier_impl.h +142 -0
  945. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +285 -0
  946. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.h +231 -0
  947. package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator_test.cc +494 -0
  948. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +356 -0
  949. package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache_test.cc +224 -0
  950. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.cc +122 -0
  951. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector.h +72 -0
  952. package/deps/rocksdb/rocksdb/utilities/table_properties_collectors/compact_on_deletion_collector_test.cc +244 -0
  953. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.cc +125 -0
  954. package/deps/rocksdb/rocksdb/utilities/trace/file_trace_reader_writer.h +48 -0
  955. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.cc +29 -0
  956. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_manager.h +82 -0
  957. package/deps/rocksdb/rocksdb/utilities/transactions/lock/lock_tracker.h +209 -0
  958. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.cc +720 -0
  959. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager.h +223 -0
  960. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.cc +181 -0
  961. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_manager_test.h +319 -0
  962. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.cc +270 -0
  963. package/deps/rocksdb/rocksdb/utilities/transactions/lock/point/point_lock_tracker.h +99 -0
  964. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_lock_manager.h +30 -0
  965. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_locking_test.cc +306 -0
  966. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.AGPLv3 +661 -0
  967. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.APACHEv2 +174 -0
  968. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/COPYING.GPLv2 +339 -0
  969. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/db.h +76 -0
  970. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/ft/comparator.h +138 -0
  971. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/ft/ft-status.h +102 -0
  972. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc +139 -0
  973. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.h +174 -0
  974. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.cc +222 -0
  975. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.h +141 -0
  976. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc +525 -0
  977. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.h +253 -0
  978. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc +1007 -0
  979. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/locktree.h +560 -0
  980. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc +527 -0
  981. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc +265 -0
  982. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.h +178 -0
  983. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/treenode.cc +520 -0
  984. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/treenode.h +302 -0
  985. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.cc +120 -0
  986. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.h +92 -0
  987. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc +213 -0
  988. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/locktree/wfg.h +124 -0
  989. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/memory.h +215 -0
  990. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_assert_subst.h +39 -0
  991. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_atomic.h +130 -0
  992. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_external_pthread.h +82 -0
  993. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_instrumentation.h +286 -0
  994. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_portability.h +87 -0
  995. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_pthread.h +520 -0
  996. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_race_tools.h +179 -0
  997. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +172 -0
  998. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/txn_subst.h +27 -0
  999. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/standalone_port.cc +132 -0
  1000. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.cc +153 -0
  1001. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/dbt.h +98 -0
  1002. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/growable_array.h +144 -0
  1003. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/memarena.cc +201 -0
  1004. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/memarena.h +141 -0
  1005. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/omt.h +794 -0
  1006. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/omt_impl.h +1295 -0
  1007. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/partitioned_counter.h +165 -0
  1008. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/util/status.h +76 -0
  1009. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc +479 -0
  1010. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_manager.h +130 -0
  1011. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc +156 -0
  1012. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.h +146 -0
  1013. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.cc +196 -0
  1014. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction.h +101 -0
  1015. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.cc +111 -0
  1016. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_db_impl.h +87 -0
  1017. package/deps/rocksdb/rocksdb/utilities/transactions/optimistic_transaction_test.cc +1418 -0
  1018. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.cc +752 -0
  1019. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction.h +232 -0
  1020. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.cc +628 -0
  1021. package/deps/rocksdb/rocksdb/utilities/transactions/pessimistic_transaction_db.h +228 -0
  1022. package/deps/rocksdb/rocksdb/utilities/transactions/snapshot_checker.cc +49 -0
  1023. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.cc +678 -0
  1024. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_base.h +373 -0
  1025. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.cc +135 -0
  1026. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_db_mutex_impl.h +26 -0
  1027. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +6350 -0
  1028. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.h +522 -0
  1029. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.cc +188 -0
  1030. package/deps/rocksdb/rocksdb/utilities/transactions/transaction_util.h +80 -0
  1031. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_transaction_test.cc +3531 -0
  1032. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.cc +483 -0
  1033. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn.h +119 -0
  1034. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.cc +999 -0
  1035. package/deps/rocksdb/rocksdb/utilities/transactions/write_prepared_txn_db.h +1109 -0
  1036. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_transaction_test.cc +786 -0
  1037. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.cc +1039 -0
  1038. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn.h +341 -0
  1039. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.cc +470 -0
  1040. package/deps/rocksdb/rocksdb/utilities/transactions/write_unprepared_txn_db.h +108 -0
  1041. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +332 -0
  1042. package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.h +353 -0
  1043. package/deps/rocksdb/rocksdb/utilities/ttl/ttl_test.cc +703 -0
  1044. package/deps/rocksdb/rocksdb/utilities/util_merge_operators_test.cc +99 -0
  1045. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index.cc +617 -0
  1046. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +345 -0
  1047. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.h +569 -0
  1048. package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_test.cc +1867 -0
  1049. package/deps/rocksdb/rocksdb.gyp +44 -62
  1050. package/index.js +92 -0
  1051. package/iterator.js +103 -34
  1052. package/package-lock.json +23687 -0
  1053. package/package.json +22 -17
  1054. package/leveldown.js +0 -164
package/binding.cc CHANGED
@@ -1,4 +1,4 @@
1
- #define NAPI_VERSION 3
1
+ #define NAPI_VERSION 8
2
2
 
3
3
  #include <napi-macros.h>
4
4
  #include <node_api.h>
@@ -16,7 +16,11 @@
16
16
 
17
17
  namespace leveldb = rocksdb;
18
18
 
19
- #include <map>
19
+ #include <set>
20
+ #include <optional>
21
+ #include <memory>
22
+ #include <string>
23
+ #include <string_view>
20
24
  #include <vector>
21
25
 
22
26
  class NullLogger : public rocksdb::Logger {
@@ -26,255 +30,182 @@ public:
26
30
  virtual size_t GetLogFileSize() const override { return 0; }
27
31
  };
28
32
 
29
- /**
30
- * Forward declarations.
31
- */
32
33
  struct Database;
33
34
  struct Iterator;
34
- static void iterator_end_do (napi_env env, Iterator* iterator, napi_value cb);
35
-
36
- /**
37
- * Macros.
38
- */
35
+ static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb);
39
36
 
40
37
  #define NAPI_DB_CONTEXT() \
41
- Database* database = NULL; \
38
+ Database* database = nullptr; \
42
39
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&database));
43
40
 
44
41
  #define NAPI_ITERATOR_CONTEXT() \
45
- Iterator* iterator = NULL; \
42
+ Iterator* iterator = nullptr; \
46
43
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&iterator));
47
44
 
48
45
  #define NAPI_BATCH_CONTEXT() \
49
- Batch* batch = NULL; \
46
+ leveldb::WriteBatch* batch = nullptr; \
50
47
  NAPI_STATUS_THROWS(napi_get_value_external(env, argv[0], (void**)&batch));
51
48
 
52
- #define NAPI_RETURN_UNDEFINED() \
53
- return 0;
54
-
55
- #define NAPI_UTF8_NEW(name, val) \
56
- size_t name##_size = 0; \
57
- NAPI_STATUS_THROWS(napi_get_value_string_utf8(env, val, NULL, 0, &name##_size)) \
58
- char* name = new char[name##_size + 1]; \
59
- NAPI_STATUS_THROWS(napi_get_value_string_utf8(env, val, name, name##_size + 1, &name##_size)) \
60
- name[name##_size] = '\0';
61
-
62
- #define NAPI_ARGV_UTF8_NEW(name, i) \
63
- NAPI_UTF8_NEW(name, argv[i])
64
-
65
- #define LD_STRING_OR_BUFFER_TO_COPY(env, from, to) \
66
- char* to##Ch_ = 0; \
67
- size_t to##Sz_ = 0; \
68
- if (IsString(env, from)) { \
69
- napi_get_value_string_utf8(env, from, NULL, 0, &to##Sz_); \
70
- to##Ch_ = new char[to##Sz_ + 1]; \
71
- napi_get_value_string_utf8(env, from, to##Ch_, to##Sz_ + 1, &to##Sz_); \
72
- to##Ch_[to##Sz_] = '\0'; \
73
- } else if (IsBuffer(env, from)) { \
74
- char* buf = 0; \
75
- napi_get_buffer_info(env, from, (void **)&buf, &to##Sz_); \
76
- to##Ch_ = new char[to##Sz_]; \
77
- memcpy(to##Ch_, buf, to##Sz_); \
78
- }
79
-
80
- /*********************************************************************
81
- * Helpers.
82
- ********************************************************************/
83
-
84
- /**
85
- * Returns true if 'value' is a string.
86
- */
87
49
  static bool IsString (napi_env env, napi_value value) {
88
50
  napi_valuetype type;
89
51
  napi_typeof(env, value, &type);
90
52
  return type == napi_string;
91
53
  }
92
54
 
93
- /**
94
- * Returns true if 'value' is a buffer.
95
- */
96
55
  static bool IsBuffer (napi_env env, napi_value value) {
97
56
  bool isBuffer;
98
57
  napi_is_buffer(env, value, &isBuffer);
99
58
  return isBuffer;
100
59
  }
101
60
 
102
- /**
103
- * Returns true if 'value' is an object.
104
- */
105
61
  static bool IsObject (napi_env env, napi_value value) {
106
62
  napi_valuetype type;
107
63
  napi_typeof(env, value, &type);
108
64
  return type == napi_object;
109
65
  }
110
66
 
111
- /**
112
- * Create an error object.
113
- */
114
- static napi_value CreateError (napi_env env, const char* str) {
67
+ static napi_value CreateError (napi_env env, const std::string_view& str) {
115
68
  napi_value msg;
116
- napi_create_string_utf8(env, str, strlen(str), &msg);
69
+ napi_create_string_utf8(env, str.data(), str.size(), &msg);
117
70
  napi_value error;
118
- napi_create_error(env, NULL, msg, &error);
71
+ napi_create_error(env, nullptr, msg, &error);
119
72
  return error;
120
73
  }
121
74
 
122
- /**
123
- * Returns true if 'obj' has a property 'key'.
124
- */
125
- static bool HasProperty (napi_env env, napi_value obj, const char* key) {
75
+ static napi_value CreateCodeError (napi_env env, const std::string_view& code, const std::string_view& msg) {
76
+ napi_value codeValue;
77
+ napi_create_string_utf8(env, code.data(), code.size(), &codeValue);
78
+ napi_value msgValue;
79
+ napi_create_string_utf8(env, msg.data(), msg.size(), &msgValue);
80
+ napi_value error;
81
+ napi_create_error(env, codeValue, msgValue, &error);
82
+ return error;
83
+ }
84
+
85
+ static bool HasProperty (napi_env env, napi_value obj, const std::string_view& key) {
126
86
  bool has = false;
127
- napi_has_named_property(env, obj, key, &has);
87
+ napi_has_named_property(env, obj, key.data(), &has);
128
88
  return has;
129
89
  }
130
90
 
131
- /**
132
- * Returns a property in napi_value form.
133
- */
134
- static napi_value GetProperty (napi_env env, napi_value obj, const char* key) {
91
+ static napi_value GetProperty (napi_env env, napi_value obj, const std::string_view& key) {
135
92
  napi_value value;
136
- napi_get_named_property(env, obj, key, &value);
93
+ napi_get_named_property(env, obj, key.data(), &value);
137
94
  return value;
138
95
  }
139
96
 
140
- /**
141
- * Returns a boolean property 'key' from 'obj'.
142
- * Returns 'DEFAULT' if the property doesn't exist.
143
- */
144
- static bool BooleanProperty (napi_env env, napi_value obj, const char* key,
145
- bool DEFAULT) {
146
- if (HasProperty(env, obj, key)) {
147
- napi_value value = GetProperty(env, obj, key);
97
+ static bool BooleanProperty (napi_env env, napi_value obj, const std::string_view& key,
98
+ bool defaultValue) {
99
+ if (HasProperty(env, obj, key.data())) {
100
+ const auto value = GetProperty(env, obj, key.data());
148
101
  bool result;
149
102
  napi_get_value_bool(env, value, &result);
150
103
  return result;
151
104
  }
152
105
 
153
- return DEFAULT;
106
+ return defaultValue;
154
107
  }
155
108
 
156
- /**
157
- * Returns a uint32 property 'key' from 'obj'.
158
- * Returns 'DEFAULT' if the property doesn't exist.
159
- */
160
- static uint32_t Uint32Property (napi_env env, napi_value obj, const char* key,
161
- uint32_t DEFAULT) {
162
- if (HasProperty(env, obj, key)) {
163
- napi_value value = GetProperty(env, obj, key);
109
+ static bool EncodingIsBuffer (napi_env env, napi_value obj, const std::string_view& option) {
110
+ napi_value value;
111
+ size_t size;
112
+
113
+ if (napi_get_named_property(env, obj, option.data(), &value) == napi_ok &&
114
+ napi_get_value_string_utf8(env, value, NULL, 0, &size) == napi_ok) {
115
+ // Value is either "buffer" or "utf8" so we can tell them apart just by size
116
+ return size == 6;
117
+ }
118
+
119
+ return false;
120
+ }
121
+
122
+ static uint32_t Uint32Property (napi_env env, napi_value obj, const std::string_view& key,
123
+ uint32_t defaultValue) {
124
+ if (HasProperty(env, obj, key.data())) {
125
+ const auto value = GetProperty(env, obj, key.data());
164
126
  uint32_t result;
165
127
  napi_get_value_uint32(env, value, &result);
166
128
  return result;
167
129
  }
168
130
 
169
- return DEFAULT;
131
+ return defaultValue;
170
132
  }
171
133
 
172
- /**
173
- * Returns a int32 property 'key' from 'obj'.
174
- * Returns 'DEFAULT' if the property doesn't exist.
175
- */
176
- static int Int32Property (napi_env env, napi_value obj, const char* key,
177
- int DEFAULT) {
178
- if (HasProperty(env, obj, key)) {
179
- napi_value value = GetProperty(env, obj, key);
134
+ static int Int32Property (napi_env env, napi_value obj, const std::string_view& key,
135
+ int defaultValue) {
136
+ if (HasProperty(env, obj, key.data())) {
137
+ const auto value = GetProperty(env, obj, key.data());
180
138
  int result;
181
139
  napi_get_value_int32(env, value, &result);
182
140
  return result;
183
141
  }
184
142
 
185
- return DEFAULT;
143
+ return defaultValue;
186
144
  }
187
145
 
188
- /**
189
- * Returns a string property 'key' from 'obj'.
190
- * Returns empty string if the property doesn't exist.
191
- */
192
- static std::string StringProperty (napi_env env, napi_value obj, const char* key) {
146
+ static std::optional<std::string> ToString (napi_env env, napi_value from) {
147
+ if (IsString(env, from)) {
148
+ size_t length = 0;
149
+ napi_get_value_string_utf8(env, from, nullptr, 0, &length);
150
+ std::string value(length, '\0');
151
+ napi_get_value_string_utf8( env, from, &value[0], value.length() + 1, &length);
152
+ return value;
153
+ } else if (IsBuffer(env, from)) {
154
+ char* buf = nullptr;
155
+ size_t length = 0;
156
+ napi_get_buffer_info(env, from, reinterpret_cast<void **>(&buf), &length);
157
+ return std::string(buf, length);
158
+ }
159
+
160
+ return {};
161
+ }
162
+
163
+ static std::string StringProperty (napi_env env, napi_value obj, const std::string_view& key) {
193
164
  if (HasProperty(env, obj, key)) {
194
165
  napi_value value = GetProperty(env, obj, key);
195
166
  if (IsString(env, value)) {
196
- size_t size = 0;
197
- napi_get_value_string_utf8(env, value, NULL, 0, &size);
198
-
199
- char* buf = new char[size + 1];
200
- napi_get_value_string_utf8(env, value, buf, size + 1, &size);
201
- buf[size] = '\0';
202
-
203
- std::string result = buf;
204
- delete [] buf;
205
- return result;
167
+ return ToString(env, value).value_or(std::string());
206
168
  }
207
169
  }
208
170
 
209
171
  return "";
210
172
  }
211
173
 
212
- static void DisposeSliceBuffer (leveldb::Slice slice) {
213
- if (!slice.empty()) delete [] slice.data();
214
- }
215
-
216
- /**
217
- * Convert a napi_value to a leveldb::Slice.
218
- */
219
- static leveldb::Slice ToSlice (napi_env env, napi_value from) {
220
- LD_STRING_OR_BUFFER_TO_COPY(env, from, to);
221
- return leveldb::Slice(toCh_, toSz_);
222
- }
223
-
224
- /**
225
- * Returns length of string or buffer
226
- */
227
174
  static size_t StringOrBufferLength (napi_env env, napi_value value) {
228
175
  size_t size = 0;
229
176
 
230
177
  if (IsString(env, value)) {
231
- napi_get_value_string_utf8(env, value, NULL, 0, &size);
178
+ napi_get_value_string_utf8(env, value, nullptr, 0, &size);
232
179
  } else if (IsBuffer(env, value)) {
233
- char* buf;
180
+ char* buf = nullptr;
234
181
  napi_get_buffer_info(env, value, (void **)&buf, &size);
235
182
  }
236
183
 
237
184
  return size;
238
185
  }
239
186
 
240
- /**
241
- * Takes a Buffer or string property 'name' from 'opts'.
242
- * Returns null if the property does not exist or is zero-length.
243
- */
244
- static std::string* RangeOption (napi_env env, napi_value opts, const char* name) {
187
+ static std::optional<std::string> RangeOption (napi_env env, napi_value opts, const std::string& name) {
245
188
  if (HasProperty(env, opts, name)) {
246
- napi_value value = GetProperty(env, opts, name);
247
-
248
- if (StringOrBufferLength(env, value) > 0) {
249
- LD_STRING_OR_BUFFER_TO_COPY(env, value, to);
250
- std::string* result = new std::string(toCh_, toSz_);
251
- delete [] toCh_;
252
- return result;
253
- }
189
+ const auto value = GetProperty(env, opts, name);
190
+ return ToString(env, value);
254
191
  }
255
192
 
256
- return NULL;
193
+ return {};
257
194
  }
258
195
 
259
- /**
260
- * Converts an array containing Buffer or string keys to a vector.
261
- * Empty elements are skipped.
262
- */
263
- static std::vector<std::string>* KeyArray (napi_env env, napi_value arr) {
196
+ static std::vector<std::string> KeyArray (napi_env env, napi_value arr) {
264
197
  uint32_t length;
265
- std::vector<std::string>* result = new std::vector<std::string>();
198
+ std::vector<std::string> result;
266
199
 
267
200
  if (napi_get_array_length(env, arr, &length) == napi_ok) {
268
- result->reserve(length);
201
+ result.reserve(length);
269
202
 
270
203
  for (uint32_t i = 0; i < length; i++) {
271
204
  napi_value element;
272
205
 
273
206
  if (napi_get_element(env, arr, i, &element) == napi_ok &&
274
207
  StringOrBufferLength(env, element) > 0) {
275
- LD_STRING_OR_BUFFER_TO_COPY(env, element, to);
276
- result->emplace_back(toCh_, toSz_);
277
- delete [] toCh_;
208
+ result.push_back(ToString(env, element).value_or(std::string()));
278
209
  }
279
210
  }
280
211
  }
@@ -282,75 +213,34 @@ static std::vector<std::string>* KeyArray (napi_env env, napi_value arr) {
282
213
  return result;
283
214
  }
284
215
 
285
- /**
286
- * Calls a function.
287
- */
288
216
  static napi_status CallFunction (napi_env env,
289
217
  napi_value callback,
290
218
  const int argc,
291
219
  napi_value* argv) {
292
220
  napi_value global;
293
221
  napi_get_global(env, &global);
294
- return napi_call_function(env, global, callback, argc, argv, NULL);
222
+ return napi_call_function(env, global, callback, argc, argv, nullptr);
295
223
  }
296
224
 
297
- /**
298
- * Whether to yield entries, keys or values.
299
- */
300
- enum Mode {
301
- entries,
302
- keys,
303
- values
304
- };
305
-
306
- /**
307
- * Helper struct for caching and converting a key-value pair to napi_values.
308
- */
309
- struct Entry {
310
- Entry (const leveldb::Slice* key, const leveldb::Slice* value) {
311
- key_ = key != NULL ? new std::string(key->data(), key->size()) : NULL;
312
- value_ = value != NULL ? new std::string(value->data(), value->size()) : NULL;
313
- }
314
-
315
- ~Entry () {
316
- if (key_ != NULL) delete key_;
317
- if (value_ != NULL) delete value_;
318
- }
319
-
320
- // Not used yet.
321
- void ConvertXX (napi_env env, Mode mode, bool keyAsBuffer, bool valueAsBuffer, napi_value* result) {
322
- if (mode == Mode::entries) {
323
- napi_create_array_with_length(env, 2, result);
324
-
325
- napi_value valueElement;
326
- napi_value keyElement;
327
-
328
- Convert(env, key_, keyAsBuffer, &keyElement);
329
- Convert(env, value_, valueAsBuffer, &valueElement);
330
-
331
- napi_set_element(env, *result, 0, keyElement);
332
- napi_set_element(env, *result, 1, valueElement);
333
- } else if (mode == Mode::keys) {
334
- Convert(env, key_, keyAsBuffer, result);
335
- } else {
336
- Convert(env, value_, valueAsBuffer, result);
337
- }
225
+ template <typename T>
226
+ void Convert (napi_env env, const std::optional<T>& s, bool asBuffer, napi_value& result) {
227
+ if (!s) {
228
+ napi_get_undefined(env, &result);
229
+ } else if (asBuffer) {
230
+ napi_create_buffer_copy(env, s->size(), s->data(), nullptr, &result);
231
+ } else {
232
+ napi_create_string_utf8(env, s->data(), s->size(), &result);
338
233
  }
234
+ }
339
235
 
340
- static void Convert (napi_env env, const std::string* s, bool asBuffer, napi_value* result) {
341
- if (s == NULL) {
342
- napi_get_undefined(env, result);
343
- } else if (asBuffer) {
344
- napi_create_buffer_copy(env, s->size(), s->data(), NULL, result);
345
- } else {
346
- napi_create_string_utf8(env, s->data(), s->size(), result);
347
- }
236
+ template <typename T>
237
+ void Convert (napi_env env, const T& s, bool asBuffer, napi_value& result) {
238
+ if (asBuffer) {
239
+ napi_create_buffer_copy(env, s.size(), s.data(), nullptr, &result);
240
+ } else {
241
+ napi_create_string_utf8(env, s.data(), s.size(), &result);
348
242
  }
349
-
350
- private:
351
- std::string* key_;
352
- std::string* value_;
353
- };
243
+ }
354
244
 
355
245
  /**
356
246
  * Base worker class. Handles the async work. Derived classes can override the
@@ -367,7 +257,7 @@ struct BaseWorker {
367
257
  Database* database,
368
258
  napi_value callback,
369
259
  const char* resourceName)
370
- : database_(database), errMsg_(NULL) {
260
+ : database_(database) {
371
261
  NAPI_STATUS_THROWS_VOID(napi_create_reference(env, callback, 1, &callbackRef_));
372
262
  napi_value asyncResourceName;
373
263
  NAPI_STATUS_THROWS_VOID(napi_create_string_utf8(env, resourceName,
@@ -380,38 +270,25 @@ struct BaseWorker {
380
270
  this, &asyncWork_));
381
271
  }
382
272
 
383
- virtual ~BaseWorker () {
384
- delete [] errMsg_;
385
- }
273
+ virtual ~BaseWorker () {}
386
274
 
387
275
  static void Execute (napi_env env, void* data) {
388
- BaseWorker* self = (BaseWorker*)data;
276
+ auto self = reinterpret_cast<BaseWorker*>(data);
389
277
 
390
278
  // Don't pass env to DoExecute() because use of Node-API
391
279
  // methods should generally be avoided in async work.
392
280
  self->DoExecute();
393
281
  }
394
282
 
395
- bool SetStatus (leveldb::Status status) {
283
+ bool SetStatus (const leveldb::Status& status) {
396
284
  status_ = status;
397
- if (!status.ok()) {
398
- SetErrorMessage(status.ToString().c_str());
399
- return false;
400
- }
401
- return true;
402
- }
403
-
404
- void SetErrorMessage(const char *msg) {
405
- delete [] errMsg_;
406
- size_t size = strlen(msg) + 1;
407
- errMsg_ = new char[size];
408
- memcpy(errMsg_, msg, size);
285
+ return status.ok();
409
286
  }
410
287
 
411
288
  virtual void DoExecute () = 0;
412
289
 
413
290
  static void Complete (napi_env env, napi_status status, void* data) {
414
- BaseWorker* self = (BaseWorker*)data;
291
+ auto self = reinterpret_cast<BaseWorker*>(data);
415
292
 
416
293
  self->DoComplete(env);
417
294
  self->DoFinally(env);
@@ -435,7 +312,28 @@ struct BaseWorker {
435
312
  }
436
313
 
437
314
  virtual void HandleErrorCallback (napi_env env, napi_value callback) {
438
- napi_value argv = CreateError(env, errMsg_);
315
+ napi_value argv;
316
+
317
+ const auto msg = status_.ToString();
318
+
319
+ if (status_.IsNotFound()) {
320
+ argv = CreateCodeError(env, "LEVEL_NOT_FOUND", msg);
321
+ } else if (status_.IsCorruption()) {
322
+ argv = CreateCodeError(env, "LEVEL_CORRUPTION", msg);
323
+ } else if (status_.IsIOError()) {
324
+ if (msg.find("IO error: lock ") != std::string::npos) { // env_posix.cc
325
+ argv = CreateCodeError(env, "LEVEL_LOCKED", msg);
326
+ } else if (msg.find("IO error: LockFile ") != std::string::npos) { // env_win.cc
327
+ argv = CreateCodeError(env, "LEVEL_LOCKED", msg);
328
+ } else if (msg.find("IO error: While lock file") != std::string::npos) { // env_mac.cc
329
+ argv = CreateCodeError(env, "LEVEL_LOCKED", msg);
330
+ } else {
331
+ argv = CreateCodeError(env, "LEVEL_IO_ERROR", msg);
332
+ }
333
+ } else {
334
+ argv = CreateError(env, msg);
335
+ }
336
+
439
337
  CallFunction(env, callback, 1, &argv);
440
338
  }
441
339
 
@@ -456,7 +354,6 @@ private:
456
354
  napi_ref callbackRef_;
457
355
  napi_async_work asyncWork_;
458
356
  leveldb::Status status_;
459
- char *errMsg_;
460
357
  };
461
358
 
462
359
  /**
@@ -464,49 +361,45 @@ private:
464
361
  */
465
362
  struct Database {
466
363
  Database ()
467
- : db_(NULL),
468
- currentIteratorId_(0),
469
- pendingCloseWorker_(NULL),
470
- ref_(NULL),
364
+ : pendingCloseWorker_(nullptr),
365
+ ref_(nullptr),
471
366
  priorityWork_(0) {}
472
367
 
473
- ~Database () {
474
- if (db_ != NULL) {
475
- delete db_;
476
- db_ = NULL;
477
- }
478
- }
479
-
480
368
  leveldb::Status Open (const leveldb::Options& options,
481
- bool readOnly,
369
+ const bool readOnly,
482
370
  const char* location) {
483
371
  if (readOnly) {
484
- return rocksdb::DB::OpenForReadOnly(options, location, &db_);
372
+ leveldb::DB* db = nullptr;
373
+ const auto status = rocksdb::DB::OpenForReadOnly(options, location, &db);
374
+ db_.reset(db);
375
+ return status;
485
376
  } else {
486
- return leveldb::DB::Open(options, location, &db_);
377
+ leveldb::DB* db = nullptr;
378
+ const auto status = leveldb::DB::Open(options, location, &db);
379
+ db_.reset(db);
380
+ return status;
487
381
  }
488
382
  }
489
383
 
490
384
  void CloseDatabase () {
491
- delete db_;
492
- db_ = NULL;
385
+ db_.reset();
493
386
  }
494
387
 
495
388
  leveldb::Status Put (const leveldb::WriteOptions& options,
496
- leveldb::Slice key,
497
- leveldb::Slice value) {
498
- return db_->Put(options, key, value);
389
+ const std::string& key,
390
+ const std::string& value) {
391
+ return db_->Put(options, db_->DefaultColumnFamily(), key, value);
499
392
  }
500
393
 
501
394
  leveldb::Status Get (const leveldb::ReadOptions& options,
502
- leveldb::Slice key,
503
- std::string& value) {
504
- return db_->Get(options, key, &value);
395
+ const std::string& key,
396
+ rocksdb::PinnableSlice& value) {
397
+ return db_->Get(options, db_->DefaultColumnFamily(), key, &value);
505
398
  }
506
399
 
507
400
  leveldb::Status Del (const leveldb::WriteOptions& options,
508
- leveldb::Slice key) {
509
- return db_->Delete(options, key);
401
+ const std::string& key) {
402
+ return db_->Delete(options, db_->DefaultColumnFamily(), key);
510
403
  }
511
404
 
512
405
  leveldb::Status WriteBatch (const leveldb::WriteOptions& options,
@@ -514,41 +407,29 @@ struct Database {
514
407
  return db_->Write(options, batch);
515
408
  }
516
409
 
517
- uint64_t ApproximateSize (const leveldb::Range* range) {
518
- uint64_t size = 0;
519
- db_->GetApproximateSizes(range, 1, &size);
520
- return size;
521
- }
522
-
523
- void CompactRange (const leveldb::Slice* start,
524
- const leveldb::Slice* end) {
525
- rocksdb::CompactRangeOptions options;
526
- db_->CompactRange(options, start, end);
527
- }
528
-
529
- void GetProperty (const leveldb::Slice& property, std::string* value) {
530
- db_->GetProperty(property, value);
410
+ void GetProperty (const std::string& property, std::string& value) {
411
+ db_->GetProperty(property, &value);
531
412
  }
532
413
 
533
414
  const leveldb::Snapshot* NewSnapshot () {
534
415
  return db_->GetSnapshot();
535
416
  }
536
417
 
537
- leveldb::Iterator* NewIterator (leveldb::ReadOptions* options) {
538
- return db_->NewIterator(*options);
418
+ leveldb::Iterator* NewIterator (const leveldb::ReadOptions& options) {
419
+ return db_->NewIterator(options);
539
420
  }
540
421
 
541
422
  void ReleaseSnapshot (const leveldb::Snapshot* snapshot) {
542
423
  return db_->ReleaseSnapshot(snapshot);
543
424
  }
544
425
 
545
- void AttachIterator (napi_env env, uint32_t id, Iterator* iterator) {
546
- iterators_[id] = iterator;
426
+ void AttachIterator (napi_env env, Iterator* iterator) {
427
+ iterators_.insert(iterator);
547
428
  IncrementPriorityWork(env);
548
429
  }
549
430
 
550
- void DetachIterator (napi_env env, uint32_t id) {
551
- iterators_.erase(id);
431
+ void DetachIterator (napi_env env, Iterator* iterator) {
432
+ iterators_.erase(iterator);
552
433
  DecrementPriorityWork(env);
553
434
  }
554
435
 
@@ -559,9 +440,9 @@ struct Database {
559
440
  void DecrementPriorityWork (napi_env env) {
560
441
  napi_reference_unref(env, ref_, &priorityWork_);
561
442
 
562
- if (priorityWork_ == 0 && pendingCloseWorker_ != NULL) {
443
+ if (priorityWork_ == 0 && pendingCloseWorker_) {
563
444
  pendingCloseWorker_->Queue(env);
564
- pendingCloseWorker_ = NULL;
445
+ pendingCloseWorker_ = nullptr;
565
446
  }
566
447
  }
567
448
 
@@ -569,10 +450,9 @@ struct Database {
569
450
  return priorityWork_ > 0;
570
451
  }
571
452
 
572
- leveldb::DB* db_;
573
- uint32_t currentIteratorId_;
574
- BaseWorker *pendingCloseWorker_;
575
- std::map< uint32_t, Iterator * > iterators_;
453
+ std::unique_ptr<leveldb::DB> db_;
454
+ BaseWorker* pendingCloseWorker_;
455
+ std::set<Iterator*> iterators_;
576
456
  napi_ref ref_;
577
457
 
578
458
  private:
@@ -596,20 +476,24 @@ struct PriorityWorker : public BaseWorker {
596
476
  }
597
477
  };
598
478
 
599
- /**
600
- * Owns a leveldb iterator.
601
- */
602
479
  struct BaseIterator {
603
480
  BaseIterator(Database* database,
604
481
  const bool reverse,
605
- std::string* lt,
606
- std::string* lte,
607
- std::string* gt,
608
- std::string* gte,
482
+ const std::optional<std::string>& lt,
483
+ const std::optional<std::string>& lte,
484
+ const std::optional<std::string>& gt,
485
+ const std::optional<std::string>& gte,
609
486
  const int limit,
610
487
  const bool fillCache)
611
488
  : database_(database),
612
- hasEnded_(false),
489
+ snapshot_(database->NewSnapshot()),
490
+ dbIterator_(database->NewIterator([&]{
491
+ leveldb::ReadOptions options;
492
+ options.fill_cache = fillCache;
493
+ options.verify_checksums = false;
494
+ options.snapshot = snapshot_;
495
+ return options;
496
+ }())),
613
497
  didSeek_(false),
614
498
  reverse_(reverse),
615
499
  lt_(lt),
@@ -618,22 +502,10 @@ struct BaseIterator {
618
502
  gte_(gte),
619
503
  limit_(limit),
620
504
  count_(0) {
621
- options_ = new leveldb::ReadOptions();
622
- options_->fill_cache = fillCache;
623
- options_->verify_checksums = false;
624
- options_->snapshot = database->NewSnapshot();
625
- dbIterator_ = database_->NewIterator(options_);
626
505
  }
627
506
 
628
507
  virtual ~BaseIterator () {
629
- assert(hasEnded_);
630
-
631
- if (lt_ != NULL) delete lt_;
632
- if (gt_ != NULL) delete gt_;
633
- if (lte_ != NULL) delete lte_;
634
- if (gte_ != NULL) delete gte_;
635
-
636
- delete options_;
508
+ assert(!dbIterator_);
637
509
  }
638
510
 
639
511
  bool DidSeek () const {
@@ -646,15 +518,15 @@ struct BaseIterator {
646
518
  void SeekToRange () {
647
519
  didSeek_ = true;
648
520
 
649
- if (!reverse_ && gte_ != NULL) {
521
+ if (!reverse_ && gte_) {
650
522
  dbIterator_->Seek(*gte_);
651
- } else if (!reverse_ && gt_ != NULL) {
523
+ } else if (!reverse_ && gt_) {
652
524
  dbIterator_->Seek(*gt_);
653
525
 
654
526
  if (dbIterator_->Valid() && dbIterator_->key().compare(*gt_) == 0) {
655
527
  dbIterator_->Next();
656
528
  }
657
- } else if (reverse_ && lte_ != NULL) {
529
+ } else if (reverse_ && lte_) {
658
530
  dbIterator_->Seek(*lte_);
659
531
 
660
532
  if (!dbIterator_->Valid()) {
@@ -662,7 +534,7 @@ struct BaseIterator {
662
534
  } else if (dbIterator_->key().compare(*lte_) > 0) {
663
535
  dbIterator_->Prev();
664
536
  }
665
- } else if (reverse_ && lt_ != NULL) {
537
+ } else if (reverse_ && lt_) {
666
538
  dbIterator_->Seek(*lt_);
667
539
 
668
540
  if (!dbIterator_->Valid()) {
@@ -680,7 +552,7 @@ struct BaseIterator {
680
552
  /**
681
553
  * Seek manually (during iteration).
682
554
  */
683
- void Seek (leveldb::Slice& target) {
555
+ void Seek (const std::string& target) {
684
556
  didSeek_ = true;
685
557
 
686
558
  if (OutOfRange(target)) {
@@ -690,14 +562,14 @@ struct BaseIterator {
690
562
  dbIterator_->Seek(target);
691
563
 
692
564
  if (dbIterator_->Valid()) {
693
- int cmp = dbIterator_->key().compare(target);
565
+ const auto cmp = dbIterator_->key().compare(target);
694
566
  if (reverse_ ? cmp > 0 : cmp < 0) {
695
567
  Next();
696
568
  }
697
569
  } else {
698
570
  SeekToFirst();
699
571
  if (dbIterator_->Valid()) {
700
- int cmp = dbIterator_->key().compare(target);
572
+ const auto cmp = dbIterator_->key().compare(target);
701
573
  if (reverse_ ? cmp > 0 : cmp < 0) {
702
574
  SeekToEnd();
703
575
  }
@@ -705,12 +577,11 @@ struct BaseIterator {
705
577
  }
706
578
  }
707
579
 
708
- void End () {
709
- if (!hasEnded_) {
710
- hasEnded_ = true;
580
+ void Close () {
581
+ if (dbIterator_) {
711
582
  delete dbIterator_;
712
- dbIterator_ = NULL;
713
- database_->ReleaseSnapshot(options_->snapshot);
583
+ dbIterator_ = nullptr;
584
+ database_->ReleaseSnapshot(snapshot_);
714
585
  }
715
586
  }
716
587
 
@@ -755,108 +626,103 @@ struct BaseIterator {
755
626
  }
756
627
 
757
628
  bool OutOfRange (const leveldb::Slice& target) const {
758
- // TODO: benchmark to see if this is worth it
759
- // if (upperBoundOnly && !reverse_) {
760
- // return ((lt_ != NULL && target.compare(*lt_) >= 0) ||
761
- // (lte_ != NULL && target.compare(*lte_) > 0));
762
- // }
629
+ if (lte_) {
630
+ if (target.compare(*lte_) > 0) return true;
631
+ } else if (lt_) {
632
+ if (target.compare(*lt_) >= 0) return true;
633
+ }
634
+
635
+ if (gte_) {
636
+ if (target.compare(*gte_) < 0) return true;
637
+ } else if (gt_) {
638
+ if (target.compare(*gt_) <= 0) return true;
639
+ }
763
640
 
764
- return ((lt_ != NULL && target.compare(*lt_) >= 0) ||
765
- (lte_ != NULL && target.compare(*lte_) > 0) ||
766
- (gt_ != NULL && target.compare(*gt_) <= 0) ||
767
- (gte_ != NULL && target.compare(*gte_) < 0));
641
+ return false;
768
642
  }
769
643
 
770
644
  Database* database_;
771
- bool hasEnded_;
772
645
 
773
646
  private:
647
+ const leveldb::Snapshot* snapshot_;
774
648
  leveldb::Iterator* dbIterator_;
775
649
  bool didSeek_;
776
650
  const bool reverse_;
777
- std::string* lt_;
778
- std::string* lte_;
779
- std::string* gt_;
780
- std::string* gte_;
651
+ const std::optional<std::string> lt_;
652
+ const std::optional<std::string> lte_;
653
+ const std::optional<std::string> gt_;
654
+ const std::optional<std::string> gte_;
781
655
  const int limit_;
782
656
  int count_;
783
- leveldb::ReadOptions* options_;
784
657
  };
785
658
 
786
- /**
787
- * Extends BaseIterator for reading it from JS land.
788
- */
789
659
  struct Iterator final : public BaseIterator {
790
660
  Iterator (Database* database,
791
- const uint32_t id,
792
661
  const bool reverse,
793
662
  const bool keys,
794
663
  const bool values,
795
664
  const int limit,
796
- std::string* lt,
797
- std::string* lte,
798
- std::string* gt,
799
- std::string* gte,
665
+ const std::optional<std::string>& lt,
666
+ const std::optional<std::string>& lte,
667
+ const std::optional<std::string>& gt,
668
+ const std::optional<std::string>& gte,
800
669
  const bool fillCache,
801
670
  const bool keyAsBuffer,
802
671
  const bool valueAsBuffer,
803
- const uint32_t highWaterMark)
672
+ const uint32_t highWaterMarkBytes)
804
673
  : BaseIterator(database, reverse, lt, lte, gt, gte, limit, fillCache),
805
- id_(id),
806
674
  keys_(keys),
807
675
  values_(values),
808
676
  keyAsBuffer_(keyAsBuffer),
809
677
  valueAsBuffer_(valueAsBuffer),
810
- highWaterMark_(highWaterMark),
811
- landed_(false),
678
+ highWaterMarkBytes_(highWaterMarkBytes),
679
+ first_(true),
812
680
  nexting_(false),
813
- isEnding_(false),
814
- endWorker_(NULL),
815
- ref_(NULL) {
681
+ isClosing_(false),
682
+ closeWorker_(nullptr),
683
+ ref_(nullptr) {
816
684
  }
817
685
 
818
- ~Iterator () {}
819
-
820
686
  void Attach (napi_env env, napi_value context) {
821
687
  napi_create_reference(env, context, 1, &ref_);
822
- database_->AttachIterator(env, id_, this);
688
+ database_->AttachIterator(env, this);
823
689
  }
824
690
 
825
691
  void Detach (napi_env env) {
826
- database_->DetachIterator(env, id_);
827
- if (ref_ != NULL) napi_delete_reference(env, ref_);
692
+ database_->DetachIterator(env, this);
693
+ if (ref_) napi_delete_reference(env, ref_);
828
694
  }
829
695
 
830
696
  bool ReadMany (uint32_t size) {
831
697
  cache_.clear();
698
+ cache_.reserve(size * 2);
832
699
  size_t bytesRead = 0;
833
700
 
834
701
  while (true) {
835
- if (landed_) Next();
836
- if (!Valid() || !Increment()) break;
837
-
838
- if (keys_) {
839
- leveldb::Slice slice = CurrentKey();
840
- cache_.emplace_back(slice.data(), slice.size());
841
- bytesRead += slice.size();
842
- } else {
843
- cache_.emplace_back("");
844
- }
845
-
846
- if (values_) {
847
- leveldb::Slice slice = CurrentValue();
848
- cache_.emplace_back(slice.data(), slice.size());
849
- bytesRead += slice.size();
850
- } else {
851
- cache_.emplace_back("");
852
- }
702
+ if (!first_) Next();
703
+ else first_ = false;
853
704
 
854
- if (!landed_) {
855
- landed_ = true;
856
- return true;
705
+ if (!Valid() || !Increment()) break;
706
+
707
+ if (keys_ && values_) {
708
+ auto k = CurrentKey();
709
+ auto v = CurrentValue();
710
+ cache_.emplace_back(k.data(), k.size());
711
+ cache_.emplace_back(v.data(), v.size());
712
+ bytesRead += k.size() + v.size();
713
+ } else if (keys_) {
714
+ auto k = CurrentKey();
715
+ cache_.emplace_back(k.data(), k.size());
716
+ cache_.push_back({});
717
+ bytesRead += k.size();
718
+ } else if (values_) {
719
+ auto v = CurrentValue();
720
+ cache_.push_back({});
721
+ cache_.emplace_back(v.data(), v.size());
722
+ bytesRead += v.size();
857
723
  }
858
724
 
859
- if (bytesRead > highWaterMark_ || cache_.size() >= size * 2) {
725
+ if (bytesRead > highWaterMarkBytes_ || cache_.size() / 2 >= size) {
860
726
  return true;
861
727
  }
862
728
  }
@@ -864,16 +730,15 @@ struct Iterator final : public BaseIterator {
864
730
  return false;
865
731
  }
866
732
 
867
- const uint32_t id_;
868
733
  const bool keys_;
869
734
  const bool values_;
870
735
  const bool keyAsBuffer_;
871
736
  const bool valueAsBuffer_;
872
- const uint32_t highWaterMark_;
873
- bool landed_;
737
+ const uint32_t highWaterMarkBytes_;
738
+ bool first_;
874
739
  bool nexting_;
875
- bool isEnding_;
876
- BaseWorker* endWorker_;
740
+ bool isClosing_;
741
+ BaseWorker* closeWorker_;
877
742
  std::vector<std::string> cache_;
878
743
 
879
744
  private:
@@ -886,7 +751,7 @@ private:
886
751
  * the guarantee that no db operations will be in-flight at this time.
887
752
  */
888
753
  static void env_cleanup_hook (void* arg) {
889
- Database* database = (Database*)arg;
754
+ Database* database = reinterpret_cast<Database*>(arg);
890
755
 
891
756
  // Do everything that db_close() does but synchronously. We're expecting that GC
892
757
  // did not (yet) collect the database because that would be a user mistake (not
@@ -894,35 +759,26 @@ static void env_cleanup_hook (void* arg) {
894
759
  // from an environment being torn down (like the main process or a worker thread)
895
760
  // where it's our responsibility to clean up. Note also, the following code must
896
761
  // be a safe noop if called before db_open() or after db_close().
897
- if (database && database->db_ != NULL) {
898
- std::map<uint32_t, Iterator*> iterators = database->iterators_;
899
- std::map<uint32_t, Iterator*>::iterator it;
900
-
762
+ if (database && database->db_) {
901
763
  // TODO: does not do `napi_delete_reference(env, iterator->ref_)`. Problem?
902
- for (it = iterators.begin(); it != iterators.end(); ++it) {
903
- it->second->End();
764
+ for (auto it : database->iterators_) {
765
+ it->Close();
904
766
  }
905
767
 
906
- // Having ended the iterators (and released snapshots) we can safely close.
768
+ // Having closed the iterators (and released snapshots) we can safely close.
907
769
  database->CloseDatabase();
908
770
  }
909
771
  }
910
772
 
911
- /**
912
- * Runs when a Database is garbage collected.
913
- */
914
773
  static void FinalizeDatabase (napi_env env, void* data, void* hint) {
915
774
  if (data) {
916
775
  Database* database = (Database*)data;
917
776
  napi_remove_env_cleanup_hook(env, env_cleanup_hook, database);
918
- if (database->ref_ != NULL) napi_delete_reference(env, database->ref_);
777
+ if (database->ref_) napi_delete_reference(env, database->ref_);
919
778
  delete database;
920
779
  }
921
780
  }
922
781
 
923
- /**
924
- * Returns a context object for a database.
925
- */
926
782
  NAPI_METHOD(db_init) {
927
783
  Database* database = new Database();
928
784
  napi_add_env_cleanup_hook(env, env_cleanup_hook, database);
@@ -930,7 +786,7 @@ NAPI_METHOD(db_init) {
930
786
  napi_value result;
931
787
  NAPI_STATUS_THROWS(napi_create_external(env, database,
932
788
  FinalizeDatabase,
933
- NULL, &result));
789
+ nullptr, &result));
934
790
 
935
791
  // Reference counter to prevent GC of database while priority workers are active
936
792
  NAPI_STATUS_THROWS(napi_create_reference(env, result, 0, &database->ref_));
@@ -972,7 +828,7 @@ struct OpenWorker final : public BaseWorker {
972
828
  options_.paranoid_checks = false;
973
829
 
974
830
  if (infoLogLevel.size() > 0) {
975
- rocksdb::InfoLogLevel lvl;
831
+ rocksdb::InfoLogLevel lvl = {};
976
832
 
977
833
  if (infoLogLevel == "debug") lvl = rocksdb::InfoLogLevel::DEBUG_LEVEL;
978
834
  else if (infoLogLevel == "info") lvl = rocksdb::InfoLogLevel::INFO_LEVEL;
@@ -980,7 +836,7 @@ struct OpenWorker final : public BaseWorker {
980
836
  else if (infoLogLevel == "error") lvl = rocksdb::InfoLogLevel::ERROR_LEVEL;
981
837
  else if (infoLogLevel == "fatal") lvl = rocksdb::InfoLogLevel::FATAL_LEVEL;
982
838
  else if (infoLogLevel == "header") lvl = rocksdb::InfoLogLevel::HEADER_LEVEL;
983
- else napi_throw_error(env, NULL, "invalid log level");
839
+ else napi_throw_error(env, nullptr, "invalid log level");
984
840
 
985
841
  options_.info_log_level = lvl;
986
842
  } else {
@@ -1007,65 +863,55 @@ struct OpenWorker final : public BaseWorker {
1007
863
  );
1008
864
  }
1009
865
 
1010
- ~OpenWorker () {}
1011
-
1012
866
  void DoExecute () override {
1013
867
  SetStatus(database_->Open(options_, readOnly_, location_.c_str()));
1014
868
  }
1015
869
 
1016
870
  leveldb::Options options_;
1017
- bool readOnly_;
1018
- std::string location_;
871
+ const bool readOnly_;
872
+ const std::string location_;
1019
873
  };
1020
874
 
1021
- /**
1022
- * Open a database.
1023
- */
1024
875
  NAPI_METHOD(db_open) {
1025
876
  NAPI_ARGV(4);
1026
877
  NAPI_DB_CONTEXT();
1027
- NAPI_ARGV_UTF8_NEW(location, 1);
1028
878
 
1029
- napi_value options = argv[2];
1030
- const bool createIfMissing = BooleanProperty(env, options, "createIfMissing", true);
1031
- const bool errorIfExists = BooleanProperty(env, options, "errorIfExists", false);
1032
- const bool compression = BooleanProperty(env, options, "compression", true);
1033
- bool readOnly = BooleanProperty(env, options, "readOnly", false);
879
+ const auto location = ToString(env, argv[1]).value_or(std::string());
880
+ const auto options = argv[2];
881
+ const auto createIfMissing = BooleanProperty(env, options, "createIfMissing", true);
882
+ const auto errorIfExists = BooleanProperty(env, options, "errorIfExists", false);
883
+ const auto compression = BooleanProperty(env, options, "compression", true);
884
+ const auto readOnly = BooleanProperty(env, options, "readOnly", false);
1034
885
 
1035
- const std::string infoLogLevel = StringProperty(env, options, "infoLogLevel");
886
+ const auto infoLogLevel = StringProperty(env, options, "infoLogLevel");
1036
887
 
1037
- const uint32_t cacheSize = Uint32Property(env, options, "cacheSize", 8 << 20);
1038
- const uint32_t writeBufferSize = Uint32Property(env, options , "writeBufferSize" , 4 << 20);
1039
- const uint32_t blockSize = Uint32Property(env, options, "blockSize", 4096);
1040
- const uint32_t maxOpenFiles = Uint32Property(env, options, "maxOpenFiles", 1000);
1041
- const uint32_t blockRestartInterval = Uint32Property(env, options,
888
+ const auto cacheSize = Uint32Property(env, options, "cacheSize", 8 << 20);
889
+ const auto writeBufferSize = Uint32Property(env, options , "writeBufferSize" , 4 << 20);
890
+ const auto blockSize = Uint32Property(env, options, "blockSize", 4096);
891
+ const auto maxOpenFiles = Uint32Property(env, options, "maxOpenFiles", 1000);
892
+ const auto blockRestartInterval = Uint32Property(env, options,
1042
893
  "blockRestartInterval", 16);
1043
- const uint32_t maxFileSize = Uint32Property(env, options, "maxFileSize", 2 << 20);
1044
-
1045
- napi_value callback = argv[3];
1046
- OpenWorker* worker = new OpenWorker(env, database, callback, location,
1047
- createIfMissing, errorIfExists,
1048
- compression, writeBufferSize, blockSize,
1049
- maxOpenFiles, blockRestartInterval,
1050
- maxFileSize, cacheSize,
1051
- infoLogLevel, readOnly);
894
+ const auto maxFileSize = Uint32Property(env, options, "maxFileSize", 2 << 20);
895
+
896
+ const auto callback = argv[3];
897
+
898
+ auto worker = new OpenWorker(env, database, callback, location,
899
+ createIfMissing, errorIfExists,
900
+ compression, writeBufferSize, blockSize,
901
+ maxOpenFiles, blockRestartInterval,
902
+ maxFileSize, cacheSize,
903
+ infoLogLevel, readOnly);
1052
904
  worker->Queue(env);
1053
- delete [] location;
1054
905
 
1055
- NAPI_RETURN_UNDEFINED();
906
+ return 0;
1056
907
  }
1057
908
 
1058
- /**
1059
- * Worker class for closing a database
1060
- */
1061
909
  struct CloseWorker final : public BaseWorker {
1062
910
  CloseWorker (napi_env env,
1063
911
  Database* database,
1064
912
  napi_value callback)
1065
913
  : BaseWorker(env, database, callback, "leveldown.db.close") {}
1066
914
 
1067
- ~CloseWorker () {}
1068
-
1069
915
  void DoExecute () override {
1070
916
  database_->CloseDatabase();
1071
917
  }
@@ -1075,197 +921,172 @@ napi_value noop_callback (napi_env env, napi_callback_info info) {
1075
921
  return 0;
1076
922
  }
1077
923
 
1078
- /**
1079
- * Close a database.
1080
- */
1081
924
  NAPI_METHOD(db_close) {
1082
925
  NAPI_ARGV(2);
1083
926
  NAPI_DB_CONTEXT();
1084
927
 
1085
- napi_value callback = argv[1];
1086
- CloseWorker* worker = new CloseWorker(env, database, callback);
1087
-
1088
- if (!database->HasPriorityWork()) {
1089
- worker->Queue(env);
1090
- NAPI_RETURN_UNDEFINED();
1091
- }
1092
-
1093
- database->pendingCloseWorker_ = worker;
928
+ const auto callback = argv[1];
1094
929
 
1095
930
  napi_value noop;
1096
- napi_create_function(env, NULL, 0, noop_callback, NULL, &noop);
931
+ napi_create_function(env, nullptr, 0, noop_callback, nullptr, &noop);
1097
932
 
1098
- std::map<uint32_t, Iterator*> iterators = database->iterators_;
1099
- std::map<uint32_t, Iterator*>::iterator it;
933
+ for (auto it : database->iterators_) {
934
+ iterator_do_close(env, it, noop);
935
+ }
936
+
937
+ auto worker = new CloseWorker(env, database, callback);
1100
938
 
1101
- for (it = iterators.begin(); it != iterators.end(); ++it) {
1102
- iterator_end_do(env, it->second, noop);
939
+ if (!database->HasPriorityWork()) {
940
+ worker->Queue(env);
941
+ } else {
942
+ database->pendingCloseWorker_ = worker;
1103
943
  }
1104
944
 
1105
- NAPI_RETURN_UNDEFINED();
945
+ return 0;
1106
946
  }
1107
947
 
1108
- /**
1109
- * Worker class for putting key/value to the database
1110
- */
1111
948
  struct PutWorker final : public PriorityWorker {
1112
949
  PutWorker (napi_env env,
1113
950
  Database* database,
1114
951
  napi_value callback,
1115
- leveldb::Slice key,
1116
- leveldb::Slice value,
952
+ const std::string& key,
953
+ const std::string& value,
1117
954
  bool sync)
1118
- : PriorityWorker(env, database, callback, "leveldown.db.put"),
1119
- key_(key), value_(value) {
1120
- options_.sync = sync;
1121
- }
1122
-
1123
- ~PutWorker () {
1124
- DisposeSliceBuffer(key_);
1125
- DisposeSliceBuffer(value_);
955
+ : PriorityWorker(env, database, callback, "classic_level.db.put"),
956
+ key_(key), value_(value), sync_(sync) {
1126
957
  }
1127
958
 
1128
959
  void DoExecute () override {
1129
- SetStatus(database_->Put(options_, key_, value_));
960
+ leveldb::WriteOptions options;
961
+ options.sync = sync_;
962
+ SetStatus(database_->Put(options, key_, value_));
1130
963
  }
1131
964
 
1132
- leveldb::WriteOptions options_;
1133
- leveldb::Slice key_;
1134
- leveldb::Slice value_;
965
+ const std::string key_;
966
+ const std::string value_;
967
+ const bool sync_;
1135
968
  };
1136
969
 
1137
- /**
1138
- * Puts a key and a value to a database.
1139
- */
1140
970
  NAPI_METHOD(db_put) {
1141
971
  NAPI_ARGV(5);
1142
972
  NAPI_DB_CONTEXT();
1143
973
 
1144
- leveldb::Slice key = ToSlice(env, argv[1]);
1145
- leveldb::Slice value = ToSlice(env, argv[2]);
1146
- bool sync = BooleanProperty(env, argv[3], "sync", false);
1147
- napi_value callback = argv[4];
974
+ const auto key = ToString(env, argv[1]).value_or(std::string());
975
+ const auto value = ToString(env, argv[2]).value_or(std::string());
976
+ const auto sync = BooleanProperty(env, argv[3], "sync", false);
977
+ const auto callback = argv[4];
1148
978
 
1149
- PutWorker* worker = new PutWorker(env, database, callback, key, value, sync);
979
+ auto worker = new PutWorker(env, database, callback, key, value, sync);
1150
980
  worker->Queue(env);
1151
981
 
1152
- NAPI_RETURN_UNDEFINED();
982
+ return 0;
1153
983
  }
1154
984
 
1155
- /**
1156
- * Worker class for getting a value from a database.
1157
- */
1158
985
  struct GetWorker final : public PriorityWorker {
1159
986
  GetWorker (napi_env env,
1160
987
  Database* database,
1161
988
  napi_value callback,
1162
- leveldb::Slice key,
989
+ const std::string& key,
1163
990
  const bool asBuffer,
1164
991
  const bool fillCache)
1165
- : PriorityWorker(env, database, callback, "leveldown.db.get"),
1166
- key_(key),
1167
- asBuffer_(asBuffer) {
1168
- options_.fill_cache = fillCache;
1169
- }
1170
-
1171
- ~GetWorker () {
1172
- DisposeSliceBuffer(key_);
992
+ : PriorityWorker(env, database, callback, "classic_level.db.get"),
993
+ key_(key), asBuffer_(asBuffer), fillCache_(fillCache) {
1173
994
  }
1174
995
 
1175
996
  void DoExecute () override {
1176
- SetStatus(database_->Get(options_, key_, value_));
997
+ leveldb::ReadOptions options;
998
+ options.fill_cache = fillCache_;
999
+ SetStatus(database_->Get(options, key_, value_));
1177
1000
  }
1178
1001
 
1179
1002
  void HandleOKCallback (napi_env env, napi_value callback) override {
1180
1003
  napi_value argv[2];
1181
1004
  napi_get_null(env, &argv[0]);
1182
- Entry::Convert(env, &value_, asBuffer_, &argv[1]);
1005
+ Convert(env, std::move(value_), asBuffer_, argv[1]);
1183
1006
  CallFunction(env, callback, 2, argv);
1184
1007
  }
1185
1008
 
1186
1009
  private:
1187
- leveldb::ReadOptions options_;
1188
- leveldb::Slice key_;
1189
- std::string value_;
1010
+ const std::string key_;
1011
+ rocksdb::PinnableSlice value_;
1190
1012
  const bool asBuffer_;
1013
+ const bool fillCache_;
1191
1014
  };
1192
1015
 
1193
- /**
1194
- * Gets a value from a database.
1195
- */
1196
1016
  NAPI_METHOD(db_get) {
1197
1017
  NAPI_ARGV(4);
1198
1018
  NAPI_DB_CONTEXT();
1199
1019
 
1200
- leveldb::Slice key = ToSlice(env, argv[1]);
1201
- napi_value options = argv[2];
1202
- const bool asBuffer = BooleanProperty(env, options, "asBuffer", true);
1203
- const bool fillCache = BooleanProperty(env, options, "fillCache", true);
1204
- napi_value callback = argv[3];
1020
+ const auto key = ToString(env, argv[1]).value_or(std::string());
1021
+ const auto options = argv[2];
1022
+ const auto asBuffer = EncodingIsBuffer(env, options, "valueEncoding");
1023
+ const auto fillCache = BooleanProperty(env, options, "fillCache", true);
1024
+ const auto callback = argv[3];
1205
1025
 
1206
- GetWorker* worker = new GetWorker(env, database, callback, key, asBuffer,
1207
- fillCache);
1026
+ auto worker = new GetWorker(env, database, callback, key, asBuffer, fillCache);
1208
1027
  worker->Queue(env);
1209
1028
 
1210
- NAPI_RETURN_UNDEFINED();
1029
+ return 0;
1211
1030
  }
1212
1031
 
1213
- /**
1214
- * Worker class for getting many values.
1215
- */
1032
+
1216
1033
  struct GetManyWorker final : public PriorityWorker {
1217
1034
  GetManyWorker (napi_env env,
1218
1035
  Database* database,
1219
- const std::vector<std::string>* keys,
1036
+ const std::vector<std::string>& keys,
1220
1037
  napi_value callback,
1221
1038
  const bool valueAsBuffer,
1222
1039
  const bool fillCache)
1223
1040
  : PriorityWorker(env, database, callback, "leveldown.get.many"),
1224
- keys_(keys), valueAsBuffer_(valueAsBuffer) {
1225
- options_.fill_cache = fillCache;
1226
- options_.snapshot = database->NewSnapshot();
1227
- }
1041
+ keys_(keys), valueAsBuffer_(valueAsBuffer), fillCache_(fillCache),
1042
+ snapshot_(database->NewSnapshot()) {
1043
+ }
1228
1044
 
1229
- ~GetManyWorker() {
1230
- delete keys_;
1045
+ ~GetManyWorker () {
1046
+ if (snapshot_) {
1047
+ database_->ReleaseSnapshot(snapshot_);
1048
+ snapshot_ = nullptr;
1049
+ }
1231
1050
  }
1232
1051
 
1233
1052
  void DoExecute () override {
1234
- cache_.reserve(keys_->size());
1053
+ cache_.reserve(keys_.size());
1235
1054
 
1236
- for (const std::string& key: *keys_) {
1237
- std::string* value = new std::string();
1238
- leveldb::Status status = database_->Get(options_, key, *value);
1055
+ leveldb::ReadOptions options;
1056
+ options.snapshot = snapshot_;
1057
+ options.fill_cache = fillCache_;
1058
+
1059
+ rocksdb::PinnableSlice value;
1060
+
1061
+ for (const auto& key: keys_) {
1062
+ const auto status = database_->Get(options, key, value);
1239
1063
 
1240
1064
  if (status.ok()) {
1241
- cache_.push_back(value);
1065
+ cache_.push_back(std::move(value));
1242
1066
  } else if (status.IsNotFound()) {
1243
- delete value;
1244
- cache_.push_back(NULL);
1067
+ cache_.push_back({});
1245
1068
  } else {
1246
- delete value;
1247
- for (const std::string* value: cache_) {
1248
- if (value != NULL) delete value;
1249
- }
1250
1069
  SetStatus(status);
1251
1070
  break;
1252
1071
  }
1072
+
1073
+ value.Reset();
1253
1074
  }
1254
1075
 
1255
- database_->ReleaseSnapshot(options_.snapshot);
1076
+ database_->ReleaseSnapshot(snapshot_);
1077
+ snapshot_ = nullptr;
1256
1078
  }
1257
1079
 
1258
1080
  void HandleOKCallback (napi_env env, napi_value callback) override {
1259
- size_t size = cache_.size();
1081
+ const auto size = cache_.size();
1082
+
1260
1083
  napi_value array;
1261
1084
  napi_create_array_with_length(env, size, &array);
1262
1085
 
1263
1086
  for (size_t idx = 0; idx < size; idx++) {
1264
- std::string* value = cache_[idx];
1265
1087
  napi_value element;
1266
- Entry::Convert(env, value, valueAsBuffer_, &element);
1088
+ Convert(env, cache_[idx], valueAsBuffer_, element);
1267
1089
  napi_set_element(env, array, static_cast<uint32_t>(idx), element);
1268
- if (value != NULL) delete value;
1269
1090
  }
1270
1091
 
1271
1092
  napi_value argv[2];
@@ -1275,139 +1096,115 @@ struct GetManyWorker final : public PriorityWorker {
1275
1096
  }
1276
1097
 
1277
1098
  private:
1278
- leveldb::ReadOptions options_;
1279
- const std::vector<std::string>* keys_;
1099
+ const std::vector<std::string> keys_;
1280
1100
  const bool valueAsBuffer_;
1281
- std::vector<std::string*> cache_;
1101
+ std::vector<std::optional<rocksdb::PinnableSlice>> cache_;
1102
+ const bool fillCache_;
1103
+ const leveldb::Snapshot* snapshot_;
1282
1104
  };
1283
1105
 
1284
- /**
1285
- * Gets many values from a database.
1286
- */
1287
1106
  NAPI_METHOD(db_get_many) {
1288
1107
  NAPI_ARGV(4);
1289
1108
  NAPI_DB_CONTEXT();
1290
1109
 
1291
- const std::vector<std::string>* keys = KeyArray(env, argv[1]);
1292
- napi_value options = argv[2];
1293
- const bool asBuffer = BooleanProperty(env, options, "asBuffer", true);
1110
+ const auto keys = KeyArray(env, argv[1]);
1111
+ const auto options = argv[2];
1112
+ const bool asBuffer = EncodingIsBuffer(env, options, "valueEncoding");
1294
1113
  const bool fillCache = BooleanProperty(env, options, "fillCache", true);
1295
- napi_value callback = argv[3];
1296
-
1297
- GetManyWorker* worker = new GetManyWorker(
1298
- env, database, keys, callback, asBuffer, fillCache
1299
- );
1114
+ const auto callback = argv[3];
1300
1115
 
1116
+ auto worker = new GetManyWorker(env, database, keys, callback, asBuffer, fillCache);
1301
1117
  worker->Queue(env);
1302
- NAPI_RETURN_UNDEFINED();
1118
+
1119
+ return 0;
1303
1120
  }
1304
1121
 
1305
- /**
1306
- * Worker class for deleting a value from a database.
1307
- */
1308
1122
  struct DelWorker final : public PriorityWorker {
1309
1123
  DelWorker (napi_env env,
1310
1124
  Database* database,
1311
1125
  napi_value callback,
1312
- leveldb::Slice key,
1126
+ const std::string& key,
1313
1127
  bool sync)
1314
- : PriorityWorker(env, database, callback, "leveldown.db.del"),
1315
- key_(key) {
1316
- options_.sync = sync;
1317
- }
1318
-
1319
- ~DelWorker () {
1320
- DisposeSliceBuffer(key_);
1128
+ : PriorityWorker(env, database, callback, "classic_level.db.del"),
1129
+ key_(key), sync_(sync) {
1321
1130
  }
1322
1131
 
1323
1132
  void DoExecute () override {
1324
- SetStatus(database_->Del(options_, key_));
1133
+ leveldb::WriteOptions options;
1134
+ options.sync = sync_;
1135
+ SetStatus(database_->Del(options, key_));
1325
1136
  }
1326
1137
 
1327
- leveldb::WriteOptions options_;
1328
- leveldb::Slice key_;
1138
+ const std::string key_;
1139
+ const bool sync_;
1329
1140
  };
1330
1141
 
1331
- /**
1332
- * Delete a value from a database.
1333
- */
1334
1142
  NAPI_METHOD(db_del) {
1335
1143
  NAPI_ARGV(4);
1336
1144
  NAPI_DB_CONTEXT();
1337
1145
 
1338
- leveldb::Slice key = ToSlice(env, argv[1]);
1339
- bool sync = BooleanProperty(env, argv[2], "sync", false);
1340
- napi_value callback = argv[3];
1146
+ const auto key = ToString(env, argv[1]).value_or(std::string());
1147
+ const auto sync = BooleanProperty(env, argv[2], "sync", false);
1148
+ const auto callback = argv[3];
1341
1149
 
1342
- DelWorker* worker = new DelWorker(env, database, callback, key, sync);
1150
+ auto worker = new DelWorker(env, database, callback, key, sync);
1343
1151
  worker->Queue(env);
1344
1152
 
1345
- NAPI_RETURN_UNDEFINED();
1153
+ return 0;
1346
1154
  }
1347
1155
 
1348
- /**
1349
- * Worker class for deleting a range from a database.
1350
- */
1351
1156
  struct ClearWorker final : public PriorityWorker {
1352
1157
  ClearWorker (napi_env env,
1353
1158
  Database* database,
1354
1159
  napi_value callback,
1355
1160
  const bool reverse,
1356
1161
  const int limit,
1357
- std::string* lt,
1358
- std::string* lte,
1359
- std::string* gt,
1360
- std::string* gte)
1361
- : PriorityWorker(env, database, callback, "leveldown.db.clear") {
1362
- iterator_ = new BaseIterator(database, reverse, lt, lte, gt, gte, limit, false);
1363
- writeOptions_ = new leveldb::WriteOptions();
1364
- writeOptions_->sync = false;
1365
- }
1366
-
1367
- ~ClearWorker () {
1368
- delete iterator_;
1369
- delete writeOptions_;
1162
+ const std::optional<std::string>& lt,
1163
+ const std::optional<std::string>& lte,
1164
+ const std::optional<std::string>& gt,
1165
+ const std::optional<std::string>& gte)
1166
+ : PriorityWorker(env, database, callback, "classic_level.db.clear"),
1167
+ iterator_(database, reverse, lt, lte, gt, gte, limit, false) {
1370
1168
  }
1371
1169
 
1372
1170
  void DoExecute () override {
1373
- iterator_->SeekToRange();
1171
+ iterator_.SeekToRange();
1374
1172
 
1375
1173
  // TODO: add option
1376
- uint32_t hwm = 16 * 1024;
1174
+ const uint32_t hwm = 16 * 1024;
1377
1175
  leveldb::WriteBatch batch;
1378
1176
 
1177
+ leveldb::WriteOptions options;
1178
+ options.sync = false;
1179
+
1379
1180
  while (true) {
1380
1181
  size_t bytesRead = 0;
1381
1182
 
1382
- while (bytesRead <= hwm && iterator_->Valid() && iterator_->Increment()) {
1383
- leveldb::Slice key = iterator_->CurrentKey();
1183
+ while (bytesRead <= hwm && iterator_.Valid() && iterator_.Increment()) {
1184
+ const auto key = iterator_.CurrentKey();
1384
1185
  batch.Delete(key);
1385
1186
  bytesRead += key.size();
1386
- iterator_->Next();
1187
+ iterator_.Next();
1387
1188
  }
1388
1189
 
1389
- if (!SetStatus(iterator_->Status()) || bytesRead == 0) {
1190
+ if (!SetStatus(iterator_.Status()) || bytesRead == 0) {
1390
1191
  break;
1391
1192
  }
1392
1193
 
1393
- if (!SetStatus(database_->WriteBatch(*writeOptions_, &batch))) {
1194
+ if (!SetStatus(database_->WriteBatch(options, &batch))) {
1394
1195
  break;
1395
1196
  }
1396
1197
 
1397
1198
  batch.Clear();
1398
1199
  }
1399
1200
 
1400
- iterator_->End();
1201
+ iterator_.Close();
1401
1202
  }
1402
1203
 
1403
1204
  private:
1404
- BaseIterator* iterator_;
1405
- leveldb::WriteOptions* writeOptions_;
1205
+ BaseIterator iterator_;
1406
1206
  };
1407
1207
 
1408
- /**
1409
- * Delete a range from a database.
1410
- */
1411
1208
  NAPI_METHOD(db_clear) {
1412
1209
  NAPI_ARGV(3);
1413
1210
  NAPI_DB_CONTEXT();
@@ -1415,301 +1212,85 @@ NAPI_METHOD(db_clear) {
1415
1212
  napi_value options = argv[1];
1416
1213
  napi_value callback = argv[2];
1417
1214
 
1418
- const bool reverse = BooleanProperty(env, options, "reverse", false);
1419
- const int limit = Int32Property(env, options, "limit", -1);
1420
-
1421
- std::string* lt = RangeOption(env, options, "lt");
1422
- std::string* lte = RangeOption(env, options, "lte");
1423
- std::string* gt = RangeOption(env, options, "gt");
1424
- std::string* gte = RangeOption(env, options, "gte");
1425
-
1426
- ClearWorker* worker = new ClearWorker(env, database, callback, reverse, limit, lt, lte, gt, gte);
1427
- worker->Queue(env);
1428
-
1429
- NAPI_RETURN_UNDEFINED();
1430
- }
1431
-
1432
- /**
1433
- * Worker class for calculating the size of a range.
1434
- */
1435
- struct ApproximateSizeWorker final : public PriorityWorker {
1436
- ApproximateSizeWorker (napi_env env,
1437
- Database* database,
1438
- napi_value callback,
1439
- leveldb::Slice start,
1440
- leveldb::Slice end)
1441
- : PriorityWorker(env, database, callback, "leveldown.db.approximate_size"),
1442
- start_(start), end_(end) {}
1443
-
1444
- ~ApproximateSizeWorker () {
1445
- DisposeSliceBuffer(start_);
1446
- DisposeSliceBuffer(end_);
1447
- }
1448
-
1449
- void DoExecute () override {
1450
- leveldb::Range range(start_, end_);
1451
- size_ = database_->ApproximateSize(&range);
1452
- }
1453
-
1454
- void HandleOKCallback (napi_env env, napi_value callback) override {
1455
- napi_value argv[2];
1456
- napi_get_null(env, &argv[0]);
1457
- napi_create_int64(env, (uint64_t)size_, &argv[1]);
1458
- CallFunction(env, callback, 2, argv);
1459
- }
1460
-
1461
- leveldb::Slice start_;
1462
- leveldb::Slice end_;
1463
- uint64_t size_;
1464
- };
1465
-
1466
- /**
1467
- * Calculates the approximate size of a range in a database.
1468
- */
1469
- NAPI_METHOD(db_approximate_size) {
1470
- NAPI_ARGV(4);
1471
- NAPI_DB_CONTEXT();
1472
-
1473
- leveldb::Slice start = ToSlice(env, argv[1]);
1474
- leveldb::Slice end = ToSlice(env, argv[2]);
1475
-
1476
- napi_value callback = argv[3];
1477
-
1478
- ApproximateSizeWorker* worker = new ApproximateSizeWorker(env, database,
1479
- callback, start,
1480
- end);
1481
- worker->Queue(env);
1482
-
1483
- NAPI_RETURN_UNDEFINED();
1484
- }
1485
-
1486
- /**
1487
- * Worker class for compacting a range in a database.
1488
- */
1489
- struct CompactRangeWorker final : public PriorityWorker {
1490
- CompactRangeWorker (napi_env env,
1491
- Database* database,
1492
- napi_value callback,
1493
- leveldb::Slice start,
1494
- leveldb::Slice end)
1495
- : PriorityWorker(env, database, callback, "leveldown.db.compact_range"),
1496
- start_(start), end_(end) {}
1497
-
1498
- ~CompactRangeWorker () {
1499
- DisposeSliceBuffer(start_);
1500
- DisposeSliceBuffer(end_);
1501
- }
1502
-
1503
- void DoExecute () override {
1504
- database_->CompactRange(&start_, &end_);
1505
- }
1506
-
1507
- leveldb::Slice start_;
1508
- leveldb::Slice end_;
1509
- };
1510
-
1511
- /**
1512
- * Compacts a range in a database.
1513
- */
1514
- NAPI_METHOD(db_compact_range) {
1515
- NAPI_ARGV(4);
1516
- NAPI_DB_CONTEXT();
1517
-
1518
- leveldb::Slice start = ToSlice(env, argv[1]);
1519
- leveldb::Slice end = ToSlice(env, argv[2]);
1520
- napi_value callback = argv[3];
1521
-
1522
- CompactRangeWorker* worker = new CompactRangeWorker(env, database, callback,
1523
- start, end);
1524
- worker->Queue(env);
1525
-
1526
- NAPI_RETURN_UNDEFINED();
1527
- }
1528
-
1529
- /**
1530
- * Get a property from a database.
1531
- */
1532
- NAPI_METHOD(db_get_property) {
1533
- NAPI_ARGV(2);
1534
- NAPI_DB_CONTEXT();
1535
-
1536
- leveldb::Slice property = ToSlice(env, argv[1]);
1537
-
1538
- std::string value;
1539
- database->GetProperty(property, &value);
1540
-
1541
- napi_value result;
1542
- napi_create_string_utf8(env, value.data(), value.size(), &result);
1543
-
1544
- DisposeSliceBuffer(property);
1545
-
1546
- return result;
1547
- }
1548
-
1549
- /**
1550
- * Worker class for destroying a database.
1551
- */
1552
- struct DestroyWorker final : public BaseWorker {
1553
- DestroyWorker (napi_env env,
1554
- const std::string& location,
1555
- napi_value callback)
1556
- : BaseWorker(env, NULL, callback, "leveldown.destroy_db"),
1557
- location_(location) {}
1558
-
1559
- ~DestroyWorker () {}
1560
-
1561
- void DoExecute () override {
1562
- leveldb::Options options;
1563
-
1564
- // TODO: support overriding infoLogLevel the same as db.open(options)
1565
- options.info_log_level = rocksdb::InfoLogLevel::HEADER_LEVEL;
1566
- options.info_log.reset(new NullLogger());
1567
-
1568
- SetStatus(leveldb::DestroyDB(location_, options));
1569
- }
1570
-
1571
- std::string location_;
1572
- };
1573
-
1574
- /**
1575
- * Destroys a database.
1576
- */
1577
- NAPI_METHOD(destroy_db) {
1578
- NAPI_ARGV(2);
1579
- NAPI_ARGV_UTF8_NEW(location, 0);
1580
- napi_value callback = argv[1];
1581
-
1582
- DestroyWorker* worker = new DestroyWorker(env, location, callback);
1583
- worker->Queue(env);
1584
-
1585
- delete [] location;
1586
-
1587
- NAPI_RETURN_UNDEFINED();
1588
- }
1589
-
1590
- /**
1591
- * Worker class for repairing a database.
1592
- */
1593
- struct RepairWorker final : public BaseWorker {
1594
- RepairWorker (napi_env env,
1595
- const std::string& location,
1596
- napi_value callback)
1597
- : BaseWorker(env, NULL, callback, "leveldown.repair_db"),
1598
- location_(location) {}
1599
-
1600
- ~RepairWorker () {}
1601
-
1602
- void DoExecute () override {
1603
- leveldb::Options options;
1604
-
1605
- // TODO: support overriding infoLogLevel the same as db.open(options)
1606
- options.info_log_level = rocksdb::InfoLogLevel::HEADER_LEVEL;
1607
- options.info_log.reset(new NullLogger());
1215
+ const auto reverse = BooleanProperty(env, options, "reverse", false);
1216
+ const auto limit = Int32Property(env, options, "limit", -1);
1608
1217
 
1609
- SetStatus(leveldb::RepairDB(location_, options));
1610
- }
1218
+ const auto lt = RangeOption(env, options, "lt");
1219
+ const auto lte = RangeOption(env, options, "lte");
1220
+ const auto gt = RangeOption(env, options, "gt");
1221
+ const auto gte = RangeOption(env, options, "gte");
1611
1222
 
1612
- std::string location_;
1613
- };
1614
-
1615
- /**
1616
- * Repairs a database.
1617
- */
1618
- NAPI_METHOD(repair_db) {
1619
- NAPI_ARGV(2);
1620
- NAPI_ARGV_UTF8_NEW(location, 0);
1621
- napi_value callback = argv[1];
1622
-
1623
- RepairWorker* worker = new RepairWorker(env, location, callback);
1223
+ auto worker = new ClearWorker(env, database, callback, reverse, limit, lt, lte, gt, gte);
1624
1224
  worker->Queue(env);
1625
1225
 
1626
- delete [] location;
1627
-
1628
- NAPI_RETURN_UNDEFINED();
1226
+ return 0;
1629
1227
  }
1630
1228
 
1631
- /**
1632
- * Runs when an Iterator is garbage collected.
1633
- */
1634
1229
  static void FinalizeIterator (napi_env env, void* data, void* hint) {
1635
1230
  if (data) {
1636
- delete (Iterator*)data;
1231
+ delete reinterpret_cast<Iterator*>(data);
1637
1232
  }
1638
1233
  }
1639
1234
 
1640
- /**
1641
- * Create an iterator.
1642
- */
1643
1235
  NAPI_METHOD(iterator_init) {
1644
1236
  NAPI_ARGV(2);
1645
1237
  NAPI_DB_CONTEXT();
1646
1238
 
1647
- napi_value options = argv[1];
1648
- const bool reverse = BooleanProperty(env, options, "reverse", false);
1649
- const bool keys = BooleanProperty(env, options, "keys", true);
1650
- const bool values = BooleanProperty(env, options, "values", true);
1651
- const bool fillCache = BooleanProperty(env, options, "fillCache", false);
1652
- const bool keyAsBuffer = BooleanProperty(env, options, "keyAsBuffer", true);
1653
- const bool valueAsBuffer = BooleanProperty(env, options, "valueAsBuffer", true);
1654
- const int limit = Int32Property(env, options, "limit", -1);
1655
- const uint32_t highWaterMark = Uint32Property(env, options, "highWaterMark",
1656
- 16 * 1024);
1657
-
1658
- std::string* lt = RangeOption(env, options, "lt");
1659
- std::string* lte = RangeOption(env, options, "lte");
1660
- std::string* gt = RangeOption(env, options, "gt");
1661
- std::string* gte = RangeOption(env, options, "gte");
1662
-
1663
- const uint32_t id = database->currentIteratorId_++;
1664
- Iterator* iterator = new Iterator(database, id, reverse, keys,
1665
- values, limit, lt, lte, gt, gte, fillCache,
1666
- keyAsBuffer, valueAsBuffer, highWaterMark);
1239
+ const auto options = argv[1];
1240
+ const auto reverse = BooleanProperty(env, options, "reverse", false);
1241
+ const auto keys = BooleanProperty(env, options, "keys", true);
1242
+ const auto values = BooleanProperty(env, options, "values", true);
1243
+ const auto fillCache = BooleanProperty(env, options, "fillCache", false);
1244
+ const bool keyAsBuffer = EncodingIsBuffer(env, options, "keyEncoding");
1245
+ const bool valueAsBuffer = EncodingIsBuffer(env, options, "valueEncoding");
1246
+ const auto limit = Int32Property(env, options, "limit", -1);
1247
+ const auto highWaterMarkBytes = Uint32Property(env, options, "highWaterMarkBytes", 16 * 1024);
1248
+
1249
+ const auto lt = RangeOption(env, options, "lt");
1250
+ const auto lte = RangeOption(env, options, "lte");
1251
+ const auto gt = RangeOption(env, options, "gt");
1252
+ const auto gte = RangeOption(env, options, "gte");
1253
+
1254
+ auto iterator = new Iterator(database, reverse, keys,
1255
+ values, limit, lt, lte, gt, gte, fillCache,
1256
+ keyAsBuffer, valueAsBuffer, highWaterMarkBytes);
1667
1257
  napi_value result;
1668
1258
 
1669
1259
  NAPI_STATUS_THROWS(napi_create_external(env, iterator,
1670
1260
  FinalizeIterator,
1671
- NULL, &result));
1261
+ nullptr, &result));
1672
1262
 
1673
- // Prevent GC of JS object before the iterator is ended (explicitly or on
1674
- // db close) and keep track of non-ended iterators to end them on db close.
1263
+ // Prevent GC of JS object before the iterator is closed (explicitly or on
1264
+ // db close) and keep track of non-closed iterators to end them on db close.
1675
1265
  iterator->Attach(env, result);
1676
1266
 
1677
1267
  return result;
1678
1268
  }
1679
1269
 
1680
- /**
1681
- * Seeks an iterator.
1682
- */
1683
1270
  NAPI_METHOD(iterator_seek) {
1684
1271
  NAPI_ARGV(2);
1685
1272
  NAPI_ITERATOR_CONTEXT();
1686
1273
 
1687
- if (iterator->isEnding_ || iterator->hasEnded_) {
1688
- napi_throw_error(env, NULL, "iterator has ended");
1274
+ if (iterator->isClosing_) {
1275
+ napi_throw_error(env, nullptr, "iterator has closed");
1689
1276
  }
1690
1277
 
1691
- leveldb::Slice target = ToSlice(env, argv[1]);
1692
- iterator->landed_ = false;
1278
+ const auto target = ToString(env, argv[1]).value_or(std::string());
1279
+ iterator->first_ = true;
1693
1280
  iterator->Seek(target);
1694
1281
 
1695
- DisposeSliceBuffer(target);
1696
- NAPI_RETURN_UNDEFINED();
1282
+ return 0;
1697
1283
  }
1698
1284
 
1699
- /**
1700
- * Worker class for ending an iterator
1701
- */
1702
- struct EndWorker final : public BaseWorker {
1703
- EndWorker (napi_env env,
1704
- Iterator* iterator,
1705
- napi_value callback)
1285
+ struct CloseIteratorWorker final : public BaseWorker {
1286
+ CloseIteratorWorker (napi_env env,
1287
+ Iterator* iterator,
1288
+ napi_value callback)
1706
1289
  : BaseWorker(env, iterator->database_, callback, "leveldown.iterator.end"),
1707
1290
  iterator_(iterator) {}
1708
1291
 
1709
- ~EndWorker () {}
1710
-
1711
1292
  void DoExecute () override {
1712
- iterator_->End();
1293
+ iterator_->Close();
1713
1294
  }
1714
1295
 
1715
1296
  void DoFinally (napi_env env) override {
@@ -1722,46 +1303,39 @@ private:
1722
1303
  };
1723
1304
 
1724
1305
  /**
1725
- * Called by NAPI_METHOD(iterator_end) and also when closing
1306
+ * Called by NAPI_METHOD(iterator_) and also when closing
1726
1307
  * open iterators during NAPI_METHOD(db_close).
1727
1308
  */
1728
- static void iterator_end_do (napi_env env, Iterator* iterator, napi_value cb) {
1729
- if (!iterator->isEnding_ && !iterator->hasEnded_) {
1730
- EndWorker* worker = new EndWorker(env, iterator, cb);
1731
- iterator->isEnding_ = true;
1309
+ static void iterator_do_close (napi_env env, Iterator* iterator, napi_value cb) {
1310
+ if (!iterator->isClosing_) {
1311
+ auto worker = new CloseIteratorWorker(env, iterator, cb);
1312
+ iterator->isClosing_ = true;
1732
1313
 
1733
1314
  if (iterator->nexting_) {
1734
- iterator->endWorker_ = worker;
1315
+ iterator->closeWorker_ = worker;
1735
1316
  } else {
1736
1317
  worker->Queue(env);
1737
1318
  }
1738
1319
  }
1739
1320
  }
1740
1321
 
1741
- /**
1742
- * Ends an iterator.
1743
- */
1744
- NAPI_METHOD(iterator_end) {
1322
+ NAPI_METHOD(iterator_close) {
1745
1323
  NAPI_ARGV(2);
1746
1324
  NAPI_ITERATOR_CONTEXT();
1747
1325
 
1748
- iterator_end_do(env, iterator, argv[1]);
1326
+ iterator_do_close(env, iterator, argv[1]);
1749
1327
 
1750
- NAPI_RETURN_UNDEFINED();
1328
+ return 0;
1751
1329
  }
1752
1330
 
1753
- /**
1754
- * Worker class for nexting an iterator.
1755
- */
1756
1331
  struct NextWorker final : public BaseWorker {
1757
1332
  NextWorker (napi_env env,
1758
1333
  Iterator* iterator,
1334
+ uint32_t size,
1759
1335
  napi_value callback)
1760
1336
  : BaseWorker(env, iterator->database_, callback,
1761
1337
  "leveldown.iterator.next"),
1762
- iterator_(iterator), ok_() {}
1763
-
1764
- ~NextWorker () {}
1338
+ iterator_(iterator), size_(size), ok_() {}
1765
1339
 
1766
1340
  void DoExecute () override {
1767
1341
  if (!iterator_->DidSeek()) {
@@ -1770,7 +1344,7 @@ struct NextWorker final : public BaseWorker {
1770
1344
 
1771
1345
  // Limit the size of the cache to prevent starving the event loop
1772
1346
  // in JS-land while we're recursively calling process.nextTick().
1773
- ok_ = iterator_->ReadMany(1000);
1347
+ ok_ = iterator_->ReadMany(size_);
1774
1348
 
1775
1349
  if (!ok_) {
1776
1350
  SetStatus(iterator_->Status());
@@ -1778,28 +1352,26 @@ struct NextWorker final : public BaseWorker {
1778
1352
  }
1779
1353
 
1780
1354
  void HandleOKCallback (napi_env env, napi_value callback) override {
1781
- size_t arraySize = iterator_->cache_.size();
1782
- napi_value jsArray;
1783
- napi_create_array_with_length(env, arraySize, &jsArray);
1355
+ const auto size = iterator_->cache_.size();
1356
+ napi_value result;
1357
+ napi_create_array_with_length(env, size, &result);
1784
1358
 
1785
1359
  for (size_t idx = 0; idx < iterator_->cache_.size(); idx += 2) {
1786
- std::string key = iterator_->cache_[idx];
1787
- std::string value = iterator_->cache_[idx + 1];
1360
+ napi_value key;
1361
+ napi_value val;
1788
1362
 
1789
- napi_value returnKey;
1790
- napi_value returnValue;
1363
+ Convert(env, iterator_->cache_[idx + 0], iterator_->keyAsBuffer_, key);
1364
+ Convert(env, iterator_->cache_[idx + 1], iterator_->valueAsBuffer_, val);
1791
1365
 
1792
- Entry::Convert(env, &key, iterator_->keyAsBuffer_, &returnKey);
1793
- Entry::Convert(env, &value, iterator_->valueAsBuffer_, &returnValue);
1794
-
1795
- // put the key & value in a descending order, so that they can be .pop:ed in javascript-land
1796
- napi_set_element(env, jsArray, static_cast<int>(arraySize - idx - 1), returnKey);
1797
- napi_set_element(env, jsArray, static_cast<int>(arraySize - idx - 2), returnValue);
1366
+ napi_set_element(env, result, static_cast<int>(idx + 0), key);
1367
+ napi_set_element(env, result, static_cast<int>(idx + 1), val);
1798
1368
  }
1799
1369
 
1370
+ iterator_->cache_.clear();
1371
+
1800
1372
  napi_value argv[3];
1801
1373
  napi_get_null(env, &argv[0]);
1802
- argv[1] = jsArray;
1374
+ argv[1] = result;
1803
1375
  napi_get_boolean(env, !ok_, &argv[2]);
1804
1376
  CallFunction(env, callback, 3, argv);
1805
1377
  }
@@ -1808,9 +1380,9 @@ struct NextWorker final : public BaseWorker {
1808
1380
  // clean up & handle the next/end state
1809
1381
  iterator_->nexting_ = false;
1810
1382
 
1811
- if (iterator_->endWorker_ != NULL) {
1812
- iterator_->endWorker_->Queue(env);
1813
- iterator_->endWorker_ = NULL;
1383
+ if (iterator_->closeWorker_) {
1384
+ iterator_->closeWorker_->Queue(env);
1385
+ iterator_->closeWorker_ = nullptr;
1814
1386
  }
1815
1387
 
1816
1388
  BaseWorker::DoFinally(env);
@@ -1818,30 +1390,31 @@ struct NextWorker final : public BaseWorker {
1818
1390
 
1819
1391
  private:
1820
1392
  Iterator* iterator_;
1393
+ uint32_t size_;
1821
1394
  bool ok_;
1822
1395
  };
1823
1396
 
1824
- /**
1825
- * Moves an iterator to next element.
1826
- */
1827
- NAPI_METHOD(iterator_next) {
1828
- NAPI_ARGV(2);
1397
+ NAPI_METHOD(iterator_nextv) {
1398
+ NAPI_ARGV(3);
1829
1399
  NAPI_ITERATOR_CONTEXT();
1830
1400
 
1831
- napi_value callback = argv[1];
1401
+ uint32_t size;
1402
+ NAPI_STATUS_THROWS(napi_get_value_uint32(env, argv[1], &size));
1403
+ if (size == 0) size = 1;
1832
1404
 
1833
- if (iterator->isEnding_ || iterator->hasEnded_) {
1834
- napi_value argv = CreateError(env, "iterator has ended");
1835
- CallFunction(env, callback, 1, &argv);
1405
+ const auto callback = argv[2];
1836
1406
 
1837
- NAPI_RETURN_UNDEFINED();
1407
+ if (iterator->isClosing_) {
1408
+ napi_value argv = CreateCodeError(env, "LEVEL_ITERATOR_NOT_OPEN", "Iterator is not open");
1409
+ NAPI_STATUS_THROWS(CallFunction(env, callback, 1, &argv));
1410
+ return 0;
1838
1411
  }
1839
1412
 
1840
- NextWorker* worker = new NextWorker(env, iterator, callback);
1413
+ auto worker = new NextWorker(env, iterator, size, callback);
1841
1414
  iterator->nexting_ = true;
1842
1415
  worker->Queue(env);
1843
1416
 
1844
- NAPI_RETURN_UNDEFINED();
1417
+ return 0;
1845
1418
  }
1846
1419
 
1847
1420
  /**
@@ -1854,7 +1427,7 @@ struct BatchWorker final : public PriorityWorker {
1854
1427
  leveldb::WriteBatch* batch,
1855
1428
  const bool sync,
1856
1429
  const bool hasData)
1857
- : PriorityWorker(env, database, callback, "leveldown.batch.do"),
1430
+ : PriorityWorker(env, database, callback, "classic_level.batch.do"),
1858
1431
  batch_(batch), hasData_(hasData) {
1859
1432
  options_.sync = sync;
1860
1433
  }
@@ -1875,16 +1448,13 @@ private:
1875
1448
  const bool hasData_;
1876
1449
  };
1877
1450
 
1878
- /**
1879
- * Does a batch write operation on a database.
1880
- */
1881
1451
  NAPI_METHOD(batch_do) {
1882
1452
  NAPI_ARGV(4);
1883
1453
  NAPI_DB_CONTEXT();
1884
1454
 
1885
- napi_value array = argv[1];
1886
- const bool sync = BooleanProperty(env, argv[2], "sync", false);
1887
- napi_value callback = argv[3];
1455
+ const auto array = argv[1];
1456
+ const auto sync = BooleanProperty(env, argv[2], "sync", false);
1457
+ const auto callback = argv[3];
1888
1458
 
1889
1459
  uint32_t length;
1890
1460
  napi_get_array_length(env, array, &length);
@@ -1902,194 +1472,126 @@ NAPI_METHOD(batch_do) {
1902
1472
 
1903
1473
  if (type == "del") {
1904
1474
  if (!HasProperty(env, element, "key")) continue;
1905
- leveldb::Slice key = ToSlice(env, GetProperty(env, element, "key"));
1475
+ const auto key = ToString(env, GetProperty(env, element, "key")).value_or(std::string());
1906
1476
 
1907
1477
  batch->Delete(key);
1908
1478
  if (!hasData) hasData = true;
1909
-
1910
- DisposeSliceBuffer(key);
1911
1479
  } else if (type == "put") {
1912
1480
  if (!HasProperty(env, element, "key")) continue;
1913
1481
  if (!HasProperty(env, element, "value")) continue;
1914
1482
 
1915
- leveldb::Slice key = ToSlice(env, GetProperty(env, element, "key"));
1916
- leveldb::Slice value = ToSlice(env, GetProperty(env, element, "value"));
1483
+ const auto key = ToString(env, GetProperty(env, element, "key")).value_or(std::string());
1484
+ const auto value = ToString(env, GetProperty(env, element, "value")).value_or(std::string());
1917
1485
 
1918
1486
  batch->Put(key, value);
1919
1487
  if (!hasData) hasData = true;
1920
-
1921
- DisposeSliceBuffer(key);
1922
- DisposeSliceBuffer(value);
1923
1488
  }
1924
1489
  }
1925
1490
 
1926
- BatchWorker* worker = new BatchWorker(env, database, callback, batch, sync, hasData);
1491
+ auto worker = new BatchWorker(env, database, callback, batch, sync, hasData);
1927
1492
  worker->Queue(env);
1928
1493
 
1929
- NAPI_RETURN_UNDEFINED();
1494
+ return 0;
1930
1495
  }
1931
1496
 
1932
- /**
1933
- * Owns a WriteBatch.
1934
- */
1935
- struct Batch {
1936
- Batch (Database* database)
1937
- : database_(database),
1938
- batch_(new leveldb::WriteBatch()),
1939
- hasData_(false) {}
1940
-
1941
- ~Batch () {
1942
- delete batch_;
1943
- }
1944
-
1945
- void Put (leveldb::Slice key, leveldb::Slice value) {
1946
- batch_->Put(key, value);
1947
- hasData_ = true;
1948
- }
1949
-
1950
- void Del (leveldb::Slice key) {
1951
- batch_->Delete(key);
1952
- hasData_ = true;
1953
- }
1954
-
1955
- void Clear () {
1956
- batch_->Clear();
1957
- hasData_ = false;
1958
- }
1959
-
1960
- leveldb::Status Write (bool sync) {
1961
- leveldb::WriteOptions options;
1962
- options.sync = sync;
1963
- return database_->WriteBatch(options, batch_);
1964
- }
1965
-
1966
- Database* database_;
1967
- leveldb::WriteBatch* batch_;
1968
- bool hasData_;
1969
- };
1970
-
1971
- /**
1972
- * Runs when a Batch is garbage collected.
1973
- */
1974
1497
  static void FinalizeBatch (napi_env env, void* data, void* hint) {
1975
1498
  if (data) {
1976
- delete (Batch*)data;
1499
+ delete reinterpret_cast<leveldb::WriteBatch*>(data);
1977
1500
  }
1978
1501
  }
1979
1502
 
1980
- /**
1981
- * Return a batch object.
1982
- */
1983
1503
  NAPI_METHOD(batch_init) {
1984
1504
  NAPI_ARGV(1);
1985
1505
  NAPI_DB_CONTEXT();
1986
1506
 
1987
- Batch* batch = new Batch(database);
1507
+ auto batch = new leveldb::WriteBatch();
1988
1508
 
1989
1509
  napi_value result;
1990
1510
  NAPI_STATUS_THROWS(napi_create_external(env, batch,
1991
1511
  FinalizeBatch,
1992
- NULL, &result));
1512
+ nullptr, &result));
1993
1513
  return result;
1994
1514
  }
1995
1515
 
1996
- /**
1997
- * Adds a put instruction to a batch object.
1998
- */
1999
1516
  NAPI_METHOD(batch_put) {
2000
1517
  NAPI_ARGV(3);
2001
1518
  NAPI_BATCH_CONTEXT();
2002
1519
 
2003
- leveldb::Slice key = ToSlice(env, argv[1]);
2004
- leveldb::Slice value = ToSlice(env, argv[2]);
1520
+ const auto key = ToString(env, argv[1]).value_or(std::string());
1521
+ const auto value = ToString(env, argv[2]).value_or(std::string());
1522
+
2005
1523
  batch->Put(key, value);
2006
- DisposeSliceBuffer(key);
2007
- DisposeSliceBuffer(value);
2008
1524
 
2009
- NAPI_RETURN_UNDEFINED();
1525
+ return 0;
2010
1526
  }
2011
1527
 
2012
- /**
2013
- * Adds a delete instruction to a batch object.
2014
- */
2015
1528
  NAPI_METHOD(batch_del) {
2016
1529
  NAPI_ARGV(2);
2017
1530
  NAPI_BATCH_CONTEXT();
2018
1531
 
2019
- leveldb::Slice key = ToSlice(env, argv[1]);
2020
- batch->Del(key);
2021
- DisposeSliceBuffer(key);
1532
+ const auto key = ToString(env, argv[1]).value_or(std::string());
1533
+
1534
+ batch->Delete(key);
2022
1535
 
2023
- NAPI_RETURN_UNDEFINED();
1536
+ return 0;
2024
1537
  }
2025
1538
 
2026
- /**
2027
- * Clears a batch object.
2028
- */
2029
1539
  NAPI_METHOD(batch_clear) {
2030
1540
  NAPI_ARGV(1);
2031
1541
  NAPI_BATCH_CONTEXT();
2032
1542
 
2033
1543
  batch->Clear();
2034
1544
 
2035
- NAPI_RETURN_UNDEFINED();
1545
+ return 0;
2036
1546
  }
2037
1547
 
2038
- /**
2039
- * Worker class for batch write operation.
2040
- */
2041
1548
  struct BatchWriteWorker final : public PriorityWorker {
2042
1549
  BatchWriteWorker (napi_env env,
2043
- napi_value context,
2044
- Batch* batch,
1550
+ Database* database,
1551
+ napi_value batch,
2045
1552
  napi_value callback,
2046
1553
  const bool sync)
2047
- : PriorityWorker(env, batch->database_, callback, "leveldown.batch.write"),
2048
- batch_(batch),
1554
+ : PriorityWorker(env, database, callback, "leveldown.batch.write"),
2049
1555
  sync_(sync) {
2050
- // Prevent GC of batch object before we execute
2051
- NAPI_STATUS_THROWS_VOID(napi_create_reference(env, context, 1, &contextRef_));
2052
- }
2053
1556
 
2054
- ~BatchWriteWorker () {}
1557
+ NAPI_STATUS_THROWS_VOID(napi_get_value_external(env, batch, reinterpret_cast<void**>(&batch_)));
1558
+
1559
+ // Prevent GC of batch object before we execute
1560
+ NAPI_STATUS_THROWS_VOID(napi_create_reference(env, batch, 1, &batchRef_));
1561
+ }
2055
1562
 
2056
1563
  void DoExecute () override {
2057
- if (batch_->hasData_) {
2058
- SetStatus(batch_->Write(sync_));
2059
- }
1564
+ leveldb::WriteOptions options;
1565
+ options.sync = sync_;
1566
+ SetStatus(database_->WriteBatch(options, batch_));
2060
1567
  }
2061
1568
 
2062
1569
  void DoFinally (napi_env env) override {
2063
- napi_delete_reference(env, contextRef_);
1570
+ napi_delete_reference(env, batchRef_);
2064
1571
  PriorityWorker::DoFinally(env);
2065
1572
  }
2066
1573
 
2067
1574
  private:
2068
- Batch* batch_;
1575
+ leveldb::WriteBatch* batch_;
2069
1576
  const bool sync_;
2070
- napi_ref contextRef_;
1577
+ napi_ref batchRef_;
2071
1578
  };
2072
1579
 
2073
- /**
2074
- * Writes a batch object.
2075
- */
2076
1580
  NAPI_METHOD(batch_write) {
2077
- NAPI_ARGV(3);
2078
- NAPI_BATCH_CONTEXT();
1581
+ NAPI_ARGV(4);
1582
+ NAPI_DB_CONTEXT();
2079
1583
 
2080
- napi_value options = argv[1];
2081
- const bool sync = BooleanProperty(env, options, "sync", false);
2082
- napi_value callback = argv[2];
1584
+ const auto batch = argv[1];
1585
+ const auto options = argv[2];
1586
+ const auto sync = BooleanProperty(env, options, "sync", false);
1587
+ const auto callback = argv[3];
2083
1588
 
2084
- BatchWriteWorker* worker = new BatchWriteWorker(env, argv[0], batch, callback, sync);
1589
+ auto worker = new BatchWriteWorker(env, database, batch, callback, sync);
2085
1590
  worker->Queue(env);
2086
1591
 
2087
- NAPI_RETURN_UNDEFINED();
1592
+ return 0;
2088
1593
  }
2089
1594
 
2090
- /**
2091
- * All exported functions.
2092
- */
2093
1595
  NAPI_INIT() {
2094
1596
  NAPI_EXPORT_FUNCTION(db_init);
2095
1597
  NAPI_EXPORT_FUNCTION(db_open);
@@ -2099,17 +1601,11 @@ NAPI_INIT() {
2099
1601
  NAPI_EXPORT_FUNCTION(db_get_many);
2100
1602
  NAPI_EXPORT_FUNCTION(db_del);
2101
1603
  NAPI_EXPORT_FUNCTION(db_clear);
2102
- NAPI_EXPORT_FUNCTION(db_approximate_size);
2103
- NAPI_EXPORT_FUNCTION(db_compact_range);
2104
- NAPI_EXPORT_FUNCTION(db_get_property);
2105
-
2106
- NAPI_EXPORT_FUNCTION(destroy_db);
2107
- NAPI_EXPORT_FUNCTION(repair_db);
2108
1604
 
2109
1605
  NAPI_EXPORT_FUNCTION(iterator_init);
2110
1606
  NAPI_EXPORT_FUNCTION(iterator_seek);
2111
- NAPI_EXPORT_FUNCTION(iterator_end);
2112
- NAPI_EXPORT_FUNCTION(iterator_next);
1607
+ NAPI_EXPORT_FUNCTION(iterator_close);
1608
+ NAPI_EXPORT_FUNCTION(iterator_nextv);
2113
1609
 
2114
1610
  NAPI_EXPORT_FUNCTION(batch_do);
2115
1611
  NAPI_EXPORT_FUNCTION(batch_init);