Skip to content

Commit

Permalink
Drop Oracle 11g support
Browse files Browse the repository at this point in the history
  • Loading branch information
mvorisek committed Jan 23, 2022
1 parent fb4039a commit 5838275
Showing 1 changed file with 9 additions and 55 deletions.
64 changes: 9 additions & 55 deletions src/Persistence/Sql/Oracle/Query.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,70 +97,24 @@ protected function _sub_render_condition(array $row): string
return parent::_sub_render_condition($row);
}

public function groupConcat($field, string $delimiter = ',')
{
return $this->expr('listagg({field}, []) within group (order by {field})', ['field' => $field, $delimiter]);
}

// {{{ for Oracle 11 and lower to support LIMIT with OFFSET

protected $template_select = '[with]select[option] [field] [from] [table][join][where][group][having][order]';
/** @var string */
protected $template_select_limit = 'select * from (select "__t".*, rownum "__dsql_rownum" [from] ([with]select[option] [field] [from] [table][join][where][group][having][order]) "__t") where "__dsql_rownum" > [limit_start][and_limit_end]';

public function limit($cnt, $shift = null)
{
$this->template_select = $this->template_select_limit;

return parent::limit($cnt, $shift);
}

public function _render_limit_start(): string
{
return (string) ($this->args['limit']['shift'] ?? 0);
}

public function _render_and_limit_end(): ?string
public function _render_limit(): ?string
{
if (!$this->args['limit']['cnt']) {
return '';
if (!isset($this->args['limit'])) {
return null;
}

return ' and "__dsql_rownum" <= '
. max((int) ($this->args['limit']['cnt'] + $this->args['limit']['shift']), (int) $this->args['limit']['cnt']);
}

public function getRowsIterator(): \Traversable
{
foreach (parent::getRowsIterator() as $row) {
unset($row['__dsql_rownum']);

yield $row;
}
}

public function getRows(): array
{
return array_map(function ($row) {
unset($row['__dsql_rownum']);
$cnt = (int) $this->args['limit']['cnt'];
$shift = (int) $this->args['limit']['shift'];

return $row;
}, parent::getRows());
return ($shift ? ' offset ' . $shift . ' rows' : '')
. ($cnt ? ' fetch next ' . $cnt . ' rows only' : '');
}

public function getRow(): ?array
public function groupConcat($field, string $delimiter = ',')
{
$row = parent::getRow();

if ($row !== null) {
unset($row['__dsql_rownum']);
}

return $row;
return $this->expr('listagg({field}, []) within group (order by {field})', ['field' => $field, $delimiter]);
}

/// }}}

public function exists()
{
return $this->dsql()->mode('select')->field(
Expand Down

0 comments on commit 5838275

Please sign in to comment.