1- import { RDSData , SqlParameter } from "@aws-sdk/client-rds-data" ;
1+ import { ArrayValue , RDSData , SqlParameter } from "@aws-sdk/client-rds-data" ;
22import { CompiledQuery , DatabaseConnection , Driver , QueryResult } from "kysely" ;
33
44export 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