{"id":17541814,"url":"https://github.com/iraikov/chicken-lmdb","last_synced_at":"2025-03-25T18:43:50.085Z","repository":{"id":148366558,"uuid":"50201482","full_name":"iraikov/chicken-lmdb","owner":"iraikov","description":"Chicken Scheme bindings for the LMDB key value database","archived":false,"fork":false,"pushed_at":"2020-07-14T02:06:01.000Z","size":76,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-30T16:28:01.728Z","etag":null,"topics":["chicken-scheme","chicken-scheme-eggs","database","key-value","key-value-database","key-value-store","lmdb","scheme-language"],"latest_commit_sha":null,"homepage":null,"language":"Scheme","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iraikov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-01-22T19:05:08.000Z","updated_at":"2023-11-21T06:14:37.000Z","dependencies_parsed_at":"2023-05-13T20:36:28.013Z","dependency_job_id":null,"html_url":"https://github.com/iraikov/chicken-lmdb","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iraikov%2Fchicken-lmdb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iraikov%2Fchicken-lmdb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iraikov%2Fchicken-lmdb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iraikov%2Fchicken-lmdb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iraikov","download_url":"https://codeload.github.com/iraikov/chicken-lmdb/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245525772,"owners_count":20629832,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chicken-scheme","chicken-scheme-eggs","database","key-value","key-value-database","key-value-store","lmdb","scheme-language"],"created_at":"2024-10-20T23:57:48.539Z","updated_at":"2025-03-25T18:43:50.054Z","avatar_url":"https://github.com/iraikov.png","language":"Scheme","funding_links":[],"categories":[],"sub_categories":[],"readme":"# chicken-lmdb\n\nChicken Scheme bindings for the Lightning Memory-Mapped Database\nManager (LMDB) (http://symas.com/mdb/doc/index.html) database\nmanagement library.\n\n\n## Library procedures\n\n`(db-open filename [key: enckey] [mapsize: size])`\nOpens or creates LMDB database with optional encryption key and map size.\n\n`(db-close db)`\nCloses LMDB database handle.\n\n`(db-begin db [dbname: dbname] [flags: 0])`\nBegins LMDB transaction with optional database name and flags returned by `db-flags`.\nCommits and ends LMDB transaction.\n\n`(db-flags flag-name ...)`\nReturns a bit mask that represents LMDB environment flags. The flag name is one of the following keywords:\n- `#:fixed-map` : mmap at a fixed address\n- `#:no-subdirectory` : no environment directory\n- `#:read-only` : read only\n- `#:write-map` : use writable mmap\n- `#:no-meta-sync` :  don't fsync metapage after commit\n- `#:no-sync` : don't fsync after commit\n- `#:map-async` : use asynchronous sync with `#:write-map` is used\n- `#:no-lock` : don't do locking\n- `#:no-read-ahead` : don't do readahead\n\n\n`(db-abort db)`\nAborts LMDB transaction.\n\n`(db-delete db key)`\nRemoves a key from the database.\n\n`(db-delete-database dbname)`\nDeletes LMDB database.\n\n`(db-ref db key)`\nLooks up key in database.\n\n`(db-set! db key value)`\nSets a key-value pair in the database.\n\n`(db-count db)`\nReturns number of key-value pairs in database.\n\n`(db-keys db)`\nReturns a list of database keys.\n\n`(db-values db)`\nReturns a list of database values.\n\n`(db-key-len m)`\nReturns the length of the current key.\n\n`(db-value-len m)`\nReturns the length of the current value.\n\n`(db-key m buf)`\nCopies the current key to the specified blob.\n\n`(db-value m buf)`\nCopies the current value to the specified blob.\n\n`(db-fold f init db)`\nFold over the keys and values in the database.\n\n`(db-for-each f db)`\nIterate over the keys and values in the database.\n\n`(hash-table-\u003edb t dbfile [enckey])`\nSaves SRFI-69 hash table to database.\n\n`(db-\u003ehash-table dbfile [enckey])`\nLoad database into SRFI-69 hash table.\n\n## Examples\n\n```scheme\n\n;; lmdb encrypted key-value creation and lookup\n\n(let* ((fname (make-pathname \".\" \"mydb.mdb\"))\n       (keys (list \"k1\" 'k2 '(k3)))\n       (values (list 'one 2 \"three\"))\n       (cryptokey (string-\u003eblob \"1234\"))\n       (mm (db-open fname key: cryptokey)))\n  (db-begin mm)\n  (let loop ((ks keys) (vs values))\n    (if (\u003e (length ks) 0) \n        (begin\n          (db-set! mm (string-\u003eblob (-\u003estring (car ks))) (string-\u003eblob (-\u003estring (car vs))))\n          (loop (cdr ks) (cdr vs)))))\n  (db-end mm)\n  (db-begin mm)\n  (let ((res (let loop ((ks keys) (vs values))\n               (if (= (length ks) 0) #t\n                   (let ((v (db-ref mm (string-\u003eblob (-\u003estring (car ks))))))\n                     (if (not (equal? (string-\u003eblob (-\u003estring (car vs))) v))  #f\n                         (loop (cdr ks) (cdr vs)))))))\n        )\n    (db-end mm)\n    (db-close mm)\n    res)\n  )\n```\n\n```scheme\n\n;; lmdb readonly test\n\n(let* ((fname (make-pathname \".\" \"unittest.mdb\")))\n       (db-delete-database fname)\n  (let ((mm (db-open fname maxdbs: 2)))\n       (db-begin mm)\n\t\t;; set foo\n\t\t(db-set! mm (string-\u003eblob \"foo\") (string-\u003eblob \"one\"))\n\t\t(db-end mm)\n        ;; reopen as readonly\n\t\t(db-begin mm flags: (db-flags #:read-only))\n\t\t;; foo is still set\n\t\t(test (string-\u003eblob \"one\")\n\t\t      (db-ref mm (string-\u003eblob \"foo\")))\n\t\t;; cannot set bar\n\t\t(test 'unknown\n\t\t      (condition-case (db-set! mm (string-\u003eblob \"bar\") (string-\u003eblob \"two\"))\n\t\t\t((exn lmdb unknown) 'unknown)))\n                (db-close mm)))\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Firaikov%2Fchicken-lmdb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Firaikov%2Fchicken-lmdb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Firaikov%2Fchicken-lmdb/lists"}