164 lines
4.6 KiB
PHP
164 lines
4.6 KiB
PHP
|
<?php
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
/**
|
||
|
* CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
|
||
|
* Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
|
||
|
*
|
||
|
* Licensed under The MIT License
|
||
|
* For full copyright and license information, please see the LICENSE.txt
|
||
|
* Redistributions of files must retain the above copyright notice.
|
||
|
*
|
||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
|
||
|
* @link https://cakephp.org CakePHP(tm) Project
|
||
|
* @since 4.1.0
|
||
|
* @license https://opensource.org/licenses/mit-license.php MIT License
|
||
|
*/
|
||
|
namespace Cake\Database\Expression;
|
||
|
|
||
|
/**
|
||
|
* This defines the functions used for building window expressions.
|
||
|
*/
|
||
|
interface WindowInterface
|
||
|
{
|
||
|
/**
|
||
|
* @var string
|
||
|
*/
|
||
|
public const PRECEDING = 'PRECEDING';
|
||
|
|
||
|
/**
|
||
|
* @var string
|
||
|
*/
|
||
|
public const FOLLOWING = 'FOLLOWING';
|
||
|
|
||
|
/**
|
||
|
* @var string
|
||
|
*/
|
||
|
public const RANGE = 'RANGE';
|
||
|
|
||
|
/**
|
||
|
* @var string
|
||
|
*/
|
||
|
public const ROWS = 'ROWS';
|
||
|
|
||
|
/**
|
||
|
* @var string
|
||
|
*/
|
||
|
public const GROUPS = 'GROUPS';
|
||
|
|
||
|
/**
|
||
|
* Adds one or more partition expressions to the window.
|
||
|
*
|
||
|
* @param \Cake\Database\ExpressionInterface|\Closure|array<\Cake\Database\ExpressionInterface|string>|string $partitions Partition expressions
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function partition($partitions);
|
||
|
|
||
|
/**
|
||
|
* Adds one or more order clauses to the window.
|
||
|
*
|
||
|
* @param \Cake\Database\ExpressionInterface|\Closure|array<\Cake\Database\ExpressionInterface|string>|string $fields Order expressions
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function order($fields);
|
||
|
|
||
|
/**
|
||
|
* Adds a simple range frame to the window.
|
||
|
*
|
||
|
* `$start`:
|
||
|
* - `0` - 'CURRENT ROW'
|
||
|
* - `null` - 'UNBOUNDED PRECEDING'
|
||
|
* - offset - 'offset PRECEDING'
|
||
|
*
|
||
|
* `$end`:
|
||
|
* - `0` - 'CURRENT ROW'
|
||
|
* - `null` - 'UNBOUNDED FOLLOWING'
|
||
|
* - offset - 'offset FOLLOWING'
|
||
|
*
|
||
|
* If you need to use 'FOLLOWING' with frame start or
|
||
|
* 'PRECEDING' with frame end, use `frame()` instead.
|
||
|
*
|
||
|
* @param \Cake\Database\ExpressionInterface|string|int|null $start Frame start
|
||
|
* @param \Cake\Database\ExpressionInterface|string|int|null $end Frame end
|
||
|
* If not passed in, only frame start SQL will be generated.
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function range($start, $end = 0);
|
||
|
|
||
|
/**
|
||
|
* Adds a simple rows frame to the window.
|
||
|
*
|
||
|
* See `range()` for details.
|
||
|
*
|
||
|
* @param int|null $start Frame start
|
||
|
* @param int|null $end Frame end
|
||
|
* If not passed in, only frame start SQL will be generated.
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function rows(?int $start, ?int $end = 0);
|
||
|
|
||
|
/**
|
||
|
* Adds a simple groups frame to the window.
|
||
|
*
|
||
|
* See `range()` for details.
|
||
|
*
|
||
|
* @param int|null $start Frame start
|
||
|
* @param int|null $end Frame end
|
||
|
* If not passed in, only frame start SQL will be generated.
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function groups(?int $start, ?int $end = 0);
|
||
|
|
||
|
/**
|
||
|
* Adds a frame to the window.
|
||
|
*
|
||
|
* Use the `range()`, `rows()` or `groups()` helpers if you need simple
|
||
|
* 'BETWEEN offset PRECEDING and offset FOLLOWING' frames.
|
||
|
*
|
||
|
* You can specify any direction for both frame start and frame end.
|
||
|
*
|
||
|
* With both `$startOffset` and `$endOffset`:
|
||
|
* - `0` - 'CURRENT ROW'
|
||
|
* - `null` - 'UNBOUNDED'
|
||
|
*
|
||
|
* @param string $type Frame type
|
||
|
* @param \Cake\Database\ExpressionInterface|string|int|null $startOffset Frame start offset
|
||
|
* @param string $startDirection Frame start direction
|
||
|
* @param \Cake\Database\ExpressionInterface|string|int|null $endOffset Frame end offset
|
||
|
* @param string $endDirection Frame end direction
|
||
|
* @return $this
|
||
|
* @throws \InvalidArgumentException WHen offsets are negative.
|
||
|
* @psalm-param self::RANGE|self::ROWS|self::GROUPS $type
|
||
|
* @psalm-param self::PRECEDING|self::FOLLOWING $startDirection
|
||
|
* @psalm-param self::PRECEDING|self::FOLLOWING $endDirection
|
||
|
*/
|
||
|
public function frame(
|
||
|
string $type,
|
||
|
$startOffset,
|
||
|
string $startDirection,
|
||
|
$endOffset,
|
||
|
string $endDirection
|
||
|
);
|
||
|
|
||
|
/**
|
||
|
* Adds current row frame exclusion.
|
||
|
*
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function excludeCurrent();
|
||
|
|
||
|
/**
|
||
|
* Adds group frame exclusion.
|
||
|
*
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function excludeGroup();
|
||
|
|
||
|
/**
|
||
|
* Adds ties frame exclusion.
|
||
|
*
|
||
|
* @return $this
|
||
|
*/
|
||
|
public function excludeTies();
|
||
|
}
|