Commit 3dd23aad authored by Bruce Momjian's avatar Bruce Momjian

Allow functions and operators on internally-identical types to succeed.

parent 0ab29212
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.34 1997/08/19 21:32:11 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.35 1997/08/22 00:02:04 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1345,7 +1345,7 @@ make_targetlist_expr(ParseState *pstate, ...@@ -1345,7 +1345,7 @@ make_targetlist_expr(ParseState *pstate,
} else } else
if (attrtype != type_id) { if (attrtype != type_id) {
if ((attrtype == INT2OID) && (type_id == INT4OID)) if ((attrtype == INT2OID) && (type_id == INT4OID))
lfirst(expr) = lispInteger (INT2OID); lfirst(expr) = lispInteger (INT2OID); do CASHOID too
else if ((attrtype == FLOAT4OID) && (type_id == FLOAT8OID)) else if ((attrtype == FLOAT4OID) && (type_id == FLOAT8OID))
lfirst(expr) = lispInteger (FLOAT4OID); lfirst(expr) = lispInteger (FLOAT4OID);
else else
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/Attic/catalog_utils.c,v 1.21 1997/08/19 21:32:12 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/Attic/catalog_utils.c,v 1.22 1997/08/22 00:02:05 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -373,6 +373,7 @@ equivalentOpersAfterPromotion(CandidateList candidates) ...@@ -373,6 +373,7 @@ equivalentOpersAfterPromotion(CandidateList candidates)
case FLOAT4OID: case FLOAT4OID:
case INT4OID: case INT4OID:
case INT2OID: case INT2OID:
case CASHOID:
c->args[0] = FLOAT8OID; c->args[0] = FLOAT8OID;
break; break;
default: default:
...@@ -383,6 +384,7 @@ equivalentOpersAfterPromotion(CandidateList candidates) ...@@ -383,6 +384,7 @@ equivalentOpersAfterPromotion(CandidateList candidates)
case FLOAT4OID: case FLOAT4OID:
case INT4OID: case INT4OID:
case INT2OID: case INT2OID:
case CASHOID:
c->args[1] = FLOAT8OID; c->args[1] = FLOAT8OID;
break; break;
default: default:
...@@ -570,6 +572,7 @@ unary_oper_get_candidates(char *op, ...@@ -570,6 +572,7 @@ unary_oper_get_candidates(char *op,
opKey[1].sk_argument = CharGetDatum(rightleft); opKey[1].sk_argument = CharGetDatum(rightleft);
/* currently, only "unknown" can be coerced */ /* currently, only "unknown" can be coerced */
/* but we should allow types that are internally the same to be "coerced" */
if (typeId != UNKNOWNOID) { if (typeId != UNKNOWNOID) {
return 0; return 0;
} }
...@@ -956,7 +959,14 @@ can_coerce(int nargs, Oid *input_typeids, Oid *func_typeids) ...@@ -956,7 +959,14 @@ can_coerce(int nargs, Oid *input_typeids, Oid *func_typeids)
*/ */
for (i=0; i<nargs; i++) { for (i=0; i<nargs; i++) {
if (input_typeids[i] != func_typeids[i]) { if (input_typeids[i] != func_typeids[i]) {
if (input_typeids[i] != UNKNOWNOID || func_typeids[i] == 0) if ((input_typeids[i] == BPCHAROID && func_typeids[i] == TEXTOID) ||
(input_typeids[i] == BPCHAROID && func_typeids[i] == VARCHAROID) ||
(input_typeids[i] == VARCHAROID && func_typeids[i] == TEXTOID) ||
(input_typeids[i] == VARCHAROID && func_typeids[i] == BPCHAROID) ||
(input_typeids[i] == CASHOID && func_typeids[i] == INT4OID) ||
(input_typeids[i] == INT4OID && func_typeids[i] == CASHOID))
; /* these are OK */
else if (input_typeids[i] != UNKNOWNOID || func_typeids[i] == 0)
return false; return false;
tp = get_id_type(input_typeids[i]); tp = get_id_type(input_typeids[i]);
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/Attic/parse_query.c,v 1.17 1997/08/19 21:32:16 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/Attic/parse_query.c,v 1.18 1997/08/22 00:02:07 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -378,7 +378,8 @@ make_op(char *opname, Node *ltree, Node *rtree) ...@@ -378,7 +378,8 @@ make_op(char *opname, Node *ltree, Node *rtree)
(t) == INT4OID || \ (t) == INT4OID || \
(t) == OIDOID || \ (t) == OIDOID || \
(t) == FLOAT4OID || \ (t) == FLOAT4OID || \
(t) == FLOAT8OID) (t) == FLOAT8OID || \
(t) == CASHOID)
/* binary operator */ /* binary operator */
ltypeId = (ltree==NULL) ? UNKNOWNOID : exprType(ltree); ltypeId = (ltree==NULL) ? UNKNOWNOID : exprType(ltree);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.20 1997/08/03 02:28:10 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.21 1997/08/22 00:02:08 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -239,6 +239,13 @@ parser_typecast(Value *expr, TypeName *typename, int typlen) ...@@ -239,6 +239,13 @@ parser_typecast(Value *expr, TypeName *typename, int typlen)
sprintf(const_string,"%f", ((Const)lnext(expr))->constvalue); sprintf(const_string,"%f", ((Const)lnext(expr))->constvalue);
break; break;
case CASHOID: /* money */
const_string = (char *) palloc(256);
string_palloced = true;
sprintf(const_string,"%ld",
(int) ((Const*)expr)->constvalue);
break;
case TEXTOID: /* text */ case TEXTOID: /* text */
const_string = DatumGetPointer(((Const)lnext(expr))->constvalue); const_string = DatumGetPointer(((Const)lnext(expr))->constvalue);
const_string = (char *) textout((struct varlena *)const_string); const_string = (char *) textout((struct varlena *)const_string);
...@@ -350,6 +357,12 @@ parser_typecast2(Node *expr, Oid exprType, Type tp, int typlen) ...@@ -350,6 +357,12 @@ parser_typecast2(Node *expr, Oid exprType, Type tp, int typlen)
sprintf(const_string,"%f", *floatVal); sprintf(const_string,"%f", *floatVal);
break; break;
} }
case CASHOID: /* money */
const_string = (char *) palloc(256);
string_palloced = true;
sprintf(const_string,"%ld",
(long) ((Const*)expr)->constvalue);
break;
case TEXTOID: /* text */ case TEXTOID: /* text */
const_string = const_string =
DatumGetPointer(((Const*)expr)->constvalue ); DatumGetPointer(((Const*)expr)->constvalue );
......
...@@ -7,7 +7,7 @@ ...@@ -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.14 1997/08/21 01:37:55 vadim Exp $ * $Id: pg_type.h,v 1.15 1997/08/22 00:02:19 momjian Exp $
* *
* NOTES * NOTES
* the genbki.sh script reads this file and generates .bki * the genbki.sh script reads this file and generates .bki
...@@ -242,6 +242,7 @@ DATA(insert OID = 705 ( unknown PGUID -1 -1 f b t \054 0 18 textin textout ...@@ -242,6 +242,7 @@ DATA(insert OID = 705 ( unknown PGUID -1 -1 f b t \054 0 18 textin textout
DATA(insert OID = 718 ( circle PGUID 24 47 f b t \054 0 0 circle_in circle_out circle_in circle_out d _null_ )); DATA(insert OID = 718 ( circle PGUID 24 47 f b t \054 0 0 circle_in circle_out circle_in circle_out d _null_ ));
DATA(insert OID = 719 ( _circle PGUID -1 -1 f b t \054 0 718 array_in array_out array_in array_out d _null_ )); DATA(insert OID = 719 ( _circle PGUID -1 -1 f b t \054 0 718 array_in array_out array_in array_out d _null_ ));
DATA(insert OID = 790 ( money PGUID 4 24 f b t \054 0 0 cash_in cash_out cash_in cash_out i _null_ )); DATA(insert OID = 790 ( money PGUID 4 24 f b t \054 0 0 cash_in cash_out cash_in cash_out i _null_ ));
#define CASHOID 790
DATA(insert OID = 791 ( _money PGUID -1 -1 f b t \054 0 790 array_in array_out array_in array_out i _null_ )); DATA(insert OID = 791 ( _money PGUID -1 -1 f b t \054 0 790 array_in array_out array_in array_out i _null_ ));
/* OIDS 800 - 899 */ /* OIDS 800 - 899 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment