All files / third-parties/drizzle-adapter/src/ydb-core/columns common.ts

92.3% Statements 12/13
100% Branches 4/4
85.71% Functions 6/7
92.3% Lines 12/13

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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87                                                                        34x     5x 5x 5x             1x                         34x     414x 3x     414x       1x       98x       683x            
import type {
	ColumnBuilderBase,
	ColumnBuilderBaseConfig,
	ColumnBuilderExtraConfig,
	ColumnBuilderRuntimeConfig,
	ColumnDataType,
} from 'drizzle-orm/column-builder'
import { ColumnBuilder } from 'drizzle-orm/column-builder'
import type { ColumnBaseConfig, ColumnRuntimeConfig } from 'drizzle-orm/column'
import { Column } from 'drizzle-orm/column'
import { entityKind } from 'drizzle-orm/entity'
import type { SQL } from 'drizzle-orm/sql/sql'
import type { Table } from 'drizzle-orm/table'
import type { Update } from 'drizzle-orm/utils'
import { uniqueKeyName } from '../unique-constraint.js'
 
export interface YdbColumnBuilderBase<
	T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<
		ColumnDataType,
		string
	>,
	TTypeConfig extends object = object,
> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'ydb' }> {}
 
export class YdbColumnBuilder<
	T extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<
		ColumnDataType,
		string
	>,
	TRuntimeConfig extends object = object,
	TTypeConfig extends object = object,
	TExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,
>
	extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'ydb' }, TExtraConfig>
	implements YdbColumnBuilderBase<T, TTypeConfig>
{
	static override readonly [entityKind]: string = 'YdbColumnBuilder'
 
	unique(name?: string): this {
		this.config.isUnique = true
		this.config.uniqueName = name
		return this
	}
 
	override generatedAlwaysAs(
		_as: SQL | this['_']['data'] | (() => SQL),
		_config?: { mode?: 'virtual' | 'stored' }
	): any {
		throw new Error('YDB generatedAlwaysAs() is not supported')
	}
 
	build<TTable extends Table>(table: TTable): YdbColumn {
		return new YdbColumn(table, this.config as ColumnBuilderRuntimeConfig<any, any>)
	}
}
 
export class YdbColumn<
	T extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,
	TRuntimeConfig extends object = object,
	TTypeConfig extends object = object,
> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'ydb' }> {
	static override readonly [entityKind]: string = 'YdbColumn'
 
	constructor(table: Table, config: ColumnRuntimeConfig<T['data'], TRuntimeConfig>) {
		if (config.isUnique && !config.uniqueName) {
			config.uniqueName = uniqueKeyName(table as any, [config.name])
		}
 
		super(table, config)
	}
 
	override getSQLType(): string {
		return 'unknown'
	}
 
	override mapFromDriverValue(value: T['driverParam']): T['data'] {
		return super.mapFromDriverValue(value) as T['data']
	}
 
	override mapToDriverValue(value: T['data']): T['driverParam'] {
		return super.mapToDriverValue(value) as T['driverParam']
	}
}
 
export type AnyYdbColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> =
	YdbColumn<Required<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>>