From d394d06d7ab2e31969735479885cbfd544eb309a Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 26 Aug 1998 16:43:54 +0000 Subject: [PATCH] Fix atttypmod alignment again, and re-enable ecpg. --- src/backend/commands/defind.c | 40 +++++++++++----------- src/backend/parser/gram.c | 2 +- src/include/catalog/pg_attribute.h | 4 +-- src/include/catalog/pg_attribute_check.sql | 17 +++++++++ src/interfaces/Makefile | 4 +-- src/interfaces/ecpg/preproc/preproc.y | 2 +- 6 files changed, 43 insertions(+), 26 deletions(-) create mode 100644 src/include/catalog/pg_attribute_check.sql diff --git a/src/backend/commands/defind.c b/src/backend/commands/defind.c index ee4678372e..7df18c0f69 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 af47e7be0e..5206df9637 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 d908c54dcc..0e88c86904 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 0000000000..20264fb41a --- /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 6ff3ac386e..37e286c2d2 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 cc8528e435..fec7232375 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 join_using where_clause relation_expr row_op sub_type %type opt_column_list insert_rest InsertStmt OptimizableStmt %type columnList DeleteStmt LockStmt UpdateStmt CursorStmt -%type NotifyStmt columnElem copy_dirn SubUnion c_expr +%type NotifyStmt columnElem copy_dirn SubUnion c_expr UnlistenStmt %type copy_delimiter ListenStmt CopyStmt copy_file_name opt_binary %type opt_with_copy FetchStmt opt_direction fetch_how_many opt_portal_name %type ClosePortalStmt DestroyStmt VacuumStmt opt_verbose