1- import { Field } from "aws-sdk/clients/rdsdataservice.js " ;
1+ import { SqlParameter } from "aws-sdk/clients/rdsdataservice" ;
22import { MysqlQueryCompiler , PostgresQueryCompiler } from "kysely" ;
33
44export class PostgresDataApiQueryCompiler extends PostgresQueryCompiler {
@@ -7,7 +7,7 @@ export class PostgresDataApiQueryCompiler extends PostgresQueryCompiler {
77 this . append ( this . getCurrentParameterPlaceholder ( ) ) ;
88 this . addParameter ( {
99 name : name . toString ( ) ,
10- value : serialize ( value ) ,
10+ ... serialize ( value ) ,
1111 } ) ;
1212 }
1313
@@ -22,7 +22,7 @@ export class MysqlDataApiQueryCompiler extends MysqlQueryCompiler {
2222 this . append ( this . getCurrentParameterPlaceholder ( ) ) ;
2323 this . addParameter ( {
2424 name : name . toString ( ) ,
25- value : serialize ( value ) ,
25+ ... serialize ( value ) ,
2626 } ) ;
2727 }
2828
@@ -31,37 +31,74 @@ export class MysqlDataApiQueryCompiler extends MysqlQueryCompiler {
3131 }
3232}
3333
34- function serialize ( value : any ) : Field {
35- if ( value == null ) return { isNull : true } ;
34+ function serialize ( value : any ) : SqlParameter {
35+ if ( value == null ) return { value : { isNull : true } } ;
3636 switch ( typeof value ) {
3737 case "number" :
3838 if ( Number . isInteger ( value ) )
3939 return {
40- longValue : value ,
40+ value : {
41+ longValue : value ,
42+ } ,
4143 } ;
4244 else
4345 return {
44- doubleValue : value ,
46+ value : {
47+ doubleValue : value ,
48+ }
4549 } ;
4650 case "bigint" :
4751 return {
48- doubleValue : Number ( value ) ,
52+ value : {
53+ doubleValue : Number ( value ) ,
54+ }
4955 } ;
5056 case "string" :
5157 return {
52- stringValue : value ,
58+ value : {
59+ stringValue : value ,
60+ }
5361 } ;
5462 case "boolean" :
5563 return {
56- booleanValue : value ,
64+ value : {
65+ booleanValue : value ,
66+ }
5767 } ;
5868 case "object" :
5969 if ( Buffer . isBuffer ( value ) )
6070 return {
61- blobValue : value ,
71+ value : {
72+ blobValue : value ,
73+ }
6274 } ;
63- else break ;
75+
76+ if ( Array . isArray ( value ) ) {
77+ return {
78+ value : {
79+ arrayValue : {
80+ stringValues : value ,
81+ }
82+ }
83+ }
84+ }
85+
86+ if ( value instanceof Date )
87+ return {
88+ typeHint : "TIMESTAMP" ,
89+ value : { stringValue : serializeDate ( value ) } ,
90+ }
91+
92+ return {
93+ value : {
94+ stringValue : JSON . stringify ( value ) ,
95+ }
96+ }
6497 }
6598
6699 throw new Error ( `Unsupported type: ${ value } ` ) ;
67100}
101+
102+ function serializeDate ( input : Date ) {
103+ return input . toISOString ( ) . replace ( "T" , " " ) . substring ( 0 , 23 ) ;
104+ }
0 commit comments