Skip to content

Commit 8370f60

Browse files
committed
test(query): align paramaters index when using identifiers
Signed-off-by: Vladislav Polyakov <[email protected]>
1 parent 04c3b79 commit 8370f60

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

packages/query/src/yql.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,16 @@ export function yql<P extends any[] = unknown[]>(
1818
let params: Record<string, Value> = Object.assign({}, null)
1919

2020
if (Array.isArray(values)) {
21+
let skip: number = 0
2122
values.forEach((value, i) => {
2223
if (value[SymbolUnsafe]) {
24+
skip += 1
2325
return
2426
}
2527

2628
let ydbValue = isObject(value) && 'type' in value && 'kind' in value['type'] ? value : fromJs(value)
2729

28-
params[`$p${i}`] = ydbValue
30+
params[`$p${i - skip}`] = ydbValue
2931
})
3032
}
3133

@@ -34,10 +36,14 @@ export function yql<P extends any[] = unknown[]>(
3436
}
3537

3638
if (Array.isArray(strings)) {
39+
let skip: number = 0
3740
text += strings.reduce((prev, curr, i) => {
3841
let value = values[i]
42+
if (value && value[SymbolUnsafe]) {
43+
skip += 1
44+
}
3945

40-
return prev + curr + (value ? value[SymbolUnsafe] ? value.toString() : `$p${i}` : '')
46+
return prev + curr + (value ? value[SymbolUnsafe] ? value.toString() : `$p${i - skip}` : '')
4147
}, '')
4248
}
4349

packages/query/tests/yql.test.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { expect, test } from 'vitest'
22

33
import { Int32 } from '@ydbjs/value/primitive'
4-
import { table, yql } from '../dist/esm/yql.js'
4+
import { identifier, yql } from '../dist/esm/yql.js'
55

66
test('string', () => {
77
let { text } = yql`SELECT 1;`
@@ -37,17 +37,17 @@ test('string with ydb value as parameter', () => {
3737
`)
3838
})
3939

40-
test('string with parameter and unsafe', () => {
41-
let { text, params } = yql`FROM ${table('my_table')} SELECT ${1}, ${2};`
40+
test('string with parameters and identifiers', () => {
41+
let { text, params } = yql`FROM ${identifier('my_table')}.${identifier('my_column')} SELECT ${1}, ${2};`
4242

43-
expect(text).eq('FROM `my_table` SELECT $p1, $p2;')
43+
expect(text).eq('FROM `my_table`.`my_column` SELECT $p0, $p1;')
4444
expect(params).toMatchInlineSnapshot(`
4545
{
46-
"$p1": Int32 {
46+
"$p0": Int32 {
4747
"type": Int32Type {},
4848
"value": 1,
4949
},
50-
"$p2": Int32 {
50+
"$p1": Int32 {
5151
"type": Int32Type {},
5252
"value": 2,
5353
},

0 commit comments

Comments
 (0)