|
|
|
@ -7,7 +7,7 @@ |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* IDENTIFICATION |
|
|
|
|
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.64.2.2 1998/11/17 14:42:52 thomas Exp $ |
|
|
|
|
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.64.2.3 1998/12/14 00:13:26 thomas Exp $ |
|
|
|
|
* |
|
|
|
|
* INTERFACE ROUTINES |
|
|
|
|
* heap_create() - Create an uncataloged heap relation |
|
|
|
@ -1434,6 +1434,7 @@ StoreAttrDefault(Relation rel, AttrDefault *attrdef) |
|
|
|
|
TargetEntry *te; |
|
|
|
|
Resdom *resdom; |
|
|
|
|
Node *expr; |
|
|
|
|
Oid type; |
|
|
|
|
char *adbin; |
|
|
|
|
MemoryContext oldcxt; |
|
|
|
|
Relation adrel; |
|
|
|
@ -1460,7 +1461,9 @@ start:; |
|
|
|
|
te = (TargetEntry *) lfirst(query->targetList); |
|
|
|
|
resdom = te->resdom; |
|
|
|
|
expr = te->expr; |
|
|
|
|
type = exprType(expr); |
|
|
|
|
|
|
|
|
|
#if 0 |
|
|
|
|
if (IsA(expr, Const)) |
|
|
|
|
{ |
|
|
|
|
if (((Const *) expr)->consttype != atp->atttypid) |
|
|
|
@ -1474,6 +1477,26 @@ start:; |
|
|
|
|
else if ((exprType(expr) != atp->atttypid) |
|
|
|
|
&& !IS_BINARY_COMPATIBLE(exprType(expr), atp->atttypid)) |
|
|
|
|
elog(ERROR, "DEFAULT: type mismatched"); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (type != atp->atttypid) |
|
|
|
|
{ |
|
|
|
|
if (IS_BINARY_COMPATIBLE(type, atp->atttypid)) |
|
|
|
|
; /* use without change */ |
|
|
|
|
else if (can_coerce_type(1, &(type), &(atp->atttypid))) |
|
|
|
|
expr = coerce_type(NULL, (Node *)expr, type, atp->atttypid); |
|
|
|
|
else if (IsA(expr, Const)) |
|
|
|
|
{ |
|
|
|
|
if (*cast != 0) |
|
|
|
|
elog(ERROR, "DEFAULT clause const type '%s' mismatched with column type '%s'", |
|
|
|
|
typeidTypeName(type), typeidTypeName(atp->atttypid)); |
|
|
|
|
sprintf(cast, ":: %s", typeidTypeName(atp->atttypid)); |
|
|
|
|
goto start; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
elog(ERROR, "DEFAULT clause type '%s' mismatched with column type '%s'", |
|
|
|
|
typeidTypeName(type), typeidTypeName(atp->atttypid)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
adbin = nodeToString(expr); |
|
|
|
|
oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt); |
|
|
|
|