postgresql/src/backend/parser
Tom Lane 37d6d07dda Throw error for indeterminate collation of an ORDER/GROUP/DISTINCT target.
This restores a parse error that was thrown (though only in the ORDER BY
case) by the original collation patch.  I had removed it in my recent
revisions because it was thrown at a place where collations now haven't
been computed yet; but I thought of another way to handle it.

Throwing the error at parse time, rather than leaving it to be done at
runtime, is good because a syntax error pointer is helpful for localizing
the problem.  We can reasonably assume that the comparison function for a
collatable datatype will complain if it doesn't have a collation to use.
Now the planner might choose to implement GROUP or DISTINCT via hashing,
in which case no runtime error would actually occur, but it seems better
to throw error consistently rather than let the error depend on what the
planner chooses to do.  Another possible objection is that the user might
specify a nondefault sort operator that doesn't care about collation
... but that's surely an uncommon usage, and it wouldn't hurt him to throw
in a COLLATE clause anyway.  This change also makes the ORDER BY/GROUP
BY/DISTINCT case more consistent with the UNION/INTERSECT/EXCEPT case,
which was already coded to throw this error even though the same objections
could be raised there.
2011-03-22 15:58:03 -04:00
..
.gitignore Convert cvsignore to gitignore, and add .gitignore for build targets. 2010-09-22 12:57:04 +02:00
Makefile Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
README Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
analyze.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
gram.y Remove 13 keywords that are used only for ROLE options. 2011-03-15 10:22:58 -04:00
keywords.c Stamp copyrights for year 2011. 2011-01-01 13:18:15 -05:00
kwlookup.c Stamp copyrights for year 2011. 2011-01-01 13:18:15 -05:00
parse_agg.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_clause.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_coerce.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_collate.c Throw error for indeterminate collation of an ORDER/GROUP/DISTINCT target. 2011-03-22 15:58:03 -04:00
parse_cte.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_expr.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_func.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_node.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_oper.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_param.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_relation.c Remove collation information from TypeName, where it does not belong. 2011-03-09 22:39:20 -05:00
parse_target.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parse_type.c Split CollateClause into separate raw and analyzed node types. 2011-03-11 16:28:18 -05:00
parse_utilcmd.c Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
parser.c Stamp copyrights for year 2011. 2011-01-01 13:18:15 -05:00
scan.l Stamp copyrights for year 2011. 2011-01-01 13:18:15 -05:00
scansup.c Stamp copyrights for year 2011. 2011-01-01 13:18:15 -05:00

README

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
kwlookup.c	turn keywords into specific tokens
keywords.c	table of standard keywords (passed to kwlookup.c)
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_func.c	handle functions, table.column and column identifiers
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)