Fix atttypmod alignment again, and re-enable ecpg.
This commit is contained in:
parent
e2b0911564
commit
d394d06d7a
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
|
17
src/include/catalog/pg_attribute_check.sql
Normal file
17
src/include/catalog/pg_attribute_check.sql
Normal file
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user