Skip to content

Commit a6a6a51

Browse files
committed
generic code cleanup
1 parent 833a377 commit a6a6a51

File tree

8 files changed

+69
-39
lines changed

8 files changed

+69
-39
lines changed

src/dialect/mysql/mysql-driver.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ import {
1414

1515
import { Driver, TransactionSettings } from '../../driver/driver.js'
1616
import { CompiledQuery } from '../../query-compiler/compiled-query.js'
17-
import { isFunction, isObject } from '../../util/object-utils.js'
17+
import {
18+
isFunction,
19+
isNumber,
20+
isObject,
21+
isString,
22+
} from '../../util/object-utils.js'
1823
import { MysqlDialectConfig } from './mysql-dialect.js'
1924

2025
const PRIVATE_RELEASE_METHOD = Symbol()
@@ -145,12 +150,12 @@ class MysqlConnection implements DatabaseConnection {
145150
const result = await this.#executeQuery(compiledQuery)
146151

147152
if (isObject(result) && 'insertId' in result && 'affectedRows' in result) {
148-
if (result.insertId) {
153+
if (isNumber(result.insertId) && result.insertId > 0) {
149154
return {
150155
insertedPrimaryKey: result.insertId,
151156
rows: [],
152157
}
153-
} else {
158+
} else if (isNumber(result.affectedRows)) {
154159
return {
155160
numUpdatedOrDeletedRows: result.affectedRows,
156161
rows: [],

src/parser/group-by-parser.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { GroupByItemNode } from '../operation-node/group-by-item-node.js'
2+
import { ParseContext } from './parse-context.js'
3+
import {
4+
parseReferenceExpressionOrList,
5+
ReferenceExpressionOrList,
6+
} from './reference-parser.js'
7+
8+
export function parseGroupBy(
9+
ctx: ParseContext,
10+
orderBy: ReferenceExpressionOrList<any, any>
11+
): GroupByItemNode[] {
12+
return parseReferenceExpressionOrList(ctx, orderBy).map(
13+
GroupByItemNode.create
14+
)
15+
}

src/parser/order-by-parser.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js'
2+
import { OrderByItemNode } from '../operation-node/order-by-item-node.js'
23
import { RawNode } from '../operation-node/raw-node.js'
34
import { AnyRawBuilder } from '../util/type-utils.js'
45
import { ParseContext } from './parse-context.js'
@@ -15,14 +16,25 @@ export type OrderByExpression<DB, TB extends keyof DB, O> =
1516

1617
export type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder
1718

18-
export function parseOrderByExpression(
19+
export function parseOrderBy(
20+
ctx: ParseContext,
21+
orderBy: OrderByExpression<any, any, any>,
22+
direction?: OrderByDirectionExpression
23+
): OrderByItemNode {
24+
return OrderByItemNode.create(
25+
parseOrderByExpression(ctx, orderBy),
26+
parseOrderByDirectionExpression(direction)
27+
)
28+
}
29+
30+
function parseOrderByExpression(
1931
ctx: ParseContext,
2032
expr: OrderByExpression<any, any, any>
2133
): ReferenceExpressionNode {
2234
return parseReferenceExpression(ctx, expr)
2335
}
2436

25-
export function parseOrderByDirectionExpression(
37+
function parseOrderByDirectionExpression(
2638
expr?: OrderByDirectionExpression
2739
): RawNode | undefined {
2840
if (!expr) {

src/parser/reference-parser.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import { isOperationNodeSource } from '../operation-node/operation-node-source.j
44
import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js'
55
import { ReferenceNode } from '../operation-node/reference-node.js'
66
import { TableNode } from '../operation-node/table-node.js'
7-
import { isFunction, isString, PrimitiveValue } from '../util/object-utils.js'
7+
import {
8+
isFunction,
9+
isReadonlyArray,
10+
isString,
11+
PrimitiveValue,
12+
} from '../util/object-utils.js'
813
import {
914
AnyColumn,
1015
AnyColumnWithTable,
@@ -31,7 +36,7 @@ export type ReferenceExpression<DB, TB extends keyof DB> =
3136

3237
export type ReferenceExpressionOrList<DB, TB extends keyof DB> =
3338
| ReferenceExpression<DB, TB>
34-
| ReferenceExpression<DB, TB>[]
39+
| ReadonlyArray<ReferenceExpression<DB, TB>>
3540

3641
export type StringReference<DB, TB extends keyof DB> =
3742
| AnyColumn<DB, TB>
@@ -78,7 +83,7 @@ export function parseReferenceExpressionOrList(
7883
ctx: ParseContext,
7984
arg: ReferenceExpressionOrList<any, any>
8085
): ReferenceExpressionNode[] {
81-
if (Array.isArray(arg)) {
86+
if (isReadonlyArray(arg)) {
8287
return arg.map((it) => parseReferenceExpression(ctx, it))
8388
} else {
8489
return [parseReferenceExpression(ctx, arg)]

src/query-builder/query-builder.ts

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,10 @@ import {
3737
} from '../parser/insert-values-parser.js'
3838
import { QueryBuilderWithReturning } from '../parser/returning-parser.js'
3939
import {
40-
parseReferenceExpressionOrList,
4140
ReferenceExpression,
41+
ReferenceExpressionOrList,
4242
} from '../parser/reference-parser.js'
4343
import { ValueExpressionOrList } from '../parser/value-parser.js'
44-
import { OrderByItemNode } from '../operation-node/order-by-item-node.js'
4544
import { SelectQueryNode } from '../operation-node/select-query-node.js'
4645
import { InsertQueryNode } from '../operation-node/insert-query-node.js'
4746
import {
@@ -58,10 +57,8 @@ import {
5857
import {
5958
OrderByDirectionExpression,
6059
OrderByExpression,
61-
parseOrderByDirectionExpression,
62-
parseOrderByExpression,
60+
parseOrderBy,
6361
} from '../parser/order-by-parser.js'
64-
import { GroupByItemNode } from '../operation-node/group-by-item-node.js'
6562
import { UpdateQueryNode } from '../operation-node/update-query-node.js'
6663
import {
6764
MutationObject,
@@ -83,6 +80,7 @@ import { freeze } from '../util/object-utils.js'
8380
import { ParseContext } from '../parser/parse-context.js'
8481
import { DeleteQueryNode } from '../operation-node/delete-query-node.js'
8582
import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js'
83+
import { parseGroupBy } from '../parser/group-by-parser.js'
8684

8785
/**
8886
* The main query builder class.
@@ -2062,10 +2060,7 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
20622060
...this.#props,
20632061
queryNode: SelectQueryNode.cloneWithOrderByItem(
20642062
this.#props.queryNode,
2065-
OrderByItemNode.create(
2066-
parseOrderByExpression(this.#props.parseContext, orderBy),
2067-
parseOrderByDirectionExpression(direction)
2068-
)
2063+
parseOrderBy(this.#props.parseContext, orderBy, direction)
20692064
),
20702065
})
20712066
}
@@ -2174,16 +2169,14 @@ export class QueryBuilder<DB, TB extends keyof DB, O = {}>
21742169

21752170
groupBy(orderBy: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>
21762171

2177-
groupBy(orderBy: any): QueryBuilder<DB, TB, O> {
2172+
groupBy(orderBy: ReferenceExpressionOrList<DB, TB>): any {
21782173
assertCanHaveGroupByClause(this.#props.queryNode)
21792174

21802175
return new QueryBuilder({
21812176
...this.#props,
21822177
queryNode: SelectQueryNode.cloneWithGroupByItems(
21832178
this.#props.queryNode,
2184-
parseReferenceExpressionOrList(this.#props.parseContext, orderBy).map(
2185-
GroupByItemNode.create
2186-
)
2179+
parseGroupBy(this.#props.parseContext, orderBy)
21872180
),
21882181
})
21892182
}
@@ -2516,7 +2509,7 @@ function assertCanHaveReturningClause(
25162509
): asserts node is MutatingQueryNode {
25172510
if (!QueryNode.isMutating(node)) {
25182511
throw new Error(
2519-
'only an insert, delete and update queries can have a returning clause'
2512+
'only insert, delete and update queries can have a returning clause'
25202513
)
25212514
}
25222515
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
export interface CompiledQuery {
22
readonly sql: string
3-
readonly parameters: ReadonlyArray<any>
3+
readonly parameters: ReadonlyArray<unknown>
44
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export class DefaultQueryCompiler
8080
implements QueryCompiler
8181
{
8282
#sql = ''
83-
#parameters: any[] = []
83+
#parameters: unknown[] = []
8484

8585
protected get numParameters(): number {
8686
return this.#parameters.length
@@ -887,8 +887,8 @@ export class DefaultQueryCompiler
887887
this.#sql += str
888888
}
889889

890-
protected appendValue(value: PrimitiveValue): void {
891-
this.addParameter(value)
890+
protected appendValue(parameter: unknown): void {
891+
this.addParameter(parameter)
892892
this.append(this.getCurrentParameterPlaceholder())
893893
}
894894

@@ -904,7 +904,7 @@ export class DefaultQueryCompiler
904904
return '$' + this.numParameters
905905
}
906906

907-
protected addParameter(parameter: any): void {
907+
protected addParameter(parameter: unknown): void {
908908
this.#parameters.push(parameter)
909909
}
910910

src/util/object-utils.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export type PrimitiveValue =
88
| BigInt
99

1010
export function isEmpty(
11-
obj: ArrayLike<any> | string | object | Buffer
11+
obj: ArrayLike<unknown> | string | object | Buffer
1212
): boolean {
1313
if (Array.isArray(obj) || isString(obj) || Buffer.isBuffer(obj)) {
1414
return obj.length === 0
@@ -19,35 +19,35 @@ export function isEmpty(
1919
return false
2020
}
2121

22-
export function isString(obj: any): obj is string {
22+
export function isString(obj: unknown): obj is string {
2323
return typeof obj === 'string'
2424
}
2525

26-
export function isNumber(obj: any): obj is number {
26+
export function isNumber(obj: unknown): obj is number {
2727
return typeof obj === 'number'
2828
}
2929

30-
export function isBoolean(obj: any): obj is boolean {
30+
export function isBoolean(obj: unknown): obj is boolean {
3131
return typeof obj === 'boolean'
3232
}
3333

34-
export function isNull(obj: any): obj is null {
34+
export function isNull(obj: unknown): obj is null {
3535
return obj === null
3636
}
3737

38-
export function isDate(obj: any): obj is Date {
38+
export function isDate(obj: unknown): obj is Date {
3939
return obj instanceof Date
4040
}
4141

42-
export function isBuffer(obj: any): obj is Buffer {
42+
export function isBuffer(obj: unknown): obj is Buffer {
4343
return Buffer.isBuffer(obj)
4444
}
4545

46-
export function isBigInt(obj: any): obj is BigInt {
46+
export function isBigInt(obj: unknown): obj is BigInt {
4747
return typeof obj === 'bigint'
4848
}
4949

50-
export function isPrimitive(obj: any): obj is PrimitiveValue {
50+
export function isPrimitive(obj: unknown): obj is PrimitiveValue {
5151
return (
5252
isString(obj) ||
5353
isNumber(obj) ||
@@ -59,12 +59,12 @@ export function isPrimitive(obj: any): obj is PrimitiveValue {
5959
)
6060
}
6161

62-
export function isFunction(obj: any): obj is Function {
62+
export function isFunction(obj: unknown): obj is Function {
6363
return typeof obj === 'function'
6464
}
6565

66-
export function isObject(obj: any): obj is Record<string, any> {
67-
return obj && typeof obj === 'object'
66+
export function isObject(obj: unknown): obj is Record<string, unknown> {
67+
return typeof obj === 'object' && obj !== null
6868
}
6969

7070
export function getLast<T>(arr: ArrayLike<T>): T | undefined {

0 commit comments

Comments
 (0)