Skip to content
Snippets Groups Projects
Commit 1a8790f7 authored by Thomas G. Lockhart's avatar Thomas G. Lockhart
Browse files

Use the new implicit type coersion techniques for matching up types

 between columns and DEFAULT clauses.
parent 23cebf11
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.67 1998/11/27 19:51:48 vadim Exp $ * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.68 1998/12/13 23:50:58 thomas Exp $
* *
* INTERFACE ROUTINES * INTERFACE ROUTINES
* heap_create() - Create an uncataloged heap relation * heap_create() - Create an uncataloged heap relation
...@@ -1434,6 +1434,7 @@ StoreAttrDefault(Relation rel, AttrDefault *attrdef) ...@@ -1434,6 +1434,7 @@ StoreAttrDefault(Relation rel, AttrDefault *attrdef)
TargetEntry *te; TargetEntry *te;
Resdom *resdom; Resdom *resdom;
Node *expr; Node *expr;
Oid type;
char *adbin; char *adbin;
MemoryContext oldcxt; MemoryContext oldcxt;
Relation adrel; Relation adrel;
...@@ -1460,7 +1461,9 @@ start:; ...@@ -1460,7 +1461,9 @@ start:;
te = (TargetEntry *) lfirst(query->targetList); te = (TargetEntry *) lfirst(query->targetList);
resdom = te->resdom; resdom = te->resdom;
expr = te->expr; expr = te->expr;
type = exprType(expr);
#if 0
if (IsA(expr, Const)) if (IsA(expr, Const))
{ {
if (((Const *) expr)->consttype != atp->atttypid) if (((Const *) expr)->consttype != atp->atttypid)
...@@ -1474,6 +1477,26 @@ start:; ...@@ -1474,6 +1477,26 @@ start:;
else if ((exprType(expr) != atp->atttypid) else if ((exprType(expr) != atp->atttypid)
&& !IS_BINARY_COMPATIBLE(exprType(expr), atp->atttypid)) && !IS_BINARY_COMPATIBLE(exprType(expr), atp->atttypid))
elog(ERROR, "DEFAULT: type mismatched"); 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); adbin = nodeToString(expr);
oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt); oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment