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

Commitf758097

Browse files
committed
Reorder tests in parse_coerce so that ANY/ANYELEMENT/ANYARRAY coercion
does not affect UNKNOWN-type literals or Params. This fixes the recentcomplaint about count('x') being broken, and improves consistency ina few other respects too.
1 parentb40b330 commitf758097

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

‎src/backend/parser/parse_coerce.c

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.112 2003/11/29 19:51:52 pgsql Exp $
11+
* $PostgreSQL: pgsql/src/backend/parser/parse_coerce.c,v 2.113 2003/12/17 19:49:39 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -153,6 +153,14 @@ coerce_type(ParseState *pstate, Node *node,
153153
/* no conversion needed */
154154
returnnode;
155155
}
156+
if (targetTypeId==ANYOID||
157+
targetTypeId==ANYARRAYOID||
158+
targetTypeId==ANYELEMENTOID)
159+
{
160+
/* assume can_coerce_type verified that implicit coercion is okay */
161+
/* NB: we do NOT want a RelabelType here */
162+
returnnode;
163+
}
156164
if (inputTypeId==UNKNOWNOID&&IsA(node,Const))
157165
{
158166
/*
@@ -260,14 +268,6 @@ coerce_type(ParseState *pstate, Node *node,
260268
param->paramtype=targetTypeId;
261269
return (Node*)param;
262270
}
263-
if (targetTypeId==ANYOID||
264-
targetTypeId==ANYARRAYOID||
265-
targetTypeId==ANYELEMENTOID)
266-
{
267-
/* assume can_coerce_type verified that implicit coercion is okay */
268-
/* NB: we do NOT want a RelabelType here */
269-
returnnode;
270-
}
271271
if (find_coercion_pathway(targetTypeId,inputTypeId,ccontext,
272272
&funcId))
273273
{
@@ -372,17 +372,6 @@ can_coerce_type(int nargs, Oid *input_typeids, Oid *target_typeids,
372372
if (!typeidIsValid(targetTypeId))
373373
return false;
374374

375-
/*
376-
* If input is an untyped string constant, assume we can convert
377-
* it to anything except a class type.
378-
*/
379-
if (inputTypeId==UNKNOWNOID)
380-
{
381-
if (ISCOMPLEX(targetTypeId))
382-
return false;
383-
continue;
384-
}
385-
386375
/* accept if target is ANY */
387376
if (targetTypeId==ANYOID)
388377
continue;
@@ -395,6 +384,17 @@ can_coerce_type(int nargs, Oid *input_typeids, Oid *target_typeids,
395384
continue;
396385
}
397386

387+
/*
388+
* If input is an untyped string constant, assume we can convert
389+
* it to anything except a class type.
390+
*/
391+
if (inputTypeId==UNKNOWNOID)
392+
{
393+
if (ISCOMPLEX(targetTypeId))
394+
return false;
395+
continue;
396+
}
397+
398398
/*
399399
* If pg_cast shows that we can coerce, accept. This test now
400400
* covers both binary-compatible and coercion-function cases.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp