From a56420de2fd11a3141bb62d9b6cc1e450f362ca8 Mon Sep 17 00:00:00 2001 From: Kenny Daniel Date: Fri, 24 May 2024 15:06:46 -0700 Subject: [PATCH] Parse metadata TimeUnit --- src/metadata.js | 14 ++++++++++++-- src/types.d.ts | 2 +- test/files/duckdb5533.metadata.json | 4 +--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/metadata.js b/src/metadata.js index 017fd59..fa26488 100644 --- a/src/metadata.js +++ b/src/metadata.js @@ -214,12 +214,12 @@ function logicalType(logicalType) { if (logicalType?.field_7) return { type: 'TIME', isAdjustedToUTC: logicalType.field_7.field_1, - unit: logicalType.field_7.field_2, + unit: timeUnit(logicalType.field_7.field_2), } if (logicalType?.field_8) return { type: 'TIMESTAMP', isAdjustedToUTC: logicalType.field_8.field_1, - unit: logicalType.field_8.field_2, + unit: timeUnit(logicalType.field_8.field_2), } if (logicalType?.field_10) return { type: 'INTEGER', @@ -234,6 +234,16 @@ function logicalType(logicalType) { return logicalType } +/** + * @param {any} unit + * @returns {import("./types.d.ts").TimeUnit | undefined} + */ +function timeUnit(unit) { + if (unit.field_1) return 'MILLIS' + if (unit.field_2) return 'MICROS' + if (unit.field_3) return 'NANOS' +} + /** * Convert column statistics based on column type. * diff --git a/src/types.d.ts b/src/types.d.ts index 70de8e8..e096242 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -92,7 +92,7 @@ type LogicalDecimalType = { scale: number } -type TimeUnit = 'MILLIS' | 'MICROS' | 'NANOS' +export type TimeUnit = 'MILLIS' | 'MICROS' | 'NANOS' type LogicalTimeType = { type: 'TIME' diff --git a/test/files/duckdb5533.metadata.json b/test/files/duckdb5533.metadata.json index a9ff5e8..0a3afbd 100644 --- a/test/files/duckdb5533.metadata.json +++ b/test/files/duckdb5533.metadata.json @@ -12,9 +12,7 @@ "logical_type": { "type": "TIMESTAMP", "isAdjustedToUTC": false, - "unit": { - "field_1": {} - } + "unit": "MILLIS" } }, {