OR chain longer than 2 would swallow preceding AND terms

This commit is contained in:
dockes 2008-12-16 08:54:00 +00:00
parent 58d859e82e
commit 34c8fed8e5

View File

@ -1,5 +1,5 @@
#ifndef lint #ifndef lint
static char rcsid[] = "@(#$Id: wasastringtoquery.cpp,v 1.9 2008-08-26 13:50:13 dockes Exp $ (C) 2006 J.F.Dockes"; static char rcsid[] = "@(#$Id: wasastringtoquery.cpp,v 1.10 2008-12-16 08:53:49 dockes Exp $ (C) 2006 J.F.Dockes";
#endif #endif
/* /*
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -25,11 +25,13 @@ static char rcsid[] = "@(#$Id: wasastringtoquery.cpp,v 1.9 2008-08-26 13:50:13 d
#include "wasastringtoquery.h" #include "wasastringtoquery.h"
//#define DEB_WASASTRINGTOQ 1 // #define DEB_WASASTRINGTOQ 1
#ifdef DEB_WASASTRINGTOQ #ifdef DEB_WASASTRINGTOQ
#define DPRINT(X) fprintf X #define DPRINT(X) fprintf X
#define DUMPQ(Q) {string D;Q->describe(D);fprintf(stderr, "%s\n", D.c_str());}
#else #else
#define DPRINT(X) #define DPRINT(X)
#define DUMPQ(Q)
#endif #endif
WasaQuery::~WasaQuery() WasaQuery::~WasaQuery()
@ -289,9 +291,9 @@ StringToWasaQuery::Internal::stringToQuery(const string& str, string& reason)
orChain->m_op = WasaQuery::OP_OR; orChain->m_op = WasaQuery::OP_OR;
} }
// We need to transfer the previous query from the main vector // For the first OR, we need to transfer the previous
// to the OR subquery // query from the main vector to the OR subquery
if (!query->m_subs.empty()) { if (orChain->m_subs.empty() && !query->m_subs.empty()) {
orChain->m_subs.push_back(query->m_subs.back()); orChain->m_subs.push_back(query->m_subs.back());
query->m_subs.pop_back(); query->m_subs.pop_back();
} }
@ -416,8 +418,10 @@ StringToWasaQuery::Internal::stringToQuery(const string& str, string& reason)
if (orChain) { if (orChain) {
// Getting out of OR. Add the OR subquery to the main one // Getting out of OR. Add the OR subquery to the main one
DPRINT((stderr, "Adding OR chain to main.Before: \n"));
DUMPQ(query);
DUMPQ(orChain);
query->m_subs.push_back(orChain); query->m_subs.push_back(orChain);
DPRINT((stderr, "Adding OR chain to main\n"));
} }
regfree(&m_rx); regfree(&m_rx);
@ -451,7 +455,7 @@ int main(int argc, char **argv)
} }
string desc; string desc;
q->describe(desc); q->describe(desc);
printf("%s\n", desc.c_str()); fprintf(stderr, "Finally: %s\n", desc.c_str());
exit(0); exit(0);
} }