1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

Included all yacc and lex files into the distribution.

This commit is contained in:
Peter Eisentraut
2000-01-16 20:05:00 +00:00
parent a4e1304ed1
commit 759fba4873
19 changed files with 824 additions and 556 deletions

View File

@ -7,7 +7,7 @@
#
#
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/Attic/GNUmakefile.in,v 1.47 2000/01/09 07:53:52 tgl Exp $
# $Header: /cvsroot/pgsql/src/Attic/GNUmakefile.in,v 1.48 2000/01/16 20:04:51 petere Exp $
#
#-------------------------------------------------------------------------
@ -24,7 +24,6 @@ ETAGS = @etags@
XARGS = @xargs@
all:
$(MAKE) lexverify
$(MAKE) -C utils all
$(MAKE) -C backend all
$(MAKE) -C interfaces all
@ -35,7 +34,6 @@ all:
fi
install:
$(MAKE) lexverify
$(MAKE) -C utils install
$(MAKE) -C backend install
$(MAKE) -C interfaces install
@ -43,19 +41,7 @@ install:
$(MAKE) -C pl install
cat ../register.txt
lexverify:
$(MAKE) -C lextest all
@if test ! -f lextest/lextest; then \
echo "";\
echo "You have a buggy version of flex. Read INSTALL and search for flex for a fix.";\
echo "";\
false;\
else \
true;\
fi
clean:
$(MAKE) -C lextest clean
$(MAKE) -C utils clean
$(MAKE) -C backend clean
$(MAKE) -C interfaces clean
@ -108,7 +94,6 @@ distclean: clean
test/regress/GNUmakefile
.DEFAULT:
$(MAKE) -C lextest $@
$(MAKE) -C utils $@
$(MAKE) -C backend $@
$(MAKE) -C interfaces $@

View File

