Skip to content

Commit

Permalink
unmarshall arrayValue. (#24)
Browse files Browse the repository at this point in the history
* unmarshall array values.

* unmarshall array values.

* add changeset.
  • Loading branch information
igalklebanov committed Apr 29, 2023
1 parent e8162ce commit d5d5e5a
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 13 deletions.
5 changes: 5 additions & 0 deletions .changeset/tame-pants-impress.md
@@ -0,0 +1,5 @@
---
"kysely-data-api": patch
---

arrayValue fields will now be unmarshalled so consumers will get JS arrays.
42 changes: 29 additions & 13 deletions src/data-api-driver.ts
@@ -1,4 +1,4 @@
import { RDSData, SqlParameter } from "@aws-sdk/client-rds-data";
import { ArrayValue, RDSData, SqlParameter } from "@aws-sdk/client-rds-data";
import { CompiledQuery, DatabaseConnection, Driver, QueryResult } from "kysely";

export type DataApiDriverConfig = {
Expand Down Expand Up @@ -109,19 +109,21 @@ class DataApiConnection implements DatabaseConnection {
}
const rows = r.records
?.filter((r) => r.length !== 0)
.map(
(rec) =>
Object.fromEntries(
rec.map((val, i) => [
r.columnMetadata![i].label || r.columnMetadata![i].name,
val.stringValue ??
val.blobValue ??
val.longValue ??
val.arrayValue ??
.map((rec) =>
Object.fromEntries(
rec.map((val, i) => [
r.columnMetadata![i].label || r.columnMetadata![i].name,
val.isNull
? null
: val.stringValue ??
val.doubleValue ??
(val.isNull ? null : val.booleanValue),
])
) as unknown as O
val.longValue ??
val.booleanValue ??
this.#unmarshallArrayValue(val.arrayValue) ??
val.blobValue ??
null, // FIXME: should throw an error here?
])
)
);
const result: QueryResult<O> = {
rows: rows || [],
Expand All @@ -135,4 +137,18 @@ class DataApiConnection implements DatabaseConnection {
): AsyncIterableIterator<QueryResult<O>> {
throw new Error("Data API does not support streaming");
}

#unmarshallArrayValue(arrayValue: ArrayValue | undefined): unknown {
if (!arrayValue) {
return undefined;
}

return (
arrayValue.stringValues ??
arrayValue.doubleValues ??
arrayValue.longValues ??
arrayValue.booleanValues ??
arrayValue.arrayValues?.map(this.#unmarshallArrayValue)
);
}
}

0 comments on commit d5d5e5a

Please sign in to comment.