Skip to content

Commit d5d5e5a

Browse files
authored
unmarshall arrayValue. (#24)
* unmarshall array values. * unmarshall array values. * add changeset.
1 parent e8162ce commit d5d5e5a

File tree

2 files changed

+34
-13
lines changed

2 files changed

+34
-13
lines changed

.changeset/tame-pants-impress.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"kysely-data-api": patch
3+
---
4+
5+
arrayValue fields will now be unmarshalled so consumers will get JS arrays.

src/data-api-driver.ts

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { RDSData, SqlParameter } from "@aws-sdk/client-rds-data";
1+
import { ArrayValue, RDSData, SqlParameter } from "@aws-sdk/client-rds-data";
22
import { CompiledQuery, DatabaseConnection, Driver, QueryResult } from "kysely";
33

44
export type DataApiDriverConfig = {
@@ -109,19 +109,21 @@ class DataApiConnection implements DatabaseConnection {
109109
}
110110
const rows = r.records
111111
?.filter((r) => r.length !== 0)
112-
.map(
113-
(rec) =>
114-
Object.fromEntries(
115-
rec.map((val, i) => [
116-
r.columnMetadata![i].label || r.columnMetadata![i].name,
117-
val.stringValue ??
118-
val.blobValue ??
119-
val.longValue ??
120-
val.arrayValue ??
112+
.map((rec) =>
113+
Object.fromEntries(
114+
rec.map((val, i) => [
115+
r.columnMetadata![i].label || r.columnMetadata![i].name,
116+
val.isNull
117+
? null
118+
: val.stringValue ??
121119
val.doubleValue ??
122-
(val.isNull ? null : val.booleanValue),
123-
])
124-
) as unknown as O
120+
val.longValue ??
121+
val.booleanValue ??
122+
this.#unmarshallArrayValue(val.arrayValue) ??
123+
val.blobValue ??
124+
null, // FIXME: should throw an error here?
125+
])
126+
)
125127
);
126128
const result: QueryResult<O> = {
127129
rows: rows || [],
@@ -135,4 +137,18 @@ class DataApiConnection implements DatabaseConnection {
135137
): AsyncIterableIterator<QueryResult<O>> {
136138
throw new Error("Data API does not support streaming");
137139
}
140+
141+
#unmarshallArrayValue(arrayValue: ArrayValue | undefined): unknown {
142+
if (!arrayValue) {
143+
return undefined;
144+
}
145+
146+
return (
147+
arrayValue.stringValues ??
148+
arrayValue.doubleValues ??
149+
arrayValue.longValues ??
150+
arrayValue.booleanValues ??
151+
arrayValue.arrayValues?.map(this.#unmarshallArrayValue)
152+
);
153+
}
138154
}

0 commit comments

Comments
 (0)