ddc
Query.h
Go to the documentation of this file.
1 //-*- Mode: C++ -*-
2 // DDC originally by Alexey Sokirko
3 // Changes and modifications 2011-2020 by Bryan Jurish
4 //
5 // This file is part of DDC.
6 //
7 // DDC is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU Lesser General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // DDC is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU Lesser General Public License for more details.
16 //
17 // You should have received a copy of the GNU Lesser General Public License
18 // along with DDC. If not, see <http://www.gnu.org/licenses/>.
19 //
20 
21 #ifndef DDC_QUERY_H
22 #define DDC_QUERY_H
23 
24 #include "../ConcordLib/QueryNode.h" //-- DDC-v1.x query API, wrapped here
25 #include "../ConcordLib/QueryOptions.h"
26 
27 extern const BYTE DefaultMatchId;
28 
29 //======================================================================
36 class CQuery : public ddcObject {
37 public:
39  string m_Label;
40 
43 
46 
49 
50 public:
51  //------------------------------------------------------------
53 
54  CQuery(const string &label=string(""))
56  : m_Label(label),
57  m_Compiler(NULL),
58  m_Node(NULL),
59  m_Options(NULL)
60  {};
61 
65  virtual ~CQuery(void);
67 
68 public:
69  //------------------------------------------------------------
71 
72  virtual bool CheckSatisfiable(CQueryCompiler *compiler);
77 
80  virtual bool Compile(CQueryCompiler *compiler);
81 
84  virtual bool CompileOptions(CQueryCompiler *compiler=NULL);
85 
88  virtual void Evaluate();
89 
91  virtual bool Negated() { return false; };
92 
94  virtual bool Negate();
95 
97  virtual BYTE GetMatchId() const;
98 
100  virtual BYTE SetMatchId(BYTE matchId);
101 
103  virtual bool HasMatchId() const;
104 
106  virtual bool RootOK()
107  { return !this->Negated(); };
109 
110  //------------------------------------------------------------
112 
113  virtual ddcObjectList Children() const;
116 
119  virtual void DisownChildren();
121 
122  //------------------------------------------------------------
124 
125  virtual string toString() { return m_Label; };
127 
129  virtual string optionsToString();
130 
132  virtual string optionsToJson();
133 
137  virtual string toJson() { return string("{\"class\":"+jsonStr(this->jsonClass())+","+this->jsonData()+"}"); };
138  virtual string jsonClass() { return "CQuery"; };
139  virtual string jsonData() { return ""; };
141 
142  //------------------------------------------------------------
144 
145  void SetCompiler(CQueryCompiler *compiler);
149 
151  virtual void ClearNode();
152 
154  virtual void ClearOptions();
155 
157  virtual void Clear(bool deep=true);
158 
160  virtual void SetOptions(CQueryOptions *opts);
162 };
163 
164 //======================================================================
166 class CQNegatable : public CQuery {
167 public:
169  bool m_Negated;
170 
171 public:
173  CQNegatable(const string &label=string(""), bool negated=false)
174  : CQuery(label), m_Negated(negated)
175  {};
176  CQNegatable(bool negated)
177  : m_Negated(negated)
178  {};
179 
180  virtual ~CQNegatable() {};
181 
183  virtual bool Negate(void);
184 
186  virtual bool Negated() { return m_Negated; };
187 
189  virtual string NegString(const std::string &s);
190 
192  virtual bool Compile(CQueryCompiler *compiler);
193 
194  //-- ddcObject API
195  virtual string jsonClass() { return "CQNegatable"; };
196  virtual string jsonData() { return string("\"Negated\":")+(m_Negated ? "1" : "0"); };
197 };
198 
199 //======================================================================
201 class CQAtomic : public CQNegatable {
202 public:
204  CQAtomic(const string &label=string(""), bool negated=false)
205  : CQNegatable(label,negated)
206  {};
207  virtual ~CQAtomic() {};
208 
209  //-- ddcObject API
210  virtual string jsonClass() { return "CQAtomic"; };
211 };
212 
213 
214 //======================================================================
215 // CQBinOp: Binary operations
216 
217 //------------------------------------------------------------
219 class CQBinOp : public CQNegatable {
220 public:
223 
226 
228  string m_OpName;
229 
230 public:
231  CQBinOp(CQuery *dtr1=NULL, CQuery *dtr2=NULL, const string &opName="", bool negated=false)
232  : CQNegatable(opName,negated), m_dtr1(dtr1), m_dtr2(dtr2), m_OpName(opName)
233  {};
234 
236  virtual ~CQBinOp();
237 
239  virtual BYTE GetMatchId() const;
240 
242  virtual BYTE SetMatchId(BYTE matchId);
243 
245  virtual void ClearNode();
246 
248  virtual void Clear(bool deep=true);
249 
251  virtual bool Compile(CQueryCompiler *compiler);
252 
253  //-- ddcObject API
254  virtual ddcObjectList Children() const;
255  virtual void DisownChildren();
256  virtual string toString();
257  virtual string jsonClass() { return "CQBinOp"; };
258  virtual string jsonData();
259 };
260 
261 //------------------------------------------------------------
263 class CQAnd : public CQBinOp {
264 public:
265  CQAnd(CQuery *dtr1=NULL, CQuery *dtr2=NULL)
266  : CQBinOp(dtr1,dtr2,"&&")
267  {};
268  virtual ~CQAnd() {};
269 
270  virtual bool RootOK() { return true; };
271  virtual bool Compile(CQueryCompiler *compiler);
272  virtual string jsonClass() { return "CQAnd"; };
273 };
274 
275 //------------------------------------------------------------
277 class CQAndImplicit : public CQAnd {
278 public:
279  CQAndImplicit(CQuery *dtr1=NULL, CQuery *dtr2=NULL)
280  : CQAnd(dtr1,dtr2)
281  {
282  //m_OpName.clear();
283  };
284 
285  virtual ~CQAndImplicit() {};
286 
287  virtual string jsonClass() { return "CQAndImplicit"; };
288 };
289 
290 //------------------------------------------------------------
292 class CQOr : public CQBinOp {
293 public:
294  CQOr(CQuery *dtr1=NULL, CQuery *dtr2=NULL)
295  : CQBinOp(dtr1,dtr2,"||")
296  {};
297  virtual ~CQOr() {};
298 
299  virtual bool RootOK() { return true; };
300  virtual bool Compile(CQueryCompiler *compiler);
301  virtual string jsonClass() { return "CQOr"; };
302 };
303 
304 //------------------------------------------------------------
306 class CQWith : public CQBinOp {
307 public:
311 
312 public:
313  CQWith(CQuery *dtr1=NULL, CQuery *dtr2=NULL, BYTE matchId=0)
314  : CQBinOp(dtr1,dtr2,"WITH"), m_MatchId(matchId)
315  {};
316  virtual ~CQWith() {};
317 
319  virtual BYTE GetMatchId() const;
320 
322  virtual BYTE SetMatchId(BYTE matchId);
323 
324  virtual bool Compile(CQueryCompiler *compiler);
325 
326  //-- ddcObject API
327  virtual string jsonClass() { return "CQWith"; };
328  virtual string jsonData();
329  virtual string toString();
330 };
331 
332 //------------------------------------------------------------
334 class CQWithout : public CQWith {
335 public:
336  CQWithout(CQuery *dtr1=NULL, CQuery *dtr2=NULL, BYTE matchId=0)
337  : CQWith(dtr1,dtr2,matchId)
338  {
339  m_OpName = "WITHOUT";
340  };
341  virtual ~CQWithout() {};
342 
343  virtual bool Compile(CQueryCompiler *compiler);
344  virtual string jsonClass() { return "CQWithout"; };
345 };
346 
347 //------------------------------------------------------------
349 class CQWithor : public CQWith {
350 public:
351  CQWithor(CQuery *dtr1=NULL, CQuery *dtr2=NULL, BYTE matchId=0)
352  : CQWith(dtr1,dtr2,matchId)
353  {
354  m_OpName = "WITHOR";
355  };
356  virtual ~CQWithor() {};
357 
358  virtual bool Compile(CQueryCompiler *compiler);
359  virtual string jsonClass() { return "CQWithor"; };
360 };
361 
362 
363 //======================================================================
364 // CQToken: single-token queries
365 
366 //------------------------------------------------------------
368 class CQToken : public CQAtomic {
369 public:
371  string m_IndexName;
372 
374  string m_Value;
375 
379 
380 public:
381  CQToken(const string &indexName=string(""), const string &value=string(""), const BYTE matchId=0)
382  : CQAtomic(value), m_IndexName(indexName), m_Value(value), m_MatchId(matchId)
383  {};
384  virtual ~CQToken() {};
385 
387  virtual BYTE GetMatchId() const;
388 
390  virtual BYTE SetMatchId(BYTE matchId);
391 
393  virtual bool Compile(CQueryCompiler *compiler);
394 
399  virtual bool Create(CQueryTokenNode *pNode);
400 
402  virtual const char *OperatorKey(void) const { return "_"; };
403 
405  string IndexName(const string& DefaultIndexName=string(""));
406 
408  string BreakName(const string& DefaultBreakName=string(""));
409 
411  virtual string IndexString(void);
412 
414  virtual string ValueString(void);
415 
417  virtual string MatchIdString(void);
418 
419  //-- ddcObject API & utilities
421  virtual string toString(void);
422 
424  virtual string jsonValue(void);
425 
426  virtual string jsonClass() { return "CQToken"; };
427  virtual string jsonData();
428 };
429 
430 //------------------------------------------------------------
432 class CQTokExact : public CQToken {
433 public:
434  CQTokExact(const string &indexName=string(""), const string &value=string(""))
435  : CQToken(indexName,value)
436  {};
437  virtual ~CQTokExact() {};
438 
439  virtual const char *OperatorKey(void) const { return "@_"; };
440  virtual string ValueString();
441 
442  virtual string jsonClass() { return "CQTokExact"; };
443 };
444 
445 //------------------------------------------------------------
447 class CQTokAny : public CQToken {
448 public:
449  CQTokAny(const string &indexName=string(""), const string &value=string("*"))
450  : CQToken(indexName,value)
451  {};
452  virtual ~CQTokAny() {};
453 
454  virtual const char *OperatorKey(void) const { return "*"; };
455  virtual bool Create(CQueryTokenNode *pNode);
456  virtual string ValueString();
457  virtual string jsonClass() { return "CQTokAny"; };
458 };
459 
460 
461 //------------------------------------------------------------
463 class CQTokAnchor : public CQToken {
464 public:
466 
467 public:
468  CQTokAnchor(const string &indexName=string(""), const string &value=string(""))
469  : CQToken(indexName,value)
470  {
471  m_ValueInt = strtol(value.c_str(), NULL, 0);
472  };
473  virtual ~CQTokAnchor() {};
474 
475  virtual const char *OperatorKey(void) const { return "."; };
476  virtual bool Create(CQueryTokenNode *pNode);
477  virtual string IndexString(void);
478  virtual string ValueString();
479  virtual string jsonClass() { return "CQTokAnchor"; };
480  virtual string jsonValue() { return Format("%d", m_ValueInt); };
481 };
482 
483 //------------------------------------------------------------
485 class CQTokRegex : public CQToken {
486 public:
488 public:
489  CQTokRegex(const string &indexName=string(""), const string &regex=string(""), bool negated=false)
490  : CQToken(indexName,regex), m_bRegexNegated(negated)
491  {};
492  virtual ~CQTokRegex() {};
493 
494  virtual const char *OperatorKey(void) const { return "/_/"; };
495  virtual bool Create(CQueryTokenNode *pNode);
496  virtual string ValueString();
497  virtual string jsonClass() { return "CQTokRegex"; };
498 };
499 
500 //------------------------------------------------------------
502 class CQTokSet : public CQToken {
503 public:
505  set<string> m_Values;
506 
507 public:
508  CQTokSet(const string &indexName=string(""), const string& rawValue=string(""), const set<string>& values=set<string>())
509  : CQToken(indexName,rawValue), m_Values(values)
510  {};
511  virtual ~CQTokSet() {};
512 
513  virtual bool Create(CQueryTokenNode *pNode);
514  virtual const char *OperatorKey(void) const { return "@_"; };
515 
517  string SetValueString(const set<string> &values);
518 
520  inline string SetValueString(void) { return SetValueString(m_Values); };
521 
523  inline string jsonValues(void) { return jsonArray(m_Values); };
524 
526  virtual string ValueString(void);
527 
528  virtual string jsonClass() { return "CQTokSet"; };
529  virtual string jsonValue() { return jsonValues(); };
530 };
531 
532 //------------------------------------------------------------
534 class CQTokInfl : public CQTokSet {
535 public:
537  vector<string> m_Expanders;
538 
541 
542 public:
543  CQTokInfl(const string &indexName=string(""), const string &value=string(""), const vector<string> expanders=vector<string>())
544  : CQTokSet(indexName,value), m_Expanders(expanders), m_Txc("(CQTokInfl)")
545  {};
546 
547  CQTokInfl(const string &indexName=string(""), const set<string> &values=set<string>(), const vector<string> expanders=vector<string>())
548  : CQTokSet(indexName,string(""),values), m_Expanders(expanders), m_Txc("(CQTokInfl)")
549  {};
550 
551  virtual ~CQTokInfl() {};
552 
553 
559  TxChain& GetChain(void);
560 
561  virtual const char *OperatorKey(void) const { return "_"; };
562  virtual bool Create(CQueryTokenNode *pNode);
563  virtual string ValueString(void);
564 
566  virtual string ExpanderString(void);
567  virtual string ExpanderJson(void);
568 
569  virtual string jsonClass() { return "CQTokInfl"; };
570  virtual string jsonValue() { return CQToken::jsonValue(); };
571  virtual string jsonData();
572 };
573 
574 //------------------------------------------------------------
576 class CQTokSetInfl : public CQTokInfl {
577 public:
579  set<string> m_RawValues;
580 
581 public:
582  CQTokSetInfl(const string &indexName=string(""), const set<string> &values=set<string>(), const vector<string> expanders=vector<string>())
583  : CQTokInfl(indexName,values,expanders)
584  { m_RawValues = m_Values; };
585 
586  virtual ~CQTokSetInfl() {};
587 
588  virtual bool Create(CQueryTokenNode *pNode);
589  virtual string ValueString(void);
590 
591  virtual string jsonClass() { return "CQTokSetInfl"; };
592  virtual string jsonValue() { return CQTokSet::jsonValue(); };
593 };
594 
595 //------------------------------------------------------------
597 class CQTokPrefix : public CQToken {
598 public:
599  CQTokPrefix(const string &indexName=string(""), const string &prefix=string(""))
600  : CQToken(indexName,prefix)
601  {};
602 
603  virtual ~CQTokPrefix() {};
604 
605  virtual const char *OperatorKey(void) const { return "/_/"; };
606  virtual bool Create(CQueryTokenNode *pNode);
607  virtual string ValueString();
608 
609  virtual string jsonClass() { return "CQTokPrefix"; };
610 };
611 
612 //------------------------------------------------------------
614 class CQTokSuffix : public CQToken {
615 public:
616  CQTokSuffix(const string &indexName=string(""), const string &suffix=string(""))
617  : CQToken(indexName,suffix)
618  {};
619  virtual ~CQTokSuffix() {};
620  virtual const char *OperatorKey(void) const { return "/_/"; };
621  virtual bool Create(CQueryTokenNode *pNode);
622  virtual string ValueString();
623  virtual string jsonClass() { return "CQTokSuffix"; };
624 };
625 
626 //------------------------------------------------------------
628 class CQTokInfix : public CQToken {
629 public:
630  CQTokInfix(const string &indexName=string(""), const string &infix=string(""))
631  : CQToken(indexName,infix)
632  {};
633  virtual ~CQTokInfix() {};
634  virtual const char *OperatorKey(void) const { return "/_/"; };
635  virtual bool Create(CQueryTokenNode *pNode);
636  virtual string ValueString();
637  virtual string jsonClass() { return "CQTokInfix"; };
638 };
639 
640 //------------------------------------------------------------
642 class CQTokPrefixSet : public CQTokSet {
643 public:
644  CQTokPrefixSet(const string &indexName=string(""), const set<string> &prefixes=set<string>())
645  : CQTokSet(indexName,"",prefixes)
646  {};
647  virtual ~CQTokPrefixSet() {};
648  virtual const char *OperatorKey(void) const { return "/_/"; };
649  virtual bool Create(CQueryTokenNode *pNode);
650  virtual string ValueString();
651  virtual string jsonClass() { return "CQTokPrefixSet"; };
652 };
653 
654 //------------------------------------------------------------
656 class CQTokSuffixSet : public CQTokSet {
657 public:
658  CQTokSuffixSet(const string &indexName=string(""), const set<string> &suffixes=set<string>())
659  : CQTokSet(indexName,"",suffixes)
660  {};
661  virtual ~CQTokSuffixSet() {};
662  virtual const char *OperatorKey(void) const { return "/_/"; };
663  virtual bool Create(CQueryTokenNode *pNode);
664  virtual string ValueString();
665  virtual string jsonClass() { return "CQTokSuffixSet"; };
666 };
667 
668 //------------------------------------------------------------
670 class CQTokInfixSet : public CQTokSet {
671 public:
672  CQTokInfixSet(const string &indexName=string(""), const set<string> &infixes=set<string>())
673  : CQTokSet(indexName,"",infixes)
674  {};
675  virtual ~CQTokInfixSet() {};
676  virtual const char *OperatorKey(void) const { return "/_/"; };
677  virtual bool Create(CQueryTokenNode *pNode);
678  virtual string ValueString();
679  virtual string jsonClass() { return "CQTokInfixSet"; };
680 };
681 
682 //------------------------------------------------------------
684 class CQTokMorph : public CQToken {
685 public:
687  vector<string> m_Items;
688 
689 public:
690  CQTokMorph(const string &indexName=string("MorphPattern"), const vector<string>& items=vector<string>())
691  : CQToken(indexName), m_Items(items)
692  { if (!m_Items.empty()) m_Value=m_Items[0]; };
693 
694  virtual ~CQTokMorph() {};
695 
697  void Append(const string &item) { m_Items.push_back(item); };
698 
699  virtual const char *OperatorKey(void) const { return "[_]"; };
700  virtual bool Create(CQueryTokenNode *pNode);
701  virtual string ValueString();
702 
703  virtual string jsonClass() { return "CQTokMorph"; };
704  virtual string jsonValue() { return jsonArray(m_Items); };
705 };
706 
707 //------------------------------------------------------------
709 class CQTokLemma : public CQTokMorph {
710 public:
711  CQTokLemma(const string &indexName=string("Lemma"), const string &value=string(""))
712  : CQTokMorph(indexName,vector<string>(1,value))
713  {};
714  virtual ~CQTokLemma() {};
715 
716  virtual const char *OperatorKey(void) const { return "%_"; };
717  virtual bool Create(CQueryTokenNode *pNode);
718  virtual string ValueString();
719 
720  virtual string jsonClass() { return "CQTokLemma"; };
721  virtual string jsonValue() { return CQToken::jsonValue(); };
722 };
723 
724 //------------------------------------------------------------
726 class CQTokThes : public CQToken {
727 public:
728  CQTokThes(const string &indexName=string("Thes"), const string &value=string(""))
729  : CQToken(indexName,value)
730  {};
731  virtual ~CQTokThes() {};
732 
733  virtual const char *OperatorKey(void) const { return ":{_}"; };
734  virtual bool Create(CQueryTokenNode *pNode);
735  virtual string ValueString();
736 
737  virtual string jsonClass() { return "CQTokThes"; };
738 };
739 
740 //------------------------------------------------------------
742 class CQTokChunk : public CQToken {
743 public:
744  CQTokChunk(const string &indexName=string(""), const string &value=string(""))
745  : CQToken(indexName,value)
746  {};
747  virtual ~CQTokChunk() {};
748 
749  virtual const char *OperatorKey(void) const { return "^_"; };
750  virtual bool Create(CQueryTokenNode *pNode);
751  virtual string ValueString();
752  virtual string jsonClass() { return "CQTokChunk"; };
753 };
754 
755 //------------------------------------------------------------
757 class CQTokFile : public CQToken {
758 public:
759  CQTokFile(const string &indexName=string(""), const string &fileName=string(""))
760  : CQToken(indexName,fileName)
761  {};
762  virtual ~CQTokFile() {};
763 
764  virtual const char *OperatorKey(void) const { return "<_"; };
765  virtual bool Create(CQueryTokenNode *pNode);
766  virtual string ValueString();
767  virtual string jsonClass() { return "CQTokFile"; };
768 };
769 
770 
771 //======================================================================
772 // Misc
773 
774 //------------------------------------------------------------
777 class CQNear : public CQNegatable {
778 public:
781 
784 
787 
790 
791 public:
792  CQNear(BYTE dist=1, CQuery *dtr1=NULL, CQuery *dtr2=NULL, CQuery *dtr3=NULL)
793  : m_dtr1(dtr1), m_dtr2(dtr2), m_dtr3(dtr3), m_Dist(dist)
794  {};
795 
797  virtual ~CQNear();
798 
800  virtual void ClearNode();
801 
803  virtual void Clear(bool deep=true);
804 
806  virtual ddcObjectList Children() const;
807 
809  virtual void DisownChildren();
810 
812  virtual BYTE GetMatchId() const;
813 
815  virtual BYTE SetMatchId(BYTE matchId);
816 
818  virtual bool Compile(CQueryCompiler *compiler);
819 
820  virtual string toString();
821 
822  virtual string jsonClass() { return "CQNear"; };
823  virtual string jsonData();
824 };
825 
826 //------------------------------------------------------------
833 class CQSeq : public CQAtomic {
834 public:
836  vector<CQToken*> m_Items;
837 
839  vector<BYTE> m_Dists;
840 
842  vector<BYTE> m_DistOps;
843 
844 public:
846  CQSeq(const vector<CQToken*> &items, const vector<BYTE> &dists, const vector<BYTE> &distops)
847  : m_Items(items), m_Dists(dists), m_DistOps(distops)
848  {};
849 
851  CQSeq(CQToken *item)
852  : m_Items(1,item)
853  {};
854 
856  virtual ~CQSeq();
857 
859  virtual BYTE GetMatchId() const;
860 
862  virtual BYTE SetMatchId(BYTE matchId);
863 
865  virtual void ClearNode();
866 
868  virtual void Clear(bool deep=true);
869 
872  void Append(CQToken *nextItem, BYTE nextDist=0, BYTE nextDistOp='<');
873 
875  virtual bool Compile(CQueryCompiler *compiler);
876 
877  //-- ddcObject API
878  virtual ddcObjectList Children() const;
879  virtual void DisownChildren();
880  virtual string toString();
881  virtual string jsonClass() { return "CQSeq"; };
882  virtual string jsonData();
883 };
884 
885 
886 #endif /* DDC_QUERY_H */
887 
888 /*--- emacs style variables ---
889  * Local Variables:
890  * mode: C++
891  * c-file-style: "ellemtel"
892  * c-basic-offset: 4
893  * tab-width: 8
894  * indent-tabs-mode: nil
895  * End:
896  */
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:634
CQWithout(CQuery *dtr1=NULL, CQuery *dtr2=NULL, BYTE matchId=0)
Definition: Query.h:336
virtual string jsonClass()
Definition: Query.h:327
virtual string jsonClass()
Definition: Query.h:637
CQTokSuffixSet(const string &indexName=string(""), const set< string > &suffixes=set< string >())
Definition: Query.h:658
bool m_Negated
whether this query is negated
Definition: Query.h:169
virtual ~CQTokPrefixSet()
Definition: Query.h:647
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:764
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:475
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:620
virtual bool Negate()
Toggle negation flag, returns new value. Default throws an exception.
Definition: Query.cpp:105
virtual ~CQWithout()
Definition: Query.h:341
single-token query: positional anchor
Definition: Query.h:463
virtual ~CQTokSuffixSet()
Definition: Query.h:661
CQTokRegex(const string &indexName=string(""), const string &regex=string(""), bool negated=false)
Definition: Query.h:489
CQTokMorph(const string &indexName=string("MorphPattern"), const vector< string > &items=vector< string >())
Definition: Query.h:690
TxChain m_Txc
expansion chain; see TermExpander.h
Definition: Query.h:540
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:439
BYTE m_MatchId
Definition: Query.h:378
virtual string toString()
DEBUG: return a canonical string form for this query (default just returns m_Label) ...
Definition: Query.h:126
Definition: Query.h:833
logical conjunction (implicit)
Definition: Query.h:277
virtual ~CQTokInfixSet()
Definition: Query.h:675
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:494
virtual bool RootOK()
Is this query an admissible root of a compiled parse tree (default returns !this->Negated()) ...
Definition: Query.h:106
single-token query: set expanded using CTermExpander.h interface
Definition: Query.h:576
CQueryNode * m_Node
underlying CQueryNode (DDC-v1.x API)
Definition: Query.h:45
virtual ~CQTokExact()
Definition: Query.h:437
string Format(const char *format,...)
Definition: ddcString.cpp:393
virtual bool Negated()
For sanity checks. Default just returns false.
Definition: Query.h:91
virtual ~CQuery(void)
Definition: Query.cpp:90
virtual string jsonValue()
json stringification utility
Definition: Query.h:480
virtual string jsonClass()
Definition: Query.h:479
virtual void ClearOptions()
deletes m_Options if non-NULL
Definition: Query.cpp:74
CQTokInfl(const string &indexName=string(""), const set< string > &values=set< string >(), const vector< string > expanders=vector< string >())
Definition: Query.h:547
BYTE m_Dist
maximum distance
Definition: Query.h:789
virtual string jsonClass()
Definition: Query.h:497
virtual ~CQWithor()
Definition: Query.h:356
CQNegatable(bool negated)
Definition: Query.h:176
CQTokSetInfl(const string &indexName=string(""), const set< string > &values=set< string >(), const vector< string > expanders=vector< string >())
Definition: Query.h:582
single-token query: arbitrary token (indexName and value are ignored)
Definition: Query.h:447
single-token query: suffix-set (left-truncated) query *{SUFFIX,...}
Definition: Query.h:656
single-token query: infix (substring) query INFIX
Definition: Query.h:628
single-token query: expanded using CTermExpander.h interface
Definition: Query.h:534
virtual string jsonClass()
Definition: Query.h:257
CQuery(const string &label=string(""))
Default constructor.
Definition: Query.h:55
virtual string jsonClass()
Definition: Query.h:301
CQNegatable(const string &label=string(""), bool negated=false)
Default constructor.
Definition: Query.h:173
CQSeq(const vector< CQToken *> &items, const vector< BYTE > &dists, const vector< BYTE > &distops)
literal constructor (unused)
Definition: Query.h:846
virtual ~CQOr()
Definition: Query.h:297
virtual string jsonClass()
Definition: Query.h:720
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:662
virtual string jsonClass()
Definition: Query.h:881
CQuery * m_dtr2
second argument
Definition: Query.h:225
void SetCompiler(CQueryCompiler *compiler)
Definition: Query.cpp:57
virtual string jsonClass()
Definition: Query.h:591
virtual void ClearNode()
deletes m_Node if non-NULL
Definition: Query.cpp:65
virtual ~CQTokMorph()
Definition: Query.h:694
CQTokInfl(const string &indexName=string(""), const string &value=string(""), const vector< string > expanders=vector< string >())
Definition: Query.h:543
virtual string jsonValue()
json stringification utility
Definition: Query.h:704
CQToken(const string &indexName=string(""), const string &value=string(""), const BYTE matchId=0)
Definition: Query.h:381
virtual ~CQToken()
Definition: Query.h:384
CQAnd(CQuery *dtr1=NULL, CQuery *dtr2=NULL)
Definition: Query.h:265
CQTokLemma(const string &indexName=string("Lemma"), const string &value=string(""))
Definition: Query.h:711
virtual string jsonData()
Definition: Query.h:196
virtual bool RootOK()
Is this query an admissible root of a compiled parse tree (default returns !this->Negated()) ...
Definition: Query.h:299
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:749
virtual string jsonClass()
Definition: Query.h:651
virtual string jsonClass()
Definition: Query.h:665
single-token query: file list (UNSAFE)
Definition: Query.h:757
CQuery * m_dtr1
first query argument (required)
Definition: Query.h:780
CQAtomic(const string &label=string(""), bool negated=false)
Default constructor.
Definition: Query.h:204
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:561
CQTokFile(const string &indexName=string(""), const string &fileName=string(""))
Definition: Query.h:759
virtual string jsonClass()
Definition: Query.h:138
virtual string jsonClass()
Definition: Query.h:752
string jsonStr(ddcObject *o)
json strinfication wrapper
Definition: ddcObject.h:208
CQOr(CQuery *dtr1=NULL, CQuery *dtr2=NULL)
Definition: Query.h:294
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:454
logical conjunction
Definition: Query.h:263
single-token query: chunk (compiles, but UNTESTED)
Definition: Query.h:742
virtual void SetOptions(CQueryOptions *opts)
set global query options ; deletes any pre-existing m_Options
Definition: Query.cpp:145
virtual bool HasMatchId() const
Returns true iff this query uses a nontrival match-id operator; default checks (this->GetMatchId() !=...
Definition: Query.cpp:125
CQWith(CQuery *dtr1=NULL, CQuery *dtr2=NULL, BYTE matchId=0)
Definition: Query.h:313
CQueryNode is an abstract class for any node in a query parse tree. A parse tree is built by YACC dur...
Definition: QueryNode.h:42
logical disjunction
Definition: Query.h:292
string m_Value
value to be searched for (default="")
Definition: Query.h:374
virtual ~CQTokSet()
Definition: Query.h:511
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:402
CQueryTokenNode is a class which corresponds to one token or it&#39;s singular property (for example lemm...
Definition: QueryNode.h:273
virtual string jsonClass()
Definition: Query.h:287
class for global query filters aka "query operators"
Definition: ddcObject.h:45
string jsonValues(void)
wrapper for jsonArray(m_Values)
Definition: Query.h:523
CQTokPrefix(const string &indexName=string(""), const string &prefix=string(""))
Definition: Query.h:599
virtual bool Compile(CQueryCompiler *compiler)
Definition: Query.cpp:37
void Append(const string &item)
append an item to the current list
Definition: Query.h:697
virtual string jsonClass()
Definition: Query.h:609
virtual ~CQTokAny()
Definition: Query.h:452
virtual string jsonValue(void)
json stringification utility
Definition: Query.cpp:524
virtual string optionsToString()
DEBUG: return canonical option string
Definition: Query.cpp:152
CQuery * m_dtr1
first argument
Definition: Query.h:222
virtual string jsonClass()
Definition: Query.h:623
CQTokPrefixSet(const string &indexName=string(""), const set< string > &prefixes=set< string >())
Definition: Query.h:644
CQNegatable: negatable queries.
Definition: Query.h:166
set< string > m_Values
set of user-specified target forms
Definition: Query.h:505
virtual ~CQTokLemma()
Definition: Query.h:714
single-token query: exact full-string match
Definition: Query.h:432
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:514
list< ddcObject * > ddcObjectList
Definition: ddcObject.h:28
virtual string jsonValue()
json stringification utility
Definition: Query.h:529
vector< CQToken * > m_Items
items to be queried (must be token nodes)
Definition: Query.h:836
virtual bool RootOK()
Is this query an admissible root of a compiled parse tree (default returns !this->Negated()) ...
Definition: Query.h:270
CQAndImplicit(CQuery *dtr1=NULL, CQuery *dtr2=NULL)
Definition: Query.h:279
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:716
single-token query: regex
Definition: Query.h:485
int m_ValueInt
Definition: Query.h:465
virtual ~CQAnd()
Definition: Query.h:268
virtual ~CQNegatable()
Definition: Query.h:180
CQNear(BYTE dist=1, CQuery *dtr1=NULL, CQuery *dtr2=NULL, CQuery *dtr3=NULL)
Definition: Query.h:792
virtual ~CQAndImplicit()
Definition: Query.h:285
CQTokAnchor(const string &indexName=string(""), const string &value=string(""))
Definition: Query.h:468
CQuery * m_dtr3
thrid query argument (NULL for none)
Definition: Query.h:786
virtual ~CQTokPrefix()
Definition: Query.h:603
CQWithor(CQuery *dtr1=NULL, CQuery *dtr2=NULL, BYTE matchId=0)
Definition: Query.h:351
virtual string jsonClass()
Definition: Query.h:195
root-level query options (filters and flags)
Definition: QueryOptions.h:39
virtual string jsonValue()
json stringification utility
Definition: Query.h:592
virtual void Clear(bool deep=true)
clear query contents. if deep is true, propagates operation to daughters
Definition: Query.cpp:83
virtual bool Negated()
override returns current value of m_Negated
Definition: Query.h:186
virtual string jsonClass()
Definition: Query.h:822
binary operation (abstract)
Definition: Query.h:219
virtual string jsonValue()
json stringification utility
Definition: Query.h:570
virtual string toJson()
Definition: Query.h:137
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:648
string SetValueString(void)
wrapper for SetValueString(m_Values)
Definition: Query.h:520
CQSeq(CQToken *item)
constructor for atomic (1-token) sequences
Definition: Query.h:851
CQuery * m_dtr2
second query argument (required)
Definition: Query.h:783
CQTokExact(const string &indexName=string(""), const string &value=string(""))
Definition: Query.h:434
single-token query (abstract)
Definition: Query.h:368
string m_Label
arbitrary name for this query node (e.g. string from which it was parsed)
Definition: Query.h:39
vector< string > m_Expanders
expansion chain labels (empty list uses default expander for current index or identity) ...
Definition: Query.h:537
virtual bool CompileOptions(CQueryCompiler *compiler=NULL)
Definition: Query.cpp:45
virtual ~CQTokThes()
Definition: Query.h:731
virtual string jsonClass()
Definition: Query.h:442
CQueryOptions * m_Options
root-level options (root queries only)
Definition: Query.h:48
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:699
single-token query: prefix-set (right-truncated) query {PREFIX,...}*
Definition: Query.h:642
Definition: QueryCompiler.h:50
CQTokThes(const string &indexName=string("Thes"), const string &value=string(""))
Definition: Query.h:728
CQTokInfix(const string &indexName=string(""), const string &infix=string(""))
Definition: Query.h:630
unsigned char BYTE
Definition: utilit.h:94
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:605
virtual string jsonClass()
Definition: Query.h:272
CQueryCompiler * m_Compiler
associated query compiler (only set on Compile())
Definition: Query.h:42
virtual string jsonClass()
Definition: Query.h:528
&#39;WITHOUT&#39; query
Definition: Query.h:334
CQTokSuffix(const string &indexName=string(""), const string &suffix=string(""))
Definition: Query.h:616
CQTokAny(const string &indexName=string(""), const string &value=string("*"))
Definition: Query.h:449
single-token query: suffix (left-truncated) query *SUFFIX
Definition: Query.h:614
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:733
virtual string jsonValue()
json stringification utility
Definition: Query.h:721
virtual ~CQTokChunk()
Definition: Query.h:747
virtual ~CQAtomic()
Definition: Query.h:207
virtual bool CheckSatisfiable(CQueryCompiler *compiler)
Definition: Query.cpp:31
virtual const char * OperatorKey(void) const
Compilation utility: return query-operator key for use with CConcIndexator::m_OpDefaultIndexNames.
Definition: Query.h:676
single-token query: prefix (right-truncated) query PREFIX*
Definition: Query.h:597
virtual string jsonClass()
Definition: Query.h:767
string m_IndexName
name of index to be queried (default="" (->"Token"))
Definition: Query.h:371
virtual string jsonClass()
Definition: Query.h:426
vector< BYTE > m_DistOps
distance constraint relations
Definition: Query.h:842
CQBinOp(CQuery *dtr1=NULL, CQuery *dtr2=NULL, const string &opName="", bool negated=false)
Definition: Query.h:231
CQTokChunk(const string &indexName=string(""), const string &value=string(""))
Definition: Query.h:744
virtual ~CQTokInfl()
Definition: Query.h:551
&#39;WITH&#39; query
Definition: Query.h:306
Definition: TermExpander.h:106
virtual void Evaluate()
Definition: Query.cpp:96
BYTE m_MatchId
Definition: Query.h:310
single-token query: morph pattern (compiles, but UNTESTED)
Definition: Query.h:684
bool m_bRegexNegated
Definition: Query.h:487
single-token query: infix-set (substring) query *{INFIX,...}*
Definition: Query.h:670
Definition: Query.h:777
single-token query: disjunction over a finite set of values
Definition: Query.h:502
virtual string jsonData()
Definition: Query.h:139
CQAtomic: atomic (sequencable) queries.
Definition: Query.h:201
virtual ~CQTokSetInfl()
Definition: Query.h:586
virtual string jsonClass()
Definition: Query.h:210
virtual string jsonClass()
Definition: Query.h:569
virtual string jsonClass()
Definition: Query.h:344
single-token query: thesaurus (compiles, but UNTESTED)
Definition: Query.h:726
virtual string jsonClass()
Definition: Query.h:679
virtual void DisownChildren()
Definition: Query.cpp:139
virtual string jsonClass()
Definition: Query.h:703
virtual ~CQTokFile()
Definition: Query.h:762
virtual string jsonClass()
Definition: Query.h:457
virtual ddcObjectList Children() const
Definition: Query.cpp:131
virtual string optionsToJson()
return json format option string
Definition: Query.cpp:160
virtual ~CQWith()
Definition: Query.h:316
const BYTE DefaultMatchId
Definition: Query.cpp:25
CQTokSet(const string &indexName=string(""), const string &rawValue=string(""), const set< string > &values=set< string >())
Definition: Query.h:508
&#39;WITHOR&#39; query
Definition: Query.h:349
string m_OpName
convenience: operation name
Definition: Query.h:228
set< string > m_RawValues
raw input values
Definition: Query.h:579
std::string jsonArray(const Container &values)
Definition: ddcString.h:76
vector< BYTE > m_Dists
distances between items
Definition: Query.h:839
virtual ~CQTokRegex()
Definition: Query.h:492
virtual ~CQTokAnchor()
Definition: Query.h:473
CQTokInfixSet(const string &indexName=string(""), const set< string > &infixes=set< string >())
Definition: Query.h:672
virtual ~CQTokInfix()
Definition: Query.h:633
Truly abstract (index-independent) representation of a parsed query Should eventually replace old ad...
Definition: Query.h:36
virtual string jsonClass()
Definition: Query.h:737
virtual BYTE SetMatchId(BYTE matchId)
Set match-id, returns new value. Default throws an exception.
Definition: Query.cpp:118
virtual BYTE GetMatchId() const
Get current match-id (should return a nontrivial match-id if any was used, else 0; default just retur...
Definition: Query.cpp:112
virtual string jsonClass()
Definition: Query.h:359
virtual ~CQTokSuffix()
Definition: Query.h:619
vector< string > m_Items
morph query items
Definition: Query.h:687
single-token query: lemma-search "%LEMMA" (UNTESTED under LemmaQueryUsesMorphPattern=true (default)) ...
Definition: Query.h:709