From 36732d7bb52a54c1e49eb925f0b3fc00e2fbc858 Mon Sep 17 00:00:00 2001 From: Krmjn09 Date: Mon, 16 Jun 2025 18:45:17 +0530 Subject: [PATCH 1/6] column descriptor deserialisation logic added --- demo/node/rntuple_test.js | 17 +++++++++++++ modules/rntuple.mjs | 51 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/demo/node/rntuple_test.js b/demo/node/rntuple_test.js index 01993a23d..a6754eb6e 100644 --- a/demo/node/rntuple_test.js +++ b/demo/node/rntuple_test.js @@ -43,3 +43,20 @@ else { console.log(`OK: Field ${i}: ${field.fieldName} (${field.typeName})`); } } + + +// Column Check + +if (!rntuple.builder?.columnDescriptors?.length) + console.error('FAILURE: No columns deserialized'); +else { + console.log(`OK: ${rntuple.builder.columnDescriptors.length} column(s) deserialized`); + for (let i = 0; i < rntuple.builder.columnDescriptors.length; ++i) { + const column = rntuple.builder.columnDescriptors[i]; + if (!column.fieldId) + console.error(`FAILURE: Column ${i} is missing fieldId`); + else + console.log(`OK: Column ${i} fieldId: ${column.fieldId} `); + } +} + diff --git a/modules/rntuple.mjs b/modules/rntuple.mjs index abf87a004..783abba40 100644 --- a/modules/rntuple.mjs +++ b/modules/rntuple.mjs @@ -127,6 +127,9 @@ deserializeHeader(header_blob) { // List frame: list of field record frames this._readFieldDescriptors(reader); + + // List frame: list of column record frames + this._readColumnDescriptors(reader); } deserializeFooter(footer_blob) { @@ -218,6 +221,54 @@ fieldListIsList = fieldListSize < 0; } this.fieldDescriptors = fieldDescriptors; } +_readColumnDescriptors(reader) { + this.columnListSize = reader.readS64(); // signed 64-bit + const columnListIsList = this.columnListSize < 0; + if (!columnListIsList) + throw new Error('Column list frame is not a list frame, which is required.'); + const columnListCount = reader.readU32(); // number of column entries + console.log('Column List Count:', columnListCount); + const columnDescriptors = []; + for (let i = 0; i < columnListCount; ++i) { + const columnRecordSize = reader.readS64(), + coltype = reader.readU16(), + bitsOnStrorage = reader.readU16(), + fieldId = reader.readU32(), + flags = reader.readU16(), + representationIndex = reader.readU16(); + + let firstElementIndex = null, minValue = null, maxValue = null; + if (flags & 0x1) firstElementIndex = reader.readU64(); + if (flags & 0x2){ + minValue = reader.readF64(); + maxValue = reader.readF64(); + } + + const column = { + coltype, + bitsOnStrorage, + fieldId, + flags, + representationIndex, + firstElementIndex, + minValue, + maxValue + }; + + column.isDeferred = function () { + return (this.flags & 0x01) !== 0; + }; + + column.isSuppressed = function () { + return this.firstElementIndex !== null && this.firstElementIndex < 0; + }; + + columnDescriptors.push(column); + + } + this.columnDescriptors = columnDescriptors; + +} } From 1b4d862add951f79a55ce054ec30e50109e73588 Mon Sep 17 00:00:00 2001 From: Krmjn09 Date: Mon, 16 Jun 2025 18:54:56 +0530 Subject: [PATCH 2/6] removing eslint error --- demo/node/rntuple_test.js | 1 - modules/rntuple.mjs | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/node/rntuple_test.js b/demo/node/rntuple_test.js index a6754eb6e..77d451d47 100644 --- a/demo/node/rntuple_test.js +++ b/demo/node/rntuple_test.js @@ -44,7 +44,6 @@ else { } } - // Column Check if (!rntuple.builder?.columnDescriptors?.length) diff --git a/modules/rntuple.mjs b/modules/rntuple.mjs index 783abba40..b213892b5 100644 --- a/modules/rntuple.mjs +++ b/modules/rntuple.mjs @@ -236,7 +236,7 @@ _readColumnDescriptors(reader) { fieldId = reader.readU32(), flags = reader.readU16(), representationIndex = reader.readU16(); - + console.log(`Column Record Size: ${columnRecordSize}`); let firstElementIndex = null, minValue = null, maxValue = null; if (flags & 0x1) firstElementIndex = reader.readU64(); if (flags & 0x2){ @@ -244,6 +244,7 @@ _readColumnDescriptors(reader) { maxValue = reader.readF64(); } + const column = { coltype, bitsOnStrorage, From 68596a5649cef8c1d71f37f6ccc99b55bfc54bdd Mon Sep 17 00:00:00 2001 From: Krmjn09 Date: Mon, 16 Jun 2025 19:10:08 +0530 Subject: [PATCH 3/6] removed estlint warnings --- modules/rntuple.mjs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/modules/rntuple.mjs b/modules/rntuple.mjs index b213892b5..4998b64d0 100644 --- a/modules/rntuple.mjs +++ b/modules/rntuple.mjs @@ -221,6 +221,7 @@ fieldListIsList = fieldListSize < 0; } this.fieldDescriptors = fieldDescriptors; } + _readColumnDescriptors(reader) { this.columnListSize = reader.readS64(); // signed 64-bit const columnListIsList = this.columnListSize < 0; @@ -230,7 +231,7 @@ _readColumnDescriptors(reader) { console.log('Column List Count:', columnListCount); const columnDescriptors = []; for (let i = 0; i < columnListCount; ++i) { - const columnRecordSize = reader.readS64(), + const columnRecordSize = reader.readS64(), coltype = reader.readU16(), bitsOnStrorage = reader.readU16(), fieldId = reader.readU32(), @@ -255,20 +256,16 @@ _readColumnDescriptors(reader) { minValue, maxValue }; - - column.isDeferred = function () { + column.isDeferred = function() { return (this.flags & 0x01) !== 0; }; - - column.isSuppressed = function () { + column.isSuppressed = function() { return this.firstElementIndex !== null && this.firstElementIndex < 0; }; columnDescriptors.push(column); - } this.columnDescriptors = columnDescriptors; - } } From 4b3331bc7fa0cbb2d8701d76d5da8ab44d53db60 Mon Sep 17 00:00:00 2001 From: Kriti Mahajan <134840866+Krmjn09@users.noreply.github.com> Date: Mon, 16 Jun 2025 19:17:32 +0530 Subject: [PATCH 4/6] Update modules/rntuple.mjs Co-authored-by: Silverweed <7806878+silverweed@users.noreply.github.com> --- modules/rntuple.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/rntuple.mjs b/modules/rntuple.mjs index 4998b64d0..c92a37be0 100644 --- a/modules/rntuple.mjs +++ b/modules/rntuple.mjs @@ -233,7 +233,7 @@ _readColumnDescriptors(reader) { for (let i = 0; i < columnListCount; ++i) { const columnRecordSize = reader.readS64(), coltype = reader.readU16(), - bitsOnStrorage = reader.readU16(), + bitsOnStorage = reader.readU16(), fieldId = reader.readU32(), flags = reader.readU16(), representationIndex = reader.readU16(); From 386261f6c992f232465a49751e528cec3fe6b91b Mon Sep 17 00:00:00 2001 From: Kriti Mahajan <134840866+Krmjn09@users.noreply.github.com> Date: Mon, 16 Jun 2025 19:22:12 +0530 Subject: [PATCH 5/6] Update rntuple.mjs --- modules/rntuple.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/rntuple.mjs b/modules/rntuple.mjs index c92a37be0..f94ab719a 100644 --- a/modules/rntuple.mjs +++ b/modules/rntuple.mjs @@ -248,7 +248,7 @@ _readColumnDescriptors(reader) { const column = { coltype, - bitsOnStrorage, + bitsOnStorage, fieldId, flags, representationIndex, From 30dbd9ab1b54e8ecda268c3c95155a338cb6ef2d Mon Sep 17 00:00:00 2001 From: Krmjn09 Date: Mon, 16 Jun 2025 19:30:17 +0530 Subject: [PATCH 6/6] updated with local variable --- modules/rntuple.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/rntuple.mjs b/modules/rntuple.mjs index f94ab719a..5492b0d2e 100644 --- a/modules/rntuple.mjs +++ b/modules/rntuple.mjs @@ -223,8 +223,8 @@ fieldListIsList = fieldListSize < 0; } _readColumnDescriptors(reader) { - this.columnListSize = reader.readS64(); // signed 64-bit - const columnListIsList = this.columnListSize < 0; + const columnListSize = reader.readS64(), + columnListIsList = columnListSize < 0; if (!columnListIsList) throw new Error('Column list frame is not a list frame, which is required.'); const columnListCount = reader.readU32(); // number of column entries