mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
Fix for SELECT INTO TABLE for varchar().
This commit is contained in:
parent
8169769ee5
commit
691dc282f8
@ -26,7 +26,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.39 1998/01/16 23:19:49 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.40 1998/01/19 02:37:32 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -563,6 +563,8 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate)
|
|||||||
*/
|
*/
|
||||||
tupdesc = CreateTupleDescCopy(tupType);
|
tupdesc = CreateTupleDescCopy(tupType);
|
||||||
|
|
||||||
|
setAtttypmodForCreateTable(tupdesc, targetList, rangeTable);
|
||||||
|
|
||||||
intoRelationId = heap_create_with_catalog(intoName, tupdesc);
|
intoRelationId = heap_create_with_catalog(intoName, tupdesc);
|
||||||
|
|
||||||
FreeTupleDesc(tupdesc);
|
FreeTupleDesc(tupdesc);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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)
|
if (econtext != NULL)
|
||||||
pfree(econtext);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: pg_attribute.h,v 1.22 1998/01/16 23:20:49 momjian Exp $
|
* $Id: pg_attribute.h,v 1.23 1998/01/19 02:37:45 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* the genbki.sh script reads this file and generates .bki
|
* the genbki.sh script reads this file and generates .bki
|
||||||
@ -89,6 +89,14 @@ CATALOG(pg_attribute) BOOTSTRAP
|
|||||||
/*
|
/*
|
||||||
* atttypmod records type-specific modifications supplied at table
|
* atttypmod records type-specific modifications supplied at table
|
||||||
* creation time.
|
* creation time.
|
||||||
|
* This is not integrated into all areas of the source. It is in
|
||||||
|
* TypeName to pass typmod info from the parser during table creation
|
||||||
|
* time, and it is used in the parser when converting a string to a
|
||||||
|
* typed constant associated with a variable. We also have a hack in
|
||||||
|
* execMain.c/execUtils.c that uses atttypmod to properly create tables
|
||||||
|
* for SELECT * INTO TABLE test2 FROM test;
|
||||||
|
* One day, we may add this to Resdom, and pass it through all areas.
|
||||||
|
* 1998/1/18 bjm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool attbyval;
|
bool attbyval;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: pg_type.h,v 1.26 1997/11/26 04:50:47 momjian Exp $
|
* $Id: pg_type.h,v 1.27 1998/01/19 02:37:47 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* the genbki.sh script reads this file and generates .bki
|
* the genbki.sh script reads this file and generates .bki
|
||||||
@ -364,6 +364,9 @@ DATA(insert OID = 1296 ( timestamp PGUID 4 19 t b t \054 0 0 timestamp_in time
|
|||||||
DESCR("limited-range ISO-format date and time");
|
DESCR("limited-range ISO-format date and time");
|
||||||
#define TIMESTAMPOID 1296
|
#define TIMESTAMPOID 1296
|
||||||
|
|
||||||
|
|
||||||
|
#define USE_ATTTYPMOD(typeid) ((typeid) == BPCHAROID || (typeid) == VARCHAROID)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* prototypes for functions in pg_type.c
|
* prototypes for functions in pg_type.c
|
||||||
*/
|
*/
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: executor.h,v 1.17 1998/01/14 15:48:43 momjian Exp $
|
* $Id: executor.h,v 1.18 1998/01/19 02:37:51 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -120,6 +120,8 @@ extern TupleDesc ExecTypeFromTL(List *targetList);
|
|||||||
extern void ResetTupleCount(void);
|
extern void ResetTupleCount(void);
|
||||||
extern void ExecAssignNodeBaseInfo(EState *estate, CommonState *basenode,
|
extern void ExecAssignNodeBaseInfo(EState *estate, CommonState *basenode,
|
||||||
Plan *parent);
|
Plan *parent);
|
||||||
|
extern void setAtttypmodForCreateTable(TupleDesc tupType, List *targetList,
|
||||||
|
List *rangeTable);
|
||||||
extern void ExecAssignExprContext(EState *estate, CommonState *commonstate);
|
extern void ExecAssignExprContext(EState *estate, CommonState *commonstate);
|
||||||
extern void ExecAssignResultType(CommonState *commonstate,
|
extern void ExecAssignResultType(CommonState *commonstate,
|
||||||
TupleDesc tupDesc);
|
TupleDesc tupDesc);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user