Skip to content

Commit ab49bf1

Browse files
committed
UDT result
Adds support for converting udt responses to a JavaScript object.
1 parent ef0dd0d commit ab49bf1

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

lib/types/results-wrapper.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const Tuple = require("./tuple");
1919
function getCqlObject(field) {
2020
if (field == null) return null;
2121
let type = field.getType();
22-
let res, fields;
22+
let res, fields, names;
2323
switch (type) {
2424
case rust.CqlType.Ascii:
2525
return field.getAscii();
@@ -49,6 +49,13 @@ function getCqlObject(field) {
4949
for (let i = 0; i < fields.length; i++)
5050
res.push(getCqlObject(fields[i]));
5151
return res;
52+
case rust.CqlType.UserDefinedType:
53+
fields = field.getUdtValues();
54+
names = field.getUdtNames();
55+
res = {};
56+
for (let i = 0; i < fields.length; i++)
57+
res[names[i]] = getCqlObject(fields[i]);
58+
return res;
5259
case rust.CqlType.Text:
5360
return field.getText();
5461
case rust.CqlType.Timestamp:

src/result.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,25 @@ impl CqlValueWrapper {
395395
}
396396
}
397397

398+
#[napi]
399+
pub fn get_udt_values(&self) -> napi::Result<Vec<Option<CqlValueWrapper>>> {
400+
match self.inner.as_udt() {
401+
Some(r) => Ok(r
402+
.iter()
403+
.map(|f| f.1.clone().map(|f| CqlValueWrapper { inner: f }))
404+
.collect()),
405+
None => Err(Self::generic_error("user_defined_type")),
406+
}
407+
}
408+
409+
#[napi]
410+
pub fn get_udt_names(&self) -> napi::Result<Vec<String>> {
411+
match self.inner.as_udt() {
412+
Some(r) => Ok(r.iter().map(|f| f.0.clone()).collect()),
413+
None => Err(Self::generic_error("user_defined_type")),
414+
}
415+
}
416+
398417
#[napi]
399418
pub fn get_small_int(&self) -> napi::Result<i16> {
400419
match self.inner.as_smallint() {

0 commit comments

Comments
 (0)