1111 *
1212 *
1313 * IDENTIFICATION
14- * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.598 2007/08/2101:11:15 tgl Exp $
14+ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.599 2007/08/2115:13:42 tgl Exp $
1515 *
1616 * HISTORY
1717 * AUTHORDATEMAJOR EVENT
@@ -433,7 +433,7 @@ static Node *makeXmlExpr(XmlExprOp op, char *name, List *named_args, List *args)
433433STATISTICS STDIN STDOUT STORAGE STRICT_P STRIP_P SUBSTRING SUPERUSER_P
434434SYMMETRIC SYSID SYSTEM_P
435435
436- TABLE TABLESPACE TEMP TEMPLATE TEMPORARYTEXT THEN TIME TIMESTAMP
436+ TABLE TABLESPACE TEMP TEMPLATE TEMPORARYTEXT_P THEN TIME TIMESTAMP
437437TO TRAILING TRANSACTION TREAT TRIGGER TRIM TRUE_P
438438TRUNCATE TRUSTED TYPE_P
439439
@@ -2975,7 +2975,7 @@ DefineStmt:
29752975n->vals =$7 ;
29762976$$ = (Node *)n;
29772977}
2978- | CREATETEXT SEARCH PARSER any_name definition
2978+ | CREATETEXT_P SEARCH PARSER any_name definition
29792979{
29802980DefineStmt *n = makeNode(DefineStmt);
29812981n->kind = OBJECT_TSPARSER;
@@ -2984,7 +2984,7 @@ DefineStmt:
29842984n->definition =$6 ;
29852985$$ = (Node *)n;
29862986}
2987- | CREATETEXT SEARCH DICTIONARY any_name definition
2987+ | CREATETEXT_P SEARCH DICTIONARY any_name definition
29882988{
29892989DefineStmt *n = makeNode(DefineStmt);
29902990n->kind = OBJECT_TSDICTIONARY;
@@ -2993,7 +2993,7 @@ DefineStmt:
29932993n->definition =$6 ;
29942994$$ = (Node *)n;
29952995}
2996- | CREATETEXT SEARCH TEMPLATE any_name definition
2996+ | CREATETEXT_P SEARCH TEMPLATE any_name definition
29972997{
29982998DefineStmt *n = makeNode(DefineStmt);
29992999n->kind = OBJECT_TSTEMPLATE;
@@ -3002,7 +3002,7 @@ DefineStmt:
30023002n->definition =$6 ;
30033003$$ = (Node *)n;
30043004}
3005- | CREATETEXT SEARCH CONFIGURATION any_name definition
3005+ | CREATETEXT_P SEARCH CONFIGURATION any_name definition
30063006{
30073007DefineStmt *n = makeNode(DefineStmt);
30083008n->kind = OBJECT_TSCONFIGURATION;
@@ -3320,10 +3320,10 @@ drop_type:TABLE{ $$ = OBJECT_TABLE; }
33203320| DOMAIN_P{$$ = OBJECT_DOMAIN; }
33213321| CONVERSION_P{$$ = OBJECT_CONVERSION; }
33223322| SCHEMA{$$ = OBJECT_SCHEMA; }
3323- |TEXT SEARCH PARSER{$$ = OBJECT_TSPARSER; }
3324- |TEXT SEARCH DICTIONARY{$$ = OBJECT_TSDICTIONARY; }
3325- |TEXT SEARCH TEMPLATE {$$ = OBJECT_TSTEMPLATE; }
3326- |TEXT SEARCH CONFIGURATION {$$ = OBJECT_TSCONFIGURATION; }
3323+ |TEXT_P SEARCH PARSER{$$ = OBJECT_TSPARSER; }
3324+ |TEXT_P SEARCH DICTIONARY{$$ = OBJECT_TSDICTIONARY; }
3325+ |TEXT_P SEARCH TEMPLATE{$$ = OBJECT_TSTEMPLATE; }
3326+ |TEXT_P SEARCH CONFIGURATION{$$ = OBJECT_TSCONFIGURATION; }
33273327;
33283328
33293329any_name_list:
@@ -3500,31 +3500,31 @@ CommentStmt:
35003500n->comment =$7 ;
35013501$$ = (Node *) n;
35023502}
3503- | COMMENT ONTEXT SEARCH PARSER any_name IS comment_text
3503+ | COMMENT ONTEXT_P SEARCH PARSER any_name IS comment_text
35043504{
35053505CommentStmt *n = makeNode(CommentStmt);
35063506n->objtype = OBJECT_TSPARSER;
35073507n->objname =$6 ;
35083508n->comment =$8 ;
35093509$$ = (Node *) n;
35103510}
3511- | COMMENT ONTEXT SEARCH DICTIONARY any_name IS comment_text
3511+ | COMMENT ONTEXT_P SEARCH DICTIONARY any_name IS comment_text
35123512{
35133513CommentStmt *n = makeNode(CommentStmt);
35143514n->objtype = OBJECT_TSDICTIONARY;
35153515n->objname =$6 ;
35163516n->comment =$8 ;
35173517$$ = (Node *) n;
35183518}
3519- | COMMENT ONTEXT SEARCH TEMPLATE any_name IS comment_text
3519+ | COMMENT ONTEXT_P SEARCH TEMPLATE any_name IS comment_text
35203520{
35213521CommentStmt *n = makeNode(CommentStmt);
35223522n->objtype = OBJECT_TSTEMPLATE;
35233523n->objname =$6 ;
35243524n->comment =$8 ;
35253525$$ = (Node *) n;
35263526}
3527- | COMMENT ONTEXT SEARCH CONFIGURATION any_name IS comment_text
3527+ | COMMENT ONTEXT_P SEARCH CONFIGURATION any_name IS comment_text
35283528{
35293529CommentStmt *n = makeNode(CommentStmt);
35303530n->objtype = OBJECT_TSCONFIGURATION;
@@ -4693,31 +4693,31 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
46934693n->newname =$6 ;
46944694$$ = (Node *)n;
46954695}
4696- | ALTERTEXT SEARCH PARSER any_name RENAME TO name
4696+ | ALTERTEXT_P SEARCH PARSER any_name RENAME TO name
46974697{
46984698RenameStmt *n = makeNode(RenameStmt);
46994699n->renameType = OBJECT_TSPARSER;
47004700n->object =$5 ;
47014701n->newname =$8 ;
47024702$$ = (Node *)n;
47034703}
4704- | ALTERTEXT SEARCH DICTIONARY any_name RENAME TO name
4704+ | ALTERTEXT_P SEARCH DICTIONARY any_name RENAME TO name
47054705{
47064706RenameStmt *n = makeNode(RenameStmt);
47074707n->renameType = OBJECT_TSDICTIONARY;
47084708n->object =$5 ;
47094709n->newname =$8 ;
47104710$$ = (Node *)n;
47114711}
4712- | ALTERTEXT SEARCH TEMPLATE any_name RENAME TO name
4712+ | ALTERTEXT_P SEARCH TEMPLATE any_name RENAME TO name
47134713{
47144714RenameStmt *n = makeNode(RenameStmt);
47154715n->renameType = OBJECT_TSTEMPLATE;
47164716n->object =$5 ;
47174717n->newname =$8 ;
47184718$$ = (Node *)n;
47194719}
4720- | ALTERTEXT SEARCH CONFIGURATION any_name RENAME TO name
4720+ | ALTERTEXT_P SEARCH CONFIGURATION any_name RENAME TO name
47214721{
47224722RenameStmt *n = makeNode(RenameStmt);
47234723n->renameType = OBJECT_TSCONFIGURATION;
@@ -4897,15 +4897,15 @@ AlterOwnerStmt: ALTER AGGREGATE func_name aggr_args OWNER TO RoleId
48974897n->newowner =$6 ;
48984898$$ = (Node *)n;
48994899}
4900- | ALTERTEXT SEARCH DICTIONARY any_name OWNER TO RoleId
4900+ | ALTERTEXT_P SEARCH DICTIONARY any_name OWNER TO RoleId
49014901{
49024902AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
49034903n->objectType = OBJECT_TSDICTIONARY;
49044904n->object =$5 ;
49054905n->newowner =$8 ;
49064906$$ = (Node *)n;
49074907}
4908- | ALTERTEXT SEARCH CONFIGURATION any_name OWNER TO RoleId
4908+ | ALTERTEXT_P SEARCH CONFIGURATION any_name OWNER TO RoleId
49094909{
49104910AlterOwnerStmt *n = makeNode(AlterOwnerStmt);
49114911n->objectType = OBJECT_TSCONFIGURATION;
@@ -5513,7 +5513,7 @@ opt_as:AS{}
55135513 *****************************************************************************/
55145514
55155515AlterTSDictionaryStmt:
5516- ALTERTEXT SEARCH DICTIONARY any_name definition
5516+ ALTERTEXT_P SEARCH DICTIONARY any_name definition
55175517{
55185518AlterTSDictionaryStmt *n = makeNode(AlterTSDictionaryStmt);
55195519n->dictname =$5 ;
@@ -5523,14 +5523,14 @@ AlterTSDictionaryStmt:
55235523;
55245524
55255525AlterTSConfigurationStmt:
5526- ALTERTEXT SEARCH CONFIGURATION any_name definition
5526+ ALTERTEXT_P SEARCH CONFIGURATION any_name definition
55275527{
55285528AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt);
55295529n->cfgname =$5 ;
55305530n->options =$6 ;
55315531$$ = (Node *)n;
55325532}
5533- | ALTERTEXT SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list WITH any_name_list
5533+ | ALTERTEXT_P SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list WITH any_name_list
55345534{
55355535AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt);
55365536n->cfgname =$5 ;
@@ -5540,7 +5540,7 @@ AlterTSConfigurationStmt:
55405540n->replace =false ;
55415541$$ = (Node*)n;
55425542}
5543- | ALTERTEXT SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list WITH any_name_list
5543+ | ALTERTEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list WITH any_name_list
55445544{
55455545AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt);
55465546n->cfgname =$5 ;
@@ -5550,7 +5550,7 @@ AlterTSConfigurationStmt:
55505550n->replace =false ;
55515551$$ = (Node*)n;
55525552}
5553- | ALTERTEXT SEARCH CONFIGURATION any_name ALTER MAPPING REPLACE any_name WITH any_name
5553+ | ALTERTEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING REPLACE any_name WITH any_name
55545554{
55555555AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt);
55565556n->cfgname =$5 ;
@@ -5560,7 +5560,7 @@ AlterTSConfigurationStmt:
55605560n->replace =true ;
55615561$$ = (Node*)n;
55625562}
5563- | ALTERTEXT SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list REPLACE any_name WITH any_name
5563+ | ALTERTEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list REPLACE any_name WITH any_name
55645564{
55655565AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt);
55665566n->cfgname =$5 ;
@@ -5570,15 +5570,15 @@ AlterTSConfigurationStmt:
55705570n->replace =true ;
55715571$$ = (Node*)n;
55725572}
5573- | ALTERTEXT SEARCH CONFIGURATION any_name DROP MAPPING FOR name_list
5573+ | ALTERTEXT_P SEARCH CONFIGURATION any_name DROP MAPPING FOR name_list
55745574{
55755575AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt);
55765576n->cfgname =$5 ;
55775577n->tokentype =$9 ;
55785578n->missing_ok =false ;
55795579$$ = (Node*)n;
55805580}
5581- | ALTERTEXT SEARCH CONFIGURATION any_name DROP MAPPING IF_P EXISTS FOR name_list
5581+ | ALTERTEXT_P SEARCH CONFIGURATION any_name DROP MAPPING IF_P EXISTS FOR name_list
55825582{
55835583AlterTSConfigurationStmt *n = makeNode(AlterTSConfigurationStmt);
55845584n->cfgname =$5 ;
@@ -8562,9 +8562,11 @@ substr_list:
85628562/*
85638563 * Since there are no cases where this syntax allows
85648564 * a textual FOR value, we forcibly cast the argument
8565- * to int4. This is a kluge to avoid surprising results
8566- * when the argument is, say, int8. It'd be better if
8567- * there were not an implicit cast from int8 to text ...
8565+ * to int4. The possible matches in pg_proc are
8566+ * substring(text,int4) and substring(text,text),
8567+ * and we don't want the parser to choose the latter,
8568+ * which it is likely to do if the second argument
8569+ * is unknown or doesn't have an implicit cast to int4.
85688570*/
85698571A_Const *n = makeNode(A_Const);
85708572n->val.type = T_Integer;
@@ -9234,7 +9236,7 @@ unreserved_keyword:
92349236| TEMP
92359237| TEMPLATE
92369238| TEMPORARY
9237- |TEXT
9239+ |TEXT_P
92389240| TRANSACTION
92399241| TRIGGER
92409242| TRUNCATE