postgresql/src/backend/parser
Tom Lane 2d8bff603c Make all ereport() calls within gram.y provide error locations.
This patch responds to a comment that I (tgl) made in the
discussion leading up to 774171c4f, that really all errors
occurring during raw parsing should provide error cursors.
Syntax errors reported by Bison will have one, and most of
the handwritten ereport's in gram.y already provide one,
but there were a few stragglers.

(It is not claimed that this handles every failure reachable
during raw parsing --- out-of-memory is an obvious exception.
But this makes a good start on cases that are likely to occur.)

While we're at it, clean up the reported positions for errors
associated with LIMIT/OFFSET clauses.  Previously we were
relying on applying exprLocation() to the contained expressions,
but that leads to slightly odd cursor placement, e.g.

regression=# (select * from foo limit 10) limit 10;
ERROR:  multiple LIMIT clauses not allowed
LINE 1: (select * from foo limit 10) limit 10;
                                           ^

We can afford to keep a little more state in the transient
SelectLimit structs in order to make that better.

Jian He and Tom Lane (extracted from a larger patch by Jian,
with some additional work by me)

Discussion: https://postgr.es/m/CACJufxEmONE3P2En=jopZy1m=cCCUs65M4+1o52MW5og9oaUPA@mail.gmail.com
2024-10-31 16:09:27 -04:00
..
.gitignore Convert cvsignore to gitignore, and add .gitignore for build targets. 2010-09-22 12:57:04 +02:00
analyze.c Track more precisely query locations for nested statements 2024-10-24 09:29:54 +09:00
check_keywords.pl Update copyright for 2024 2024-01-03 20:49:05 -05:00
gram.y Make all ereport() calls within gram.y provide error locations. 2024-10-31 16:09:27 -04:00
gramparse.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
Makefile Add basic JSON_TABLE() functionality 2024-04-04 20:20:15 +09:00
meson.build Add basic JSON_TABLE() functionality 2024-04-04 20:20:15 +09:00
parse_agg.c Remove incorrect Assert. 2024-09-11 11:41:47 -04:00
parse_clause.c Remove unused #include's from backend .c files 2024-10-27 08:26:50 +01:00
parse_coerce.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
parse_collate.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
parse_cte.c Avoid unhelpful internal error for incorrect recursive-WITH queries. 2024-07-14 13:49:46 -04:00
parse_enr.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
parse_expr.c Remove unused #include's from backend .c files 2024-10-27 08:26:50 +01:00
parse_func.c Fix query pullup issue with WindowClause runCondition 2024-05-05 12:54:46 +12:00
parse_jsontable.c Remove unused #include's from backend .c files 2024-10-27 08:26:50 +01:00
parse_merge.c Use macro NUM_MERGE_MATCH_KINDS instead of '3' in MERGE code. 2024-04-19 09:40:20 +01:00
parse_node.c Remove unused #include's from backend .c files 2024-03-04 12:02:20 +01:00
parse_oper.c Update copyright for 2024 2024-01-03 20:49:05 -05:00
parse_param.c Limit max parameter number with MaxAllocSize 2024-07-02 09:29:26 +02:00
parse_relation.c Introduce an RTE for the grouping step 2024-09-10 12:35:34 +09:00
parse_target.c Introduce an RTE for the grouping step 2024-09-10 12:35:34 +09:00
parse_type.c Add a const decoration 2024-01-25 13:34:49 +01:00
parse_utilcmd.c Repair pg_upgrade for identity sequences with non-default persistence. 2024-09-17 15:53:35 -04:00
parser.c Make the order of the header file includes consistent 2024-03-13 15:07:00 +01:00
README Remove outdated reference to a removed file 2023-06-15 22:35:42 +09:00
scan.l Prevent mis-encoding of "trailing junk after numeric literal" errors. 2024-09-05 12:42:33 -04:00
scansup.c Update copyright for 2024 2024-01-03 20:49:05 -05:00

src/backend/parser/README

Parser
======

This directory does more than tokenize and parse SQL queries.  It also
creates Query structures for the various complex queries that are passed
to the optimizer and then executor.

parser.c	things start here
scan.l		break query into tokens
scansup.c	handle escapes in input strings
gram.y		parse the tokens and produce a "raw" parse tree
analyze.c	top level of parse analysis for optimizable queries
parse_agg.c	handle aggregates, like SUM(col1),  AVG(col2), ...
parse_clause.c	handle clauses like WHERE, ORDER BY, GROUP BY, ...
parse_coerce.c	handle coercing expressions to different data types
parse_collate.c	assign collation information in completed expressions
parse_cte.c	handle Common Table Expressions (WITH clauses)
parse_expr.c	handle expressions like col, col + 3, x = 3 or x = 4
parse_enr.c	handle ephemeral named rels (trigger transition tables, ...)
parse_func.c	handle functions, table.column and column identifiers
parse_merge.c	handle MERGE
parse_node.c	create nodes for various structures
parse_oper.c	handle operators in expressions
parse_param.c	handle Params (for the cases used in the core backend)
parse_relation.c support routines for tables and column handling
parse_target.c	handle the result list of the query
parse_type.c	support routines for data type handling
parse_utilcmd.c	parse analysis for utility commands (done at execution time)

See also src/common/keywords.c, which contains the table of standard
keywords and the keyword lookup function.  We separated that out because
various frontend code wants to use it too.