AnyMongo
view release on metacpan or search on metacpan
AnyMongo.xs view on Meta::CPAN
_build_value (self, c_str)
SV *self
const char *c_str;
PREINIT:
char id[12], oid[25];
CODE:
if (c_str && strlen(c_str) == 24) {
memcpy(oid, c_str, 25);
}
else {
perl_mongo_make_id(id);
perl_mongo_make_oid(id, oid);
}
RETVAL = newSVpvn(oid, 24);
OUTPUT:
RETVAL
MODULE = AnyMongo PACKAGE = AnyMongo::MongoSupport
PROTOTYPES: DISABLE
SV*
build_query_message(request_id,ns, opts, skip, limit, query, fields = 0)
SV *request_id
char *ns
int opts
int skip
int limit
SV *query
SV *fields
PREINIT:
buffer buf;
mongo_msg_header header;
CODE:
CREATE_BUF(INITIAL_BUF_SIZE);
CREATE_HEADER_WITH_OPTS(buf, ns, OP_QUERY, opts);
perl_mongo_serialize_int(&buf, skip);
perl_mongo_serialize_int(&buf, limit);
perl_mongo_sv_to_bson(&buf, query, NO_PREP);
if (fields && SvROK(fields)) {
perl_mongo_sv_to_bson(&buf, fields, NO_PREP);
}
perl_mongo_serialize_size(buf.start, &buf);
RETVAL = newSVpvn(buf.start, buf.pos-buf.start);
Safefree(buf.start);
OUTPUT:
RETVAL
void
build_insert_message(request_id,ns, a)
SV *request_id
char *ns
AV *a
PREINIT:
buffer buf;
mongo_msg_header header;
int i;
AV *ids = newAV();
PPCODE:
CREATE_BUF(INITIAL_BUF_SIZE);
CREATE_HEADER(buf, ns, OP_INSERT);
for (i=0; i<=av_len(a); i++) {
int start = buf.pos-buf.start;
SV **obj = av_fetch(a, i, 0);
perl_mongo_sv_to_bson(&buf, *obj, ids);
if (buf.pos - (buf.start + start) > MAX_OBJ_SIZE) {
croak("insert is larger than 4 MB: %d bytes", buf.pos - (buf.start + start));
}
}
perl_mongo_serialize_size(buf.start, &buf);
XPUSHs(sv_2mortal(newSVpvn(buf.start, buf.pos-buf.start)));
XPUSHs(sv_2mortal(newRV_noinc((SV*)ids)));
Safefree(buf.start);
SV*
build_remove_message(request_id,ns, criteria, flags)
SV *request_id;
char *ns
SV *criteria
int flags
PREINIT:
buffer buf;
mongo_msg_header header;
CODE:
CREATE_BUF(INITIAL_BUF_SIZE);
CREATE_HEADER(buf, ns, OP_DELETE);
perl_mongo_serialize_int(&buf, flags);
perl_mongo_sv_to_bson(&buf, criteria, NO_PREP);
perl_mongo_serialize_size(buf.start, &buf);
RETVAL = newSVpvn(buf.start, buf.pos-buf.start);
Safefree(buf.start);
OUTPUT:
RETVAL
SV*
build_update_message(request_id,ns, criteria, obj, flags)
SV *request_id;
char *ns
SV *criteria
SV *obj
int flags
PREINIT:
buffer buf;
mongo_msg_header header;
CODE:
CREATE_BUF(INITIAL_BUF_SIZE);
CREATE_HEADER(buf, ns, OP_UPDATE);
perl_mongo_serialize_int(&buf, flags);
perl_mongo_sv_to_bson(&buf, criteria, NO_PREP);
perl_mongo_sv_to_bson(&buf, obj, NO_PREP);
perl_mongo_serialize_size(buf.start, &buf);
RETVAL = newSVpvn(buf.start, buf.pos-buf.start);
Safefree(buf.start);
( run in 1.177 second using v1.01-cache-2.11-cpan-71847e10f99 )