forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork6
Commit8ec5429
committed
Reduce "X = X" to "X IS NOT NULL", if it's easy to do so.
If the operator is a strict btree equality operator, and X isn't volatile,then the clause must yield true for any non-null value of X, or null if Xis null. At top level of a WHERE clause, we can ignore the distinctionbetween false and null results, so it's valid to simplify the clause to"X IS NOT NULL". This is a useful improvement mainly because we'll geta far better selectivity estimate in most cases.Because such cases seldom arise in well-written queries, it is unappetizingto expend a lot of planner cycles looking for them ... but it turns outthat there's a place we can shoehorn this in practically for free, becauseequivclass.c already has to detect and reject candidate equivalences of theform X = X. That doesn't catch every place that it would be valid tosimplify to X IS NOT NULL, but it catches the typical case. Working harderdoesn't seem justified.Patch by me, reviewed by Petr JelinekDiscussion:https://postgr.es/m/CAMjNa7cC4X9YR-vAJS-jSYCajhRDvJQnN7m2sLH1wLh-_Z2bsw@mail.gmail.com1 parentb11f0d3 commit8ec5429
File tree
5 files changed
+83
-17
lines changed- src
- backend/optimizer
- path
- plan
- include/optimizer
- test/regress
- expected
- sql
5 files changed
+83
-17
lines changedLines changed: 52 additions & 14 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
27 | 27 |
| |
28 | 28 |
| |
29 | 29 |
| |
| 30 | + | |
30 | 31 |
| |
31 | 32 |
| |
32 | 33 |
| |
| |||
71 | 72 |
| |
72 | 73 |
| |
73 | 74 |
| |
74 |
| - | |
75 |
| - | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
76 | 83 |
| |
77 | 84 |
| |
78 | 85 |
| |
| |||
104 | 111 |
| |
105 | 112 |
| |
106 | 113 |
| |
107 |
| - | |
| 114 | + | |
| 115 | + | |
108 | 116 |
| |
109 | 117 |
| |
| 118 | + | |
110 | 119 |
| |
111 | 120 |
| |
112 | 121 |
| |
| |||
154 | 163 |
| |
155 | 164 |
| |
156 | 165 |
| |
157 |
| - | |
158 |
| - | |
159 |
| - | |
160 |
| - | |
161 |
| - | |
162 |
| - | |
163 |
| - | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
164 | 170 |
| |
165 | 171 |
| |
166 |
| - | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
167 | 205 |
| |
168 | 206 |
| |
169 | 207 |
| |
| |||
1741 | 1779 |
| |
1742 | 1780 |
| |
1743 | 1781 |
| |
1744 |
| - | |
| 1782 | + | |
1745 | 1783 |
| |
1746 | 1784 |
| |
1747 | 1785 |
| |
| |||
1884 | 1922 |
| |
1885 | 1923 |
| |
1886 | 1924 |
| |
1887 |
| - | |
| 1925 | + | |
1888 | 1926 |
| |
1889 | 1927 |
| |
1890 | 1928 |
| |
| |||
1899 | 1937 |
| |
1900 | 1938 |
| |
1901 | 1939 |
| |
1902 |
| - | |
| 1940 | + | |
1903 | 1941 |
| |
1904 | 1942 |
| |
1905 | 1943 |
| |
|
Lines changed: 3 additions & 2 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1964 | 1964 |
| |
1965 | 1965 |
| |
1966 | 1966 |
| |
1967 |
| - | |
| 1967 | + | |
1968 | 1968 |
| |
1969 | 1969 |
| |
1970 |
| - | |
| 1970 | + | |
| 1971 | + | |
1971 | 1972 |
| |
1972 | 1973 |
| |
1973 | 1974 |
| |
|
Lines changed: 2 additions & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
127 | 127 |
| |
128 | 128 |
| |
129 | 129 |
| |
130 |
| - | |
| 130 | + | |
| 131 | + | |
131 | 132 |
| |
132 | 133 |
| |
133 | 134 |
| |
|
Lines changed: 18 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
421 | 421 |
| |
422 | 422 |
| |
423 | 423 |
| |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + |
Lines changed: 8 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
254 | 254 |
| |
255 | 255 |
| |
256 | 256 |
| |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + |
0 commit comments
Comments
(0)