Skip to content

Commit 42d1f76

Browse files
tobiasstrebitzeradsharma
authored andcommitted
Implement JSON data type
1 parent 40ee8e0 commit 42d1f76

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

src_cpp/node_util.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,15 @@ Napi::Value Util::ConvertToNapiObject(const Value& value, Napi::Env env) {
198198
auto valString = value.toString();
199199
return Napi::String::New(env, valString).ToNumber();
200200
}
201+
case LogicalTypeID::JSON: {
202+
auto valString = value.getValue<std::string>();
203+
auto global = env.Global();
204+
auto jsonObj = global.Get("JSON").As<Napi::Object>();
205+
auto parseFunc = jsonObj.Get("parse").As<Napi::Function>();
206+
auto jsonString = Napi::String::New(env, valString);
207+
auto result = parseFunc.Call(global, {jsonString});
208+
return result;
209+
}
201210
default:
202211
throw Exception("Unsupported type: " + dataType.toString());
203212
}

test/test_data_type.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,3 +544,20 @@ describe("DECIMAL", function () {
544544
);
545545
});
546546
});
547+
548+
describe("JSON", function () {
549+
it("should convert JSON type", async function () {
550+
await conn.query("INSTALL JSON");
551+
await conn.query("LOAD EXTENSION JSON");
552+
const queryResult = await conn.query("RETURN json_object('level', 1, 'ms', 32, 'flags', json_array(0, 1, 3)) AS data;");
553+
const result = await queryResult.getAll();
554+
assert.equal(result.length, 1);
555+
assert.equal(Object.keys(result[0]).length, 1);
556+
assert.isTrue("data" in result[0]);
557+
assert.equal(typeof result[0]["data"], "object");
558+
assert.equal(result[0]["data"]["level"], 1);
559+
assert.equal(result[0]["data"]["ms"], 32);
560+
assert.isTrue(Array.isArray(result[0]["data"]["flags"]));
561+
assert.deepEqual(result[0]["data"]["flags"], [0, 1, 3]);
562+
});
563+
});

0 commit comments

Comments
 (0)