class ZOOM::ResultSet
Public Instance Methods
key: either an integer, a range or an interval of 2 integers.
Retrieves one or many records from the result set, according to the given key.
# Gets the first record. rset[0] # Gets the first, second and third records. rset[1..3] # Gets three records starting from the second one. rset[2, 3]
Returns: one or many references to ZOOM::Record
objects.
static VALUE rbz_resultset_index (int argc, VALUE *argv, VALUE self) { ZOOM_record *records; ZOOM_record record; VALUE ary; size_t begin; size_t count; size_t i; if (argc == 1) { VALUE arg = argv [0]; if (TYPE (arg) == T_FIXNUM || TYPE (arg) == T_BIGNUM) { record = ZOOM_resultset_record (rbz_resultset_get (self), NUM2LONG (arg)); return record != NULL ? rbz_record_make (ZOOM_record_clone (record)) : Qnil; } if (CLASS_OF (arg) == rb_cRange) { begin = NUM2LONG (rb_funcall (arg, rb_intern ("begin"), 0)); count = NUM2LONG (rb_funcall (arg, rb_intern ("end"), 0)); count -= begin; } else rb_raise (rb_eArgError, "Invalid argument of type %s (not Numeric or Range)", rb_class2name (CLASS_OF (arg))); } else { VALUE rb_begin; VALUE rb_count; rb_scan_args (argc, argv, "2", &rb_begin, &rb_count); begin = NUM2LONG (rb_begin); count = NUM2LONG (rb_count); } ary = rb_ary_new (); if (count == 0) return ary; /* Allocate array */ records = ALLOC_N (ZOOM_record, count); /* Download records in batches */ ZOOM_resultset_records (rbz_resultset_get (self), records, begin, count); /* Test the first record in the set. If null, then fall back. If valid, * generate the ruby array. */ if (records[0]!=NULL) { for (i = 0; i < count; i++) /* We don't want any null records -- if there is on in the resultset, * ignore it. */ if (records[i]!=NULL) rb_ary_push (ary, rbz_record_make (ZOOM_record_clone (records [i]))); } else { /* This is our fallback function * It exists for those anomalies where the server * will not respect the batch request and will return just * a null array (per change request 36 where Laurent Sansonetti notes * Retrieves the record one by one using ZOOM_resultset_record instead * of getting them all in once with ZOOM_resultset_records (for a strange * reason sometimes the resultset was not empty but ZOOM_resultset_records * used to return empty records). */ for (i = 0; i < count; i++) { record = ZOOM_resultset_record (rbz_resultset_get (self), begin + i); /* Ignore null records */ if (record != NULL) rb_ary_push (ary, rbz_record_make (ZOOM_record_clone (record))); } } return ary; }
Parses the records inside the result set and call the given block for each record, passing a reference to a ZOOM::Record
object as parameter.
Returns: self.
static VALUE rbz_resultset_each_record (VALUE self) { rb_ary_each (rbz_resultset_records (self)); return self; }
key: the name of the option, as a string.
Gets the value of a result set’s option.
Returns: the value of the given option, as a string, integer or boolean.
static VALUE rbz_resultset_get_option (VALUE self, VALUE key) { const char *value; value = ZOOM_resultset_option_get (rbz_resultset_get (self), RVAL2CSTR (key)); return zoom_option_value_to_ruby_value (value); }
Lists the records inside the result set.
Returns: an array of ZOOM::Record
objects.
static VALUE rbz_resultset_records (VALUE self) { VALUE argv [2]; argv [0] = INT2FIX (0); argv [1] = rbz_resultset_size (self); return rbz_resultset_index (2, argv, self); }
key: the name of the option, as a string.
value: the value of this option (as a string, integer or boolean).
Sets an option on the result set.
Returns: self.
static VALUE rbz_resultset_set_option (VALUE self, VALUE key, VALUE val) { ZOOM_resultset_option_set (rbz_resultset_get (self), RVAL2CSTR (key), RVAL2CSTR (rb_obj_as_string (val))); return self; }
Returns: the number of hits.
static VALUE rbz_resultset_size (VALUE self) { return INT2NUM (ZOOM_resultset_size (rbz_resultset_get (self))); }