Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb73d8d2

Browse files
committed
Improve opr_sanity regression test to check oprltcmpop and opgtcmpop
mergejoin links.
1 parentf400381 commitb73d8d2

File tree

2 files changed

+79
-55
lines changed

2 files changed

+79
-55
lines changed

‎src/test/regress/expected/opr_sanity.out

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -316,9 +316,13 @@ WHERE p1.oprnegate = p2.oid AND
316316
(0 rows)
317317

318318
-- Look for mergejoin operators that don't match their links.
319-
--A mergejoin link leads from an '=' operator to the
319+
--An lsortop/rsortop link leads from an '=' operator to the
320320
-- sort operator ('<' operator) that's appropriate for
321321
-- its left-side or right-side data type.
322+
-- An ltcmpop/gtcmpop link leads from an '=' operator to the
323+
-- '<' or '>' operator of the same input datatypes.
324+
-- (If the '=' operator has identical L and R input datatypes,
325+
-- then lsortop, rsortop, and ltcmpop are all the same operator.)
322326
SELECT p1.oid, p1.oprcode, p2.oid, p2.oprcode
323327
FROM pg_operator AS p1, pg_operator AS p2
324328
WHERE p1.oprlsortop = p2.oid AND
@@ -327,8 +331,7 @@ WHERE p1.oprlsortop = p2.oid AND
327331
p1.oprleft != p2.oprleft OR
328332
p1.oprleft != p2.oprright OR
329333
p1.oprresult != 'bool'::regtype OR
330-
p2.oprresult != 'bool'::regtype OR
331-
p1.oprrsortop = 0);
334+
p2.oprresult != 'bool'::regtype);
332335
oid | oprcode | oid | oprcode
333336
-----+---------+-----+---------
334337
(0 rows)
@@ -341,42 +344,52 @@ WHERE p1.oprrsortop = p2.oid AND
341344
p1.oprright != p2.oprleft OR
342345
p1.oprright != p2.oprright OR
343346
p1.oprresult != 'bool'::regtype OR
344-
p2.oprresult != 'bool'::regtype OR
345-
p1.oprlsortop = 0);
347+
p2.oprresult != 'bool'::regtype);
346348
oid | oprcode | oid | oprcode
347349
-----+---------+-----+---------
348350
(0 rows)
349351

350-
-- A mergejoinable = operator must have a commutator (usually itself)
351-
-- as well as corresponding < and > operators. Note that the "corresponding"
352-
-- operators have the same L and R input datatypes as the = operator,
353-
-- whereas the operators linked to by oprlsortop and oprrsortop have input
354-
-- datatypes L,L and R,R respectively.
355-
SELECT p1.oid, p1.oprname FROM pg_operator AS p1
356-
WHERE p1.oprlsortop != 0 AND
357-
p1.oprcom = 0;
358-
oid | oprname
359-
-----+---------
352+
SELECT p1.oid, p1.oprcode, p2.oid, p2.oprcode
353+
FROM pg_operator AS p1, pg_operator AS p2
354+
WHERE p1.oprltcmpop = p2.oid AND
355+
(p1.oprname != '=' OR p2.oprname != '<' OR
356+
p1.oprkind != 'b' OR p2.oprkind != 'b' OR
357+
p1.oprleft != p2.oprleft OR
358+
p1.oprright != p2.oprright OR
359+
p1.oprresult != 'bool'::regtype OR
360+
p2.oprresult != 'bool'::regtype);
361+
oid | oprcode | oid | oprcode
362+
-----+---------+-----+---------
360363
(0 rows)
361364

362-
SELECT p1.oid, p1.oprname FROM pg_operator AS p1
363-
WHERE p1.oprlsortop != 0 AND NOT
364-
EXISTS(SELECT 1 FROM pg_operator AS p2 WHERE
365-
p2.oprname = '<' AND
366-
p2.oprleft = p1.oprleft AND
367-
p2.oprright = p1.oprright AND
368-
p2.oprkind = 'b');
369-
oid | oprname
365+
SELECT p1.oid, p1.oprcode, p2.oid, p2.oprcode
366+
FROM pg_operator AS p1, pg_operator AS p2
367+
WHERE p1.oprgtcmpop = p2.oid AND
368+
(p1.oprname != '=' OR p2.oprname != '>' OR
369+
p1.oprkind != 'b' OR p2.oprkind != 'b' OR
370+
p1.oprleft != p2.oprleft OR
371+
p1.oprright != p2.oprright OR
372+
p1.oprresult != 'bool'::regtype OR
373+
p2.oprresult != 'bool'::regtype);
374+
oid | oprcode | oid | oprcode
375+
-----+---------+-----+---------
376+
(0 rows)
377+
378+
-- Make sure all four links are specified if any are.
379+
SELECT p1.oid, p1.oprcode
380+
FROM pg_operator AS p1
381+
WHERE NOT ((oprlsortop = 0 AND oprrsortop = 0 AND
382+
oprltcmpop = 0 AND oprgtcmpop = 0) OR
383+
(oprlsortop != 0 AND oprrsortop != 0 AND
384+
oprltcmpop != 0 AND oprgtcmpop != 0));
385+
oid | oprcode
370386
-----+---------
371387
(0 rows)
372388

