|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/lselect.c,v 1.15 1999/02/13 23:20:15 momjian Exp $ |
| 11 | + * $Header: /cvsroot/pgsql/src/backend/utils/sort/Attic/lselect.c,v 1.16 1999/07/10 18:21:59 tgl Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -186,41 +186,49 @@ puttuple(struct leftist ** treep,
|
186 | 186 | int
|
187 | 187 | tuplecmp(HeapTupleltup,HeapTuplertup,LeftistContextcontext)
|
188 | 188 | {
|
189 |
| -Datumlattr, |
190 |
| -rattr; |
191 |
| -intnkey=0; |
| 189 | +intnkey; |
192 | 190 | intresult=0;
|
193 |
| -boolisnull; |
194 | 191 |
|
195 | 192 | if (ltup== (HeapTuple)NULL)
|
196 | 193 | return0;
|
197 | 194 | if (rtup== (HeapTuple)NULL)
|
198 | 195 | return1;
|
199 |
| -while (nkey<context->nKeys&& !result) |
| 196 | +for (nkey=0;nkey<context->nKeys;nkey++) |
200 | 197 | {
|
201 |
| -lattr=heap_getattr(ltup, |
202 |
| -context->scanKeys[nkey].sk_attno, |
203 |
| -context->tupDesc,&isnull); |
204 |
| -if (isnull) |
205 |
| -return0; |
206 |
| -rattr=heap_getattr(rtup, |
207 |
| -context->scanKeys[nkey].sk_attno, |
208 |
| -context->tupDesc, |
209 |
| -&isnull); |
210 |
| -if (isnull) |
| 198 | +ScanKeythisKey=&context->scanKeys[nkey]; |
| 199 | +Datumlattr, |
| 200 | +rattr; |
| 201 | +boollisnull, |
| 202 | +risnull; |
| 203 | + |
| 204 | +lattr=heap_getattr(ltup,thisKey->sk_attno, |
| 205 | +context->tupDesc,&lisnull); |
| 206 | +rattr=heap_getattr(rtup,thisKey->sk_attno, |
| 207 | +context->tupDesc,&risnull); |
| 208 | +if (lisnull) |
| 209 | +{ |
| 210 | +if (risnull) |
| 211 | +continue;/* treat two nulls as equal */ |
| 212 | +return0;/* else, a null sorts after all else */ |
| 213 | +} |
| 214 | +if (risnull) |
211 | 215 | return1;
|
212 |
| -if (context->scanKeys[nkey].sk_flags&SK_COMMUTE) |
| 216 | +if (thisKey->sk_flags&SK_COMMUTE) |
| 217 | +{ |
| 218 | +if (!(result= |
| 219 | + (long) (*fmgr_faddr(&thisKey->sk_func)) (rattr,lattr))) |
| 220 | +result= |
| 221 | +-(long) (*fmgr_faddr(&thisKey->sk_func)) (lattr,rattr); |
| 222 | +} |
| 223 | +else |
213 | 224 | {
|
214 | 225 | if (!(result=
|
215 |
| - (long) (*fmgr_faddr(&context->scanKeys[nkey].sk_func)) (rattr,lattr))) |
| 226 | + (long) (*fmgr_faddr(&thisKey->sk_func)) (lattr,rattr))) |
216 | 227 | result=
|
217 |
| --(long) (*fmgr_faddr(&context->scanKeys[nkey].sk_func)) (lattr,rattr); |
| 228 | +-(long) (*fmgr_faddr(&thisKey->sk_func)) (rattr,lattr); |
218 | 229 | }
|
219 |
| -elseif (!(result= |
220 |
| - (long) (*fmgr_faddr(&context->scanKeys[nkey].sk_func)) (lattr,rattr))) |
221 |
| -result= |
222 |
| --(long) (*fmgr_faddr(&context->scanKeys[nkey].sk_func)) (rattr,lattr); |
223 |
| -nkey++; |
| 230 | +if (result) |
| 231 | +break; |
224 | 232 | }
|
225 | 233 | returnresult==1;
|
226 | 234 | }
|
|