mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Add int2-vs-int8 comparison operators. These are now necessary because
the planner may try to generate them as a result of transitivity of the existing int2-vs-int4 and int4-vs-int8 operators. In fact, it is now necessary that mergejoinable cross-datatype operators form closed sets. Add an opr_sanity regress test to detect missing operators.
This commit is contained in:
@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.23 2000/07/12 22:59:09 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/utils/adt/int8.c,v 1.24 2000/07/28 05:07:41 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -111,7 +111,7 @@ int8out(PG_FUNCTION_ARGS)
|
||||
|
||||
|
||||
/*----------------------------------------------------------
|
||||
* Relational operators for int8s.
|
||||
* Relational operators for int8s, including cross-data-type comparisons.
|
||||
*---------------------------------------------------------*/
|
||||
|
||||
/* int8relop()
|
||||
@ -285,6 +285,120 @@ int48ge(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_BOOL(val1 >= val2);
|
||||
}
|
||||
|
||||
/* int82relop()
|
||||
* Is 64-bit val1 relop 16-bit val2?
|
||||
*/
|
||||
Datum
|
||||
int82eq(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int64 val1 = PG_GETARG_INT64(0);
|
||||
int16 val2 = PG_GETARG_INT16(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 == val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int82ne(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int64 val1 = PG_GETARG_INT64(0);
|
||||
int16 val2 = PG_GETARG_INT16(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 != val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int82lt(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int64 val1 = PG_GETARG_INT64(0);
|
||||
int16 val2 = PG_GETARG_INT16(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 < val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int82gt(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int64 val1 = PG_GETARG_INT64(0);
|
||||
int16 val2 = PG_GETARG_INT16(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 > val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int82le(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int64 val1 = PG_GETARG_INT64(0);
|
||||
int16 val2 = PG_GETARG_INT16(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 <= val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int82ge(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int64 val1 = PG_GETARG_INT64(0);
|
||||
int16 val2 = PG_GETARG_INT16(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 >= val2);
|
||||
}
|
||||
|
||||
/* int28relop()
|
||||
* Is 16-bit val1 relop 64-bit val2?
|
||||
*/
|
||||
Datum
|
||||
int28eq(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int16 val1 = PG_GETARG_INT16(0);
|
||||
int64 val2 = PG_GETARG_INT64(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 == val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int28ne(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int16 val1 = PG_GETARG_INT16(0);
|
||||
int64 val2 = PG_GETARG_INT64(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 != val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int28lt(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int16 val1 = PG_GETARG_INT16(0);
|
||||
int64 val2 = PG_GETARG_INT64(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 < val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int28gt(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int16 val1 = PG_GETARG_INT16(0);
|
||||
int64 val2 = PG_GETARG_INT64(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 > val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int28le(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int16 val1 = PG_GETARG_INT16(0);
|
||||
int64 val2 = PG_GETARG_INT64(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 <= val2);
|
||||
}
|
||||
|
||||
Datum
|
||||
int28ge(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int16 val1 = PG_GETARG_INT16(0);
|
||||
int64 val2 = PG_GETARG_INT64(1);
|
||||
|
||||
PG_RETURN_BOOL(val1 >= val2);
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------
|
||||
* Arithmetic operators on 64-bit integers.
|
||||
|
Reference in New Issue
Block a user