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

Reply via email to