Changeset: 60031c15cd83 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/60031c15cd83
Modified Files:
        sql/backends/monet5/generator/generator.c
Branch: default
Log Message:

Implemented new eq/ne operators in generator.thetaselect.


diffs (79 lines):

diff --git a/sql/backends/monet5/generator/generator.c 
b/sql/backends/monet5/generator/generator.c
--- a/sql/backends/monet5/generator/generator.c
+++ b/sql/backends/monet5/generator/generator.c
@@ -831,6 +831,7 @@ VLTgenerator_subselect(Client cntxt, Mal
        do {                                                                    
                                                        \
                TPE f,l,s, low, hgh;                                            
                                        \
                BUN j; oid *v;                                                  
                                                \
+               bool nil_matches = false;                                       
                                        \
                f = *getArgReference_##TPE(stk,p, 1);                           
                        \
                l = *getArgReference_##TPE(stk,p, 2);                           
                        \
                if ( p->argc == 3)                                              
                                                \
@@ -858,18 +859,26 @@ VLTgenerator_subselect(Client cntxt, Mal
                        low = NEXTVALUE##TPE(low);                              
                                        \
                } else if ( strcmp(oper,">=") == 0){                            
                        \
                        low= *getArgReference_##TPE(stk,pci,3);                 
                        \
-               } else if ( strcmp(oper,"!=") == 0 || strcmp(oper, "<>") == 0){ 
\
+               } else if (strcmp(oper, "!=") == 0 || strcmp(oper, "<>") == 0) 
{ \
+                       hgh= low= *getArgReference_##TPE(stk,pci,3);            
                \
+                       anti = true;                                            
                                                \
+               } else if (strcmp(oper, "==") == 0 || strcmp(oper, "=") == 0) { 
\
                        hgh= low= *getArgReference_##TPE(stk,pci,3);            
                \
-                       anti = 1;                                               
                                                        \
-               } else if ( strcmp(oper,"==") == 0 || strcmp(oper, "=") == 0){  
\
+               } else if (strcmp(oper, "ne") == 0) {                           
                        \
                        hgh= low= *getArgReference_##TPE(stk,pci,3);            
                \
+                       anti = true;                                            
                                                \
+                       nil_matches = true;                                     
                                                \
+               } else if (strcmp(oper, "eq") == 0) {                           
                        \
+                       hgh= low= *getArgReference_##TPE(stk,pci,3);            
                \
+                       nil_matches = true;                                     
                                                \
                } else {                                                        
                                                        \
                        BBPreclaim(cand);                                       
                                                \
                        BBPreclaim(bn);                                         
                                                \
                        throw(MAL,"generator.thetaselect", SQLSTATE(42000) 
"Unknown operator"); \
                }                                                               
                                                                \
                for(j=0;j<cap;j++, f+=s, o++)                                   
                                \
-                       if( ((is_##TPE##_nil(low) || f >= low) && 
(is_##TPE##_nil(hgh) || f <= hgh)) != anti){ \
+                       if (nil_matches && is_##TPE##_nil(low) ? anti :         
                \
+                               ((is_##TPE##_nil(low) || f >= low) && 
(is_##TPE##_nil(hgh) || f <= hgh)) != anti){ \
                                if(cand == NULL || canditer_contains(&ci, o)) { 
                \
                                        *v++ = o;                               
                                                        \
                                        c++;                                    
                                                        \
@@ -880,7 +889,8 @@ VLTgenerator_subselect(Client cntxt, Mal
 
 str VLTgenerator_thetasubselect(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
 {
-       int anti =0,tpe;
+       bool anti = false;
+       int tpe;
        bat cndid =0;
        BAT *cand = 0, *bn = NULL;
        struct canditer ci = (struct canditer) {.tpe = cand_dense};
@@ -963,7 +973,7 @@ str VLTgenerator_thetasubselect(Client c
                        } else
                        if ( strcmp(oper,"!=") == 0 || strcmp(oper, "<>") == 0){
                                hgh= low= *getArgReference_TYPE(stk,pci,3, 
date);
-                               anti = 1;
+                               anti = true;
                        } else
                        if ( strcmp(oper,"==") == 0 || strcmp(oper, "=") == 0){
                                hgh= low= *getArgReference_TYPE(stk,pci,3, 
date);
@@ -1038,7 +1048,7 @@ str VLTgenerator_thetasubselect(Client c
                        } else
                        if ( strcmp(oper,"!=") == 0 || strcmp(oper, "<>") == 0){
                                hgh= low= *getArgReference_TYPE(stk,pci,3, 
date);
-                               anti = 1;
+                               anti = true;
                        } else
                        if ( strcmp(oper,"==") == 0 || strcmp(oper, "=") == 0){
                                hgh= low= *getArgReference_TYPE(stk,pci,3, 
date);
@@ -1116,7 +1126,7 @@ str VLTgenerator_thetasubselect(Client c
                        } else
                        if ( strcmp(oper,"!=") == 0 || strcmp(oper, "<>") == 0){
                                hgh= low= *getArgReference_TYPE(stk,pci,3, 
timestamp);
-                               anti = 1;
+                               anti = true;
                        } else
                        if ( strcmp(oper,"==") == 0 || strcmp(oper, "=") == 0){
                                hgh= low= *getArgReference_TYPE(stk,pci,3, 
timestamp);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to