Multiple changes.
- Add build manifests for SourceHut. - Update README destination links. - Fix manifest for prerelease gem. - Reopen env handles when #clear is successful. - Fix #each when there is only one key. - Always use io_vec lengths when creating new strings. - Hook for rdoc generation. - Rename #open to #reopen, don't alias it. - Add a Rollback exception for upcoming transaction block work FossilOrigin-Name: d6ddedc51b0ac67f395d5749aa3e6adbeebdaf2843c6402ace757b0afffc2be9
This commit is contained in:
parent
5ed44e52fa
commit
770a931d77
11 changed files with 108 additions and 33 deletions
26
.builds/freebsd.yml
Normal file
26
.builds/freebsd.yml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
image: freebsd/12.x
|
||||
shell: true
|
||||
packages:
|
||||
- ruby
|
||||
sources:
|
||||
- hg+https://hg.sr.ht/~mahlon/ruby-mdbx
|
||||
tasks:
|
||||
- env-setup: |
|
||||
sudo sh -c 'echo "DEFAULT_VERSIONS+=ruby=2.7" > /etc/make.conf'
|
||||
sudo portsnap fetch extract
|
||||
cd /usr/ports/devel/ruby-gems
|
||||
sudo make -DBATCH install
|
||||
cd /usr/ports/databases/mdbx
|
||||
sudo make -DBATCH install
|
||||
- project-setup: |
|
||||
cd ~/ruby-mdbx
|
||||
sudo gem install -Ng
|
||||
- test: |
|
||||
export LC_ALL=en_US.UTF-8
|
||||
cd ~/ruby-mdbx
|
||||
rake test
|
||||
triggers:
|
||||
- action: email
|
||||
condition: always
|
||||
to: mahlon@martini.nu
|
||||
|
||||
29
.builds/ubuntu.yml
Normal file
29
.builds/ubuntu.yml
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
image: ubuntu/lts
|
||||
shell: true
|
||||
packages:
|
||||
- ruby
|
||||
- ruby-dev
|
||||
sources:
|
||||
- hg+https://hg.sr.ht/~mahlon/ruby-mdbx
|
||||
tasks:
|
||||
- env-setup: |
|
||||
git clone https://github.com/erthink/libmdbx.git
|
||||
cd libmdbx
|
||||
make dist
|
||||
cd dist
|
||||
make
|
||||
sudo make install
|
||||
- project-setup: |
|
||||
cd ~/ruby-mdbx
|
||||
sudo gem install -Ng
|
||||
- test: |
|
||||
sudo locale-gen en_US.UTF-8
|
||||
sudo update-locale LANG=en_US.UTF-8
|
||||
export LC_ALL=en_US.UTF-8
|
||||
cd ~/ruby-mdbx
|
||||
rake test
|
||||
triggers:
|
||||
- action: email
|
||||
condition: always
|
||||
to: mahlon@martini.nu
|
||||
|
||||
1
.pryrc
1
.pryrc
|
|
@ -11,4 +11,5 @@ rescue Exception => e
|
|||
e.backtrace.join( "\n\t" )
|
||||
end
|
||||
|
||||
db = MDBX::Database.open( 'tmp/testdb', max_collections: 50 )
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
# Release History for mdbx
|
||||
|
||||
---
|
||||
|
||||
## v0.0.1 [2020-12-16] Mahlon E. Smith <mahlon@martini.nu>
|
||||
|
||||
Early release, initial basic functionality.
|
||||
|
||||
|
||||
|
|
@ -1,3 +1,9 @@
|
|||
History.md
|
||||
LICENSE.txt
|
||||
README.md
|
||||
ext/mdbx_ext/extconf.rb
|
||||
ext/mdbx_ext/mdbx_ext.c
|
||||
ext/mdbx_ext/mdbx_ext.h
|
||||
ext/mdbx_ext/database.c
|
||||
lib/mdbx.rb
|
||||
lib/mdbx_ext.so
|
||||
lib/mdbx/database.rb
|
||||
|
|
|
|||
13
README.md
13
README.md
|
|
@ -1,21 +1,22 @@
|
|||
# Ruby MDBX
|
||||
|
||||
home
|
||||
: https://gitlab.com/mahlon/ruby-mdbx
|
||||
: https://code.martini.nu/ruby-mdbx
|
||||
|
||||
code
|
||||
: https://code.martini.nu/ruby-mdbx
|
||||
|
||||
docs
|
||||
: https://martini.nu/docs/ruby-mdbx
|
||||
|
||||
github
|
||||
: https://github.com/mahlon/ruby-mdbx
|
||||
|
||||
gitlab
|
||||
: https://gitlab.com/mahlon/ruby-mdbx/-/tree-master
|
||||
: https://gitlab.com/mahlon/ruby-mdbx
|
||||
|
||||
|
||||
docs
|
||||
: https://martini.nu/docs/ruby-mdbx
|
||||
#FIXME: ....... somewhere on martini
|
||||
sourcehut:
|
||||
: https://hg.sr.ht/~mahlon/ruby-mdbx
|
||||
|
||||
|
||||
## Description
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@ rmdbx_open_env( VALUE self )
|
|||
rb_raise( rmdbx_eDatabaseError, "mdbx_env_create: (%d) %s", rc, mdbx_strerror(rc) );
|
||||
|
||||
/* Set the maximum number of named databases for the environment. */
|
||||
// FIXME: potenially more env setups here? maxreaders, pagesize?
|
||||
mdbx_env_set_maxdbs( db->env, db->max_collections );
|
||||
|
||||
rc = mdbx_env_open( db->env, db->path, db->env_flags, db->mode );
|
||||
|
|
@ -184,18 +185,13 @@ rmdbx_clear( VALUE self )
|
|||
rmdbx_open_txn( self, MDBX_TXN_READWRITE );
|
||||
int rc = mdbx_drop( db->txn, db->dbi, true );
|
||||
|
||||
if ( rc != 0 )
|
||||
if ( rc != MDBX_SUCCESS )
|
||||
rb_raise( rmdbx_eDatabaseError, "mdbx_drop: (%d) %s", rc, mdbx_strerror(rc) );
|
||||
|
||||
mdbx_txn_commit( db->txn );
|
||||
|
||||
// Close the current handle, will be re-opened
|
||||
// on the next txn.
|
||||
//
|
||||
if ( db->dbi ) {
|
||||
mdbx_dbi_close( db->env, db->dbi );
|
||||
db->dbi = 0;
|
||||
}
|
||||
/* Refresh the environment handles. */
|
||||
rmdbx_open_env( self );
|
||||
|
||||
return Qnil;
|
||||
}
|
||||
|
|
@ -263,10 +259,12 @@ rmdbx_keys( VALUE self )
|
|||
rb_raise( rmdbx_eDatabaseError, "Unable to open cursor: (%d) %s", rc, mdbx_strerror(rc) );
|
||||
}
|
||||
|
||||
mdbx_cursor_get( db->cursor, &key, &data, MDBX_FIRST );
|
||||
rb_ary_push( rv, rb_str_new( key.iov_base, key.iov_len ) );
|
||||
while ( mdbx_cursor_get( db->cursor, &key, &data, MDBX_NEXT ) == 0 ) {
|
||||
rc = mdbx_cursor_get( db->cursor, &key, &data, MDBX_FIRST );
|
||||
if ( rc == MDBX_SUCCESS ) {
|
||||
rb_ary_push( rv, rb_str_new( key.iov_base, key.iov_len ) );
|
||||
while ( mdbx_cursor_get( db->cursor, &key, &data, MDBX_NEXT ) == 0 ) {
|
||||
rb_ary_push( rv, rb_str_new( key.iov_base, key.iov_len ) );
|
||||
}
|
||||
}
|
||||
|
||||
mdbx_cursor_close( db->cursor );
|
||||
|
|
@ -300,12 +298,10 @@ rmdbx_get_val( VALUE self, VALUE key )
|
|||
switch ( rc ) {
|
||||
case MDBX_SUCCESS:
|
||||
deserialize_proc = rb_iv_get( self, "@deserializer" );
|
||||
if ( ! NIL_P( deserialize_proc ) ) {
|
||||
return rb_funcall( deserialize_proc, rb_intern("call"), 1, rb_str_new_cstr(data.iov_base) );
|
||||
}
|
||||
else {
|
||||
return rb_str_new_cstr( data.iov_base );
|
||||
}
|
||||
VALUE rv = rb_str_new( data.iov_base, data.iov_len );
|
||||
if ( ! NIL_P( deserialize_proc ) )
|
||||
return rb_funcall( deserialize_proc, rb_intern("call"), 1, rv );
|
||||
return rv;
|
||||
|
||||
case MDBX_NOTFOUND:
|
||||
return Qnil;
|
||||
|
|
@ -494,12 +490,16 @@ rmdbx_init_database()
|
|||
{
|
||||
rmdbx_cDatabase = rb_define_class_under( rmdbx_mMDBX, "Database", rb_cData );
|
||||
|
||||
#ifdef FOR_RDOC
|
||||
rmdbx_mMDBX = rb_define_module( "MDBX" );
|
||||
#endif
|
||||
|
||||
rb_define_alloc_func( rmdbx_cDatabase, rmdbx_alloc );
|
||||
|
||||
rb_define_protected_method( rmdbx_cDatabase, "initialize", rmdbx_database_initialize, -1 );
|
||||
rb_define_method( rmdbx_cDatabase, "collection", rmdbx_set_subdb, -1 );
|
||||
rb_define_method( rmdbx_cDatabase, "close", rmdbx_close, 0 );
|
||||
rb_define_method( rmdbx_cDatabase, "open", rmdbx_open_env, 0 );
|
||||
rb_define_method( rmdbx_cDatabase, "reopen", rmdbx_open_env, 0 );
|
||||
rb_define_method( rmdbx_cDatabase, "closed?", rmdbx_closed_p, 0 );
|
||||
rb_define_method( rmdbx_cDatabase, "clear", rmdbx_clear, 0 );
|
||||
rb_define_method( rmdbx_cDatabase, "keys", rmdbx_keys, 0 );
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
VALUE rmdbx_mMDBX;
|
||||
VALUE rmdbx_eDatabaseError;
|
||||
VALUE rmdbx_eRollback;
|
||||
|
||||
/*
|
||||
* MDBX initialization
|
||||
|
|
@ -18,6 +19,7 @@ Init_mdbx_ext()
|
|||
rb_define_const( rmdbx_mMDBX, "LIBRARY_VERSION", version );
|
||||
|
||||
rmdbx_eDatabaseError = rb_define_class_under( rmdbx_mMDBX, "DatabaseError", rb_eRuntimeError );
|
||||
rmdbx_eRollback = rb_define_class_under( rmdbx_mMDBX, "Rollback", rb_eRuntimeError );
|
||||
|
||||
rmdbx_init_database();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
extern VALUE rmdbx_mMDBX;
|
||||
extern VALUE rmdbx_cDatabase;
|
||||
extern VALUE rmdbx_eDatabaseError;
|
||||
extern VALUE rmdbx_eRollback;
|
||||
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ module MDBX
|
|||
|
||||
# The version of this gem.
|
||||
#
|
||||
# Note: the MDBX library version can be found in
|
||||
# the 'LIBRARY_VERSION' constant.
|
||||
# Note: the MDBX library version this gem was built
|
||||
# against can be found in the 'LIBRARY_VERSION' constant.
|
||||
#
|
||||
VERSION = '0.0.1'
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ class MDBX::Database
|
|||
### db[ 'key' ] #=> value
|
||||
### end
|
||||
###
|
||||
### FIXME: options!
|
||||
###
|
||||
def self::open( *args, &block )
|
||||
db = new( *args )
|
||||
|
||||
|
|
@ -53,16 +55,14 @@ class MDBX::Database
|
|||
attr_accessor :deserializer
|
||||
|
||||
|
||||
# Allow for some common nomenclature.
|
||||
alias_method :namespace, :collection
|
||||
alias_method :reopen, :open
|
||||
|
||||
|
||||
### Switch to the top-level collection.
|
||||
###
|
||||
def main
|
||||
return self.collection( nil )
|
||||
end
|
||||
|
||||
# Allow for some common nomenclature.
|
||||
alias_method :namespace, :collection
|
||||
|
||||
end # class MDBX::Database
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue