package granary
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
Pure-OCaml SQL engine
Install
dune-project
Dependency
Authors
Maintainers
Sources
0.0.3.tar.gz
sha256=8b18780ea373be48301d9f333925860a2f9110fc0ac28684295118d72b65a67e
sha512=25ca3c9c5e2b528704a542502e0f37dc33ba003f65622d969b8c2b800778585f8ef0cf89b36e6679832e3993e8303aecddfc662742baf7044d6afe4a796b8f11
doc/src/granary.storage/geometry.ml.html
Source file geometry.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69(* Page geometry: the per-file, creation-time choice of page size and reserved-bytes-per-page. See geometry.mli for the contract. *) type t = { page_size : int ; reserved_bytes_per_page : int } let header_size = 16 let freelist_entry_size = 12 let min_page_size = 4096 let max_page_size = 65536 (* Smallest usable data area we permit after carving off the common header and the reserved bytes. Keeps the b-tree functional (a leaf must hold a few small cells, an overflow page a useful chunk) even at the most aggressive reserved-bytes setting; mirrors SQLite's floor on usable page size. *) let min_usable_data_bytes = 480 let pp fmt t = Format.fprintf fmt "@[<hv>{ page_size = %d;@ reserved_bytes_per_page = %d }@]" t.page_size t.reserved_bytes_per_page ;; let default = { page_size = 4096; reserved_bytes_per_page = 0 } let max_data_bytes t = t.page_size - header_size - t.reserved_bytes_per_page let max_overflow_payload_bytes t = max_data_bytes t - 2 let max_freelist_entries_per_page t = max_data_bytes t / freelist_entry_size type error = | Bad_page_size of int | Bad_reserved of int let pp_error fmt = function | Bad_page_size n -> Format.fprintf fmt "Bad_page_size %d (must be a multiple of %d in [%d, %d])" n min_page_size min_page_size max_page_size | Bad_reserved n -> Format.fprintf fmt "Bad_reserved %d (must be >= 0 and leave >= %d usable bytes)" n min_usable_data_bytes ;; let create ~page_size ~reserved_bytes_per_page = if page_size < min_page_size || page_size > max_page_size || page_size mod min_page_size <> 0 then Error (Bad_page_size page_size) else if reserved_bytes_per_page < 0 || page_size - header_size - reserved_bytes_per_page < min_usable_data_bytes then Error (Bad_reserved reserved_bytes_per_page) else Ok { page_size; reserved_bytes_per_page } ;; [@@@ai_disclosure "ai-generated"] [@@@ai_model "claude-opus-4-7"] [@@@ai_provider "Anthropic"]
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>