aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1997-08-22 00:02:19 +0000
committerBruce Momjian <bruce@momjian.us>1997-08-22 00:02:19 +0000
commit3dd23aadf0746ba53ffe3ca76863a0ffbbeb0c68 (patch)
tree3b997af9bffc12a84da4df1f32d5b843d3e6f08c /src/backend/parser
parent0ab29212904dc4352646acaf416b6ab1a367d661 (diff)
downloadpostgresql-3dd23aadf0746ba53ffe3ca76863a0ffbbeb0c68.tar.gz
postgresql-3dd23aadf0746ba53ffe3ca76863a0ffbbeb0c68.zip
Allow functions and operators on internally-identical types to succeed.
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/analyze.c4
-rw-r--r--src/backend/parser/catalog_utils.c14
-rw-r--r--src/backend/parser/parse_query.c5
-rw-r--r--src/backend/parser/parser.c15
4 files changed, 31 insertions, 7 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 6c703b77814..9b4c88b9ae9 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -7,7 +7,7 @@
*
*
* 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,
} else
if (attrtype != type_id) {
if ((attrtype == INT2OID) && (type_id == INT4OID))
- lfirst(expr) = lispInteger (INT2OID);
+ lfirst(expr) = lispInteger (INT2OID); do CASHOID too
else if ((attrtype == FLOAT4OID) && (type_id == FLOAT8OID))
lfirst(expr) = lispInteger (FLOAT4OID);
else
diff --git a/src/backend/parser/catalog_utils.c b/src/backend/parser/catalog_utils.c
index 43419883411..043c2865060 100644
--- a/src/backend/parser/catalog_utils.c
+++ b/src/backend/parser/catalog_utils.c
@@ -6,7 +6,7 @@
*
*
* 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)
case FLOAT4OID:
case INT4OID:
case INT2OID:
+ case CASHOID:
c->args[0] = FLOAT8OID;
break;
default:
@@ -383,6 +384,7 @@ equivalentOpersAfterPromotion(CandidateList candidates)
case FLOAT4OID:
case INT4OID:
case INT2OID:
+ case CASHOID:
c->args[1] = FLOAT8OID;
break;
default:
@@ -570,6 +572,7 @@ unary_oper_get_candidates(char *op,
opKey[1].sk_argument = CharGetDatum(rightleft);
/* currently, only "unknown" can be coerced */
+ /* but we should allow types that are internally the same to be "coerced" */
if (typeId != UNKNOWNOID) {
return 0;
}
@@ -956,7 +959,14 @@ can_coerce(int nargs, Oid *input_typeids, Oid *func_typeids)
*/
for (i=0; i<nargs; 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;
tp = get_id_type(input_typeids[i]);
diff --git a/src/backend/parser/parse_query.c b/src/backend/parser/parse_query.c
index e608a2dc6b9..b19b291769f 100644
--- a/src/backend/parser/parse_query.c
+++ b/src/backend/parser/parse_query.c
@@ -8,7 +8,7 @@
*
*
* 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)
(t) == INT4OID || \
(t) == OIDOID || \
(t) == FLOAT4OID || \
- (t) == FLOAT8OID)
+ (t) == FLOAT8OID || \
+ (t) == CASHOID)
/* binary operator */
ltypeId = (ltree==NULL) ? UNKNOWNOID : exprType(ltree);
diff --git a/src/backend/parser/parser.c b/src/backend/parser/parser.c
index 14f110767f3..44e8ef91006 100644
--- a/src/backend/parser/parser.c
+++ b/src/backend/parser/parser.c
@@ -6,7 +6,7 @@
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
@@ -238,6 +238,13 @@ parser_typecast(Value *expr, TypeName *typename, int typlen)
string_palloced = true;
sprintf(const_string,"%f", ((Const)lnext(expr))->constvalue);
break;
+
+ case CASHOID: /* money */
+ const_string = (char *) palloc(256);
+ string_palloced = true;
+ sprintf(const_string,"%ld",
+ (int) ((Const*)expr)->constvalue);
+ break;
case TEXTOID: /* text */
const_string = DatumGetPointer(((Const)lnext(expr))->constvalue);
@@ -350,6 +357,12 @@ parser_typecast2(Node *expr, Oid exprType, Type tp, int typlen)
sprintf(const_string,"%f", *floatVal);
break;
}
+ case CASHOID: /* money */
+ const_string = (char *) palloc(256);
+ string_palloced = true;
+ sprintf(const_string,"%ld",
+ (long) ((Const*)expr)->constvalue);
+ break;
case TEXTOID: /* text */
const_string =
DatumGetPointer(((Const*)expr)->constvalue );