|
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 | } |
|