Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/analyze.c188
-rw-r--r--src/backend/parser/parse.h431
-rw-r--r--src/backend/parser/parse_agg.c55
-rw-r--r--src/backend/parser/parse_clause.c57
-rw-r--r--src/backend/parser/parse_expr.c87
-rw-r--r--src/backend/parser/parse_func.c115
-rw-r--r--src/backend/parser/parse_node.c21
-rw-r--r--src/backend/parser/parse_oper.c19
-rw-r--r--src/backend/parser/parse_relation.c41
-rw-r--r--src/backend/parser/parse_target.c37
-rw-r--r--src/backend/parser/parse_type.c9
-rw-r--r--src/backend/parser/parser.c6
-rw-r--r--src/backend/parser/scansup.c4
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];