postgresql/src/backend/parser
Robert Haas e1e0a4d791 Avoid repeated name lookups during table and index DDL.
If the name lookups come to different conclusions due to concurrent
activity, we might perform some parts of the DDL on a different table
than other parts.  At least in the case of CREATE INDEX, this can be
used to cause the permissions checks to be performed against a
different table than the index creation, allowing for a privilege
escalation attack.

This changes the calling convention for DefineIndex, CreateTrigger,
transformIndexStmt, transformAlterTableStmt, CheckIndexCompatible
(in 9.2 and newer), and AlterTable (in 9.1 and older).  In addition,
CheckRelationOwnership is removed in 9.2 and newer and the calling
convention is changed in older branches.  A field has also been added
to the Constraint node (FkConstraint in 8.4).  Third-party code calling
these functions or using the Constraint node will require updating.

Report by Andres Freund.  Patch by Robert Haas and Andres Freund,
reviewed by Tom Lane.

Security: CVE-2014-0062
2014-02-17 09:33:32 -05:00
..
.gitignore Convert cvsignore to gitignore, and add .gitignore for build targets. 2010-09-22 12:57:04 +02:00
analyze.c Disallow LATERAL references to the target table of an UPDATE/DELETE. 2014-01-11 19:03:15 -05:00
check_keywords.pl pgindent run for release 9.3 2013-05-29 16:58:43 -04:00
gram.y Separate multixact freezing parameters from xid's 2014-02-13 19:30:30 -03:00
keywords.c Update copyrights for 2013 2013-01-01 17:15:01 -05:00
kwlookup.c Update copyrights for 2013 2013-01-01 17:15:01 -05:00
Makefile Refactor flex and bison make rules 2012-10-11 06:57:04 -04:00
parse_agg.c pgindent run for release 9.3 2013-05-29 16:58:43 -04:00
parse_clause.c Fix LATERAL references to target table of UPDATE/DELETE. 2014-01-07 15:25:19 -05:00
parse_coerce.c Update copyrights for 2013 2013-01-01 17:15:01 -05:00
parse_collate.c Fix crash in assign_collations_walker for EXISTS with empty SELECT list. 2013-12-02 20:28:49 -05:00
parse_cte.c Update copyrights for 2013 2013-01-01 17:15:01 -05:00
parse_expr.c Remove unnecessary restrictions about RowExprs in transformAExprIn(). 2013-06-09 18:39:20 -04:00
parse_func.c Support default arguments and named-argument notation for window functions. 2013-11-06 13:33:18 -05:00
parse_node.c Fix array slicing of int2vector and oidvector values. 2013-11-23 20:04:00 -05:00
parse_oper.c Allow CREATE TABLE IF EXIST so succeed if the schema is nonexistent 2013-01-26 13:24:50 -05:00
parse_param.c Clean up the mess around EXPLAIN and materialized views. 2013-04-12 19:25:31 -04:00
parse_relation.c Disallow LATERAL references to the target table of an UPDATE/DELETE. 2014-01-11 19:03:15 -05:00
parse_target.c Fix array slicing of int2vector and oidvector values. 2013-11-23 20:04:00 -05:00
parse_type.c Allow CREATE TABLE IF EXIST so succeed if the schema is nonexistent 2013-01-26 13:24:50 -05:00
parse_utilcmd.c Avoid repeated name lookups during table and index DDL. 2014-02-17 09:33:32 -05:00
parser.c Update copyrights for 2013 2013-01-01 17:15:01 -05:00
README Revise collation derivation method and expression-tree representation. 2011-03-19 20:30:08 -04:00
scan.l Fix length checking for Unicode identifiers containing escapes (U&"..."). 2014-02-13 14:24:45 -05:00
scansup.c Don't downcase non-ascii identifier chars in multi-byte encodings. 2013-06-08 10:00:09 -04: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
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)