diff options
| author | Tom Lane | 1999-03-01 00:10:44 +0000 |
|---|---|---|
| committer | Tom Lane | 1999-03-01 00:10:44 +0000 |
| commit | b204d10c79b5177026565a0db531a86f585f09f4 (patch) | |
| tree | d16f429f5adb8eae6cef113ea730af6fc21771f0 /src/test/regress | |
| parent | d077c6149269701d0831634e8800b53c528d13ac (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.out | 31 | ||||
| -rw-r--r-- | src/test/regress/sql/opr_sanity.sql | 30 |
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'); |
