Skip to content

Commit 2933715

Browse files
committed
More adapter fixes
Summary: Test Plan:
1 parent feee775 commit 2933715

File tree

2 files changed

+82
-16
lines changed

2 files changed

+82
-16
lines changed

src/spanner/adapter.ts

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ function cleanParamsForSpanner(
190190
if (!params) return undefined;
191191

192192
const cleaned: Record<string, any> = {};
193+
let hasKeys = false;
194+
193195
for (const key in params) {
194196
if (Object.prototype.hasOwnProperty.call(params, key)) {
195197
const hint = typeHints?.[key];
@@ -199,9 +201,12 @@ function cleanParamsForSpanner(
199201
} else {
200202
cleaned[key] = params[key];
201203
}
204+
hasKeys = true;
202205
}
203206
}
204-
return cleaned;
207+
208+
// Return undefined if params is empty to avoid sending empty object to Spanner
209+
return hasKeys ? cleaned : undefined;
205210
}
206211

207212
// Helper function to automatically infer Spanner types from JavaScript values
@@ -488,9 +493,13 @@ export class SpannerAdapter implements DatabaseAdapter {
488493
try {
489494
const updateOptions: any = {
490495
sql,
491-
params: cleanedParams,
492496
};
493497

498+
// Only add params if they exist
499+
if (cleanedParams !== undefined) {
500+
updateOptions.params = cleanedParams;
501+
}
502+
494503
// Add types if provided
495504
if (types) {
496505
updateOptions.types = types;
@@ -587,10 +596,14 @@ export class SpannerAdapter implements DatabaseAdapter {
587596

588597
const queryOptions: any = {
589598
sql,
590-
params: cleanedParams,
591599
json: true,
592600
};
593601

602+
// Only add params if they exist
603+
if (cleanedParams !== undefined) {
604+
queryOptions.params = cleanedParams;
605+
}
606+
594607
// Add types if provided
595608
if (types) {
596609
queryOptions.types = types;
@@ -674,10 +687,14 @@ export class SpannerAdapter implements DatabaseAdapter {
674687
try {
675688
const queryOptions: any = {
676689
sql,
677-
params: cleanedParams,
678690
json: true,
679691
};
680692

693+
// Only add params if they exist
694+
if (cleanedParams !== undefined) {
695+
queryOptions.params = cleanedParams;
696+
}
697+
681698
// Add types if provided
682699
if (types) {
683700
queryOptions.types = types;
@@ -753,9 +770,13 @@ export class SpannerAdapter implements DatabaseAdapter {
753770

754771
const updateOptions: any = {
755772
sql: sqlCmd,
756-
params: cleanedParams,
757773
};
758774

775+
// Only add params if they exist
776+
if (cleanedParams !== undefined) {
777+
updateOptions.params = cleanedParams;
778+
}
779+
759780
// Add types if provided
760781
if (types) {
761782
updateOptions.types = types;
@@ -789,10 +810,14 @@ export class SpannerAdapter implements DatabaseAdapter {
789810

790811
const queryOptions: any = {
791812
sql: sqlQuery,
792-
params: cleanedParams,
793813
json: true,
794814
};
795815

816+
// Only add params if they exist
817+
if (cleanedParams !== undefined) {
818+
queryOptions.params = cleanedParams;
819+
}
820+
796821
// Add types if provided
797822
if (types) {
798823
queryOptions.types = types;
@@ -852,9 +877,13 @@ export class SpannerAdapter implements DatabaseAdapter {
852877

853878
const updateOptions: any = {
854879
sql: cmdSql,
855-
params: cleanedParams,
856880
};
857881

882+
// Only add params if they exist
883+
if (cleanedParams !== undefined) {
884+
updateOptions.params = cleanedParams;
885+
}
886+
858887
// Add types if provided
859888
if (types) {
860889
updateOptions.types = types;
@@ -885,10 +914,14 @@ export class SpannerAdapter implements DatabaseAdapter {
885914

886915
const queryOptions: any = {
887916
sql: querySql,
888-
params: cleanedParams,
889917
json: true,
890918
};
891919

920+
// Only add params if they exist
921+
if (cleanedParams !== undefined) {
922+
queryOptions.params = cleanedParams;
923+
}
924+
892925
// Add types if provided
893926
if (types) {
894927
queryOptions.types = types;

test/spanner/adapter-type-hints.test.ts

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ class TestableSpannerAdapter {
112112
if (!params) return undefined;
113113

114114
const cleaned: Record<string, any> = {};
115+
let hasKeys = false;
116+
115117
for (const key in params) {
116118
if (Object.prototype.hasOwnProperty.call(params, key)) {
117119
const hint = typeHints?.[key];
@@ -121,9 +123,12 @@ class TestableSpannerAdapter {
121123
} else {
122124
cleaned[key] = params[key];
123125
}
126+
hasKeys = true;
124127
}
125128
}
126-
return cleaned;
129+
130+
// Return undefined if params is empty to avoid sending empty object to Spanner
131+
return hasKeys ? cleaned : undefined;
127132
}
128133

129134
// Helper function to automatically infer Spanner types from JavaScript values
@@ -213,10 +218,14 @@ class TestableSpannerAdapter {
213218

214219
const queryOptions: any = {
215220
sql,
216-
params: cleanedParams,
217221
json: true,
218222
};
219223

224+
// Only add params if they exist
225+
if (cleanedParams !== undefined) {
226+
queryOptions.params = cleanedParams;
227+
}
228+
220229
// Add types if provided or inferred
221230
if (mergedHints) {
222231
queryOptions.types = mergedHints;
@@ -244,9 +253,13 @@ class TestableSpannerAdapter {
244253
async (transaction: any) => {
245254
const updateOptions: any = {
246255
sql,
247-
params: cleanedParams,
248256
};
249257

258+
// Only add params if they exist
259+
if (cleanedParams !== undefined) {
260+
updateOptions.params = cleanedParams;
261+
}
262+
250263
// Add types if provided or inferred
251264
if (mergedHints) {
252265
updateOptions.types = mergedHints;
@@ -278,10 +291,14 @@ class TestableSpannerAdapter {
278291
async (transaction: any) => {
279292
const queryOptions: any = {
280293
sql,
281-
params: cleanedParams,
282294
json: true,
283295
};
284296

297+
// Only add params if they exist
298+
if (cleanedParams !== undefined) {
299+
queryOptions.params = cleanedParams;
300+
}
301+
285302
// Add types if provided or inferred
286303
if (mergedHints) {
287304
queryOptions.types = mergedHints;
@@ -311,9 +328,13 @@ class TestableSpannerAdapter {
311328
const cleanedParams = this.cleanParamsForSpanner(paramsCmd, mergedHints);
312329
const updateOptions: any = {
313330
sql: sqlCmd,
314-
params: cleanedParams,
315331
};
316332

333+
// Only add params if they exist
334+
if (cleanedParams !== undefined) {
335+
updateOptions.params = cleanedParams;
336+
}
337+
317338
if (mergedHints) {
318339
updateOptions.types = mergedHints;
319340
updateOptions.paramTypes = mergedHints;
@@ -331,10 +352,14 @@ class TestableSpannerAdapter {
331352
const cleanedParams = this.cleanParamsForSpanner(paramsQuery, mergedHints);
332353
const queryOptions: any = {
333354
sql: sqlQuery,
334-
params: cleanedParams,
335355
json: true,
336356
};
337357

358+
// Only add params if they exist
359+
if (cleanedParams !== undefined) {
360+
queryOptions.params = cleanedParams;
361+
}
362+
338363
if (mergedHints) {
339364
queryOptions.types = mergedHints;
340365
queryOptions.paramTypes = mergedHints;
@@ -368,9 +393,13 @@ class TestableSpannerAdapter {
368393
const cleanedParams = this.cleanParamsForSpanner(cmdParams, mergedHints);
369394
const updateOptions: any = {
370395
sql: cmdSql,
371-
params: cleanedParams,
372396
};
373397

398+
// Only add params if they exist
399+
if (cleanedParams !== undefined) {
400+
updateOptions.params = cleanedParams;
401+
}
402+
374403
if (mergedHints) {
375404
updateOptions.types = mergedHints;
376405
updateOptions.paramTypes = mergedHints;
@@ -388,10 +417,14 @@ class TestableSpannerAdapter {
388417
const cleanedParams = this.cleanParamsForSpanner(queryParams, mergedHints);
389418
const queryOptions: any = {
390419
sql: querySql,
391-
params: cleanedParams,
392420
json: true,
393421
};
394422

423+
// Only add params if they exist
424+
if (cleanedParams !== undefined) {
425+
queryOptions.params = cleanedParams;
426+
}
427+
395428
if (mergedHints) {
396429
queryOptions.types = mergedHints;
397430
queryOptions.paramTypes = mergedHints;

0 commit comments

Comments
 (0)