Способ получить результат в виде json объекта
Сейчас запрос в базу возвращается в IValue. Есть ли способ получить ответ в виде json представления?
column1 | column2 | column3
value1 | value2 | value3
{
"column1": "value1",
"column2": "value2",
"column3": "value3"
}
TypedData.createNativeObjects делает то, что нужно.
Всё таки этот метод не очень подходит. JsonDocument остаётся строкой. А Interval превращается в страшный {"low":-790388736,"high":140,"unsigned":false}.
Как преобразовать Interval в нормальный тип? Подойдёт ISO 8601
.toNumber() помог
В конечном итоге код выглядит так себе:
const durationMcs = typeof offer.duration === 'number' ? offer.duration : offer.duration.toNumber()
Может имеет смысл всё же возвращать Interval строкой в формате ISO 8601?
@vladkolotvin Interval в ydb находится в формате Signed 64-bit integer, как указано в документации, а для репрезентации такого числа используется библиотека long, как раз таки {"low":-790388736,"high":140,"unsigned":false} - это представление числа в формате библиотеки long.
Возможно, необходимо перейти на нативный для node.js BigInt, но это поломает обратную совместимость для тех, кто уже использует возможности библиотеки long. К тому же, эта библиотека используется не только для Interval, но и для Decimal, uint64, int64, uuid.
Если же мы действительно хотим использовать ISO8601, то это возможно, но тогда для тех применений, где необходимо число, нужно будет производить дополнительные вычисления (также нужно будет производить дополнительные вычисления при парсинге). А если нужно получить в формате ISO8601, то это можно сделать так: select CAST(Interval("P1DT2H3M4.567890S") AS Text).
Так или иначе, можно обсудить возможные конкретные изменения в API.