mirror of
https://github.com/postgres/postgres.git
synced 2025-08-28 18:48:04 +03:00
Implement SQL-compliant treatment of row comparisons for < <= > >= cases
(previously we only did = and <> correctly). Also, allow row comparisons with any operators that are in btree opclasses, not only those with these specific names. This gets rid of a whole lot of indefensible assumptions about the behavior of particular operators based on their names ... though it's still true that IN and NOT IN expand to "= ANY". The patch adds a RowCompareExpr expression node type, and makes some changes in the representation of ANY/ALL/ROWCOMPARE SubLinks so that they can share code with RowCompareExpr. I have not yet done anything about making RowCompareExpr an indexable operator, but will look at that soon. initdb forced due to changes in stored rules.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/utils/lsyscache.h,v 1.101 2005/10/15 02:49:46 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/include/utils/lsyscache.h,v 1.102 2005/12/28 01:30:01 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -31,6 +31,8 @@ extern void get_op_opclass_properties(Oid opno, Oid opclass,
|
||||
bool *recheck);
|
||||
extern Oid get_opclass_member(Oid opclass, Oid subtype, int16 strategy);
|
||||
extern Oid get_op_hash_function(Oid opno);
|
||||
extern void get_op_btree_interpretation(Oid opno,
|
||||
List **opclasses, List **opstrats);
|
||||
extern Oid get_opclass_proc(Oid opclass, Oid subtype, int16 procnum);
|
||||
extern char *get_attname(Oid relid, AttrNumber attnum);
|
||||
extern char *get_relid_attribute_name(Oid relid, AttrNumber attnum);
|
||||
@@ -41,6 +43,8 @@ extern void get_atttypetypmod(Oid relid, AttrNumber attnum,
|
||||
Oid *typid, int32 *typmod);
|
||||
extern bool opclass_is_btree(Oid opclass);
|
||||
extern bool opclass_is_hash(Oid opclass);
|
||||
extern bool opclass_is_default(Oid opclass);
|
||||
extern Oid get_opclass_input_type(Oid opclass);
|
||||
extern RegProcedure get_opcode(Oid opno);
|
||||
extern char *get_opname(Oid opno);
|
||||
extern void op_input_types(Oid opno, Oid *lefttype, Oid *righttype);
|
||||
|
Reference in New Issue
Block a user