Changeset: 30cb291839fd for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=30cb291839fd Modified Files: monetdb5/modules/mal/pqueue.c sql/test/Tests/orderby_non_selection_column.stable.out Branch: default Log Message:
pqueue min/max were reverted (well as compared to the old heap-min/max-topn implementations) approved output of test (was incorrect!) diffs (157 lines): diff --git a/monetdb5/modules/mal/pqueue.c b/monetdb5/modules/mal/pqueue.c --- a/monetdb5/modules/mal/pqueue.c +++ b/monetdb5/modules/mal/pqueue.c @@ -27,10 +27,12 @@ continue;\ idx[top] = o;\ for (i= top; i> 0; i--)\ - if ( (TYPE) val[idx[i]] OPER (TYPE) val[idx[i-1]]) {\ - tmp = idx[i]; idx[i]= idx[i-1]; idx[i-1] = tmp;\ - } else break; \ - if( top < size) top++;\ + if ( (TYPE) val[idx[i]] OPER (TYPE) val[idx[i-1]]) {\ + tmp = idx[i]; idx[i]= idx[i-1]; idx[i-1] = tmp;\ + } else \ + break; \ + if( top < size) \ + top++;\ }\ } @@ -51,6 +53,8 @@ str PQtopn_minmax(Client cntxt, MalBlkPt min = strstr(getFunctionId(pci),"min") != 0; assert(max+min == 1); + max = !(max); + min = !(min); b = BATdescriptor(*(bat *) getArgReference(stk, pci, 1)); if (!b) throw(MAL, "topn_min", RUNTIME_OBJECT_MISSING); @@ -93,13 +97,14 @@ str PQtopn_minmax(Client cntxt, MalBlkPt case TYPE_dbl: QTOPN_shuffle(dbl,<) break; default: for(o = 0; o < lim; o++){ - if( top == size && atom_CMP((void*) Tloc(b,o), (void*) Tloc(b,idx[top-1]), tpe) > 0 ) + if( top == size && atom_CMP((void*) Tloc(b,o), (void*) Tloc(b,idx[top-1]), tpe) > 0 ) continue; idx[top] = o; for (i= top; i> 0; i--) - if ( atom_CMP( Tloc(b,idx[i]), Tloc(b,idx[i-1]), tpe) < 0) { - tmp = idx[i]; idx[i]= idx[i-1]; idx[i-1] = tmp; - } else break; + if (atom_CMP( Tloc(b,idx[i]), Tloc(b,idx[i-1]), tpe) < 0) { + tmp = idx[i]; idx[i]= idx[i-1]; idx[i-1] = tmp; + } else + break; if( top < size) top++; } @@ -115,13 +120,14 @@ str PQtopn_minmax(Client cntxt, MalBlkPt case TYPE_dbl: QTOPN_shuffle(dbl,>) break; default: for(o = 0; o < lim; o++){ - if( top == size && atom_CMP((void*) Tloc(b,o), (void*) Tloc(b,idx[top-1]), tpe) < 0 ) + if( top == size && atom_CMP((void*) Tloc(b,o), (void*) Tloc(b,idx[top-1]), tpe) < 0 ) continue; idx[top] = o; for (i= top; i> 0; i--) - if ( atom_CMP( Tloc(b,idx[i]), Tloc(b,idx[i-1]), tpe) > 0) { - tmp = idx[i]; idx[i]= idx[i-1]; idx[i-1] = tmp; - } else break; + if (atom_CMP( Tloc(b,idx[i]), Tloc(b,idx[i-1]), tpe) > 0) { + tmp = idx[i]; idx[i]= idx[i-1]; idx[i-1] = tmp; + } else + break; if( top < size) top++; } @@ -149,19 +155,19 @@ str PQtopn_minmax(Client cntxt, MalBlkPt if( (TYPE) val[idx[i]] OPER (TYPE) val[idx[i-1]]){\ tmp= idx[i]; idx[i] = idx[i-1]; idx[i-1] = tmp;\ tmp= gdx[i]; gdx[i] = gdx[i-1]; gdx[i-1] = tmp;\ - } else\ - if( (TYPE) val[idx[i]] == (TYPE) val[idx[i-1]]){\ + } else if( (TYPE) val[idx[i]] == (TYPE) val[idx[i-1]]){\ gdx[i] = gdx[i-1];\ - } else break;\ + } else \ + break;\ uniq=0;\ for( i=1; i <= top; i++)\ - if( gdx[i]!= gdx[i-1]){\ - uniq++;\ - if( uniq >= size) {\ - top = i;\ - break;\ + if( gdx[i]!= gdx[i-1]){\ + uniq++;\ + if( uniq >= size) {\ + top = i;\ + break;\ + }\ }\ - }\ top= i;\ }\ } @@ -183,6 +189,8 @@ int tpe, *ret, *ret1; min = strstr(getFunctionId(pci),"min") != 0; assert(max+min == 1); + max = !(max); + min = !(min); b = BATdescriptor(*(bat *) getArgReference(stk, pci, 2)); if (!b) throw(MAL, "topn_min", RUNTIME_OBJECT_MISSING); @@ -337,6 +345,9 @@ str PQtopn3_minmax(Client cntxt, MalBlkP min = strstr(getFunctionId(pci),"min") != 0; assert(max+min==1); + + max = !(max); + min = !(min); a = BATdescriptor(*(bat *) getArgReference(stk, pci, 2)); if (!a) throw(MAL, "topn_min", RUNTIME_OBJECT_MISSING); diff --git a/sql/test/Tests/orderby_non_selection_column.stable.out b/sql/test/Tests/orderby_non_selection_column.stable.out --- a/sql/test/Tests/orderby_non_selection_column.stable.out +++ b/sql/test/Tests/orderby_non_selection_column.stable.out @@ -40,8 +40,8 @@ Ready. % varchar # type % 7 # length [ "mytest1" ] +[ "mytest2" ] [ "mytest3" ] -[ "mytest2" ] [ "mytest4" ] [ "mytest1" ] [ "mytest2" ] @@ -52,24 +52,24 @@ Ready. % varchar # type % 7 # length [ "mydir1/" ] -[ "mydir2/" ] +[ "mydir1/" ] [ "mydir1/" ] [ "mydir1/" ] [ "mydir2/" ] [ "mydir2/" ] -[ "mydir1/" ] +[ "mydir2/" ] #select dir_test from lim_prob order by dir,test limit 10; % sys.lim_prob # table_name % dir_test # name % varchar # type % 14 # length [ "mydir1/mytest1" ] -[ "mydir2/mytest3" ] [ "mydir1/mytest2" ] +[ "mydir1/mytest3" ] [ "mydir1/mytest4" ] [ "mydir2/mytest1" ] [ "mydir2/mytest2" ] -[ "mydir1/mytest3" ] +[ "mydir2/mytest3" ] #drop table lim_prob; # 17:46:36 > _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list