Skip to content

Instantly share code, notes, and snippets.

@dacr
Last active May 25, 2024 10:19
Show Gist options
  • Save dacr/dcb8a11f095ef0a2a95c24701e6eb804 to your computer and use it in GitHub Desktop.
Save dacr/dcb8a11f095ef0a2a95c24701e6eb804 to your computer and use it in GitHub Desktop.
ZIO LMDB simple example / published by https://github.com/dacr/code-examples-manager #5c5fabdd-7f05-48d6-ae67-c8618b02284e/74067d9a0feb2139e4822653ddbd618bffa31a35
// summary : ZIO LMDB simple example
// keywords : scala, zio, lmdb, @testable
// publish : gist
// authors : David Crosson
// license : Apache NON-AI License Version 2.0 (https://raw.githubusercontent.com/non-ai-licenses/non-ai-licenses/main/NON-AI-APACHE2)
// id : 5c5fabdd-7f05-48d6-ae67-c8618b02284e
// created-on : 2022-08-09T20:01:37+02:00
// managed-by : https://github.com/dacr/code-examples-manager
// run-with : scala-cli $file
// ---------------------
//> using scala "3.4.2"
//> using dep "fr.janalyse::zio-lmdb:1.8.0"
//> using javaOpt "--add-opens", "java.base/java.nio=ALL-UNNAMED", "--add-opens", "java.base/sun.nio.ch=ALL-UNNAMED"
// ---------------------
import zio.*, zio.lmdb.*, zio.json.*
import java.io.File, java.util.UUID, java.time.OffsetDateTime
case class Record(uuid: UUID, name: String, age: Int, addedOn: OffsetDateTime) derives JsonCodec
object SimpleExample extends ZIOAppDefault {
override def run = example.provide(LMDB.liveWithDatabaseName("lmdb-data-simple-example"), Scope.default)
val collectionName = "examples"
val example = for {
examples <- LMDB.collectionCreate[Record](collectionName, failIfExists = false)
recordId <- Random.nextUUID
dateTime <- Clock.currentDateTime
record = Record(recordId, "John Doe", 42, dateTime)
_ <- examples.upsertOverwrite(recordId.toString, record)
gotten <- examples.fetch(recordId.toString).some
collected <- examples.collect()
_ <- Console.printLine(s"collection $collectionName contains ${collected.size} records")
_ <- ZIO.foreach(collected)(record => Console.printLine(record))
lmdb <- ZIO.service[LMDB]
_ <- Console.printLine("""LMDB standard tools can be used to manage the database content : sudo apt-get install lmdb-utils""")
_ <- Console.printLine(s"""To get some statistics : mdb_stat -s $collectionName ${lmdb.databasePath}/""")
_ <- Console.printLine(s"""To dump collection content : mdb_dump -p -s $collectionName ${lmdb.databasePath}/""")
} yield ()
}
SimpleExample.main(Array.empty)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment