diff options
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/analyze.c | 188 | ||||
-rw-r--r-- | src/backend/parser/parse.h | 431 | ||||
-rw-r--r-- | src/backend/parser/parse_agg.c | 55 | ||||
-rw-r--r-- | src/backend/parser/parse_clause.c | 57 | ||||
-rw-r--r-- | src/backend/parser/parse_expr.c | 87 | ||||
-rw-r--r-- | src/backend/parser/parse_func.c | 115 | ||||
-rw-r--r-- | src/backend/parser/parse_node.c | 21 | ||||
-rw-r--r-- | src/backend/parser/parse_oper.c | 19 | ||||
-rw-r--r-- | src/backend/parser/parse_relation.c | 41 | ||||
-rw-r--r-- | src/backend/parser/parse_target.c | 37 | ||||
-rw-r--r-- | src/backend/parser/parse_type.c | 9 | ||||
-rw-r--r-- | src/backend/parser/parser.c | 6 | ||||
-rw-r--r-- | src/backend/parser/scansup.c | 4 |
13 files changed, 551 insertions, 519 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index fc5ce5736e5..64ec5fa37d9 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.70 1998/02/10 04:01:38 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.71 1998/02/26 04:33:26 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -42,7 +42,7 @@ static Query *transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt); static Query *transformCursorStmt(ParseState *pstate, SelectStmt *stmt); static Query *transformCreateStmt(ParseState *pstate, CreateStmt *stmt); -List *extras = NIL; +List *extras = NIL; /* * parse_analyze - @@ -102,10 +102,10 @@ transformStmt(ParseState *pstate, Node *parseTree) switch (nodeTag(parseTree)) { - /*------------------------ - * Non-optimizable statements - *------------------------ - */ + /*------------------------ + * Non-optimizable statements + *------------------------ + */ case T_CreateStmt: result = transformCreateStmt(pstate, (CreateStmt *) parseTree); break; @@ -162,10 +162,10 @@ transformStmt(ParseState *pstate, Node *parseTree) } break; - /*------------------------ - * Optimizable statements - *------------------------ - */ + /*------------------------ + * Optimizable statements + *------------------------ + */ case T_InsertStmt: result = transformInsertStmt(pstate, (InsertStmt *) parseTree); break; @@ -179,7 +179,7 @@ transformStmt(ParseState *pstate, Node *parseTree) break; case T_SelectStmt: - if (!((SelectStmt *)parseTree)->portalname) + if (!((SelectStmt *) parseTree)->portalname) result = transformSelectStmt(pstate, (SelectStmt *) parseTree); else result = transformCursorStmt(pstate, (SelectStmt *) parseTree); @@ -218,7 +218,7 @@ transformDeleteStmt(ParseState *pstate, DeleteStmt *stmt) /* fix where clause */ qry->qual = transformWhereClause(pstate, stmt->whereClause); qry->hasSubLinks = pstate->p_hasSubLinks; - + qry->rtable = pstate->p_rtable; qry->resultRelation = refnameRangeTablePosn(pstate, stmt->relname, NULL); @@ -249,43 +249,43 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) /* fix the target list */ icolumns = pstate->p_insert_columns = makeTargetNames(pstate, stmt->cols); - + qry->targetList = transformTargetList(pstate, stmt->targetList); - + /* DEFAULT handling */ if (length(qry->targetList) < pstate->p_target_relation->rd_att->natts && pstate->p_target_relation->rd_att->constr && pstate->p_target_relation->rd_att->constr->num_defval > 0) { - AttributeTupleForm *att = pstate->p_target_relation->rd_att->attrs; - AttrDefault *defval = pstate->p_target_relation->rd_att->constr->defval; - int ndef = pstate->p_target_relation->rd_att->constr->num_defval; - - /* + AttributeTupleForm *att = pstate->p_target_relation->rd_att->attrs; + AttrDefault *defval = pstate->p_target_relation->rd_att->constr->defval; + int ndef = pstate->p_target_relation->rd_att->constr->num_defval; + + /* * if stmt->cols == NIL then makeTargetNames returns list of all * attrs: have to shorter icolumns list... */ if (stmt->cols == NIL) { - List *extrl; - int i = length(qry->targetList); - - foreach (extrl, icolumns) + List *extrl; + int i = length(qry->targetList); + + foreach(extrl, icolumns) { if (--i <= 0) break; } - freeList (lnext(extrl)); + freeList(lnext(extrl)); lnext(extrl) = NIL; } - + while (ndef-- > 0) { - List *tl; - Ident *id; - TargetEntry *te; - - foreach (tl, icolumns) + List *tl; + Ident *id; + TargetEntry *te; + + foreach(tl, icolumns) { id = (Ident *) lfirst(tl); if (!namestrcmp(&(att[defval[ndef].adnum - 1]->attname), id->name)) @@ -293,33 +293,34 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) } if (tl != NIL) /* something given for this attr */ continue; - /* - * Nothing given for this attr with DEFAULT expr, so - * add new TargetEntry to qry->targetList. - * Note, that we set resno to defval[ndef].adnum: - * it's what transformTargetList()->make_targetlist_expr() - * does for INSERT ... SELECT. But for INSERT ... VALUES - * pstate->p_last_resno is used. It doesn't matter for - * "normal" using (planner creates proper target list - * in preptlist.c), but may break RULEs in some way. - * It seems better to create proper target list here... + + /* + * Nothing given for this attr with DEFAULT expr, so add new + * TargetEntry to qry->targetList. Note, that we set resno to + * defval[ndef].adnum: it's what + * transformTargetList()->make_targetlist_expr() does for + * INSERT ... SELECT. But for INSERT ... VALUES + * pstate->p_last_resno is used. It doesn't matter for + * "normal" using (planner creates proper target list in + * preptlist.c), but may break RULEs in some way. It seems + * better to create proper target list here... */ te = makeNode(TargetEntry); te->resdom = makeResdom(defval[ndef].adnum, att[defval[ndef].adnum - 1]->atttypid, - att[defval[ndef].adnum - 1]->atttypmod, - pstrdup(nameout(&(att[defval[ndef].adnum - 1]->attname))), + att[defval[ndef].adnum - 1]->atttypmod, + pstrdup(nameout(&(att[defval[ndef].adnum - 1]->attname))), 0, 0, 0); te->fjoin = NULL; te->expr = (Node *) stringToNode(defval[ndef].adbin); - qry->targetList = lappend (qry->targetList, te); + qry->targetList = lappend(qry->targetList, te); } } - + /* fix where clause */ qry->qual = transformWhereClause(pstate, stmt->whereClause); qry->hasSubLinks = pstate->p_hasSubLinks; - + /* now the range table will not change */ qry->rtable = pstate->p_rtable; qry->resultRelation = refnameRangeTablePosn(pstate, stmt->relname, NULL); @@ -340,7 +341,8 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) parseCheckAggregates(pstate, qry); /* The INSERT INTO ... SELECT ... could have a UNION */ - qry->unionall = stmt->unionall; /* in child, so unionClause may be false */ + qry->unionall = stmt->unionall; /* in child, so unionClause may be + * false */ qry->unionClause = transformUnionClause(stmt->unionClause, qry->targetList); return (Query *) qry; @@ -353,33 +355,33 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) static char * makeTableName(void *elem,...) { - va_list args; + va_list args; - char *name; - char buf[NAMEDATALEN+1]; + char *name; + char buf[NAMEDATALEN + 1]; buf[0] = '\0'; - va_start(args,elem); + va_start(args, elem); name = elem; while (name != NULL) { /* not enough room for next part? then return nothing */ - if ((strlen(buf)+strlen(name)) >= (sizeof(buf)-1)) + if ((strlen(buf) + strlen(name)) >= (sizeof(buf) - 1)) return (NULL); if (strlen(buf) > 0) - strcat(buf,"_"); - strcat(buf,name); + strcat(buf, "_"); + strcat(buf, name); - name = va_arg(args,void *); + name = va_arg(args, void *); } va_end(args); - name = palloc(strlen(buf)+1); - strcpy(name,buf); + name = palloc(strlen(buf) + 1); + strcpy(name, buf); return (name); } @@ -391,10 +393,10 @@ CreateIndexName(char *tname, char *cname, char *label, List *indices) char *iname = NULL; List *ilist; IndexStmt *index; - char name2[NAMEDATALEN+1]; + char name2[NAMEDATALEN + 1]; /* use working storage, since we might be trying several possibilities */ - strcpy(name2,cname); + strcpy(name2, cname); while (iname == NULL) { iname = makeTableName(tname, name2, label, NULL); @@ -406,7 +408,7 @@ CreateIndexName(char *tname, char *cname, char *label, List *indices) while (ilist != NIL) { index = lfirst(ilist); - if (strcasecmp(iname,index->idxname) == 0) + if (strcasecmp(iname, index->idxname) == 0) break; ilist = lnext(ilist); @@ -419,7 +421,7 @@ CreateIndexName(char *tname, char *cname, char *label, List *indices) pfree(iname); iname = NULL; pass++; - sprintf(name2, "%s_%d", cname, (pass+1)); + sprintf(name2, "%s_%d", cname, (pass + 1)); } return (iname); @@ -444,7 +446,8 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) List *columns; List *dlist; ColumnDef *column; - List *constraints, *clist; + List *constraints, + *clist; Constraint *constraint; List *keys; Ident *key; @@ -467,7 +470,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) { case T_ColumnDef: column = (ColumnDef *) element; - columns = lappend(columns,column); + columns = lappend(columns, column); if (column->constraints != NIL) { clist = column->constraints; @@ -478,15 +481,15 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) { case CONSTR_NOTNULL: if (column->is_not_null) - elog(ERROR,"CREATE TABLE/NOT NULL already specified" - " for %s.%s", stmt->relname, column->colname); + elog(ERROR, "CREATE TABLE/NOT NULL already specified" + " for %s.%s", stmt->relname, column->colname); column->is_not_null = TRUE; break; case CONSTR_DEFAULT: if (column->defval != NULL) - elog(ERROR,"CREATE TABLE/DEFAULT multiple values specified" - " for %s.%s", stmt->relname, column->colname); + elog(ERROR, "CREATE TABLE/DEFAULT multiple values specified" + " for %s.%s", stmt->relname, column->colname); column->defval = constraint->def; break; @@ -513,7 +516,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) break; default: - elog(ERROR,"parser: internal error; unrecognized constraint",NULL); + elog(ERROR, "parser: internal error; unrecognized constraint", NULL); break; } clist = lnext(clist); @@ -545,16 +548,16 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) case CONSTR_NOTNULL: case CONSTR_DEFAULT: - elog(ERROR,"parser: internal error; illegal context for constraint",NULL); + elog(ERROR, "parser: internal error; illegal context for constraint", NULL); break; default: - elog(ERROR,"parser: internal error; unrecognized constraint",NULL); + elog(ERROR, "parser: internal error; unrecognized constraint", NULL); break; } break; default: - elog(ERROR,"parser: internal error; unrecognized node",NULL); + elog(ERROR, "parser: internal error; unrecognized node", NULL); } elements = lnext(elements); @@ -568,25 +571,25 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) * For UNIQUE, create an index as for PRIMARY KEYS, but do not insist on NOT NULL. * * Note that this code does not currently look for all possible redundant cases - * and either ignore or stop with warning. The create might fail later when - * names for indices turn out to be redundant, or a user might have specified - * extra useless indices which might hurt performance. - thomas 1997-12-08 + * and either ignore or stop with warning. The create might fail later when + * names for indices turn out to be redundant, or a user might have specified + * extra useless indices which might hurt performance. - thomas 1997-12-08 */ ilist = NIL; while (dlist != NIL) { constraint = lfirst(dlist); if (nodeTag(constraint) != T_Constraint) - elog(ERROR,"parser: internal error; unrecognized deferred node",NULL); + elog(ERROR, "parser: internal error; unrecognized deferred node", NULL); if (constraint->contype == CONSTR_PRIMARY) if (have_pkey) - elog(ERROR,"CREATE TABLE/PRIMARY KEY multiple primary keys" - " for table %s are not legal", stmt->relname); - else + elog(ERROR, "CREATE TABLE/PRIMARY KEY multiple primary keys" + " for table %s are not legal", stmt->relname); + else have_pkey = TRUE; else if (constraint->contype != CONSTR_UNIQUE) - elog(ERROR,"parser: internal error; unrecognized deferred constraint",NULL); + elog(ERROR, "parser: internal error; unrecognized deferred constraint", NULL); index = makeNode(IndexStmt); @@ -596,7 +599,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) else if (constraint->contype == CONSTR_PRIMARY) { if (have_pkey) - elog(ERROR,"CREATE TABLE/PRIMARY KEY multiple keys for table %s are not legal", stmt->relname); + elog(ERROR, "CREATE TABLE/PRIMARY KEY multiple keys for table %s are not legal", stmt->relname); have_pkey = TRUE; index->idxname = makeTableName(stmt->relname, "pkey", NULL); @@ -609,7 +612,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) index->indexParams = NIL; index->withClause = NIL; index->whereClause = NULL; - + keys = constraint->keys; while (keys != NIL) { @@ -619,17 +622,19 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) while (columns != NIL) { column = lfirst(columns); - if (strcasecmp(column->colname,key->name) == 0) break; - else column = NULL; + if (strcasecmp(column->colname, key->name) == 0) + break; + else + column = NULL; columns = lnext(columns); } if (column == NULL) - elog(ERROR,"parser: column '%s' in key does not exist",key->name); + elog(ERROR, "parser: column '%s' in key does not exist", key->name); if (constraint->contype == CONSTR_PRIMARY) column->is_not_null = TRUE; iparam = makeNode(IndexElem); - iparam->name = strcpy(palloc(strlen(column->colname)+1), column->colname); + iparam->name = strcpy(palloc(strlen(column->colname) + 1), column->colname); iparam->args = NIL; iparam->class = NULL; iparam->tname = NULL; @@ -642,12 +647,12 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) } if (index->idxname == NULL) - elog(ERROR,"parser: unable to construct implicit index for table %s" - "; name too long", stmt->relname); + elog(ERROR, "parser: unable to construct implicit index for table %s" + "; name too long", stmt->relname); else - elog(NOTICE,"CREATE TABLE/%s will create implicit index %s for table %s", - ((constraint->contype == CONSTR_PRIMARY)? "PRIMARY KEY": "UNIQUE"), - index->idxname, stmt->relname); + elog(NOTICE, "CREATE TABLE/%s will create implicit index %s for table %s", + ((constraint->contype == CONSTR_PRIMARY) ? "PRIMARY KEY" : "UNIQUE"), + index->idxname, stmt->relname); ilist = lappend(ilist, index); dlist = lnext(dlist); @@ -674,7 +679,7 @@ transformIndexStmt(ParseState *pstate, IndexStmt *stmt) /* take care of the where clause */ stmt->whereClause = transformWhereClause(pstate, stmt->whereClause); qry->hasSubLinks = pstate->p_hasSubLinks; - + stmt->rangetable = pstate->p_rtable; qry->utilityStmt = (Node *) stmt; @@ -793,7 +798,8 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt) if (pstate->p_hasAggs) parseCheckAggregates(pstate, qry); - qry->unionall = stmt->unionall; /* in child, so unionClause may be false */ + qry->unionall = stmt->unionall; /* in child, so unionClause may be + * false */ qry->unionClause = transformUnionClause(stmt->unionClause, qry->targetList); return (Query *) qry; diff --git a/src/backend/parser/parse.h b/src/backend/parser/parse.h index 7b653a162b8..1bf37f80bf5 100644 --- a/src/backend/parser/parse.h +++ b/src/backend/parser/parse.h @@ -1,224 +1,225 @@ typedef union { - double dval; - int ival; - char chr; - char *str; - bool boolean; - bool* pboolean; /* for pg_user privileges */ - List *list; - Node *node; - Value *value; + double dval; + int ival; + char chr; + char *str; + bool boolean; + bool *pboolean; /* for pg_user privileges */ + List *list; + Node *node; + Value *value; - Attr *attr; + Attr *attr; - TypeName *typnam; - DefElem *defelt; - ParamString *param; - SortGroupBy *sortgroupby; - IndexElem *ielem; - RangeVar *range; - RelExpr *relexp; - A_Indices *aind; - ResTarget *target; - ParamNo *paramno; + TypeName *typnam; + DefElem *defelt; + ParamString *param; + SortGroupBy *sortgroupby; + IndexElem *ielem; + RangeVar *range; + RelExpr *relexp; + A_Indices *aind; + ResTarget *target; + ParamNo *paramno; - VersionStmt *vstmt; - DefineStmt *dstmt; - RuleStmt *rstmt; - InsertStmt *astmt; + VersionStmt *vstmt; + DefineStmt *dstmt; + RuleStmt *rstmt; + InsertStmt *astmt; } YYSTYPE; -#define ACTION 258 -#define ADD 259 -#define ALL 260 -#define ALTER 261 -#define AND 262 -#define ANY 263 -#define AS 264 -#define ASC 265 -#define BEGIN_TRANS 266 -#define BETWEEN 267 -#define BOTH 268 -#define BY 269 -#define CASCADE 270 -#define CAST 271 -#define CHAR 272 -#define CHARACTER 273 -#define CHECK 274 -#define CLOSE 275 -#define COLLATE 276 -#define COLUMN 277 -#define COMMIT 278 -#define CONSTRAINT 279 -#define CREATE 280 -#define CROSS 281 -#define CURRENT 282 -#define CURRENT_DATE 283 -#define CURRENT_TIME 284 -#define CURRENT_TIMESTAMP 285 -#define CURRENT_USER 286 -#define CURSOR 287 -#define DAY_P 288 -#define DECIMAL 289 -#define DECLARE 290 -#define DEFAULT 291 -#define DELETE 292 -#define DESC 293 -#define DISTINCT 294 -#define DOUBLE 295 -#define DROP 296 -#define END_TRANS 297 -#define EXECUTE 298 -#define EXISTS 299 -#define EXTRACT 300 -#define FETCH 301 -#define FLOAT 302 -#define FOR 303 -#define FOREIGN 304 -#define FROM 305 -#define FULL 306 -#define GRANT 307 -#define GROUP 308 -#define HAVING 309 -#define HOUR_P 310 -#define IN 311 -#define INNER_P 312 -#define INSERT 313 -#define INTERVAL 314 -#define INTO 315 -#define IS 316 -#define JOIN 317 -#define KEY 318 -#define LANGUAGE 319 -#define LEADING 320 -#define LEFT 321 -#define LIKE 322 -#define LOCAL 323 -#define MATCH 324 -#define MINUTE_P 325 -#define MONTH_P 326 -#define NATIONAL 327 -#define NATURAL 328 -#define NCHAR 329 -#define NO 330 -#define NOT 331 -#define NOTIFY 332 -#define NULL_P 333 -#define NUMERIC 334 -#define ON 335 -#define OPTION 336 -#define OR 337 -#define ORDER 338 -#define OUTER_P 339 -#define PARTIAL 340 -#define POSITION 341 -#define PRECISION 342 -#define PRIMARY 343 -#define PRIVILEGES 344 -#define PROCEDURE 345 -#define PUBLIC 346 -#define REFERENCES 347 -#define REVOKE 348 -#define RIGHT 349 -#define ROLLBACK 350 -#define SECOND_P 351 -#define SELECT 352 -#define SET 353 -#define SUBSTRING 354 -#define TABLE 355 -#define TIME 356 -#define TIMESTAMP 357 -#define TO 358 -#define TRAILING 359 -#define TRANSACTION 360 -#define TRIM 361 -#define UNION 362 -#define UNIQUE 363 -#define UPDATE 364 -#define USING 365 -#define VALUES 366 -#define VARCHAR 367 -#define VARYING 368 -#define VIEW 369 -#define WHERE 370 -#define WITH 371 -#define WORK 372 -#define YEAR_P 373 -#define ZONE 374 -#define FALSE_P 375 -#define TRIGGER 376 -#define TRUE_P 377 -#define TYPE_P 378 -#define ABORT_TRANS 379 -#define AFTER 380 -#define AGGREGATE 381 -#define ANALYZE 382 -#define BACKWARD 383 -#define BEFORE 384 -#define BINARY 385 -#define CLUSTER 386 -#define COPY 387 -#define DATABASE 388 -#define DELIMITERS 389 -#define DO 390 -#define EACH 391 -#define EXPLAIN 392 -#define EXTEND 393 -#define FORWARD 394 -#define FUNCTION 395 -#define HANDLER 396 -#define INDEX 397 -#define INHERITS 398 -#define INSTEAD 399 -#define ISNULL 400 -#define LANCOMPILER 401 -#define LISTEN 402 -#define LOAD 403 -#define LOCK_P 404 -#define LOCATION 405 -#define MOVE 406 -#define NEW 407 -#define NONE 408 -#define NOTHING 409 -#define NOTNULL 410 -#define OIDS 411 -#define OPERATOR 412 -#define PROCEDURAL 413 -#define RECIPE 414 -#define RENAME 415 -#define RESET 416 -#define RETURNS 417 -#define ROW 418 -#define RULE 419 -#define SEQUENCE 420 -#define SETOF 421 -#define SHOW 422 -#define STATEMENT 423 -#define STDIN 424 -#define STDOUT 425 -#define TRUSTED 426 -#define VACUUM 427 -#define VERBOSE 428 -#define VERSION 429 -#define ARCHIVE 430 -#define USER 431 -#define PASSWORD 432 -#define CREATEDB 433 -#define NOCREATEDB 434 -#define CREATEUSER 435 -#define NOCREATEUSER 436 -#define VALID 437 -#define UNTIL 438 -#define IDENT 439 -#define SCONST 440 -#define Op 441 -#define ICONST 442 -#define PARAM 443 -#define FCONST 444 -#define OP 445 -#define UMINUS 446 -#define TYPECAST 447 -#define REDUCE 448 + +#define ACTION 258 +#define ADD 259 +#define ALL 260 +#define ALTER 261 +#define AND 262 +#define ANY 263 +#define AS 264 +#define ASC 265 +#define BEGIN_TRANS 266 +#define BETWEEN 267 +#define BOTH 268 +#define BY 269 +#define CASCADE 270 +#define CAST 271 +#define CHAR 272 +#define CHARACTER 273 +#define CHECK 274 +#define CLOSE 275 +#define COLLATE 276 +#define COLUMN 277 +#define COMMIT 278 +#define CONSTRAINT 279 +#define CREATE 280 +#define CROSS 281 +#define CURRENT 282 +#define CURRENT_DATE 283 +#define CURRENT_TIME 284 +#define CURRENT_TIMESTAMP 285 +#define CURRENT_USER 286 +#define CURSOR 287 +#define DAY_P 288 +#define DECIMAL 289 +#define DECLARE 290 +#define DEFAULT 291 +#define DELETE 292 +#define DESC 293 +#define DISTINCT 294 +#define DOUBLE 295 +#define DROP 296 +#define END_TRANS 297 +#define EXECUTE 298 +#define EXISTS 299 +#define EXTRACT 300 +#define FETCH 301 +#define FLOAT 302 +#define FOR 303 +#define FOREIGN 304 +#define FROM 305 +#define FULL 306 +#define GRANT 307 +#define GROUP 308 +#define HAVING 309 +#define HOUR_P 310 +#define IN 311 +#define INNER_P 312 +#define INSERT 313 +#define INTERVAL 314 +#define INTO 315 +#define IS 316 +#define JOIN 317 +#define KEY 318 +#define LANGUAGE 319 +#define LEADING 320 +#define LEFT 321 +#define LIKE 322 +#define LOCAL 323 +#define MATCH 324 +#define MINUTE_P 325 +#define MONTH_P 326 +#define NATIONAL 327 +#define NATURAL 328 +#define NCHAR 329 +#define NO 330 +#define NOT 331 +#define NOTIFY 332 +#define NULL_P 333 +#define NUMERIC 334 +#define ON 335 +#define OPTION 336 +#define OR 337 +#define ORDER 338 +#define OUTER_P 339 +#define PARTIAL 340 +#define POSITION 341 +#define PRECISION 342 +#define PRIMARY 343 +#define PRIVILEGES 344 +#define PROCEDURE 345 +#define PUBLIC 346 +#define REFERENCES 347 +#define REVOKE 348 +#define RIGHT 349 +#define ROLLBACK 350 +#define SECOND_P 351 +#define SELECT 352 +#define SET 353 +#define SUBSTRING 354 +#define TABLE 355 +#define TIME 356 +#define TIMESTAMP 357 +#define TO 358 +#define TRAILING 359 +#define TRANSACTION 360 +#define TRIM 361 +#define UNION 362 +#define UNIQUE 363 +#define UPDATE 364 +#define USING 365 +#define VALUES 366 +#define VARCHAR 367 +#define VARYING 368 +#define VIEW 369 +#define WHERE 370 +#define WITH 371 +#define WORK 372 +#define YEAR_P 373 +#define ZONE 374 +#define FALSE_P 375 +#define TRIGGER 376 +#define TRUE_P 377 +#define TYPE_P 378 +#define ABORT_TRANS 379 +#define AFTER 380 +#define AGGREGATE 381 +#define ANALYZE 382 +#define BACKWARD 383 +#define BEFORE 384 +#define BINARY 385 +#define CLUSTER 386 +#define COPY 387 +#define DATABASE 388 +#define DELIMITERS 389 +#define DO 390 +#define EACH 391 +#define EXPLAIN 392 +#define EXTEND 393 +#define FORWARD 394 +#define FUNCTION 395 +#define HANDLER 396 +#define INDEX 397 +#define INHERITS 398 +#define INSTEAD 399 +#define ISNULL 400 +#define LANCOMPILER 401 +#define LISTEN 402 +#define LOAD 403 +#define LOCK_P 404 +#define LOCATION 405 +#define MOVE 406 +#define NEW 407 +#define NONE 408 +#define NOTHING 409 +#define NOTNULL 410 +#define OIDS 411 +#define OPERATOR 412 +#define PROCEDURAL 413 +#define RECIPE 414 +#define RENAME 415 +#define RESET 416 +#define RETURNS 417 +#define ROW 418 +#define RULE 419 +#define SEQUENCE 420 +#define SETOF 421 +#define SHOW 422 +#define STATEMENT 423 +#define STDIN 424 +#define STDOUT 425 +#define TRUSTED 426 +#define VACUUM 427 +#define VERBOSE 428 +#define VERSION 429 +#define ARCHIVE 430 +#define USER 431 +#define PASSWORD 432 +#define CREATEDB 433 +#define NOCREATEDB 434 +#define CREATEUSER 435 +#define NOCREATEUSER 436 +#define VALID 437 +#define UNTIL 438 +#define IDENT 439 +#define SCONST 440 +#define Op 441 +#define ICONST 442 +#define PARAM 443 +#define FCONST 444 +#define OP 445 +#define UMINUS 446 +#define TYPECAST 447 +#define REDUCE 448 extern YYSTYPE yylval; diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index 8474d2be411..e7a88101960 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.8 1998/01/20 05:04:11 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.9 1998/02/26 04:33:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -218,9 +218,9 @@ parseCheckAggregates(ParseState *pstate, Query *qry) } -Aggreg * +Aggreg * ParseAgg(ParseState *pstate, char *aggname, Oid basetype, - List *target, int precedence) + List *target, int precedence) { Oid fintype; Oid vartype; @@ -229,7 +229,7 @@ ParseAgg(ParseState *pstate, char *aggname, Oid basetype, Aggreg *aggreg; HeapTuple theAggTuple; bool usenulls = false; - + theAggTuple = SearchSysCacheTuple(AGGNAME, PointerGetDatum(aggname), ObjectIdGetDatum(basetype), 0, 0); @@ -237,34 +237,33 @@ ParseAgg(ParseState *pstate, char *aggname, Oid basetype, elog(ERROR, "aggregate %s does not exist", aggname); /* - * We do a major hack for count(*) here. + * We do a major hack for count(*) here. * - * Count(*) poses several problems. First, we need a field that is - * guaranteed to be in the range table, and unique. Using a constant - * causes the optimizer to properly remove the aggragate from any - * elements of the query. - * Using just 'oid', which can not be null, in the parser fails on: + * Count(*) poses several problems. First, we need a field that is + * guaranteed to be in the range table, and unique. Using a constant + * causes the optimizer to properly remove the aggragate from any + * elements of the query. Using just 'oid', which can not be null, in + * the parser fails on: * - * select count(*) from tab1, tab2 -- oid is not unique - * select count(*) from viewtable -- views don't have real oids + * select count(*) from tab1, tab2 -- oid is not unique select + * count(*) from viewtable -- views don't have real oids * - * So, for an aggregate with parameter '*', we use the first valid - * range table entry, and pick the first column from the table. - * We set a flag to count nulls, because we could have nulls in - * that column. + * So, for an aggregate with parameter '*', we use the first valid range + * table entry, and pick the first column from the table. We set a + * flag to count nulls, because we could have nulls in that column. * - * It's an ugly job, but someone has to do it. - * bjm 1998/1/18 + * It's an ugly job, but someone has to do it. bjm 1998/1/18 */ - + if (nodeTag(lfirst(target)) == T_Const) { - Const *con = (Const *)lfirst(target); - + Const *con = (Const *) lfirst(target); + if (con->consttype == UNKNOWNOID && VARSIZE(con->constvalue) == VARHDRSZ) { - Attr *attr = makeNode(Attr); - List *rtable, *rlist; + Attr *attr = makeNode(Attr); + List *rtable, + *rlist; RangeTblEntry *first_valid_rte; Assert(lnext(target) == NULL); @@ -273,12 +272,12 @@ ParseAgg(ParseState *pstate, char *aggname, Oid basetype, rtable = lnext(lnext(pstate->p_rtable)); else rtable = pstate->p_rtable; - + first_valid_rte = NULL; foreach(rlist, rtable) { RangeTblEntry *rte = lfirst(rlist); - + /* only entries on outer(non-function?) scope */ if (!rte->inFromCl && rte != pstate->p_target_rangetblentry) continue; @@ -288,16 +287,16 @@ ParseAgg(ParseState *pstate, char *aggname, Oid basetype, } if (first_valid_rte == NULL) elog(ERROR, "Can't find column to do aggregate(*) on."); - + attr->relname = first_valid_rte->refname; attr->attrs = lcons(makeString( - get_attname(first_valid_rte->relid,1)),NIL); + get_attname(first_valid_rte->relid, 1)), NIL); lfirst(target) = transformExpr(pstate, (Node *) attr, precedence); usenulls = true; } } - + aggform = (Form_pg_aggregate) GETSTRUCT(theAggTuple); fintype = aggform->aggfinaltype; xfn1 = aggform->aggtransfn1; diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index 8fdd77ea72f..ad38817a0bb 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.12 1998/01/20 22:55:25 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.13 1998/02/26 04:33:29 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -26,8 +26,9 @@ #include "parser/parse_relation.h" #include "parser/parse_target.h" -static TargetEntry *find_targetlist_entry(ParseState *pstate, - SortGroupBy *sortgroupby, List *tlist); +static TargetEntry * +find_targetlist_entry(ParseState *pstate, + SortGroupBy *sortgroupby, List *tlist); static void parseFromClause(ParseState *pstate, List *frmList); /* @@ -39,8 +40,8 @@ void makeRangeTable(ParseState *pstate, char *relname, List *frmList) { RangeTblEntry *rte; - int sublevels_up; - + int sublevels_up; + parseFromClause(pstate, frmList); if (relname == NULL) @@ -48,7 +49,7 @@ makeRangeTable(ParseState *pstate, char *relname, List *frmList) if (refnameRangeTablePosn(pstate, relname, &sublevels_up) == 0 || sublevels_up != 0) - rte = addRangeTableEntry(pstate, relname, relname, FALSE, FALSE); + rte = addRangeTableEntry(pstate, relname, relname, FALSE, FALSE); else rte = refnameRangeTableEntry(pstate, relname); @@ -69,7 +70,7 @@ transformWhereClause(ParseState *pstate, Node *a_expr) Node *qual; if (a_expr == NULL) - return NULL; /* no qualifiers */ + return NULL; /* no qualifiers */ pstate->p_in_where_clause = true; qual = transformExpr(pstate, a_expr, EXPR_COLUMN_FIRST); @@ -139,7 +140,7 @@ find_targetlist_entry(ParseState *pstate, SortGroupBy *sortgroupby, List *tlist) TargetEntry *target_result = NULL; if (sortgroupby->range) - real_rtable_pos = refnameRangeTablePosn(pstate, sortgroupby->range, NULL); + real_rtable_pos = refnameRangeTablePosn(pstate, sortgroupby->range, NULL); foreach(i, tlist) { @@ -216,21 +217,21 @@ transformGroupClause(ParseState *pstate, List *grouplist, List *targetlist) else { List *i; - - foreach (i, glist) + + foreach(i, glist) { - GroupClause *gcl = (GroupClause *) lfirst (i); - - if ( gcl->entry == grpcl->entry ) + GroupClause *gcl = (GroupClause *) lfirst(i); + + if (gcl->entry == grpcl->entry) break; } - if ( i == NIL ) /* not in grouplist already */ + if (i == NIL) /* not in grouplist already */ { lnext(gl) = lcons(grpcl, NIL); gl = lnext(gl); } else - pfree (grpcl); /* get rid of this */ + pfree(grpcl); /* get rid of this */ } grouplist = lnext(grouplist); } @@ -259,7 +260,7 @@ transformSortClause(ParseState *pstate, TargetEntry *restarget; Resdom *resdom; - + restarget = find_targetlist_entry(pstate, sortby, targetlist); if (restarget == NULL) elog(ERROR, "The field being ordered by must appear in the target list"); @@ -273,21 +274,21 @@ transformSortClause(ParseState *pstate, else { List *i; - - foreach (i, sortlist) + + foreach(i, sortlist) { - SortClause *scl = (SortClause *) lfirst (i); - - if ( scl->resdom == sortcl->resdom ) + SortClause *scl = (SortClause *) lfirst(i); + + if (scl->resdom == sortcl->resdom) break; } - if ( i == NIL ) /* not in sortlist already */ + if (i == NIL) /* not in sortlist already */ { lnext(s) = lcons(sortcl, NIL); s = lnext(s); } else - pfree (sortcl); /* get rid of this */ + pfree(sortcl); /* get rid of this */ } orderlist = lnext(orderlist); } @@ -295,7 +296,7 @@ transformSortClause(ParseState *pstate, if (uniqueFlag) { List *i; - + if (uniqueFlag[0] == '*') { @@ -342,7 +343,7 @@ transformSortClause(ParseState *pstate, } if (i == NIL) elog(ERROR, "The field specified in the UNIQUE ON clause is not in the targetlist"); - + foreach(s, sortlist) { SortClause *sortcl = lfirst(s); @@ -375,15 +376,15 @@ transformSortClause(ParseState *pstate, List * transformUnionClause(List *unionClause, List *targetlist) { - List *union_list = NIL; + List *union_list = NIL; QueryTreeList *qlist; - int i; + int i; if (unionClause) { qlist = parse_analyze(unionClause, NULL); - for (i=0; i < qlist->len; i++) + for (i = 0; i < qlist->len; i++) union_list = lappend(union_list, qlist->qtrees[i]); /* we need to check return types are consistent here */ return union_list; diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 8f0a959682e..62a53976a5b 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.21 1998/02/13 08:10:33 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.22 1998/02/26 04:33:30 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -57,7 +57,7 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) /* what if att.attrs == "*"? */ temp = ParseNestedFuncOrColumn(pstate, att, &pstate->p_last_resno, - precedence); + precedence); if (att->indirection != NIL) { List *idx = att->indirection; @@ -147,8 +147,8 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) result = ParseFuncOrColumn(pstate, "nullvalue", lcons(lexpr, NIL), - &pstate->p_last_resno, - precedence); + &pstate->p_last_resno, + precedence); } break; case NOTNULL: @@ -157,8 +157,8 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) result = ParseFuncOrColumn(pstate, "nonnullvalue", lcons(lexpr, NIL), - &pstate->p_last_resno, - precedence); + &pstate->p_last_resno, + precedence); } break; case AND: @@ -169,11 +169,11 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) if (exprType(lexpr) != BOOLOID) elog(ERROR, "left-hand side of AND is type '%s', not bool", - typeidTypeName(exprType(lexpr))); + typeidTypeName(exprType(lexpr))); if (exprType(rexpr) != BOOLOID) elog(ERROR, "right-hand side of AND is type '%s', not bool", - typeidTypeName(exprType(rexpr))); + typeidTypeName(exprType(rexpr))); expr->typeOid = BOOLOID; expr->opType = AND_EXPR; @@ -218,6 +218,7 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) } case T_Ident: { + /* * look for a column name or a relation name (the default * behavior) @@ -234,58 +235,59 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) foreach(args, fn->args) lfirst(args) = transformExpr(pstate, (Node *) lfirst(args), precedence); result = ParseFuncOrColumn(pstate, - fn->funcname, fn->args, &pstate->p_last_resno, - precedence); + fn->funcname, fn->args, &pstate->p_last_resno, + precedence); break; } case T_SubLink: { - SubLink *sublink = (SubLink *) expr; - QueryTreeList *qtree; - List *llist; + SubLink *sublink = (SubLink *) expr; + QueryTreeList *qtree; + List *llist; pstate->p_hasSubLinks = true; - qtree = parse_analyze(lcons(sublink->subselect,NIL), pstate); - if (qtree->len != 1 || - qtree->qtrees[0]->commandType != CMD_SELECT || - qtree->qtrees[0]->resultRelation != 0 ) - elog (ERROR, "parser: bad query in subselect"); + qtree = parse_analyze(lcons(sublink->subselect, NIL), pstate); + if (qtree->len != 1 || + qtree->qtrees[0]->commandType != CMD_SELECT || + qtree->qtrees[0]->resultRelation != 0) + elog(ERROR, "parser: bad query in subselect"); sublink->subselect = (Node *) qtree->qtrees[0]; - + if (sublink->subLinkType != EXISTS_SUBLINK) { - char *op = lfirst(sublink->oper); - List *left_expr = sublink->lefthand; - List *right_expr = ((Query*) sublink->subselect)->targetList; - List *elist; + char *op = lfirst(sublink->oper); + List *left_expr = sublink->lefthand; + List *right_expr = ((Query *) sublink->subselect)->targetList; + List *elist; foreach(llist, left_expr) lfirst(llist) = transformExpr(pstate, lfirst(llist), precedence); - + if (length(left_expr) != length(right_expr)) - elog(ERROR,"parser: Subselect has too many or too few fields."); - + elog(ERROR, "parser: Subselect has too many or too few fields."); + sublink->oper = NIL; foreach(elist, left_expr) { - Node *lexpr = lfirst(elist); - Node *rexpr = lfirst(right_expr); - TargetEntry *tent = (TargetEntry *)rexpr; - Expr *op_expr; + Node *lexpr = lfirst(elist); + Node *rexpr = lfirst(right_expr); + TargetEntry *tent = (TargetEntry *) rexpr; + Expr *op_expr; op_expr = make_op(op, lexpr, tent->expr); + /* - * HACK! Second IF is more valid but currently - * we don't support EXPR subqueries inside + * HACK! Second IF is more valid but currently we + * don't support EXPR subqueries inside * expressions generally, only in WHERE clauses. * After fixing this, first IF must be removed. */ if (op_expr->typeOid != BOOLOID) - elog (ERROR, "parser: '%s' must return 'bool' to be used with subquery", op); - if (op_expr->typeOid != BOOLOID && - sublink->subLinkType != EXPR_SUBLINK) - elog (ERROR, "parser: '%s' must return 'bool' to be used with quantified predicate subquery", op); + elog(ERROR, "parser: '%s' must return 'bool' to be used with subquery", op); + if (op_expr->typeOid != BOOLOID && + sublink->subLinkType != EXPR_SUBLINK) + elog(ERROR, "parser: '%s' must return 'bool' to be used with quantified predicate subquery", op); sublink->oper = lappend(sublink->oper, op_expr); right_expr = lnext(right_expr); } @@ -325,7 +327,7 @@ transformIdent(ParseState *pstate, Node *expr, int precedence) att->attrs = lcons(makeString(ident->name), NIL); column_result = (Node *) ParseNestedFuncOrColumn(pstate, att, &pstate->p_last_resno, - precedence); + precedence); } /* try to find the ident as a relation */ @@ -407,7 +409,7 @@ exprType(Node *expr) return type; } -static Node * +static Node * parser_typecast(Value *expr, TypeName *typename, int16 atttypmod) { /* check for passing non-ints */ @@ -432,7 +434,7 @@ parser_typecast(Value *expr, TypeName *typename, int16 atttypmod) break; default: elog(ERROR, - "parser_typecast: cannot cast this expression to type '%s'", + "parser_typecast: cannot cast this expression to type '%s'", typename->name); } @@ -485,7 +487,7 @@ parser_typecast(Value *expr, TypeName *typename, int16 atttypmod) return (Node *) adt; } -Node * +Node * parser_typecast2(Node *expr, Oid exprType, Type tp, int16 atttypmod) { /* check for passing non-ints */ @@ -605,10 +607,11 @@ parser_typecast2(Node *expr, Oid exprType, Type tp, int16 atttypmod) true /* is cast */ ); /* - * printf("adt %s : %u %d %d\n",CString(expr),typeTypeId(tp) , len,cp); + * printf("adt %s : %u %d %d\n",CString(expr),typeTypeId(tp) , + * len,cp); */ if (string_palloced) pfree(const_string); return ((Node *) adt); -} +} diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index e1a7e52d468..ba79cc42726 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.14 1998/02/10 16:03:34 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.15 1998/02/26 04:33:30 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -43,34 +43,39 @@ #include "utils/lsyscache.h" #include "utils/syscache.h" -static Node *ParseComplexProjection(ParseState *pstate, - char *funcname, - Node *first_arg, - bool *attisset); -static Oid ** argtype_inherit(int nargs, Oid *oid_array); +static Node * +ParseComplexProjection(ParseState *pstate, + char *funcname, + Node *first_arg, + bool *attisset); +static Oid **argtype_inherit(int nargs, Oid *oid_array); static bool can_coerce(int nargs, Oid *input_typeids, Oid *func_typeids); -static int find_inheritors(Oid relid, Oid **supervec); +static int find_inheritors(Oid relid, Oid **supervec); static CandidateList func_get_candidates(char *funcname, int nargs); -static bool func_get_detail(char *funcname, - int nargs, - Oid *oid_array, - Oid *funcid, /* return value */ - Oid *rettype, /* return value */ - bool *retset, /* return value */ - Oid **true_typeids); -static Oid * func_select_candidate(int nargs, - Oid *input_typeids, - CandidateList candidates); -static Oid funcid_get_rettype(Oid funcid); +static bool +func_get_detail(char *funcname, + int nargs, + Oid *oid_array, + Oid *funcid, /* return value */ + Oid *rettype, /* return value */ + bool *retset, /* return value */ + Oid **true_typeids); +static Oid * +func_select_candidate(int nargs, + Oid *input_typeids, + CandidateList candidates); +static Oid funcid_get_rettype(Oid funcid); static Oid **gen_cross_product(InhPaths *arginh, int nargs); -static void make_arguments(int nargs, - List *fargs, - Oid *input_typeids, - Oid *function_typeids); -static int match_argtypes(int nargs, - Oid *input_typeids, - CandidateList function_typeids, - CandidateList *candidates); +static void +make_arguments(int nargs, + List *fargs, + Oid *input_typeids, + Oid *function_typeids); +static int +match_argtypes(int nargs, + Oid *input_typeids, + CandidateList function_typeids, + CandidateList *candidates); static List *setup_tlist(char *attname, Oid relid); static List *setup_base_tlist(Oid typeid); @@ -99,9 +104,9 @@ ParseNestedFuncOrColumn(ParseState *pstate, Attr *attr, int *curr_resno, int pre Param *param = (Param *) transformExpr(pstate, (Node *) attr->paramNo, EXPR_RELATION_FIRST); retval = ParseFuncOrColumn(pstate, strVal(lfirst(attr->attrs)), - lcons(param, NIL), - curr_resno, - precedence); + lcons(param, NIL), + curr_resno, + precedence); } else { @@ -110,18 +115,18 @@ ParseNestedFuncOrColumn(ParseState *pstate, Attr *attr, int *curr_resno, int pre ident->name = attr->relname; ident->isRel = TRUE; retval = ParseFuncOrColumn(pstate, strVal(lfirst(attr->attrs)), - lcons(ident, NIL), - curr_resno, - precedence); + lcons(ident, NIL), + curr_resno, + precedence); } /* Do more attributes follow this one? */ foreach(mutator_iter, lnext(attr->attrs)) { retval = ParseFuncOrColumn(pstate, strVal(lfirst(mutator_iter)), - lcons(retval, NIL), - curr_resno, - precedence); + lcons(retval, NIL), + curr_resno, + precedence); } return (retval); @@ -132,7 +137,7 @@ ParseNestedFuncOrColumn(ParseState *pstate, Attr *attr, int *curr_resno, int pre */ Node * ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, - int *curr_resno, int precedence) + int *curr_resno, int precedence) { Oid rettype = (Oid) 0; Oid argrelid = (Oid) 0; @@ -174,6 +179,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, { RangeTblEntry *rte; Ident *ident = (Ident *) first_arg; + /* * first arg is a relation. This could be a projection. */ @@ -193,9 +199,9 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, if (get_attnum(relid, funcname) != InvalidAttrNumber) { return (Node *) make_var(pstate, - relid, - refname, - funcname); + relid, + refname, + funcname); } else { @@ -262,8 +268,8 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, PointerGetDatum(funcname), ObjectIdGetDatum(basetype), 0, 0)) - return (Node *)ParseAgg(pstate, funcname, basetype, - fargs, precedence); + return (Node *) ParseAgg(pstate, funcname, basetype, + fargs, precedence); } } @@ -285,6 +291,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, if (nodeTag(pair) == T_Ident && ((Ident *) pair)->isRel) { + /* * a relation */ @@ -415,15 +422,15 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, char *seqrel; text *seqname; int32 aclcheck_result = -1; - extern text *lower (text *string); + extern text *lower(text *string); Assert(length(fargs) == 1); seq = (Const *) lfirst(fargs); if (!IsA((Node *) seq, Const)) elog(ERROR, "%s: only constant sequence names are acceptable", funcname); - seqname = lower ((text*)DatumGetPointer(seq->constvalue)); - pfree (DatumGetPointer(seq->constvalue)); - seq->constvalue = PointerGetDatum (seqname); + seqname = lower((text *) DatumGetPointer(seq->constvalue)); + pfree(DatumGetPointer(seq->constvalue)); + seq->constvalue = PointerGetDatum(seqname); seqrel = textout(seqname); if ((aclcheck_result = pg_aclcheck(seqrel, GetPgUserName(), @@ -827,7 +834,8 @@ argtype_inherit(int nargs, Oid *oid_array) return (gen_cross_product(arginh, nargs)); } -static int find_inheritors(Oid relid, Oid **supervec) +static int +find_inheritors(Oid relid, Oid **supervec) { Oid *relidvec; Relation inhrel; @@ -1065,7 +1073,7 @@ setup_tlist(char *attname, Oid relid) typeid = get_atttype(relid, attno); type_mod = get_atttypmod(relid, attno); - + resnode = makeResdom(1, typeid, type_mod, @@ -1301,9 +1309,12 @@ func_error(char *caller, char *funcname, int nargs, Oid *argtypes) ptr += strlen(ptr); } - if(caller == NULL) { - elog(ERROR, "function %s(%s) does not exist", funcname, p); - } else { - elog(ERROR, "%s: function %s(%s) does not exist", caller, funcname, p); - } + if (caller == NULL) + { + elog(ERROR, "function %s(%s) does not exist", funcname, p); + } + else + { + elog(ERROR, "%s: function %s(%s) does not exist", caller, funcname, p); + } } diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c index 708bb54103c..3a36fcd576c 100644 --- a/src/backend/parser/parse_node.c +++ b/src/backend/parser/parse_node.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.13 1998/02/13 19:45:43 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.14 1998/02/26 04:33:32 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -30,7 +30,8 @@ #include "utils/lsyscache.h" static void disallow_setop(char *op, Type optype, Node *operand); -static Node *make_operand(char *opname, +static Node * +make_operand(char *opname, Node *tree, Oid orig_typeId, Oid true_typeId); @@ -52,7 +53,7 @@ make_parsestate(ParseState *parentParseState) pstate->p_last_resno = 1; pstate->parentParseState = parentParseState; - + return (pstate); } @@ -125,7 +126,7 @@ disallow_setop(char *op, Type optype, Node *operand) } } -Expr * +Expr * make_op(char *opname, Node *ltree, Node *rtree) { Oid ltypeId, @@ -238,9 +239,9 @@ make_op(char *opname, Node *ltree, Node *rtree) return result; } -Var * +Var * make_var(ParseState *pstate, Oid relid, char *refname, - char *attrname) + char *attrname) { Var *varnode; int vnum, @@ -321,6 +322,7 @@ make_array_ref(Node *expr, A_Indices *ind = lfirst(indirection); if (ind->lidx) + /* * XXX assumes all lower indices non null in this case */ @@ -426,7 +428,7 @@ make_array_set(Expr *target_expr, * * eventually, produces a "const" lisp-struct as per nodedefs.cl */ -Const * +Const * make_const(Value *value) { Type tp; @@ -454,8 +456,8 @@ make_const(Value *value) break; case T_String: - tp = typeidType(UNKNOWNOID); /* unknown for now, will be type - * coerced */ + tp = typeidType(UNKNOWNOID); /* unknown for now, will + * be type coerced */ val = PointerGetDatum(textin(strVal(value))); break; @@ -481,4 +483,3 @@ make_const(Value *value) return (con); } - diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c index ded519a72b8..b24094924aa 100644 --- a/src/backend/parser/parse_oper.c +++ b/src/backend/parser/parse_oper.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.8 1998/01/20 05:04:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.9 1998/02/26 04:33:33 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -26,21 +26,24 @@ #include "storage/bufmgr.h" #include "utils/syscache.h" -static int binary_oper_get_candidates(char *opname, +static int +binary_oper_get_candidates(char *opname, Oid leftTypeId, Oid rightTypeId, CandidateList *candidates); -static CandidateList binary_oper_select_candidate(Oid arg1, +static CandidateList +binary_oper_select_candidate(Oid arg1, Oid arg2, CandidateList candidates); static bool equivalentOpersAfterPromotion(CandidateList candidates); static void op_error(char *op, Oid arg1, Oid arg2); -static int unary_oper_get_candidates(char *op, +static int +unary_oper_get_candidates(char *op, Oid typeId, CandidateList *candidates, char rightleft); - + Oid any_ordering_op(int restype) { @@ -577,7 +580,7 @@ op_error(char *op, Oid arg1, Oid arg2) op, typeTypeName(tp1), typeTypeName(tp2)); #endif elog(ERROR, "There is no operator '%s' for types '%s' and '%s'" - "\n\tYou will either have to retype this query using an explicit cast," - "\n\tor you will have to define the operator using CREATE OPERATOR", - op, typeTypeName(tp1), typeTypeName(tp2)); + "\n\tYou will either have to retype this query using an explicit cast," + "\n\tor you will have to define the operator using CREATE OPERATOR", + op, typeTypeName(tp1), typeTypeName(tp2)); } diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index e5a774dc894..6bd26066b23 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.10 1998/02/10 04:01:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.11 1998/02/26 04:33:34 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -24,7 +24,8 @@ #include "utils/builtins.h" #include "utils/lsyscache.h" -static void checkTargetTypes(ParseState *pstate, char *target_colname, +static void +checkTargetTypes(ParseState *pstate, char *target_colname, char *refname, char *colname); struct @@ -76,14 +77,15 @@ refnameRangeTableEntry(ParseState *pstate, char *refname) foreach(temp, pstate->p_rtable) { RangeTblEntry *rte = lfirst(temp); - + if (!strcmp(rte->refname, refname)) return rte; } /* only allow correlated columns in WHERE clause */ if (pstate->p_in_where_clause) pstate = pstate->parentParseState; - else break; + else + break; } return NULL; } @@ -95,7 +97,7 @@ refnameRangeTablePosn(ParseState *pstate, char *refname, int *sublevels_up) int index; List *temp; - + if (sublevels_up) *sublevels_up = 0; @@ -105,7 +107,7 @@ refnameRangeTablePosn(ParseState *pstate, char *refname, int *sublevels_up) foreach(temp, pstate->p_rtable) { RangeTblEntry *rte = lfirst(temp); - + if (!strcmp(rte->refname, refname)) return index; index++; @@ -117,7 +119,8 @@ refnameRangeTablePosn(ParseState *pstate, char *refname, int *sublevels_up) if (sublevels_up) (*sublevels_up)++; } - else break; + else + break; } return 0; } @@ -143,11 +146,11 @@ colnameRangeTableEntry(ParseState *pstate, char *colname) foreach(et, rtable) { RangeTblEntry *rte = lfirst(et); - + /* only entries on outer(non-function?) scope */ if (!rte->inFromCl && rte != pstate->p_target_rangetblentry) continue; - + if (get_attnum(rte->relid, colname) != InvalidAttrNumber) { if (rte_result != NULL) @@ -163,7 +166,8 @@ colnameRangeTableEntry(ParseState *pstate, char *colname) /* only allow correlated columns in WHERE clause */ if (pstate->p_in_where_clause && rte_result == NULL) pstate = pstate->parentParseState; - else break; + else + break; } return rte_result; } @@ -181,31 +185,30 @@ addRangeTableEntry(ParseState *pstate, { Relation relation; RangeTblEntry *rte = makeNode(RangeTblEntry); - int sublevels_up; + int sublevels_up; if (pstate != NULL) { if (refnameRangeTablePosn(pstate, refname, &sublevels_up) != 0 && - (!inFromCl || sublevels_up == 0)) + (!inFromCl || sublevels_up == 0)) elog(ERROR, "Table name %s specified more than once", refname); } - + rte->relname = pstrdup(relname); rte->refname = pstrdup(refname); relation = heap_openr(relname); if (relation == NULL) elog(ERROR, "%s: %s", - relname, aclcheck_error_strings[ACLCHECK_NO_CLASS]); + relname, aclcheck_error_strings[ACLCHECK_NO_CLASS]); rte->relid = RelationGetRelationId(relation); heap_close(relation); /* - * Flags - zero or more from inheritance,union,version or - * recursive (transitive closure) [we don't support them all -- ay - * 9/94 ] + * Flags - zero or more from inheritance,union,version or recursive + * (transitive closure) [we don't support them all -- ay 9/94 ] */ rte->inh = inh; @@ -225,7 +228,7 @@ addRangeTableEntry(ParseState *pstate, * expandAll - * makes a list of attributes */ -List * +List * expandAll(ParseState *pstate, char *relname, char *refname, int *this_resno) { Relation rdesc; @@ -308,7 +311,7 @@ attnameAttNum(Relation rd, char *a) /* on failure */ elog(ERROR, "Relation %s does not have attribute %s", RelationGetRelationName(rd), a); - return 0; /* lint */ + return 0; /* lint */ } /* diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c index 7dbeb91ce63..b9ab916d882 100644 --- a/src/backend/parser/parse_target.c +++ b/src/backend/parser/parse_target.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.10 1998/02/13 19:45:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.11 1998/02/26 04:33:35 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -29,7 +29,8 @@ static List *expandAllTables(ParseState *pstate); static char *figureColname(Node *expr, Node *resval); -static TargetEntry *make_targetlist_expr(ParseState *pstate, +static TargetEntry * +make_targetlist_expr(ParseState *pstate, char *colname, Node *expr, List *arrayRef); @@ -63,13 +64,14 @@ transformTargetList(ParseState *pstate, List *targetlist) handleTargetColname(pstate, &res->name, NULL, identname); /* - * here we want to look for column names only, not relation - * names (even though they can be stored in Ident nodes, too) + * here we want to look for column names only, not + * relation names (even though they can be stored in + * Ident nodes, too) */ expr = transformIdent(pstate, (Node *) res->val, EXPR_COLUMN_FIRST); type_id = exprType(expr); if (nodeTag(expr) == T_Var) - type_mod = ((Var *)expr)->vartypmod; + type_mod = ((Var *) expr)->vartypmod; else type_mod = -1; resname = (res->name) ? res->name : identname; @@ -257,9 +259,10 @@ transformTargetList(ParseState *pstate, List *targetlist) /* - * Target item is fully specified: ie. relation.attribute + * Target item is fully specified: ie. + * relation.attribute */ - result = ParseNestedFuncOrColumn(pstate, att, &pstate->p_last_resno,EXPR_COLUMN_FIRST); + result = ParseNestedFuncOrColumn(pstate, att, &pstate->p_last_resno, EXPR_COLUMN_FIRST); handleTargetColname(pstate, &res->name, att->relname, attrname); if (att->indirection != NIL) { @@ -277,7 +280,7 @@ transformTargetList(ParseState *pstate, List *targetlist) } type_id = exprType(result); if (nodeTag(result) == T_Var) - type_mod = ((Var *)result)->vartypmod; + type_mod = ((Var *) result)->vartypmod; else type_mod = -1; /* move to last entry */ @@ -345,7 +348,7 @@ make_targetlist_expr(ParseState *pstate, type_id = exprType(expr); if (nodeTag(expr) == T_Var) - type_mod = ((Var *)expr)->vartypmod; + type_mod = ((Var *) expr)->vartypmod; else type_mod = -1; @@ -395,7 +398,7 @@ make_targetlist_expr(ParseState *pstate, makeConst(attrtype, attrlen, (Datum) fmgr(typeidInfunc(attrtype), - val, typeidTypElem(attrtype), -1), + val, typeidTypElem(attrtype), -1), false, true /* Maybe correct-- 80% chance */ , false, /* is not a set */ @@ -464,8 +467,8 @@ make_targetlist_expr(ParseState *pstate, att->relname = pstrdup(RelationGetRelationName(rd)->data); att->attrs = lcons(makeString(colname), NIL); target_expr = (Expr *) ParseNestedFuncOrColumn(pstate, att, - &pstate->p_last_resno, - EXPR_COLUMN_FIRST); + &pstate->p_last_resno, + EXPR_COLUMN_FIRST); while (ar != NIL) { A_Indices *ind = lfirst(ar); @@ -556,15 +559,15 @@ makeTargetNames(ParseState *pstate, List *cols) { List *nxt; char *name = ((Ident *) lfirst(tl))->name; - + /* elog on failure */ attnameAttNum(pstate->p_target_relation, name); foreach(nxt, lnext(tl)) if (!strcmp(name, ((Ident *) lfirst(nxt))->name)) - elog(ERROR, "Attribute '%s' should be specified only once", name); + elog(ERROR, "Attribute '%s' should be specified only once", name); } } - + return cols; } @@ -643,8 +646,8 @@ figureColname(Node *expr, Node *resval) { switch (nodeTag(expr)) { - case T_Aggreg: - return (char *) ((Aggreg *) expr)->aggname; + case T_Aggreg: + return (char *) ((Aggreg *) expr)->aggname; case T_Expr: if (((Expr *) expr)->opType == FUNC_EXPR) { diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c index 6ca081b4e59..97c080ca242 100644 --- a/src/backend/parser/parse_type.c +++ b/src/backend/parser/parse_type.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.6 1998/02/13 19:45:45 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.7 1998/02/26 04:33:36 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -35,7 +35,7 @@ typeidIsValid(Oid id) } /* return a type name, given a typeid */ -char * +char * typeidTypeName(Oid id) { HeapTuple tup; @@ -114,7 +114,7 @@ typeByVal(Type t) } /* given type (as type struct), return the name of type */ -char * +char * typeTypeName(Type t) { TypeTupleForm typ; @@ -142,7 +142,8 @@ stringTypeString(Type tp, char *string, int16 atttypmod) Oid typelem; op = ((TypeTupleForm) GETSTRUCT(tp))->typinput; - typelem = ((TypeTupleForm) GETSTRUCT(tp))->typelem; /* XXX - used for array_in */ + typelem = ((TypeTupleForm) GETSTRUCT(tp))->typelem; /* XXX - used for + * array_in */ return ((char *) fmgr(op, string, typelem, atttypmod)); } diff --git a/src/backend/parser/parser.c b/src/backend/parser/parser.c index 0a7a8d58005..765a59c61ad 100644 --- a/src/backend/parser/parser.c +++ b/src/backend/parser/parser.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.32 1998/01/19 05:06:20 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.33 1998/02/26 04:33:37 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -58,7 +58,7 @@ parser(char *str, Oid *typev, int nargs) clearerr(stdin); - if (yyresult) /* error */ + if (yyresult) /* error */ return ((QueryTreeList *) NULL); queryList = parse_analyze(parsetree, NULL); @@ -175,5 +175,5 @@ define_sets(Node *clause) define_sets(get_rightop(clause)); } } -#endif +#endif diff --git a/src/backend/parser/scansup.c b/src/backend/parser/scansup.c index 84ef988ddb5..d82ffaa15c0 100644 --- a/src/backend/parser/scansup.c +++ b/src/backend/parser/scansup.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/scansup.c,v 1.9 1997/11/26 01:11:40 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/scansup.c,v 1.10 1998/02/26 04:33:49 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -38,7 +38,7 @@ * ---------------- */ -char * +char * scanstr(char *s) { static char newStr[MAX_PARSE_BUFFER]; |