summaryrefslogtreecommitdiff
path: root/src/test/regress
diff options
context:
space:
mode:
authorTom Lane1999-03-01 00:10:44 +0000
committerTom Lane1999-03-01 00:10:44 +0000
commitb204d10c79b5177026565a0db531a86f585f09f4 (patch)
treed16f429f5adb8eae6cef113ea730af6fc21771f0 /src/test/regress
parentd077c6149269701d0831634e8800b53c528d13ac (diff)
Executor no longer cares about mergejoinop, mergerightorder, mergeleftorder,
so remove them from MergeJoin node. Hack together a partial solution for commuted mergejoin operators --- yesterday a mergejoin int4 = int8 would crash if the planner decided to commute it, today it works. The planner's representation of mergejoins really needs a rewrite though. Also, further testing of mergejoin ops in opr_sanity regress test.
Diffstat (limited to 'src/test/regress')
-rw-r--r--src/test/regress/expected/opr_sanity.out31
-rw-r--r--src/test/regress/sql/opr_sanity.sql30
2 files changed, 58 insertions, 3 deletions
diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out
index 92cb1be9485..b720c5d9cbb 100644
--- a/src/test/regress/expected/opr_sanity.out
+++ b/src/test/regress/expected/opr_sanity.out
@@ -51,7 +51,7 @@ WHERE p1.oid != p2.oid AND
p1.oprkind = p2.oprkind AND
p1.oprleft = p2.oprleft AND
p1.oprright = p2.oprright;
-oid|oprcode|oid|oprcode
+oid|oprcode|oid|oprcode
---+-------+---+-------
(0 rows)
@@ -108,3 +108,32 @@ oid|oprcode|oid|oprcode
---+-------+---+-------
(0 rows)
+QUERY: SELECT p1.oid, p1.* FROM pg_operator AS p1
+WHERE p1.oprlsortop != 0 AND
+ p1.oprcom = 0;
+oid|oprname|oprowner|oprprec|oprkind|oprisleft|oprcanhash|oprleft|oprright|oprresult|oprcom|oprnegate|oprlsortop|oprrsortop|oprcode|oprrest|oprjoin
+---+-------+--------+-------+-------+---------+----------+-------+--------+---------+------+---------+----------+----------+-------+-------+-------
+(0 rows)
+
+QUERY: SELECT p1.oid, p1.* FROM pg_operator AS p1
+WHERE p1.oprlsortop != 0 AND NOT
+ EXISTS(SELECT * FROM pg_operator AS p2 WHERE
+ p2.oprname = '<' AND
+ p2.oprleft = p1.oprleft AND
+ p2.oprright = p1.oprright AND
+ p2.oprkind = 'b');
+oid|oprname|oprowner|oprprec|oprkind|oprisleft|oprcanhash|oprleft|oprright|oprresult|oprcom|oprnegate|oprlsortop|oprrsortop|oprcode|oprrest|oprjoin
+---+-------+--------+-------+-------+---------+----------+-------+--------+---------+------+---------+----------+----------+-------+-------+-------
+(0 rows)
+
+QUERY: SELECT p1.oid, p1.* FROM pg_operator AS p1
+WHERE p1.oprlsortop != 0 AND NOT
+ EXISTS(SELECT * FROM pg_operator AS p2 WHERE
+ p2.oprname = '>' AND
+ p2.oprleft = p1.oprleft AND
+ p2.oprright = p1.oprright AND
+ p2.oprkind = 'b');
+oid|oprname|oprowner|oprprec|oprkind|oprisleft|oprcanhash|oprleft|oprright|oprresult|oprcom|oprnegate|oprlsortop|oprrsortop|oprcode|oprrest|oprjoin
+---+-------+--------+-------+-------+---------+----------+-------+--------+---------+------+---------+----------+----------+-------+-------+-------
+(0 rows)
+
diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql
index c2567d294a9..1a522468163 100644
--- a/src/test/regress/sql/opr_sanity.sql
+++ b/src/test/regress/sql/opr_sanity.sql
@@ -81,8 +81,8 @@ WHERE p1.oprnegate = p2.oid AND
p2.oprresult != 16 OR
p1.oid != p2.oprnegate);
--- Look for mergesort operators that don't match.
--- A mergesort link leads from an '=' operator to the
+-- Look for mergejoin operators that don't match their links.
+-- A mergejoin link leads from an '=' operator to the
-- sort operator ('<' operator) that's appropriate for
-- its left-side or right-side data type.
@@ -107,3 +107,29 @@ WHERE p1.oprrsortop = p2.oid AND
p1.oprresult != 16 OR
p2.oprresult != 16 OR
p1.oprlsortop = 0);
+
+-- A mergejoinable = operator must have a commutator (usually itself)
+-- as well as corresponding < and > operators. Note that the "corresponding"
+-- operators have the same L and R input datatypes as the = operator,
+-- whereas the operators linked to by oprlsortop and oprrsortop have input
+-- datatypes L,L and R,R respectively.
+
+SELECT p1.oid, p1.* FROM pg_operator AS p1
+WHERE p1.oprlsortop != 0 AND
+ p1.oprcom = 0;
+
+SELECT p1.oid, p1.* FROM pg_operator AS p1
+WHERE p1.oprlsortop != 0 AND NOT
+ EXISTS(SELECT * FROM pg_operator AS p2 WHERE
+ p2.oprname = '<' AND
+ p2.oprleft = p1.oprleft AND
+ p2.oprright = p1.oprright AND
+ p2.oprkind = 'b');
+
+SELECT p1.oid, p1.* FROM pg_operator AS p1
+WHERE p1.oprlsortop != 0 AND NOT
+ EXISTS(SELECT * FROM pg_operator AS p2 WHERE
+ p2.oprname = '>' AND
+ p2.oprleft = p1.oprleft AND
+ p2.oprright = p1.oprright AND
+ p2.oprkind = 'b');