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

Commitd2f7d1f

Browse files
committed
Mark bpchareq not hashjoinable, since it strips trailing blanks
before comparison; if fields being joined are different widths then hashingwill yield wrong answer. Also, remove hashjoinable mark from all uses ofarray_eq, because array structures may have padding bytes between elementsand the pad bytes are of uncertain content. This could be revisited ifarray code is cleaned up.Modify opr_sanity regress test to complain if array_eq operator is markedhashjoinable.
1 parent22fe3d4 commitd2f7d1f

File tree

3 files changed

+49
-39
lines changed

3 files changed

+49
-39
lines changed

‎src/include/catalog/pg_operator.h

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: pg_operator.h,v 1.58 1999/07/27 03:51:11 tgl Exp $
10+
* $Id: pg_operator.h,v 1.59 1999/09/06 21:16:18 tgl Exp $
1111
*
1212
* NOTES
1313
* the genbki.sh script reads this file and generates .bki
@@ -109,32 +109,32 @@ DATA(insert OID = 96 ( "=" PGUID 0 b t t 23 23 16 96 518 97 97 int4eq
109109
DATA(insertOID=97 ("<"PGUID0btf23231652152500int4ltintltselintltjoinsel ));
110110
DATA(insertOID=98 ("="PGUID0btt25251698531664664texteqeqseleqjoinsel ));
111111

112-
DATA(insertOID=329 ("="PGUID0btt1000100016329000array_eqeqseleqjoinsel ));
113-
DATA(insertOID=349 ("="PGUID0btt1001100116349000array_eqeqseleqjoinsel ));
114-
DATA(insertOID=374 ("="PGUID0btt1002100216374000array_eqeqseleqjoinsel ));
115-
DATA(insertOID=375 ("="PGUID0btt1003100316375000array_eqeqseleqjoinsel ));
116-
DATA(insertOID=377 ("="PGUID0btt1005100516377000array_eqeqseleqjoinsel ));
117-
DATA(insertOID=378 ("="PGUID0btt1006100616378000array_eqeqseleqjoinsel ));
118-
DATA(insertOID=379 ("="PGUID0btt1007100716379000array_eqeqseleqjoinsel ));
119-
DATA(insertOID=380 ("="PGUID0btt1008100816380000array_eqeqseleqjoinsel ));
120-
DATA(insertOID=381 ("="PGUID0btt1009100916381000array_eqeqseleqjoinsel ));
121-
DATA(insertOID=382 ("="PGUID0btt1028102816382000array_eqeqseleqjoinsel ));
122-
DATA(insertOID=383 ("="PGUID0btt1010101016383000array_eqeqseleqjoinsel ));
123-
DATA(insertOID=384 ("="PGUID0btt1011101116384000array_eqeqseleqjoinsel ));
124-
DATA(insertOID=385 ("="PGUID0btt1012101216385000array_eqeqseleqjoinsel ));
125-
DATA(insertOID=386 ("="PGUID0btt1013101316386000array_eqeqseleqjoinsel ));
126-
DATA(insertOID=390 ("="PGUID0btt1017101716390000array_eqeqseleqjoinsel ));
112+
DATA(insertOID=329 ("="PGUID0btf1000100016329000array_eqeqseleqjoinsel ));
113+
DATA(insertOID=349 ("="PGUID0btf1001100116349000array_eqeqseleqjoinsel ));
114+
DATA(insertOID=374 ("="PGUID0btf1002100216374000array_eqeqseleqjoinsel ));
115+
DATA(insertOID=375 ("="PGUID0btf1003100316375000array_eqeqseleqjoinsel ));
116+
DATA(insertOID=377 ("="PGUID0btf1005100516377000array_eqeqseleqjoinsel ));
117+
DATA(insertOID=378 ("="PGUID0btf1006100616378000array_eqeqseleqjoinsel ));
118+
DATA(insertOID=379 ("="PGUID0btf1007100716379000array_eqeqseleqjoinsel ));
119+
DATA(insertOID=380 ("="PGUID0btf1008100816380000array_eqeqseleqjoinsel ));
120+
DATA(insertOID=381 ("="PGUID0btf1009100916381000array_eqeqseleqjoinsel ));
121+
DATA(insertOID=382 ("="PGUID0btf1028102816382000array_eqeqseleqjoinsel ));
122+
DATA(insertOID=383 ("="PGUID0btf1010101016383000array_eqeqseleqjoinsel ));
123+
DATA(insertOID=384 ("="PGUID0btf1011101116384000array_eqeqseleqjoinsel ));
124+
DATA(insertOID=385 ("="PGUID0btf1012101216385000array_eqeqseleqjoinsel ));
125+
DATA(insertOID=386 ("="PGUID0btf1013101316386000array_eqeqseleqjoinsel ));
126+
DATA(insertOID=390 ("="PGUID0btf1017101716390000array_eqeqseleqjoinsel ));
127127
DATA(insertOID=391 ("="PGUID0btf1018101816391000array_eqeqseleqjoinsel ));
128128
DATA(insertOID=392 ("="PGUID0btf1019101916392000array_eqeqseleqjoinsel ));
129129
DATA(insertOID=393 ("="PGUID0btf1020102016393000array_eqeqseleqjoinsel ));
130130
DATA(insertOID=394 ("="PGUID0btf1021102116394000array_eqeqseleqjoinsel ));
131131
DATA(insertOID=395 ("="PGUID0btf1022102216395000array_eqeqseleqjoinsel ));
132-
DATA(insertOID=396 ("="PGUID0btt1023102316396000array_eqeqseleqjoinsel ));
133-
DATA(insertOID=397 ("="PGUID0btt1024102416397000array_eqeqseleqjoinsel ));
132+
DATA(insertOID=396 ("="PGUID0btf1023102316396000array_eqeqseleqjoinsel ));
133+
DATA(insertOID=397 ("="PGUID0btf1024102416397000array_eqeqseleqjoinsel ));
134134
DATA(insertOID=398 ("="PGUID0btf1025102516398000array_eqeqseleqjoinsel ));
135-
DATA(insertOID=399 ("="PGUID0btt1026102616399000array_eqeqseleqjoinsel ));
136-
DATA(insertOID=400 ("="PGUID0btt1027102716400000array_eqeqseleqjoinsel ));
137-
DATA(insertOID=401 ("="PGUID0btt1034103416401000array_eqeqseleqjoinsel ));
135+
DATA(insertOID=399 ("="PGUID0btf1026102616399000array_eqeqseleqjoinsel ));
136+
DATA(insertOID=400 ("="PGUID0btf1027102716400000array_eqeqseleqjoinsel ));
137+
DATA(insertOID=401 ("="PGUID0btf1034103416401000array_eqeqseleqjoinsel ));
138138

139139
DATA(insertOID=410 ("="PGUID0btt202016410411412412int8eqeqseleqjoinsel ));
140140
DATA(insertOID=411 ("<>"PGUID0btf20201641141000int8neneqselneqjoinsel ));
@@ -434,7 +434,7 @@ DATA(insert OID = 971 ( "@@" PGUID 0 l t f0 604600 0 0 0 0 poly_cent
434434
DATA(insertOID=974 ("||"PGUID0btf1042104210420000textcat-- ));
435435
DATA(insertOID=979 ("||"PGUID0btf1043104310430000textcat-- ));
436436

437-
DATA(insertOID=1054 ("="PGUID0btt10421042161054105710581058bpchareqeqseleqjoinsel ));
437+
DATA(insertOID=1054 ("="PGUID0btf10421042161054105710581058bpchareqeqseleqjoinsel ));
438438
DATA(insertOID=1055 ("~"PGUID0btf104225160105600textregexeqeqseleqjoinsel ));
439439
#defineOID_BPCHAR_REGEXEQ_OP1055
440440
DATA(insertOID=1056 ("!~"PGUID0btf104225160105500textregexneneqselneqjoinsel ));

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -237,14 +237,11 @@ WHERE p1.oprcanhash AND NOT
237237
1137|=
238238
(2 rows)
239239

240-
QUERY: SELECT p1.oid, p1.oprcanhash, p2.oid, p2.oprcanhash, t1.typname, t2.typname
241-
FROM pg_operator AS p1, pg_operator AS p2, pg_type AS t1, pg_type AS t2
242-
WHERE p1.oprname = '=' AND p1.oprleft = p1.oprright AND
243-
p2.oprname = '=' AND p2.oprleft = p2.oprright AND
244-
p1.oprleft = t1.oid AND p2.oprleft = t2.oid AND t1.typelem = t2.oid AND
245-
p1.oprcanhash != p2.oprcanhash;
246-
oid|oprcanhash|oid|oprcanhash|typname|typname
247-
---+----------+---+----------+-------+-------
240+
QUERY: SELECT p1.oid, p1.oprname
241+
FROM pg_operator AS p1, pg_proc AS p2
242+
WHERE p1.oprcanhash AND p1.oprcode = p2.oid AND p2.proname = 'array_eq';
243+
oid|oprname
244+
---+-------
248245
(0 rows)
249246

250247
QUERY: SELECT p1.oid, p1.oprname, p2.oid, p2.proname

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

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -240,15 +240,28 @@ WHERE p1.oprcanhash AND NOT
240240
(p1.oprkind='b'ANDp1.oprresult=16ANDp1.oprleft=p1.oprrightAND
241241
p1.oprname='='ANDp1.oprcom=p1.oid);
242242

243-
-- Look for array equality operators that are hashable when the underlying
244-
-- type is not, or vice versa. This is presumably bogus.
245-
246-
SELECTp1.oid,p1.oprcanhash,p2.oid,p2.oprcanhash,t1.typname,t2.typname
247-
FROM pg_operatorAS p1, pg_operatorAS p2, pg_typeAS t1, pg_typeAS t2
248-
WHEREp1.oprname='='ANDp1.oprleft=p1.oprrightAND
249-
p2.oprname='='ANDp2.oprleft=p2.oprrightAND
250-
p1.oprleft=t1.oidANDp2.oprleft=t2.oidANDt1.typelem=t2.oidAND
251-
p1.oprcanhash!=p2.oprcanhash;
243+
-- In 6.5 we accepted hashable array equality operators when the array element
244+
-- type is hashable. However, what we actually need to make hashjoin work on
245+
-- an array is a hashable element type *and* no padding between elements in
246+
-- the array storage (or, perhaps, guaranteed-zero padding). Currently,
247+
-- since the padding code in arrayfuncs.c is pretty bogus, it seems safest
248+
-- to just forbid hashjoin on array equality ops.
249+
-- This should be reconsidered someday.
250+
251+
-- -- Look for array equality operators that are hashable when the underlying
252+
-- -- type is not, or vice versa. This is presumably bogus.
253+
--
254+
-- SELECT p1.oid, p1.oprcanhash, p2.oid, p2.oprcanhash, t1.typname, t2.typname
255+
-- FROM pg_operator AS p1, pg_operator AS p2, pg_type AS t1, pg_type AS t2
256+
-- WHERE p1.oprname = '=' AND p1.oprleft = p1.oprright AND
257+
-- p2.oprname = '=' AND p2.oprleft = p2.oprright AND
258+
-- p1.oprleft = t1.oid AND p2.oprleft = t2.oid AND t1.typelem = t2.oid AND
259+
-- p1.oprcanhash != p2.oprcanhash;
260+
261+
-- Substitute check: forbid hashable array ops, period.
262+
SELECTp1.oid,p1.oprname
263+
FROM pg_operatorAS p1, pg_procAS p2
264+
WHEREp1.oprcanhashANDp1.oprcode=p2.oidANDp2.proname='array_eq';
252265

253266
-- Check that each operator defined in pg_operator matches its oprcode entry
254267
-- in pg_proc. Easiest to do this separately for each oprkind.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp