Skip to content

Commit e609902

Browse files
committed
fixes #29
1 parent 9135c00 commit e609902

File tree

11 files changed

+71
-17
lines changed

11 files changed

+71
-17
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "kysely",
3-
"version": "0.10.0",
3+
"version": "0.10.1",
44
"description": "Type safe SQL query builder",
55
"repository": {
66
"type": "git",

src/driver/runtime-driver.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { CompiledQuery } from '../query-compiler/compiled-query.js'
22
import { Log } from '../util/log.js'
3+
import { performanceNow } from '../util/performance-now.js'
34
import { DatabaseConnection, QueryResult } from './database-connection.js'
45
import { Driver, TransactionSettings } from './driver.js'
56

@@ -101,7 +102,7 @@ class RuntimeConnection implements DatabaseConnection {
101102
}
102103

103104
async executeQuery<R>(compiledQuery: CompiledQuery): Promise<QueryResult<R>> {
104-
const startTime = process.hrtime.bigint()
105+
const startTime = performanceNow()
105106

106107
try {
107108
return await this.#connection.executeQuery<R>(compiledQuery)
@@ -120,18 +121,15 @@ class RuntimeConnection implements DatabaseConnection {
120121
}))
121122
}
122123

123-
#logQuery(compiledQuery: CompiledQuery, startTime: bigint): void {
124+
#logQuery(compiledQuery: CompiledQuery, startTime: number): void {
124125
this.#log.query(() => ({
125126
level: 'query',
126127
sql: compiledQuery.sql,
127128
queryDurationMillis: this.#calculateDurationMillis(startTime),
128129
}))
129130
}
130131

131-
#calculateDurationMillis(startTime: bigint): number {
132-
const endTime = process.hrtime.bigint()
133-
const durationNanos = Number(endTime - startTime)
134-
135-
return durationNanos / 1_000_000
132+
#calculateDurationMillis(startTime: number): number {
133+
return performanceNow() - startTime
136134
}
137135
}

src/operation-node/column-definition-node.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { freeze } from '../util/object-utils.js'
22
import { CheckConstraintNode } from './check-constraint-node.js'
33
import { ColumnNode } from './column-node.js'
44
import { DataTypeNode } from './data-type-node.js'
5+
import { DefaultValueNode } from './default-to-node.js'
56
import { GeneratedAlwaysAsNode } from './generated-always-as-node.js'
67
import { OperationNode } from './operation-node.js'
78
import { RawNode } from './raw-node.js'
@@ -23,7 +24,7 @@ export interface ColumnDefinitionNode extends OperationNode {
2324
readonly autoIncrement: boolean
2425
readonly unique: boolean
2526
readonly nullable: boolean
26-
readonly defaultTo?: ValueNode | RawNode
27+
readonly defaultTo?: DefaultValueNode
2728
readonly check?: CheckConstraintNode
2829
readonly generatedAlwaysAs?: GeneratedAlwaysAsNode
2930
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { freeze } from '../util/object-utils.js'
2+
import { OperationNode } from './operation-node.js'
3+
import { RawNode } from './raw-node.js'
4+
import { ValueNode } from './value-node.js'
5+
6+
export interface DefaultValueNode extends OperationNode {
7+
readonly kind: 'DefaultValueNode'
8+
readonly defaultValue: ValueNode | RawNode
9+
}
10+
11+
/**
12+
* @internal
13+
*/
14+
export const DefaultValueNode = freeze({
15+
is(node: OperationNode): node is DefaultValueNode {
16+
return node.kind === 'DefaultValueNode'
17+
},
18+
19+
create(defaultValue: ValueNode | RawNode): DefaultValueNode {
20+
return freeze({
21+
kind: 'DefaultValueNode',
22+
defaultValue,
23+
})
24+
},
25+
})

src/operation-node/operation-node-transformer.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import { UnionNode } from './union-node.js'
6262
import { CreateViewNode } from './create-view-node.js'
6363
import { DropViewNode } from './drop-view-node.js'
6464
import { GeneratedAlwaysAsNode } from './generated-always-as-node.js'
65+
import { DefaultValueNode } from './default-to-node.js'
6566

6667
/**
6768
* Transforms an operation node tree into another one.
@@ -95,7 +96,7 @@ import { GeneratedAlwaysAsNode } from './generated-always-as-node.js'
9596
export class OperationNodeTransformer {
9697
protected readonly nodeStack: OperationNode[] = []
9798

98-
readonly #transformers: Record<OperationNodeKind, Function> = {
99+
readonly #transformers: Record<OperationNodeKind, Function> = freeze({
99100
AliasNode: this.transformAlias.bind(this),
100101
ColumnNode: this.transformColumn.bind(this),
101102
IdentifierNode: this.transformIdentifier.bind(this),
@@ -158,7 +159,8 @@ export class OperationNodeTransformer {
158159
CreateViewNode: this.transformCreateView.bind(this),
159160
DropViewNode: this.transformDropView.bind(this),
160161
GeneratedAlwaysAsNode: this.transformGeneratedAlwaysAs.bind(this),
161-
}
162+
DefaultValueNode: this.transformDefaultValue.bind(this),
163+
})
162164

163165
readonly transformNode = <T extends OperationNode | undefined>(
164166
node: OperationNode | undefined
@@ -693,6 +695,13 @@ export class OperationNodeTransformer {
693695
}
694696
}
695697

698+
protected transformDefaultValue(node: DefaultValueNode): DefaultValueNode {
699+
return {
700+
kind: 'DefaultValueNode',
701+
defaultValue: this.transformNode(node.defaultValue),
702+
}
703+
}
704+
696705
protected transformDataType(node: DataTypeNode): DataTypeNode {
697706
// An Object.freezed leaf node. No need to clone.
698707
return node

src/operation-node/operation-node-visitor.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,13 @@ import { UnionNode } from './union-node.js'
6464
import { CreateViewNode } from './create-view-node.js'
6565
import { DropViewNode } from './drop-view-node.js'
6666
import { GeneratedAlwaysAsNode } from './generated-always-as-node.js'
67+
import { DefaultValueNode } from './default-to-node.js'
68+
import { freeze } from '../util/object-utils.js'
6769

6870
export abstract class OperationNodeVisitor {
6971
protected readonly nodeStack: OperationNode[] = []
7072

71-
readonly #visitors: Record<OperationNodeKind, Function> = {
73+
readonly #visitors: Record<OperationNodeKind, Function> = freeze({
7274
AliasNode: this.visitAlias.bind(this),
7375
ColumnNode: this.visitColumn.bind(this),
7476
IdentifierNode: this.visitIdentifier.bind(this),
@@ -131,7 +133,8 @@ export abstract class OperationNodeVisitor {
131133
CreateViewNode: this.visitCreateView.bind(this),
132134
DropViewNode: this.visitDropView.bind(this),
133135
GeneratedAlwaysAsNode: this.visitGeneratedAlwaysAs.bind(this),
134-
}
136+
DefaultValueNode: this.visitDefaultValue.bind(this),
137+
})
135138

136139
protected readonly visitNode = (node: OperationNode): void => {
137140
this.nodeStack.push(node)
@@ -207,4 +210,5 @@ export abstract class OperationNodeVisitor {
207210
protected abstract visitCreateView(node: CreateViewNode): void
208211
protected abstract visitDropView(node: DropViewNode): void
209212
protected abstract visitGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): void
213+
protected abstract visitDefaultValue(node: DefaultValueNode): void
210214
}

src/operation-node/operation-node.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export type OperationNodeKind =
6161
| 'CreateViewNode'
6262
| 'DropViewNode'
6363
| 'GeneratedAlwaysAsNode'
64+
| 'DefaultValueNode'
6465

6566
export interface OperationNode {
6667
readonly kind: OperationNodeKind

src/query-compiler/default-query-compiler.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ import { UnionNode } from '../operation-node/union-node.js'
7979
import { CreateViewNode } from '../operation-node/create-view-node.js'
8080
import { DropViewNode } from '../operation-node/drop-view-node.js'
8181
import { GeneratedAlwaysAsNode } from '../operation-node/generated-always-as-node.js'
82+
import { DefaultValueNode } from '../operation-node/default-to-node.js'
8283

8384
export class DefaultQueryCompiler
8485
extends OperationNodeVisitor
@@ -472,7 +473,7 @@ export class DefaultQueryCompiler
472473
}
473474

474475
if (node.defaultTo) {
475-
this.append(' default ')
476+
this.append(' ')
476477
this.visitNode(node.defaultTo)
477478
}
478479

@@ -960,7 +961,7 @@ export class DefaultQueryCompiler
960961
this.visitNode(node.name)
961962
}
962963

963-
protected visitGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): void {
964+
protected override visitGeneratedAlwaysAs(node: GeneratedAlwaysAsNode): void {
964965
this.append('generated always as (')
965966
this.visitNode(node.expression)
966967
this.append(')')
@@ -970,6 +971,11 @@ export class DefaultQueryCompiler
970971
}
971972
}
972973

974+
protected override visitDefaultValue(node: DefaultValueNode): void {
975+
this.append('default ')
976+
this.visitNode(node.defaultValue)
977+
}
978+
973979
protected append(str: string): void {
974980
this.#sql += str
975981
}

src/raw-builder/raw-builder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,5 +141,5 @@ export interface RawBuilderProps {
141141
readonly queryId: QueryId
142142
readonly executor: QueryExecutor
143143
readonly sql: string
144-
readonly parameters?: any
144+
readonly parameters?: ReadonlyArray<unknown>
145145
}

src/schema/column-definition-builder.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
parseDefaultValueExpression,
1717
} from '../parser/default-value-parser.js'
1818
import { GeneratedAlwaysAsNode } from '../operation-node/generated-always-as-node.js'
19+
import { DefaultValueNode } from '../operation-node/default-to-node.js'
1920

2021
export interface ColumnDefinitionBuilderInterface<R> {
2122
/**
@@ -228,7 +229,7 @@ export class ColumnDefinitionBuilder
228229
defaultTo(value: DefaultValueExpression): ColumnDefinitionBuilder {
229230
return new ColumnDefinitionBuilder(
230231
ColumnDefinitionNode.cloneWith(this.#node, {
231-
defaultTo: parseDefaultValueExpression(value),
232+
defaultTo: DefaultValueNode.create(parseDefaultValueExpression(value)),
232233
})
233234
)
234235
}

0 commit comments

Comments
 (0)