-
-
Notifications
You must be signed in to change notification settings - Fork 501
/
double.ts
64 lines (55 loc) · 2.07 KB
/
double.ts
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
import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';
import type { ColumnBaseConfig } from '~/column.ts';
import { entityKind } from '~/entity.ts';
import type { AnyMySqlTable } from '~/mysql-core/table.ts';
import { MySqlColumnBuilderWithAutoIncrement, MySqlColumnWithAutoIncrement } from './common.ts';
export type MySqlDoubleBuilderInitial<TName extends string> = MySqlDoubleBuilder<{
name: TName;
dataType: 'number';
columnType: 'MySqlDouble';
data: number;
driverParam: number | string;
enumValues: undefined;
}>;
export class MySqlDoubleBuilder<T extends ColumnBuilderBaseConfig<'number', 'MySqlDouble'>>
extends MySqlColumnBuilderWithAutoIncrement<T, MySqlDoubleConfig>
{
static readonly [entityKind]: string = 'MySqlDoubleBuilder';
constructor(name: T['name'], config: MySqlDoubleConfig | undefined) {
super(name, 'number', 'MySqlDouble');
this.config.precision = config?.precision;
this.config.scale = config?.scale;
}
/** @internal */
override build<TTableName extends string>(
table: AnyMySqlTable<{ name: TTableName }>,
): MySqlDouble<MakeColumnConfig<T, TTableName>> {
return new MySqlDouble<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);
}
}
export class MySqlDouble<T extends ColumnBaseConfig<'number', 'MySqlDouble'>>
extends MySqlColumnWithAutoIncrement<T, MySqlDoubleConfig>
{
static readonly [entityKind]: string = 'MySqlDouble';
precision: number | undefined = this.config.precision;
scale: number | undefined = this.config.scale;
getSQLType(): string {
if (this.precision !== undefined && this.scale !== undefined) {
return `double(${this.precision},${this.scale})`;
} else if (this.precision === undefined) {
return 'double';
} else {
return `double(${this.precision})`;
}
}
}
export interface MySqlDoubleConfig {
precision?: number;
scale?: number;
}
export function double<TName extends string>(
name: TName,
config?: MySqlDoubleConfig,
): MySqlDoubleBuilderInitial<TName> {
return new MySqlDoubleBuilder(name, config);
}