Skip to content

Commit b966b1d

Browse files
committed
Proper support for data param
1 parent 4a7a642 commit b966b1d

3 files changed

Lines changed: 58 additions & 18 deletions

File tree

.changeset/tough-melons-deny.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+
Proper support for Date parameter

package.json

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
"name": "kysely-data-api",
33
"version": "0.1.0",
44
"repository": "git@github.com:serverless-stack/kysely-data-api.git",
5-
"main": "dist/cjs/index.js",
6-
"module": "dist/esm/index.js",
5+
"module": "./dist/esm/index.js",
6+
"main": "./dist/cjs/index.js",
77
"exports": {
8-
".": {
9-
"import": "./dist/esm/index.js",
10-
"require": "./dist/cjs/index.js"
11-
}
8+
"import": "./dist/esm/index.js",
9+
"require": "./dist/cjs/index.js"
1210
},
1311
"license": "MIT",
1412
"scripts": {

src/data-api-query-compiler.ts

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Field } from "aws-sdk/clients/rdsdataservice.js";
1+
import { SqlParameter } from "aws-sdk/clients/rdsdataservice";
22
import { MysqlQueryCompiler, PostgresQueryCompiler } from "kysely";
33

44
export 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

Comments
 (0)