Skip to content

codex-storage/nim-leveldb

This branch is 55 commits ahead of zielmicha/leveldb.nim:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

2a9db82 · Feb 10, 2025
Dec 9, 2024
Aug 14, 2024
Feb 10, 2025
May 28, 2024
May 11, 2024
Dec 9, 2024
May 9, 2024
Feb 3, 2021
May 17, 2016
May 22, 2024
May 22, 2024
May 22, 2024
Dec 9, 2024
May 13, 2024

Repository files navigation

leveldb.nim

A self-contained LevelDB wrapper for Nim in a Nim friendly way. Uses git-submodule and nimterop so that no external libraries have to be installed or linked.

Original nim LevelDB wrapper: HERE

Replacing of system library dependency with self-contained C/CPP interoperability by (Codex.Storage)[https://codex.storage]

Usage

Create a database:

   import leveldbstatic
   import options

   var db = leveldb.open("/tmp/mydata")

Read or modify the database content:

   assert db.getOrDefault("nothing", "") == ""

   db.put("hello", "world")
   db.put("bin", "GIF89a\1\0")
   echo db.get("hello")
   assert db.get("hello").isSome()

   var key, val = ""
   for key, val in db.iter():
     echo key, ": ", repr(val)

   db.delete("hello")
   assert db.get("hello").isNone()

Batch writes:

   let batch = newBatch()
   for i in 1..10:
     batch.put("key" & $i, $i)
   batch.delete("bin")
   db.write(batch)

Iterate over subset of database content:

   for key, val in db.iterPrefix(prefix = "key1"):
     echo key, ": ", val
   for key, val in db.iter(seek = "key3", reverse = true):
     echo key, ": ", val

   db.close()

Compiling with optimizations

CMake is used during compilation to determine which of the following optimization options are enabled. You can set the following nim compiler flags to 0 or 1 to override them:

  • fdatasync from <unistd.h> --passC:-DHAVE_FDATASYNC=1
  • F_FULLSYNC from <fcntl.h> --passC:-DHAVE_FULLFSYNC=1
  • O_CLOEXEC from <fcntl.h> --passC:-DHAVE_O_CLOEXEC=1
  • crc32c from <crc32c/crc32c.h> --passC:-DHAVE_CRC32C=1
  • snappy from <snappy.h> --passC:-DHAVE_SNAPPY=1
  • zstd from <zstd.h> --passC:-DHAVE_ZSTD=1

Updating

When you want to update this library to a new version of LevelDB, follow these steps:

  • Update LevelDB submodule to new version.
  • Run 'build.sh'.
  • Run 'nimble build' and 'nimble test'.
  • Make sure everything's working.
  • Increment version of this library in 'leveldbstatic.nimble'.
  • Commit the changes.
  • Tag the commit with the new version number.
  • Push.

About

LevelDB wrapper for Nim

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Nim 97.1%
  • Shell 2.9%