mirror of
https://github.com/postgres/postgres.git
synced 2026-01-05 23:38:41 +03:00
All expression nodes now have an explicit output-collation field, unless they are known to only return a noncollatable data type (such as boolean or record). Also, nodes that can invoke collation-aware functions store a separate field that is the collation value to pass to the function. This avoids confusion that arises when a function has collatable inputs and noncollatable output type, or vice versa. Also, replace the parser's on-the-fly collation assignment method with a post-pass over the completed expression tree. This allows us to use a more complex (and hopefully more nearly spec-compliant) assignment rule without paying for it in extra storage in every expression node. Fix assorted bugs in the planner's handling of collations by making collation one of the defining properties of an EquivalenceClass and by converting CollateExprs into discardable RelabelType nodes during expression preprocessing.
31 lines
1.4 KiB
Plaintext
31 lines
1.4 KiB
Plaintext
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)
|