Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitac4878a

Browse files
committed
Pass atttypmod to CoerceTargetExpr, so that it can pass it on to
coerce_type, so that the right things happen when coercing a previously-unknown constant to a destination data type.
1 parentceca036 commitac4878a

File tree

7 files changed

+27
-24
lines changed

7 files changed

+27
-24
lines changed

‎src/backend/catalog/heap.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.115 2000/01/16 19:57:00 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.116 2000/01/17 02:04:12 tgl Exp $
1111
*
1212
*
1313
* INTERFACE ROUTINES
@@ -1966,8 +1966,8 @@ AddRelationRawConstraints(Relation rel,
19661966

19671967
if (type_id!=atp->atttypid)
19681968
{
1969-
if (CoerceTargetExpr(NULL,expr,
1970-
type_id,atp->atttypid)==NULL)
1969+
if (CoerceTargetExpr(NULL,expr,type_id,
1970+
atp->atttypid,atp->atttypmod)==NULL)
19711971
elog(ERROR,"Attribute '%s' is of type '%s'"
19721972
" but default expression is of type '%s'"
19731973
"\n\tYou will need to rewrite or cast the expression",

‎src/backend/parser/parse_clause.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.48 1999/12/1714:47:35 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.49 2000/01/1702:04:16 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -757,7 +757,7 @@ transformUnionClause(List *unionClause, List *targetlist)
757757
Node*expr;
758758

759759
expr= ((TargetEntry*)lfirst(next_target))->expr;
760-
expr=CoerceTargetExpr(NULL,expr,itype,otype);
760+
expr=CoerceTargetExpr(NULL,expr,itype,otype,-1);
761761
if (expr==NULL)
762762
{
763763
elog(ERROR,"Unable to transform %s to %s"

‎src/backend/parser/parse_expr.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.65 2000/01/1700:14:48 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.66 2000/01/1702:04:16 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -792,8 +792,8 @@ parser_typecast_expression(ParseState *pstate,
792792

793793
if (inputType!=targetType)
794794
{
795-
expr=CoerceTargetExpr(pstate,expr,
796-
inputType,targetType);
795+
expr=CoerceTargetExpr(pstate,expr,inputType,
796+
targetType,typename->typmod);
797797
if (expr==NULL)
798798
elog(ERROR,"Cannot cast type '%s' to '%s'",
799799
typeidTypeName(inputType),

‎src/backend/parser/parse_node.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.35 2000/01/15 02:59:32 petere Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.36 2000/01/17 02:04:16 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -319,8 +319,8 @@ transformArraySubscripts(ParseState *pstate,
319319
{
320320
subexpr=transformExpr(pstate,ai->lidx,EXPR_COLUMN_FIRST);
321321
/* If it's not int4 already, try to coerce */
322-
subexpr=CoerceTargetExpr(pstate,subexpr,
323-
exprType(subexpr),INT4OID);
322+
subexpr=CoerceTargetExpr(pstate,subexpr,exprType(subexpr),
323+
INT4OID,-1);
324324
if (subexpr==NULL)
325325
elog(ERROR,"array index expressions must be integers");
326326
}
@@ -339,8 +339,8 @@ transformArraySubscripts(ParseState *pstate,
339339
}
340340
subexpr=transformExpr(pstate,ai->uidx,EXPR_COLUMN_FIRST);
341341
/* If it's not int4 already, try to coerce */
342-
subexpr=CoerceTargetExpr(pstate,subexpr,
343-
exprType(subexpr),INT4OID);
342+
subexpr=CoerceTargetExpr(pstate,subexpr,exprType(subexpr),
343+
INT4OID,-1);
344344
if (subexpr==NULL)
345345
elog(ERROR,"array index expressions must be integers");
346346
upperIndexpr=lappend(upperIndexpr,subexpr);
@@ -358,8 +358,10 @@ transformArraySubscripts(ParseState *pstate,
358358
{
359359
if (typesource!=typeneeded)
360360
{
361+
/* XXX fixme: need to get the array's atttypmod? */
361362
assignFrom=CoerceTargetExpr(pstate,assignFrom,
362-
typesource,typeneeded);
363+
typesource,typeneeded,
364+
-1);
363365
if (assignFrom==NULL)
364366
elog(ERROR,"Array assignment requires type '%s'"
365367
" but expression is of type '%s'"

‎src/backend/parser/parse_target.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.52 2000/01/1700:14:48 tgl Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.53 2000/01/1702:04:16 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -229,8 +229,8 @@ updateTargetListEntry(ParseState *pstate,
229229
{
230230
if (type_id!=attrtype)
231231
{
232-
tle->expr=CoerceTargetExpr(pstate,tle->expr,
233-
type_id,attrtype);
232+
tle->expr=CoerceTargetExpr(pstate,tle->expr,type_id,
233+
attrtype,attrtypmod);
234234
if (tle->expr==NULL)
235235
elog(ERROR,"Attribute '%s' is of type '%s'"
236236
" but expression is of type '%s'"
@@ -264,10 +264,11 @@ Node *
264264
CoerceTargetExpr(ParseState*pstate,
265265
Node*expr,
266266
Oidtype_id,
267-
Oidattrtype)
267+
Oidattrtype,
268+
int32attrtypmod)
268269
{
269270
if (can_coerce_type(1,&type_id,&attrtype))
270-
expr=coerce_type(pstate,expr,type_id,attrtype,-1);
271+
expr=coerce_type(pstate,expr,type_id,attrtype,attrtypmod);
271272

272273
#ifndefDISABLE_STRING_HACKS
273274

@@ -283,7 +284,7 @@ CoerceTargetExpr(ParseState *pstate,
283284
{
284285
}
285286
elseif (can_coerce_type(1,&type_id,&text_id))
286-
expr=coerce_type(pstate,expr,type_id,text_id,-1);
287+
expr=coerce_type(pstate,expr,type_id,text_id,attrtypmod);
287288
else
288289
expr=NULL;
289290
}

‎src/backend/rewrite/rewriteHandler.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
*
88
* IDENTIFICATION
9-
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.64 2000/01/05 18:23:48 momjian Exp $
9+
* $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.65 2000/01/17 02:04:13 tgl Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -1696,7 +1696,7 @@ check_targetlists_are_compatible(List *prev_target, List *current_target)
16961696
Node*expr;
16971697

16981698
expr= ((TargetEntry*)lfirst(next_target))->expr;
1699-
expr=CoerceTargetExpr(NULL,expr,itype,otype);
1699+
expr=CoerceTargetExpr(NULL,expr,itype,otype,-1);
17001700
if (expr==NULL)
17011701
{
17021702
elog(ERROR,"Unable to transform %s to %s"

‎src/include/parser/parse_target.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Id: parse_target.h,v 1.16 1999/11/01 05:06:20 tgl Exp $
9+
* $Id: parse_target.h,v 1.17 2000/01/17 02:04:15 tgl Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -23,7 +23,7 @@ extern void updateTargetListEntry(ParseState *pstate, TargetEntry *tle,
2323
char*colname,intattrno,
2424
List*indirection);
2525
externNode*CoerceTargetExpr(ParseState*pstate,Node*expr,
26-
Oidtype_id,Oidattrtype);
26+
Oidtype_id,Oidattrtype,int32attrtypmod);
2727
externList*checkInsertTargets(ParseState*pstate,List*cols,
2828
List**attrnos);
2929

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp