packages/sql-semantics/src/Core/Model/Ordering.php

1<?php
2
3declare(strict_types=1);
4
5namespace SqlSemantics\Core\Model;
6
7/**
8 * A result ordering expression with explicit direction and NULL placement.
9 *
10 * @example Accept this semantic value in a database-independent consumer
11 *     $consume = static fn (\SqlSemantics\Core\Model\Ordering $value): string => $value::class;
12 *     $consume instanceof \Closure // => true
13 *
14 * @visibility public
15 */
16final class Ordering
17{
18    /**
19     * @param Expression $expression Sort expression
20     * @param bool $descending Descending order
21     * @param bool|null $nullsFirst Explicit NULLS FIRST/LAST; null uses the dialect default
22     */
23    public function __construct(
24        public readonly Expression $expression,
25        public readonly bool $descending = false,
26        public readonly ?bool $nullsFirst = null,
27    ) {
28    }
29}
30