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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list