[Groonga-commit] groonga/groonga [master] Fix returning wrong result when &! oeperater is used in a nested expression.

Back to archive index

null+****@clear***** null+****@clear*****
2012年 5月 24日 (木) 21:54:45 JST


Daijiro MORI	2012-05-24 21:54:45 +0900 (Thu, 24 May 2012)

  New Revision: 5217ae4f86e17d0a095bef14794983152a760c04

  Log:
    Fix returning wrong result when &! oeperater is used in a nested expression.
    
    refs #1372

  Modified files:
    data/images/logo/groonga-powered-by-banner-large.png
    lib/expr.c

  Modified: data/images/logo/groonga-powered-by-banner-large.png (+0 -0)
===================================================================
(Binary files differ)

  Modified: lib/expr.c (+2 -3)
===================================================================
--- lib/expr.c    2012-05-24 16:40:28 +0900 (c22f495)
+++ lib/expr.c    2012-05-24 21:54:45 +0900 (fed1063)
@@ -3448,7 +3448,6 @@ static scan_info **
 put_logical_op(grn_ctx *ctx, scan_info **sis, int *ip, grn_operator op, int start)
 {
   int nparens = 1, ndifops = 0, i = *ip, j = i, r = 0;
-  grn_operator op_ = op == GRN_OP_BUT ? GRN_OP_AND : op;
   while (j--) {
     scan_info *s_ = sis[j];
     if (s_->flags & SCAN_POP) {
@@ -3459,7 +3458,7 @@ put_logical_op(grn_ctx *ctx, scan_info **sis, int *ip, grn_operator op, int star
         if (!(--nparens)) {
           if (!r) {
             if (ndifops) {
-              if (j) {
+              if (j && op != GRN_OP_BUT) {
                 nparens = 1;
                 ndifops = 0;
                 r = j;
@@ -3494,7 +3493,7 @@ put_logical_op(grn_ctx *ctx, scan_info **sis, int *ip, grn_operator op, int star
           }
         }
       } else {
-        if (op_ != (s_->logical_op == GRN_OP_BUT ? GRN_OP_AND : s_->logical_op)) {
+        if ((op == GRN_OP_BUT) || (op != s_->logical_op)) {
           ndifops++;
         }
       }




Groonga-commit メーリングリストの案内
Back to archive index