Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

revisiting orderBy - deprecations, new order by item builder (nullFirst(), nullsLast(), collate()). #1326

Merged
merged 32 commits into from
Jan 25, 2025
Merged
Changes from 1 commit
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
09abcc7
add order by benchmark.
igalklebanov Jan 19, 2025
1251c77
update benches.
igalklebanov Jan 20, 2025
c4ca80e
order by interface and item builder.
igalklebanov Jan 20, 2025
0fa9058
add orderBy stuff @ query-node.
igalklebanov Jan 20, 2025
1bcb9b6
deprecate direction as expression.
igalklebanov Jan 20, 2025
634362d
fix toOperationNode return type.
igalklebanov Jan 20, 2025
4aaf773
add collate node.
igalklebanov Jan 20, 2025
7e87088
fix index.
igalklebanov Jan 20, 2025
256ffa9
update order by parser.
igalklebanov Jan 20, 2025
50963b3
update compilation.
igalklebanov Jan 20, 2025
60f9d20
update order-by-item-node.
igalklebanov Jan 20, 2025
600b28d
update select.
igalklebanov Jan 20, 2025
8b11dc1
align delete query builder.
igalklebanov Jan 20, 2025
e80d95a
add order by @ update query builder.
igalklebanov Jan 20, 2025
d5bdb1b
fix test setup.
igalklebanov Jan 20, 2025
97b8679
fix signatures.
igalklebanov Jan 20, 2025
6b304bb
update benches.
igalklebanov Jan 20, 2025
e4f1957
add clearOrderBy to order by interface.
igalklebanov Jan 20, 2025
ab79066
fix transformer.
igalklebanov Jan 20, 2025
71c033d
align over builder.
igalklebanov Jan 20, 2025
e770332
jsdoc links.
igalklebanov Jan 20, 2025
36fff96
align aggregate function builder pt. 1.
igalklebanov Jan 20, 2025
4dbf349
make typings tests pass.
igalklebanov Jan 25, 2025
d099e0d
make DeleteQueryNode backwards compatible til 0.29.
igalklebanov Jan 25, 2025
5708ee5
make SelectQueryNode backwards compatible til 0.29.
igalklebanov Jan 25, 2025
6cd1be5
make order-by-parser backwards compatible.
igalklebanov Jan 25, 2025
1e60331
align withinGroupOrderBy.
igalklebanov Jan 25, 2025
c4b9c8b
fix build.
igalklebanov Jan 25, 2025
5d68749
export OrderByModifiers.
igalklebanov Jan 25, 2025
5ea6d4c
..
igalklebanov Jan 25, 2025
e5cde56
fix collate.
igalklebanov Jan 25, 2025
9225bc8
test update order by.
igalklebanov Jan 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
align over builder.
igalklebanov committed Jan 20, 2025
commit 71c033dce71d7a1961a018b2697680e7d2739fe0
58 changes: 48 additions & 10 deletions src/query-builder/over-builder.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js'
import { Expression } from '../expression/expression.js'
import { OperationNodeSource } from '../operation-node/operation-node-source.js'
import { OverNode } from '../operation-node/over-node.js'
import { QueryNode } from '../operation-node/query-node.js'
import {
OrderByDirectionExpression,
DirectedOrderByStringReference,
OrderByExpression,
OrderByModifiers,
parseOrderBy,
} from '../parser/order-by-parser.js'
import {
parsePartitionBy,
PartitionByExpression,
PartitionByExpressionOrList,
} from '../parser/partition-by-parser.js'
import { StringReference } from '../parser/reference-parser.js'
import { freeze } from '../util/object-utils.js'
import { OrderByInterface } from './order-by-interface.js'

export class OverBuilder<DB, TB extends keyof DB>
implements OperationNodeSource
implements OrderByInterface<DB, TB, never>, OperationNodeSource
{
readonly #props: OverBuilderProps

@@ -23,7 +26,7 @@ export class OverBuilder<DB, TB extends keyof DB>
}

/**
* Adds an order by clause item inside the over function.
* Adds an `order by` clause or item inside the `over` function.
*
* ```ts
* const result = await db
@@ -43,18 +46,53 @@ export class OverBuilder<DB, TB extends keyof DB>
* from "person"
* ```
*/
orderBy<OE extends StringReference<DB, TB> | DynamicReferenceBuilder<any>>(
orderBy: OE,
direction?: OrderByDirectionExpression,
): OverBuilder<DB, TB> {
orderBy<OE extends OrderByExpression<DB, TB, never>>(
expr: OE,
modifiers?: OrderByModifiers,
): OverBuilder<DB, TB>

// TODO: remove in v0.29
/**
* @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `orderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
*/
orderBy<
OE extends
| OrderByExpression<DB, TB, never>
| DirectedOrderByStringReference<DB, TB, never>,
>(exprs: ReadonlyArray<OE>): OverBuilder<DB, TB>

// TODO: remove in v0.29
/**
* @deprecated It does ~2.9x more compile-time instantiations compared to a `orderBy(expr, direction)` call.
*/
orderBy<OE extends DirectedOrderByStringReference<DB, TB, never>>(
expr: OE,
): OverBuilder<DB, TB>

// TODO: remove in v0.29
/**
* @deprecated Use `orderBy(expr, (ob) => ...)` instead.
*/
orderBy<OE extends OrderByExpression<DB, TB, never>>(
expr: OE,
modifiers: Expression<any>,
): OverBuilder<DB, TB>

orderBy(...args: any[]): any {
return new OverBuilder({
overNode: OverNode.cloneWithOrderByItems(
this.#props.overNode,
parseOrderBy([orderBy, direction]),
parseOrderBy(args),
),
})
}

clearOrderBy(): OverBuilder<DB, TB> {
return new OverBuilder({
overNode: QueryNode.cloneWithoutOrderBy(this.#props.overNode),
})
}

/**
* Adds partition by clause item/s inside the over function.
*