diff options
author | Bruce Momjian <bruce@momjian.us> | 1998-01-19 02:37:51 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1998-01-19 02:37:51 +0000 |
commit | 691dc282f81ff2333837b33f8517bfc08e31f37c (patch) | |
tree | 9988d36fbe570b855f2d85f12a45ac17264642cb /src/backend/executor/execUtils.c | |
parent | 8169769ee5104d4bde9a713beefdd133658f3a0f (diff) | |
download | postgresql-691dc282f81ff2333837b33f8517bfc08e31f37c.tar.gz postgresql-691dc282f81ff2333837b33f8517bfc08e31f37c.zip |
Fix for SELECT INTO TABLE for varchar().
Diffstat (limited to 'src/backend/executor/execUtils.c')
-rw-r--r-- | src/backend/executor/execUtils.c | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index 8d93ecf9cc0..9b02eb7f0e2 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.24 1998/01/16 23:19:52 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.25 1998/01/19 02:37:33 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1177,3 +1177,50 @@ ExecInsertIndexTuples(TupleTableSlot *slot, if (econtext != NULL) pfree(econtext); } + +/* ---------------------------------------------------------------- + * setAtttyplenForCreateTable - + * called when we do a SELECT * INTO TABLE tab + * needed for attributes that have atttypmod like bpchar and + * varchar + * ---------------------------------------------------------------- + */ +void +setAtttypmodForCreateTable(TupleDesc tupType, List *targetList, + List *rangeTable) +{ + List *tl; + TargetEntry *tle; + Node *expr; + int varno; + + tl = targetList; + + for (varno = 0; varno < tupType->natts; varno++) + { + tle = lfirst(tl); + + if (USE_ATTTYPMOD(tupType->attrs[varno]->atttypid)) + { + expr = tle->expr; + if (expr && IsA(expr, Var)) + { + Var *var; + RangeTblEntry *rtentry; + Relation rd; + + var = (Var *) expr; + rtentry = rt_fetch(var->varnoold, rangeTable); + rd = heap_open(rtentry->relid); + /* set length to that defined in relation */ + tupType->attrs[varno]->atttypmod = + (*rd->rd_att->attrs[var->varoattno - 1]).atttypmod; + heap_close(rd); + } + else + elog(ERROR, "setAtttypmodForCreateTable: can't get atttypmod for field (for length, etc.)"); + } + tl = lnext(tl); + } +} + |