@ -4,7 +4,7 @@
# Makefile for the bootstrap module
#
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/backend/bootstrap/Makefile,v 1.19 1999/12/16 16:52:46 momjian Exp $
# $Header: /cvsroot/pgsql/src/backend/bootstrap/Makefile,v 1.20 2000/01/16 20:04:53 petere Exp $
#
#
# We must build bootparse.c and bootscanner.c with yacc and lex and sed,
@ -68,7 +68,7 @@ bootscanner.c: bootscanner.l
rm -f lex.yy.c sedfile
clean:
rm -f SUBSYS.o $(OBJS) bootparse.c bootstrap_tokens.h bootscanner.c
rm -f SUBSYS.o $(OBJS)
# And the garbage that might have been left behind by partial build:
rm -f y.tab.h y.tab.c y.output lex.yy.c

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.34 2000/01/15 02:59:28 petere Exp $
* $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.35 2000/01/16 20:04:54 petere Exp $
*
* NOTES
* See acl.h.
@ -444,8 +444,8 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
}
int32
pg_ownercheck(char *usename,
char *value,
pg_ownercheck(const char *usename,
const char *value,
int cacheid)
{
HeapTuple tuple;

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.27 2000/01/15 02:59:28 petere Exp $
* $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.28 2000/01/16 20:04:54 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -26,7 +26,7 @@
* Perhaps this should be in-line code in relopen().
*/
char *
relpath(char *relname)
relpath(const char *relname)
{
char *path;
size_t bufsize = 0;
@ -52,7 +52,7 @@ relpath(char *relname)
* XXX this is way bogus. -- pma
*/
bool
IsSystemRelationName(char *relname)
IsSystemRelationName(const char *relname)
{
if (relname[0] && relname[1] && relname[2])
return (relname[0] == 'p' &&
@ -67,7 +67,7 @@ IsSystemRelationName(char *relname)
* True iff name is the name of a shared system catalog relation.
*/
bool
IsSharedSystemRelationName(char *relname)
IsSharedSystemRelationName(const char *relname)
{
int i;

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.62 1999/12/20 10:40:41 wieck Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.63 2000/01/16 20:04:55 petere Exp $
*
* NOTES
* The PortalExecutorHeapMemory crap needs to be eliminated
@ -23,13 +23,16 @@
#include "postgres.h"
#include "access/heapam.h"
#include "access/skey.h"
#include "catalog/catalog.h"
#include "catalog/catname.h"
#include "catalog/indexing.h"
#include "catalog/pg_attrdef.h"
#include "catalog/pg_type.h"
#include "commands/command.h"
#include "executor/execdefs.h"
#include "executor/executor.h"
#include "catalog/heap.h"
#include "miscadmin.h"
#include "optimizer/prep.h"
#include "utils/acl.h"
@ -37,6 +40,7 @@
#include "utils/syscache.h"
#include "utils/temprel.h"
/* ----------------
* PortalExecutorHeapMemory stuff
*
@ -246,7 +250,8 @@ PerformPortalClose(char *name, CommandDest dest)
}
/* ----------------
* PerformAddAttribute
* AlterTableAddColumn
* (formerly known as PerformAddAttribute)
*
* adds an additional attribute to a relation
*
@ -276,8 +281,7 @@ PerformPortalClose(char *name, CommandDest dest)
* ----------------
*/
void
PerformAddAttribute(char *relationName,
char *userName,
AlterTableAddColumn(const char *relationName,
bool inherits,
ColumnDef *colDef)
{
@ -295,6 +299,7 @@ PerformAddAttribute(char *relationName,
Relation idescs[Num_pg_attr_indices];
Relation ridescs[Num_pg_class_indices];
bool hasindex;
List *rawDefaults = NIL;
/*
* permissions checking. this would normally be done in utility.c,
@ -303,19 +308,18 @@ PerformAddAttribute(char *relationName,
* normally, only the owner of a class can change its schema.
*/
if (!allowSystemTableMods && IsSystemRelationName(relationName))
elog(ERROR, "PerformAddAttribute: class \"%s\" is a system catalog",
elog(ERROR, "ALTER TABLE: relation \"%s\" is a system catalog",
relationName);
#ifndef NO_SECURITY
if (!pg_ownercheck(userName, relationName, RELNAME))
elog(ERROR, "PerformAddAttribute: you do not own class \"%s\"",
relationName);
if (!pg_ownercheck(UserName, relationName, RELNAME))
elog(ERROR, "ALTER TABLE: permission denied");
#endif
/*
* Grab an exclusive lock on the target table, which we will NOT release
* until end of transaction.
*/
rel = heap_openr(relationName, AccessExclusiveLock);
rel = heap_openr((char *)relationName, AccessExclusiveLock);
myrelid = RelationGetRelid(rel);
heap_close(rel, NoLock); /* close rel but keep lock! */
@ -324,8 +328,10 @@ PerformAddAttribute(char *relationName,
*/
if (colDef->is_not_null)
elog(ERROR, "Can't add a NOT NULL attribute to an existing relation");
if (colDef->raw_default || colDef->cooked_default)
elog(ERROR, "ADD ATTRIBUTE: DEFAULT not yet implemented");
elog(ERROR, "Adding columns with defaults is not implemented.");
/*
* if the first element in the 'schema' list is a "*" then we are
@ -358,8 +364,8 @@ PerformAddAttribute(char *relationName,
if (childrelid == myrelid)
continue;
rel = heap_open(childrelid, AccessExclusiveLock);
PerformAddAttribute(RelationGetRelationName(rel),
userName, false, colDef);
AlterTableAddColumn(RelationGetRelationName(rel),
false, colDef);
heap_close(rel, AccessExclusiveLock);
}
}
@ -372,7 +378,7 @@ PerformAddAttribute(char *relationName,
0, 0, 0);
if (!HeapTupleIsValid(reltup))
elog(ERROR, "PerformAddAttribute: relation \"%s\" not found",
elog(ERROR, "ALTER TABLE: relation \"%s\" not found",
relationName);
/*
@ -380,14 +386,14 @@ PerformAddAttribute(char *relationName,
*/
if (((Form_pg_class) GETSTRUCT(reltup))->relkind == RELKIND_INDEX)
{
elog(ERROR, "PerformAddAttribute: index relation \"%s\" not changed",
elog(ERROR, "ALTER TABLE: index relation \"%s\" not changed",
relationName);
}
minattnum = ((Form_pg_class) GETSTRUCT(reltup))->relnatts;
maxatts = minattnum + 1;
if (maxatts > MaxHeapAttributeNumber)
elog(ERROR, "PerformAddAttribute: relations limited to %d attributes",
elog(ERROR, "ALTER TABLE: relations limited to %d columns",
MaxHeapAttributeNumber);
attrdesc = heap_openr(AttributeRelationName, RowExclusiveLock);
@ -421,7 +427,7 @@ PerformAddAttribute(char *relationName,
0, 0);
if (HeapTupleIsValid(tup))
elog(ERROR, "PerformAddAttribute: attribute \"%s\" already exists in class \"%s\"",
elog(ERROR, "ALTER TABLE: column name \"%s\" already exists in relation \"%s\"",
colDef->colname, relationName);
/*
@ -444,7 +450,7 @@ PerformAddAttribute(char *relationName,
tform = (Form_pg_type) GETSTRUCT(typeTuple);
if (!HeapTupleIsValid(typeTuple))
elog(ERROR, "Add: type \"%s\" nonexistent", typename);
elog(ERROR, "ALTER TABLE: type \"%s\" does not exist", typename);
namestrcpy(&(attribute->attname), colDef->colname);
attribute->atttypid = typeTuple->t_data->t_oid;
attribute->attlen = tform->typlen;
@ -483,9 +489,223 @@ PerformAddAttribute(char *relationName,
CatalogCloseIndices(Num_pg_class_indices, ridescs);
heap_freetuple(reltup);
heap_close(rel, RowExclusiveLock);
heap_close(rel, NoLock);
}
static void drop_default(Oid relid, int16 attnum);
/*
* ALTER TABLE ALTER COLUMN SET/DROP DEFAULT
*/
void
AlterTableAlterColumn(const char *relationName,
bool inh, const char *colName,
Node *newDefault)
{
Relation rel;
HeapTuple tuple;
int16 attnum;
Oid myrelid;
if (!allowSystemTableMods && IsSystemRelationName(relationName))
elog(ERROR, "ALTER TABLE: relation \"%s\" is a system catalog",
relationName);
#ifndef NO_SECURITY
if (!pg_ownercheck(UserName, relationName, RELNAME))
elog(ERROR, "ALTER TABLE: permission denied");
#endif
/* XXX should heap_openr take const char * ? */
rel = heap_openr((char *)relationName, AccessExclusiveLock);
myrelid = RelationGetRelid(rel);
heap_close(rel, NoLock);
/*
* Propagate to children if desired
*/
if (inh)
{
List *child,
*children;
/* this routine is actually in the planner */
children = find_all_inheritors(myrelid);
/*
* find_all_inheritors does the recursive search of the
* inheritance hierarchy, so all we have to do is process all
* of the relids in the list that it returns.
*/
foreach(child, children)
{
Oid childrelid = lfirsti(child);
if (childrelid == myrelid)
continue;
rel = heap_open(childrelid, AccessExclusiveLock);
AlterTableAlterColumn(RelationGetRelationName(rel),
false, colName, newDefault);
heap_close(rel, AccessExclusiveLock);
}
}
/* -= now do the thing on this relation =- */
/* reopen the business */
rel = heap_openr((char *)relationName, AccessExclusiveLock);
/*
* get the number of the attribute
*/
tuple = SearchSysCacheTuple(ATTNAME,
ObjectIdGetDatum(myrelid),
NameGetDatum(namein((char *)colName)),
0, 0);
if (!HeapTupleIsValid(tuple))
{
heap_close(rel, AccessExclusiveLock);
elog(ERROR, "ALTER TABLE: relation \"%s\" has no column \"%s\"",
relationName, colName);
}
attnum = ((Form_pg_attribute) GETSTRUCT(tuple))->attnum;
if (newDefault) /* SET DEFAULT */
{
List* rawDefaults = NIL;
RawColumnDefault *rawEnt;
/* Get rid of the old one first */
drop_default(myrelid, attnum);
rawEnt = (RawColumnDefault *) palloc(sizeof(RawColumnDefault));
rawEnt->attnum = attnum;
rawEnt->raw_default = newDefault;
rawDefaults = lappend(rawDefaults, rawEnt);
/*
* This function is intended for CREATE TABLE,
* so it processes a _list_ of defaults, but we just do one.
*/
AddRelationRawConstraints(rel, rawDefaults, NIL);
}
else /* DROP DEFAULT */
{
Relation attr_rel;
ScanKeyData scankeys[3];
HeapScanDesc scan;
HeapTuple tuple;
attr_rel = heap_openr(AttributeRelationName, AccessExclusiveLock);
ScanKeyEntryInitialize(&scankeys[0], 0x0, Anum_pg_attribute_attrelid, F_OIDEQ,
ObjectIdGetDatum(myrelid));
ScanKeyEntryInitialize(&scankeys[1], 0x0, Anum_pg_attribute_attnum, F_INT2EQ,
Int16GetDatum(attnum));
ScanKeyEntryInitialize(&scankeys[2], 0x0, Anum_pg_attribute_atthasdef, F_BOOLEQ,
TRUE);
scan = heap_beginscan(attr_rel, false, SnapshotNow, 3, scankeys);
AssertState(scan!=NULL);
if (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
{
HeapTuple newtuple;
Relation irelations[Num_pg_attr_indices];
/* update to false */
newtuple = heap_copytuple(tuple);
((Form_pg_attribute) GETSTRUCT(newtuple))->atthasdef = FALSE;
heap_update(attr_rel, &tuple->t_self, newtuple, NULL);
/* keep the system catalog indices current */
CatalogOpenIndices(Num_pg_attr_indices, Name_pg_attr_indices, irelations);
CatalogIndexInsert(irelations, Num_pg_attr_indices, attr_rel, newtuple);
CatalogCloseIndices(Num_pg_class_indices, irelations);
/* get rid of actual default definition */
drop_default(myrelid, attnum);
}
else
elog(NOTICE, "ALTER TABLE: there was no default on column \"%s\" of relation \"%s\"",
colName, relationName);
heap_endscan(scan);
heap_close(attr_rel, NoLock);
}
heap_close(rel, NoLock);
}
static void
drop_default(Oid relid, int16 attnum)
{
ScanKeyData scankeys[2];
HeapScanDesc scan;
Relation attrdef_rel;
HeapTuple tuple;
attrdef_rel = heap_openr(AttrDefaultRelationName, AccessExclusiveLock);
ScanKeyEntryInitialize(&scankeys[0], 0x0, Anum_pg_attrdef_adrelid, F_OIDEQ,
ObjectIdGetDatum(relid));
ScanKeyEntryInitialize(&scankeys[1], 0x0, Anum_pg_attrdef_adnum, F_INT2EQ,
Int16GetDatum(attnum));
scan = heap_beginscan(attrdef_rel, false, SnapshotNow, 2, scankeys);
AssertState(scan!=NULL);
if (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
heap_delete(attrdef_rel, &tuple->t_self, NULL);
heap_endscan(scan);
heap_close(attrdef_rel, NoLock);
}
/*
* ALTER TABLE DROP COLUMN
*/
void
AlterTableDropColumn(const char *relationName,
bool inh, const char *colName,
int behavior)
{
elog(NOTICE, "ALTER TABLE / DROP COLUMN is not implemented");
}
void
AlterTableAddConstraint(const char *relationName,
bool inh, Node *newConstraint)
{
elog(NOTICE, "ALTER TABLE / ADD CONSTRAINT is not implemented");
}
void AlterTableDropConstraint(const char *relationName,
bool inh, const char *constrName,
int behavior)
{
elog(NOTICE, "ALTER TABLE / DROP CONSTRAINT is not implemented");
}
/*
*
* LOCK TABLE
*
*/
void
LockTableCommand(LockStmt *lockstmt)
{

View File

@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.126 2000/01/15 02:59:32 petere Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.127 2000/01/16 20:04:55 petere Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@ -114,7 +114,7 @@ static Node *doNegate(Node *n);
}
%type <node> stmt,
AddAttrStmt, ClosePortalStmt,
AlterTableStmt, ClosePortalStmt,
CopyStmt, CreateStmt, CreateAsStmt, CreateSeqStmt, DefineStmt, DropStmt,
TruncateStmt, CommentStmt,
ExtendStmt, FetchStmt, GrantStmt, CreateTrigStmt, DropTrigStmt,
@ -130,6 +130,9 @@ static Node *doNegate(Node *n);
RuleActionStmtOrEmpty, ConstraintsSetStmt,
CreateGroupStmt, AlterGroupStmt, DropGroupStmt
%type <node> alter_column_action
%type <ival> drop_behavior
%type <str> createdb_opt_location
%type <ival> createdb_opt_encoding
@ -210,7 +213,7 @@ static Node *doNegate(Node *n);
%type <astmt> insert_rest
%type <node> OptTableElement, ConstraintElem
%type <node> columnDef, alter_clause
%type <node> columnDef
%type <defelt> def_elem
%type <node> def_arg, columnElem, where_clause,
a_expr, a_expr_or_null, b_expr, com_expr, AexprConst,
@ -391,7 +394,7 @@ stmtmulti: stmtmulti ';' stmt
}
;
stmt : AddAttrStmt
stmt : AlterTableStmt
| AlterGroupStmt
| AlterUserStmt
| ClosePortalStmt
@ -797,40 +800,74 @@ constraints_set_mode: DEFERRED
/*****************************************************************************
*
* QUERY :
* addattr ( attr1 = type1 .. attrn = typen ) to <relname> [*]
* ALTER TABLE variations
*
*****************************************************************************/
AddAttrStmt: ALTER TABLE relation_name opt_inh_star alter_clause
{
AddAttrStmt *n = makeNode(AddAttrStmt);
n->relname = $3;
n->inh = $4;
n->colDef = $5;
$$ = (Node *)n;
}
;
AlterTableStmt:
/* ALTER TABLE <name> ADD [COLUMN] <coldef> */
ALTER TABLE relation_name opt_inh_star ADD opt_column columnDef
{
AlterTableStmt *n = makeNode(AlterTableStmt);
n->subtype = 'A';
n->relname = $3;
n->inh = $4;
n->def = $7;
$$ = (Node *)n;
}
/* ALTER TABLE <name> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */
| ALTER TABLE relation_name opt_inh_star ALTER opt_column ColId alter_column_action
{
AlterTableStmt *n = makeNode(AlterTableStmt);
n->subtype = 'T';
n->relname = $3;
n->inh = $4;
n->name = $7;
n->def = $8;
$$ = (Node *)n;
}
/* ALTER TABLE <name> DROP [COLUMN] <name> {RESTRICT|CASCADE} */
| ALTER TABLE relation_name opt_inh_star DROP opt_column ColId drop_behavior
{
AlterTableStmt *n = makeNode(AlterTableStmt);
n->subtype = 'D';
n->relname = $3;
n->inh = $4;
n->name = $7;
n->behavior = $8;
$$ = (Node *)n;
}
/* ALTER TABLE <name> ADD CONSTRAINT ... */
| ALTER TABLE relation_name opt_inh_star ADD TableConstraint
{
AlterTableStmt *n = makeNode(AlterTableStmt);
n->subtype = 'A';
n->relname = $3;
n->inh = $4;
n->def = $6;
$$ = (Node *)n;
}
/* ALTER TABLE <name> DROP CONSTRAINT <name> {RESTRICT|CASCADE} */
| ALTER TABLE relation_name opt_inh_star DROP CONSTRAINT name drop_behavior
{
AlterTableStmt *n = makeNode(AlterTableStmt);
n->relname = $3;
n->inh = $4;
n->name = $7;
n->behavior = $8;
$$ = (Node *)n;
}
;
alter_column_action:
SET DEFAULT a_expr_or_null { $$ = $3; }
| DROP DEFAULT { $$ = NULL; }
;
drop_behavior: CASCADE { $$ = CASCADE; }
| RESTRICT { $$ = RESTRICT; }
;
alter_clause: ADD opt_column columnDef
{
$$ = $3;
}
| ADD '(' OptTableElementList ')'
{
if (length($3) != 1)
elog(ERROR,"ALTER TABLE/ADD() allows one column only");
$$ = (Node *) lfirst($3);
}
| DROP opt_column ColId
{ elog(ERROR,"ALTER TABLE/DROP COLUMN not yet implemented"); }
| ALTER opt_column ColId SET DEFAULT a_expr
{ elog(ERROR,"ALTER TABLE/ALTER COLUMN/SET DEFAULT not yet implemented"); }
| ALTER opt_column ColId DROP DEFAULT
{ elog(ERROR,"ALTER TABLE/ALTER COLUMN/DROP DEFAULT not yet implemented"); }
| ADD ConstraintElem
{ elog(ERROR,"ALTER TABLE/ADD CONSTRAINT not yet implemented"); }
;
/*****************************************************************************

View File

@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.79 2000/01/15 18:30:30 petere Exp $
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.80 2000/01/16 20:04:56 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -270,24 +270,6 @@ ProcessUtility(Node *parsetree,
}
break;
case T_AddAttrStmt:
{
AddAttrStmt *stmt = (AddAttrStmt *) parsetree;
PS_SET_STATUS(commandTag = "ADD");
CHECK_IF_ABORTED();
/*
* owner checking done in PerformAddAttribute (now
* recursive)
*/
PerformAddAttribute(stmt->relname,
userName,
stmt->inh,
(ColumnDef *) stmt->colDef);
}
break;
/*
* schema
*/
@ -346,6 +328,44 @@ ProcessUtility(Node *parsetree,
}
break;
/* various Alter Table forms */
case T_AlterTableStmt:
{
AlterTableStmt *stmt = (AlterTableStmt *) parsetree;
PS_SET_STATUS(commandTag = "ALTER TABLE");
CHECK_IF_ABORTED();
/*
* Some or all of these functions are recursive to cover inherited things,
* so permission checks are done there.
*/
switch(stmt->subtype)
{
case 'A': /* ADD COLUMN */
AlterTableAddColumn(stmt->relname, stmt->inh, (ColumnDef *) stmt->def);
break;
case 'T': /* ALTER COLUMN */
AlterTableAlterColumn(stmt->relname, stmt->inh, stmt->name, stmt->def);
break;
case 'D': /* ALTER DROP */
AlterTableDropColumn(stmt->relname, stmt->inh, stmt->name, stmt->behavior);
break;
case 'C': /* ADD CONSTRAINT */
AlterTableAddConstraint(stmt->relname, stmt->inh, stmt->def);
break;
case 'X': /* DROP CONSTRAINT */
AlterTableDropConstraint(stmt->relname, stmt->inh, stmt->name, stmt->behavior);
break;
default: /* oops */
elog(ERROR, "T_AlterTableStmt: unknown subtype");
break;
}
}
break;
case T_ChangeACLStmt:
{
ChangeACLStmt *stmt = (ChangeACLStmt *) parsetree;

View File

@ -268,8 +268,9 @@ MainLoop(FILE *source, int encoding)
/* colon -> substitute variable */
/* we need to be on the watch for the '::' operator */
else if (line[i] == ':' && !was_bslash &&
strspn(line+i+thislen, VALID_VARIABLE_CHARS)>0
else if (line[i] == ':' && !was_bslash
&& strspn(line+i+thislen, VALID_VARIABLE_CHARS)>0
&& !(prevlen>0 && line[i-prevlen] == ':')
)
{
size_t in_length,

740
src/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -545,6 +545,20 @@ AC_SUBST(DASH_N)
AC_SUBST(BACKSLASH_C)
AC_PROG_LEX
if test "$LEX" = "flex"; then
$LEX --version 2> /dev/null | grep -s '2\.5\.3' >& /dev/null
if test $? -eq 0 ; then
AC_MSG_WARN([
***
You have flex version 2.5.3, which is broken. Get version 2.5.4 or
a different lex.
(If you are using the official distribution of PostgreSQL then you
do not need to worry about this because the lexer files are
pre-generated. However, other software using flex is likely to be
broken as well.)
***])
fi
fi
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB

View File

@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: catalog.h,v 1.8 1999/07/15 23:03:41 momjian Exp $
* $Id: catalog.h,v 1.9 2000/01/16 20:04:57 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -15,9 +15,9 @@
#include "access/tupdesc.h"
extern char *relpath(char *relname);
extern bool IsSystemRelationName(char *relname);
extern bool IsSharedSystemRelationName(char *relname);
extern char *relpath(const char *relname);
extern bool IsSystemRelationName(const char *relname);
extern bool IsSharedSystemRelationName(const char *relname);
extern Oid newoid(void);
extern void fillatt(TupleDesc att);

View File

@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: command.h,v 1.15 1999/07/15 23:03:44 momjian Exp $
* $Id: command.h,v 1.16 2000/01/16 20:04:58 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -38,12 +38,29 @@ extern void PerformPortalClose(char *name, CommandDest dest);
extern void PortalCleanup(Portal portal);
/*
* PerformAddAttribute
* Performs the POSTQUEL function ADD.
* ALTER TABLE variants
*/
extern void PerformAddAttribute(char *relationName, char *userName,
bool inh, ColumnDef *colDef);
extern void AlterTableAddColumn(const char *relationName,
bool inh, ColumnDef *colDef);
extern void AlterTableAlterColumn(const char *relationName,
bool inh, const char *colName,
Node *newDefault);
extern void AlterTableDropColumn(const char *relationName,
bool inh, const char *colName,
int behavior);
extern void AlterTableAddConstraint(const char *relationName,
bool inh, Node *newConstraint);
extern void AlterTableDropConstraint(const char *relationName,
bool inh, const char *constrName,
int behavior);
/*
* LOCK
*/
extern void LockTableCommand(LockStmt *lockstmt);
#endif /* COMMAND_H */

View File

@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: nodes.h,v 1.60 2000/01/09 00:26:42 tgl Exp $
* $Id: nodes.h,v 1.61 2000/01/16 20:04:58 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -145,7 +145,7 @@ typedef enum NodeTag
T_DeleteStmt,
T_UpdateStmt,
T_SelectStmt,
T_AddAttrStmt,
T_AlterTableStmt,
T_AggregateStmt,
T_ChangeACLStmt,
T_ClosePortalStmt,

View File

@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: parsenodes.h,v 1.93 2000/01/14 22:11:38 petere Exp $
* $Id: parsenodes.h,v 1.94 2000/01/16 20:04:58 petere Exp $
*
*-------------------------------------------------------------------------
*/
@ -84,16 +84,20 @@ typedef struct Query
*****************************************************************************/
/* ----------------------
* Add Column Statement
* Alter Table
* ----------------------
*/
typedef struct AddAttrStmt
/* The fields are used in different ways by the different variants of this command */
typedef struct AlterTableStmt
{
NodeTag type;
char *relname; /* the relation to add attr */
bool inh; /* add recursively to children? */
Node *colDef; /* the attribute definition */
} AddAttrStmt;
char subtype; /* A = add, T = alter, D = drop, C = add constr, X = drop constr */
char *relname; /* table to work on */
bool inh; /* recursively on children? */
char *name; /* column or constraint name to act on */
Node *def; /* definition of new column or constraint */
int behavior; /* CASCADE or RESTRICT drop behavior */
} AlterTableStmt;
/* ----------------------
* Change ACL Statement

View File

@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: acl.h,v 1.22 1999/07/15 23:04:19 momjian Exp $
* $Id: acl.h,v 1.23 2000/01/16 20:04:59 petere Exp $
*
* NOTES
* For backward-compatability purposes we have to allow there
@ -168,7 +168,7 @@ extern AclId get_grosysid(char *groname);
extern char *get_groname(AclId grosysid);
extern int32 pg_aclcheck(char *relname, char *usename, AclMode mode);
extern int32 pg_ownercheck(char *usename, char *value, int cacheid);
extern int32 pg_ownercheck(const char *usename, const char *value, int cacheid);
extern int32 pg_func_ownercheck(char *usename, char *funcname,
int nargs, Oid *arglist);
extern int32 pg_aggr_ownercheck(char *usename, char *aggname,

View File

@ -4,7 +4,7 @@
# Makefile for the plpgsql shared object
#
# IDENTIFICATION
# $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/Makefile.in,v 1.18 1999/10/13 11:38:40 momjian Exp $
# $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/Makefile.in,v 1.19 2000/01/16 20:04:59 petere Exp $
#
#-------------------------------------------------------------------------
@ -79,6 +79,6 @@ pl_scan.c: scan.l
clean: clean-shlib
rm -f lib$(NAME).a
rm -f *.o pl.tab.h pl_gram.c pl_scan.c
rm -f *.o
# And the garbage that might have been left behind by partial build:
rm -f y.tab.c y.tab.h lex.yy.c

View File

@ -1,6 +1,6 @@
#!/bin/sh
#
# $Header: /cvsroot/pgsql/src/test/regress/Attic/run_check.sh,v 1.6 2000/01/09 20:54:36 tgl Exp $
# $Header: /cvsroot/pgsql/src/test/regress/Attic/run_check.sh,v 1.7 2000/01/16 20:05:00 petere Exp $
# ----------
# Check call syntax
@ -37,6 +37,16 @@ export LOGDIR
export TIMDIR
export PGPORT
# Needed by psql and pg_encoding (if you run multibyte).
# I hope this covers all platforms with shared libraries,
# otherwise feel free to cover your platform here as well.
if [ "$LD_LIBRARY_PATH" ]; then
old_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
LD_LIBRARY_PATH="$LIBDIR:$LD_LIBARY_PATH"
else
LD_LIBRARY_PATH="$LIBDIR"
fi
export LD_LIBRARY_PATH
# ----------
# Get the commandline parameters
@ -111,6 +121,7 @@ trap ' echo ""
echo ""
fi
echo ""
LD_LIBRARY_PATH="$old_LD_LIBRARY_PATH"
exit 1
' 2 15
@ -434,5 +445,6 @@ done | tee run_check.out 2>&1
echo "=============== Terminating regression postmaster ================"
kill -15 $PMPID
LD_LIBRARY_PATH="$old_LD_LIBRARY_PATH"
exit 0

View File

@ -31,34 +31,39 @@ cd src
./configure
# Generate parser's gram and lex files.
# Generate parser's yacc and lex files
cd backend/parser
rm -f gram.c parse.h scan.c
$MAKE gram.c parse.h scan.c
cd ../..
# Generate ecpg preprocessor's gram and lex files.
# Generate bootstrap parser's yacc and lex files
cd backend/bootstrap
rm -f bootstrap_tokens.h bootparse.c bootscanner.c
$MAKE bootstrap_tokens.h bootparse.c bootscanner.c
cd ../..
# Generate ecpg preprocessor's yacc and lex files
cd interfaces/ecpg/preproc
rm -f preproc.c preproc.h pgc.c
$MAKE preproc.c preproc.h pgc.c
cd ../../..
# Generate plpgsql's yacc and lex files
cd pl/plpgsql
rm -rf pl_scan.c pl.tab.h pl_gram.c
$MAKE pl_scan.c pl.tab.h pl_gram.c
cd ../..
# Generate psql's help on SQL command from the SGML docs
cd bin/psql
rm -f sql_help.h
$MAKE sql_help.h
cd ../..
# Clean up