Cassandra-Client
view release on metacpan or search on metacpan
* corner case. If you need this, please contact the author! */
if (UNLIKELY(row_count > 1000 && !col_count))
croak("Refusing to decode %d rows without known column information", row_count);
for (i = 0; i < row_count; i++) {
if (use_hashes) {
HV *this_row = newHV();
av_push(RETVAL, newRV_noinc((SV*)this_row));
for (j = 0; j < col_count; j++) {
SV *decoded = newSV(0);
hv_store_ent(this_row, columns[j].name, decoded, columns[j].name_hash);
decode_cell(aTHX_ ptr, size, &pos, &columns[j].type, decoded);
}
} else {
AV *this_row = newAV();
av_push(RETVAL, newRV_noinc((SV*)this_row));
for (j = 0; j < col_count; j++) {
SV *decoded = newSV(0);
av_push(this_row, decoded);
decode_cell(aTHX_ ptr, size, &pos, &columns[j].type, decoded);
}
}
}
OUTPUT:
RETVAL
SV*
encode(self, row)
Cassandra::Client::RowMeta *self
croak("decode_list: num_elements < 0");
the_list = newAV();
the_rv = newRV_noinc((SV*)the_list);
sv_setsv(output, the_rv);
SvREFCNT_dec(the_rv);
pos = 4;
for (i = 0; i < num_elements; i++) {
SV *decoded = newSV(0);
av_push(the_list, decoded);
decode_cell(aTHX_ input, len, &pos, inner_type, decoded);
}
}
void decode_uuid(pTHX_ unsigned char *input, STRLEN len, struct cc_type *type, SV *output)
{
if (UNLIKELY(len != 16))
croak("decode_uuid: len != 16");
sv_setpvf(output, "%.2x%.2x%.2x%.2x-%.2x%.2x-%.2x%.2x-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x",
input[0], input[1], input[2], input[3],
sv_setsv(output, the_rv);
SvREFCNT_dec(the_rv);
tuple = type->tuple;
assert(tuple);
pos = 0;
for (i = 0; i < tuple->field_count; i++) {
struct cc_type *type = &tuple->fields[i];
SV *decoded = newSV(0);
av_push(the_tuple, decoded);
decode_cell(aTHX_ input, len, &pos, type, decoded);
}
}
t/03-types.t view on Meta::CPAN
my $metadata= pack_metadata(4, 1, $rowspec);
my ($rowmeta)= unpack_metadata(4, 1, $metadata);
ok($rowmeta) or diag('No rowmeta');
my $encoded= $rowmeta->encode($row);
ok(length $encoded) or diag('Encoding failed');
HACK: { # Turns the encoded parameter list into something our decoders understand
substr($encoded, 0, 2, '');
$encoded= pack_int(1).$encoded;
}
my $decoded= $rowmeta->decode($encoded, 0);
is_deeply($decoded->[0], $expected);
1;
} or do {
my $error= $@ || '??';
ok(0) or diag($error);
};
}
sub check_simple {
my ($coltype, $row, $expected)= @_;
( run in 0.479 second using v1.01-cache-2.11-cpan-26ccb49234f )