aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/commands/defind.c40
-rw-r--r--src/backend/parser/gram.c2
-rw-r--r--src/include/catalog/pg_attribute.h4
-rw-r--r--src/include/catalog/pg_attribute_check.sql17
-rw-r--r--src/interfaces/Makefile4
-rw-r--r--src/interfaces/ecpg/preproc/preproc.y2
6 files changed, 43 insertions, 26 deletions
diff --git a/src/backend/commands/defind.c b/src/backend/commands/defind.c
index ee4678372e0..7df18c0f698 100644
--- a/src/backend/commands/defind.c
+++ b/src/backend/commands/defind.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.23 1998/08/26 05:22:36 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.24 1998/08/26 16:43:41 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -468,7 +468,7 @@ NormIndexAttrs(List *attList, /* list of IndexElem's */
Oid relId)
{
List *rest;
- HeapTuple tuple;
+ HeapTuple atttuple, tuple;
/*
* process attributeList
@@ -484,20 +484,34 @@ NormIndexAttrs(List *attList, /* list of IndexElem's */
if (attribute->name == NULL)
elog(ERROR, "missing attribute for define index");
- tuple = SearchSysCacheTuple(ATTNAME,
+ atttuple = SearchSysCacheTupleCopy(ATTNAME,
ObjectIdGetDatum(relId),
PointerGetDatum(attribute->name),
0, 0);
- if (!HeapTupleIsValid(tuple))
+ if (!HeapTupleIsValid(atttuple))
{
elog(ERROR,
"DefineIndex: attribute \"%s\" not found",
attribute->name);
}
- attform = (AttributeTupleForm) GETSTRUCT(tuple);
+ attform = (AttributeTupleForm) GETSTRUCT(atttuple);
*attNumP++ = attform->attnum;
+ /* we want the type so we can set the proper alignment, etc. */
+ if (attribute->typename == NULL)
+ {
+ tuple = SearchSysCacheTuple(TYPOID,
+ ObjectIdGetDatum(attform->atttypid),
+ 0, 0, 0);
+ if (!HeapTupleIsValid(tuple))
+ elog(ERROR, "create index: type for attribute '%s' undefined",
+ attribute->name);
+ /* we just set the type name because that is all we need */
+ attribute->typename = makeNode(TypeName);
+ attribute->typename->name = nameout(&((TypeTupleForm) GETSTRUCT(tuple))->typname);
+ }
+
if (attribute->class == NULL)
{
/* no operator class specified, so find the default */
@@ -520,21 +534,7 @@ NormIndexAttrs(List *attList, /* list of IndexElem's */
attribute->class);
}
*classOidP++ = tuple->t_oid;
- /* we want the type so we can set the proper alignment, etc. */
- if (attribute->typename == NULL)
- {
- Oid typoid = ((Form_pg_opclass) GETSTRUCT(tuple))->opcdeftype;
-
- tuple = SearchSysCacheTuple(TYPOID,
- ObjectIdGetDatum(typoid),
- 0, 0, 0);
- if (!HeapTupleIsValid(tuple))
- elog(ERROR, "create index: type for class '%s' undefined",
- attribute->class);
- /* we just set the name because that is all we need */
- attribute->typename = makeNode(TypeName);
- attribute->typename->name = nameout(&((TypeTupleForm) GETSTRUCT(tuple))->typname);
- }
+ pfree(atttuple);
}
}
diff --git a/src/backend/parser/gram.c b/src/backend/parser/gram.c
index af47e7be0e8..5206df96376 100644
--- a/src/backend/parser/gram.c
+++ b/src/backend/parser/gram.c
@@ -221,7 +221,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.30 1998/08/26 05:22:43 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.31 1998/08/26 16:43:43 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
diff --git a/src/include/catalog/pg_attribute.h b/src/include/catalog/pg_attribute.h
index d908c54dcc0..0e88c86904f 100644
--- a/src/include/catalog/pg_attribute.h
+++ b/src/include/catalog/pg_attribute.h
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_attribute.h,v 1.37 1998/08/26 05:51:24 momjian Exp $
+ * $Id: pg_attribute.h,v 1.38 1998/08/26 16:43:48 momjian Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
@@ -339,7 +339,7 @@ DATA(insert OID = 0 ( 1249 attlen 21 0 2 5 0 -1 -1 t f s f f));
DATA(insert OID = 0 ( 1249 attnum 21 0 2 6 0 -1 -1 t f s f f));
DATA(insert OID = 0 ( 1249 attnelems 23 0 4 7 0 -1 -1 t f i f f));
DATA(insert OID = 0 ( 1249 attcacheoff 23 0 4 8 0 -1 -1 t f i f f));
-DATA(insert OID = 0 ( 1249 atttypmod 21 0 4 9 0 -1 -1 t f s f f));
+DATA(insert OID = 0 ( 1249 atttypmod 23 0 4 9 0 -1 -1 t f i f f));
DATA(insert OID = 0 ( 1249 attbyval 16 0 1 10 0 -1 -1 t f c f f));
DATA(insert OID = 0 ( 1249 attisset 16 0 1 11 0 -1 -1 t f c f f));
DATA(insert OID = 0 ( 1249 attalign 18 0 1 12 0 -1 -1 t f c f f));
diff --git a/src/include/catalog/pg_attribute_check.sql b/src/include/catalog/pg_attribute_check.sql
new file mode 100644
index 00000000000..20264fb41a9
--- /dev/null
+++ b/src/include/catalog/pg_attribute_check.sql
@@ -0,0 +1,17 @@
+-- This makes sure the pg_attribute columns match the type's columns
+-- bjm 1998/08/26
+
+-- check lengths
+SELECT pg_attribute.oid, relname, attname
+FROM pg_class, pg_attribute, pg_type
+WHERE pg_class.oid = attrelid AND
+ atttypid = pg_type.oid AND
+ attlen != typlen;
+
+-- check alignment
+SELECT pg_attribute.oid, relname, attname
+FROM pg_class, pg_attribute, pg_type
+WHERE pg_class.oid = attrelid AND
+ atttypid = pg_type.oid AND
+ attalign != typalign;
+
diff --git a/src/interfaces/Makefile b/src/interfaces/Makefile
index 6ff3ac386e8..37e286c2d25 100644
--- a/src/interfaces/Makefile
+++ b/src/interfaces/Makefile
@@ -7,7 +7,7 @@
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/interfaces/Makefile,v 1.14 1998/08/26 05:22:58 momjian Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/Makefile,v 1.15 1998/08/26 16:43:51 momjian Exp $
#
#-------------------------------------------------------------------------
@@ -23,7 +23,7 @@ endif
.DEFAULT all install clean dep depend distclean: $(perl-makefile-dep)
$(MAKE) -C libpq $@
-# $(MAKE) -C ecpg $@
+ $(MAKE) -C ecpg $@
ifeq ($(HAVE_Cplusplus), true)
$(MAKE) -C libpq++ $@
else
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index cc8528e4355..fec7232375e 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -641,7 +641,7 @@ output_statement(char * stmt, int mode)
%type <str> join_using where_clause relation_expr row_op sub_type
%type <str> opt_column_list insert_rest InsertStmt OptimizableStmt
%type <str> columnList DeleteStmt LockStmt UpdateStmt CursorStmt
-%type <str> NotifyStmt columnElem copy_dirn SubUnion c_expr
+%type <str> NotifyStmt columnElem copy_dirn SubUnion c_expr UnlistenStmt
%type <str> copy_delimiter ListenStmt CopyStmt copy_file_name opt_binary
%type <str> opt_with_copy FetchStmt opt_direction fetch_how_many opt_portal_name
%type <str> ClosePortalStmt DestroyStmt VacuumStmt opt_verbose