mirror of https://github.com/vitalif/sophia-perl
Remove duplicated code
parent
539473c434
commit
2eed7ebcb8
41
Sophia.pm
41
Sophia.pm
|
@ -5,16 +5,9 @@ use strict;
|
|||
use vars qw($AUTOLOAD $VERSION $ABSTRACT @ISA @EXPORT);
|
||||
|
||||
BEGIN {
|
||||
$VERSION = 0.8;
|
||||
$VERSION = 1.2;
|
||||
$ABSTRACT = "Sophia is a modern embeddable key-value database designed for a high load environment (XS for Sophia)";
|
||||
|
||||
@ISA = qw(Exporter DynaLoader);
|
||||
@EXPORT = qw(
|
||||
SPDIR SPALLOC SPCMP SPPAGE SPGC SPGCF
|
||||
SPGROW SPMERGE SPMERGEWM SPMERGEFORCE SPVERSION
|
||||
SPO_RDONLY SPO_RDWR SPO_CREAT SPO_SYNC
|
||||
SPGT SPGTE SPLT SPLTE
|
||||
);
|
||||
@ISA = qw(DynaLoader);
|
||||
};
|
||||
|
||||
bootstrap Database::Sophia $VERSION;
|
||||
|
@ -22,6 +15,36 @@ bootstrap Database::Sophia $VERSION;
|
|||
use DynaLoader ();
|
||||
use Exporter ();
|
||||
|
||||
package Database::Sophia::Txn;
|
||||
|
||||
sub get
|
||||
{
|
||||
my ($self, $db, $key) = @_;
|
||||
$db->get($key, $self);
|
||||
}
|
||||
|
||||
sub delete
|
||||
{
|
||||
my ($self, $db, $key) = @_;
|
||||
$db->delete($key, $self);
|
||||
}
|
||||
|
||||
sub set
|
||||
{
|
||||
my ($self, $db, $key, $value) = @_;
|
||||
$db->set($key, $value, $self);
|
||||
}
|
||||
|
||||
package Database::Sophia::Snapshot;
|
||||
|
||||
*get = *Database::Sophia::Txn::get;
|
||||
|
||||
sub cursor
|
||||
{
|
||||
my ($self, $db, $key, $order) = @_;
|
||||
$db->cursor($key, $order, $self);
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
||||
|
|
166
Sophia.xs
166
Sophia.xs
|
@ -257,9 +257,10 @@ open(db)
|
|||
RETVAL
|
||||
|
||||
SV*
|
||||
get(db, key)
|
||||
get(db, key, txn = &PL_sv_undef)
|
||||
Database::Sophia::DB db;
|
||||
SV *key;
|
||||
SV *txn;
|
||||
|
||||
CODE:
|
||||
int err;
|
||||
|
@ -274,7 +275,7 @@ get(db, key)
|
|||
if (obj)
|
||||
{
|
||||
sp_set(obj, "key", key_c, len_k);
|
||||
ret = sp_get(db->ptr, obj);
|
||||
ret = sp_get(SvOK(txn) ? (INT2PTR(sophia_txn_t*, (SvIV((SV*)SvRV(txn)))))->ptr : db->ptr, obj);
|
||||
if (!err)
|
||||
{
|
||||
value = sp_get(ret, "value", &size);
|
||||
|
@ -287,9 +288,10 @@ get(db, key)
|
|||
RETVAL
|
||||
|
||||
SV*
|
||||
delete(db, key)
|
||||
delete(db, key, txn_or_snapshot = &PL_sv_undef)
|
||||
Database::Sophia::DB db;
|
||||
SV *key;
|
||||
SV *txn_or_snapshot;
|
||||
|
||||
CODE:
|
||||
int err;
|
||||
|
@ -302,7 +304,7 @@ delete(db, key)
|
|||
if (obj)
|
||||
{
|
||||
sp_set(obj, "key", key_c, len_k);
|
||||
err = sp_delete(db->ptr, obj);
|
||||
err = sp_delete(SvOK(txn_or_snapshot) ? (INT2PTR(sophia_txn_t*, (SvIV((SV*)SvRV(txn_or_snapshot)))))->ptr : db->ptr, obj);
|
||||
sp_destroy(obj);
|
||||
}
|
||||
RETVAL = newSViv(err);
|
||||
|
@ -310,10 +312,11 @@ delete(db, key)
|
|||
RETVAL
|
||||
|
||||
SV*
|
||||
set(db, key, value)
|
||||
set(db, key, value, txn_or_snapshot = &PL_sv_undef)
|
||||
Database::Sophia::DB db;
|
||||
SV *key;
|
||||
SV *value;
|
||||
SV *txn_or_snapshot;
|
||||
|
||||
CODE:
|
||||
int err;
|
||||
|
@ -329,7 +332,7 @@ set(db, key, value)
|
|||
{
|
||||
sp_set(obj, "key", key_c, len_k);
|
||||
sp_set(obj, "value", value_c, len_v);
|
||||
err = sp_set(db->ptr, obj);
|
||||
err = sp_set(SvOK(txn_or_snapshot) ? (INT2PTR(sophia_txn_t*, (SvIV((SV*)SvRV(txn_or_snapshot)))))->ptr : db->ptr, obj);
|
||||
sp_destroy(obj);
|
||||
}
|
||||
RETVAL = newSViv(err);
|
||||
|
@ -337,10 +340,11 @@ set(db, key, value)
|
|||
RETVAL
|
||||
|
||||
Database::Sophia::Cursor
|
||||
cursor(db, key, order)
|
||||
cursor(db, key, order, snapshot = &PL_sv_undef)
|
||||
Database::Sophia::DB db;
|
||||
SV *key;
|
||||
SV *order;
|
||||
SV *snapshot;
|
||||
|
||||
CODE:
|
||||
void *c;
|
||||
|
@ -355,7 +359,7 @@ cursor(db, key, order)
|
|||
{
|
||||
sp_set(obj, "key", key_c, len_k);
|
||||
sp_set(obj, "order", order_c, len_o);
|
||||
c = sp_cursor(db->ptr, obj);
|
||||
c = sp_cursor(SvOK(snapshot) ? (INT2PTR(sophia_snapshot_t*, (SvIV((SV*)SvRV(snapshot)))))->ptr : db->ptr, obj);
|
||||
sp_destroy(obj);
|
||||
if (c)
|
||||
{
|
||||
|
@ -392,89 +396,6 @@ commit(txn)
|
|||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
SV*
|
||||
get(txn, db, key)
|
||||
Database::Sophia::Txn txn;
|
||||
Database::Sophia::DB db;
|
||||
SV *key;
|
||||
|
||||
CODE:
|
||||
int err;
|
||||
STRLEN len_k = 0;
|
||||
char *key_c = SvPV(key, len_k);
|
||||
void *value;
|
||||
size_t size;
|
||||
|
||||
RETVAL = &PL_sv_undef;
|
||||
void *obj = sp_object(db->ptr);
|
||||
void *ret;
|
||||
if (obj)
|
||||
{
|
||||
sp_set(obj, "key", key_c, len_k);
|
||||
ret = sp_get(txn->ptr, obj);
|
||||
if (!err)
|
||||
{
|
||||
value = sp_get(ret, "value", &size);
|
||||
RETVAL = newSVpv(value, size);
|
||||
sp_destroy(ret);
|
||||
}
|
||||
sp_destroy(obj);
|
||||
}
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
SV*
|
||||
delete(txn, db, key)
|
||||
Database::Sophia::Txn txn;
|
||||
Database::Sophia::DB db;
|
||||
SV *key;
|
||||
|
||||
CODE:
|
||||
int err;
|
||||
STRLEN len_k = 0;
|
||||
char *key_c = SvPV(key, len_k);
|
||||
|
||||
RETVAL = &PL_sv_undef;
|
||||
void *obj = sp_object(db->ptr);
|
||||
void *ret;
|
||||
if (obj)
|
||||
{
|
||||
sp_set(obj, "key", key_c, len_k);
|
||||
err = sp_delete(txn->ptr, obj);
|
||||
sp_destroy(obj);
|
||||
}
|
||||
RETVAL = newSViv(err);
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
SV*
|
||||
set(txn, db, key, value)
|
||||
Database::Sophia::Txn txn;
|
||||
Database::Sophia::DB db;
|
||||
SV *key;
|
||||
SV *value;
|
||||
|
||||
CODE:
|
||||
int err;
|
||||
STRLEN len_k = 0;
|
||||
char *key_c = SvPV(key, len_k);
|
||||
STRLEN len_v = 0;
|
||||
char *value_c = SvPV(value, len_v);
|
||||
|
||||
RETVAL = &PL_sv_undef;
|
||||
void *obj = sp_object(db->ptr);
|
||||
void *ret;
|
||||
if (obj)
|
||||
{
|
||||
sp_set(obj, "key", key_c, len_k);
|
||||
sp_set(obj, "value", value_c, len_v);
|
||||
err = sp_set(txn->ptr, obj);
|
||||
sp_destroy(obj);
|
||||
}
|
||||
RETVAL = newSViv(err);
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
void
|
||||
DESTROY(ptr)
|
||||
Database::Sophia::Txn ptr;
|
||||
|
@ -500,69 +421,6 @@ drop(snapshot)
|
|||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
SV*
|
||||
get(snapshot, db, key)
|
||||
Database::Sophia::Snapshot snapshot;
|
||||
Database::Sophia::DB db;
|
||||
SV *key;
|
||||
|
||||
CODE:
|
||||
int err;
|
||||
STRLEN len_k = 0;
|
||||
char *key_c = SvPV(key, len_k);
|
||||
void *value;
|
||||
size_t size;
|
||||
|
||||
RETVAL = &PL_sv_undef;
|
||||
void *obj = sp_object(db->ptr);
|
||||
void *ret;
|
||||
if (obj)
|
||||
{
|
||||
sp_set(obj, "key", key_c, len_k);
|
||||
ret = sp_get(snapshot->ptr, obj);
|
||||
if (!err)
|
||||
{
|
||||
value = sp_get(ret, "value", &size);
|
||||
RETVAL = newSVpv(value, size);
|
||||
sp_destroy(ret);
|
||||
}
|
||||
sp_destroy(obj);
|
||||
}
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
Database::Sophia::Cursor
|
||||
cursor(snapshot, db, key, order)
|
||||
Database::Sophia::Snapshot snapshot;
|
||||
Database::Sophia::DB db;
|
||||
SV *key;
|
||||
SV *order;
|
||||
|
||||
CODE:
|
||||
void *c;
|
||||
STRLEN len_k = 0;
|
||||
char *key_c = SvPV(key, len_k);
|
||||
STRLEN len_o = 0;
|
||||
char *order_c = SvPV(order, len_o);
|
||||
void *obj = sp_object(db->ptr);
|
||||
|
||||
RETVAL = (void*)&PL_sv_undef;
|
||||
if (obj)
|
||||
{
|
||||
sp_set(obj, "key", key_c, len_k);
|
||||
sp_set(obj, "order", order_c, len_o);
|
||||
c = sp_cursor(snapshot->ptr, obj);
|
||||
sp_destroy(obj);
|
||||
if (c)
|
||||
{
|
||||
sophia_cursor_t *cur = malloc(sizeof(sophia_cursor_t));
|
||||
cur->ptr = c;
|
||||
RETVAL = cur;
|
||||
}
|
||||
}
|
||||
OUTPUT:
|
||||
RETVAL
|
||||
|
||||
void
|
||||
DESTROY(ptr)
|
||||
Database::Sophia::Snapshot ptr;
|
||||
|
|
Loading…
Reference in New Issue