mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-20 21:37:11 +08:00
WITH TIES is an option to the FETCH FIRST N ROWS clause (the SQL standard's spelling of LIMIT), where you additionally get rows that compare equal to the last of those N rows by the columns in the mandatory ORDER BY clause. There was a proposal by Andrew Gierth to implement this functionality in a more powerful way that would yield more features, but the other patch had not been finished at this time, so we decided to use this one for now in the spirit of incremental development. Author: Surafel Temesgen <surafel3000@gmail.com> Reviewed-by: Álvaro Herrera <alvherre@alvh.no-ip.org> Reviewed-by: Tomas Vondra <tomas.vondra@2ndquadrant.com> Discussion: https://postgr.es/m/CALAY4q9ky7rD_A4vf=FVQvCGngm3LOes-ky0J6euMrg=_Se+ag@mail.gmail.com Discussion: https://postgr.es/m/87o8wvz253.fsf@news-spur.riddles.org.uk
55 lines
2.1 KiB
C
55 lines
2.1 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* parse_clause.h
|
|
* handle clauses in parser
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/parser/parse_clause.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PARSE_CLAUSE_H
|
|
#define PARSE_CLAUSE_H
|
|
|
|
#include "parser/parse_node.h"
|
|
|
|
extern void transformFromClause(ParseState *pstate, List *frmList);
|
|
extern int setTargetTable(ParseState *pstate, RangeVar *relation,
|
|
bool inh, bool alsoSource, AclMode requiredPerms);
|
|
|
|
extern Node *transformWhereClause(ParseState *pstate, Node *clause,
|
|
ParseExprKind exprKind, const char *constructName);
|
|
extern Node *transformLimitClause(ParseState *pstate, Node *clause,
|
|
ParseExprKind exprKind, const char *constructName,
|
|
LimitOption limitOption);
|
|
extern List *transformGroupClause(ParseState *pstate, List *grouplist,
|
|
List **groupingSets,
|
|
List **targetlist, List *sortClause,
|
|
ParseExprKind exprKind, bool useSQL99);
|
|
extern List *transformSortClause(ParseState *pstate, List *orderlist,
|
|
List **targetlist, ParseExprKind exprKind,
|
|
bool useSQL99);
|
|
|
|
extern List *transformWindowDefinitions(ParseState *pstate,
|
|
List *windowdefs,
|
|
List **targetlist);
|
|
|
|
extern List *transformDistinctClause(ParseState *pstate,
|
|
List **targetlist, List *sortClause, bool is_agg);
|
|
extern List *transformDistinctOnClause(ParseState *pstate, List *distinctlist,
|
|
List **targetlist, List *sortClause);
|
|
extern void transformOnConflictArbiter(ParseState *pstate,
|
|
OnConflictClause *onConflictClause,
|
|
List **arbiterExpr, Node **arbiterWhere,
|
|
Oid *constraint);
|
|
|
|
extern List *addTargetToSortList(ParseState *pstate, TargetEntry *tle,
|
|
List *sortlist, List *targetlist, SortBy *sortby);
|
|
extern Index assignSortGroupRef(TargetEntry *tle, List *tlist);
|
|
extern bool targetIsInSortList(TargetEntry *tle, Oid sortop, List *sortList);
|
|
|
|
#endif /* PARSE_CLAUSE_H */
|