All files / third-parties/drizzle-adapter/src/ydb-core/query-builders select.set-operators.ts

81.81% Statements 9/11
50% Branches 1/2
75% Functions 3/4
81.81% Lines 9/11

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 }
}