389+
-- A mergejoinable = operator must have a commutator (usually itself).
373390
SELECT p1.oid, p1.oprname FROM pg_operator AS p1
374-
WHERE p1.oprlsortop != 0 AND NOT
375-
EXISTS(SELECT 1 FROM pg_operator AS p2 WHERE
376-
p2.oprname = '>' AND
377-
p2.oprleft = p1.oprleft AND
378-
p2.oprright = p1.oprright AND
379-
p2.oprkind = 'b');
391+
WHERE p1.oprlsortop != 0 AND
392+
p1.oprcom = 0;
380393
oid | oprname
381394
-----+---------
382395
(0 rows)

‎src/test/regress/sql/opr_sanity.sql

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -259,9 +259,13 @@ WHERE p1.oprnegate = p2.oid AND
259259
p1.oid=p2.oid);
260260

261261
-- Look for mergejoin operators that don't match their links.
262-
--A mergejoin link leads from an '=' operator to the
262+
--An lsortop/rsortop link leads from an '=' operator to the
263263
-- sort operator ('<' operator) that's appropriate for
264264
-- its left-side or right-side data type.
265+
-- An ltcmpop/gtcmpop link leads from an '=' operator to the
266+
-- '<' or '>' operator of the same input datatypes.
267+
-- (If the '=' operator has identical L and R input datatypes,
268+
-- then lsortop, rsortop, and ltcmpop are all the same operator.)
265269

266270
SELECTp1.oid,p1.oprcode,p2.oid,p2.oprcode
267271
FROM pg_operatorAS p1, pg_operatorAS p2
@@ -271,8 +275,7 @@ WHERE p1.oprlsortop = p2.oid AND
271275
p1.oprleft!=p2.oprleftOR
272276
p1.oprleft!=p2.oprrightOR
273277
p1.oprresult!='bool'::regtypeOR
274-
p2.oprresult!='bool'::regtypeOR
275-
p1.oprrsortop=0);
278+
p2.oprresult!='bool'::regtype);
276279

277280
SELECTp1.oid,p1.oprcode,p2.oid,p2.oprcode
278281
FROM pg_operatorAS p1, pg_operatorAS p2
@@ -282,34 +285,42 @@ WHERE p1.oprrsortop = p2.oid AND
282285
p1.oprright!=p2.oprleftOR
283286
p1.oprright!=p2.oprrightOR
284287
p1.oprresult!='bool'::regtypeOR
285-
p2.oprresult!='bool'::regtypeOR
286-
p1.oprlsortop=0);
288+
p2.oprresult!='bool'::regtype);
287289

288-
-- A mergejoinable = operator must have a commutator (usually itself)
289-
-- as well as corresponding < and > operators. Note that the "corresponding"
290-
-- operators have the same L and R input datatypes as the = operator,
291-
-- whereas the operators linked to by oprlsortop and oprrsortop have input
292-
-- datatypes L,L and R,R respectively.
290+
SELECTp1.oid,p1.oprcode,p2.oid,p2.oprcode
291+
FROM pg_operatorAS p1, pg_operatorAS p2
292+
WHEREp1.oprltcmpop=p2.oidAND
293+
(p1.oprname!='='ORp2.oprname!='<'OR
294+
p1.oprkind!='b'ORp2.oprkind!='b'OR
295+
p1.oprleft!=p2.oprleftOR
296+
p1.oprright!=p2.oprrightOR
297+
p1.oprresult!='bool'::regtypeOR
298+
p2.oprresult!='bool'::regtype);
293299

294-
SELECTp1.oid,p1.oprnameFROM pg_operatorAS p1
295-
WHEREp1.oprlsortop!=0AND
296-
p1.oprcom=0;
300+
SELECTp1.oid,p1.oprcode,p2.oid,p2.oprcode
301+
FROM pg_operatorAS p1, pg_operatorAS p2
302+
WHEREp1.oprgtcmpop=p2.oidAND
303+
(p1.oprname!='='ORp2.oprname!='>'OR
304+
p1.oprkind!='b'ORp2.oprkind!='b'OR
305+
p1.oprleft!=p2.oprleftOR
306+
p1.oprright!=p2.oprrightOR
307+
p1.oprresult!='bool'::regtypeOR
308+
p2.oprresult!='bool'::regtype);
297309

298-
SELECTp1.oid,p1.oprnameFROM pg_operatorAS p1
299-
WHEREp1.oprlsortop!=0AND NOT
300-
EXISTS(SELECT1FROM pg_operatorAS p2WHERE
301-
p2.oprname='<'AND
302-
p2.oprleft=p1.oprleftAND
303-
p2.oprright=p1.oprrightAND
304-
p2.oprkind='b');
310+
-- Make sure all four links are specified if any are.
311+
312+
SELECTp1.oid,p1.oprcode
313+
FROM pg_operatorAS p1
314+
WHERE NOT ((oprlsortop=0AND oprrsortop=0AND
315+
oprltcmpop=0AND oprgtcmpop=0)OR
316+
(oprlsortop!=0AND oprrsortop!=0AND
317+
oprltcmpop!=0AND oprgtcmpop!=0));
318+
319+
-- A mergejoinable = operator must have a commutator (usually itself).
305320

306321
SELECTp1.oid,p1.oprnameFROM pg_operatorAS p1
307-
WHEREp1.oprlsortop!=0AND NOT
308-
EXISTS(SELECT1FROM pg_operatorAS p2WHERE
309-
p2.oprname='>'AND
310-
p2.oprleft=p1.oprleftAND
311-
p2.oprright=p1.oprrightAND
312-
p2.oprkind='b');
322+
WHEREp1.oprlsortop!=0AND
323+
p1.oprcom=0;
313324

314325
-- Mergejoinable operators across datatypes must come in closed sets, that
315326
-- is if you provide int2 = int4 and int4 = int8 then you must also provide

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp