Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 108x 3x 3x 3x 3x 27x 27x 27x 27x | import { haveSameKeys } from 'drizzle-orm/utils'
import type { YdbSetOperatorConfig, YdbSetOperatorSource } from '../../ydb/dialect.types.js'
import type { YdbSelectBuilder } from './select.builder.js'
function createTopLevelSetOperator(type: 'union' | 'intersect' | 'except', isAll: boolean) {
return (
leftSelect: YdbSelectBuilder,
rightSelect: YdbSetOperatorSource,
...restSelects: YdbSetOperatorSource[]
) => {
let setOperators = [rightSelect, ...restSelects].map((select) => {
Iif (!haveSameKeys(leftSelect.getSelectedFields(), select.getSelectedFields())) {
throw new Error(
'Set operator error (union / intersect / except): selected fields are not the same or are in a different order'
)
}
return {
type,
isAll,
rightSelect: select,
} satisfies YdbSetOperatorConfig
})
return leftSelect.addSetOperators(setOperators)
}
}
export let union = createTopLevelSetOperator('union', false)
export let unionAll = createTopLevelSetOperator('union', true)
export let intersect = createTopLevelSetOperator('intersect', false)
export let except = createTopLevelSetOperator('except', false)
export function getSetOperatorHelpers() {
return { union, unionAll, intersect, except }
}
|