source: trunk/tools/assistant/lib/fulltextsearch/qqueryparser.cpp@ 315

Last change on this file since 315 was 2, checked in by Dmitry A. Kuminov, 16 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 4.5 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** Contact: Qt Software Information ([email protected])
5**
6** This file is part of the QCLucene library and is distributable under
7** the terms of the LGPL license as specified in the license.txt file.
8**
9****************************************************************************/
10
11#include "qqueryparser_p.h"
12#include "qquery_p.h"
13#include "qclucene_global_p.h"
14
15#include <CLucene.h>
16#include <CLucene/queryParser/QueryParser.h>
17
18QT_BEGIN_NAMESPACE
19
20QCLuceneQueryParserPrivate::QCLuceneQueryParserPrivate()
21 : QSharedData()
22{
23 queryParser = 0;
24 deleteCLuceneQueryParser = true;
25}
26
27QCLuceneQueryParserPrivate::QCLuceneQueryParserPrivate(const QCLuceneQueryParserPrivate &other)
28 : QSharedData()
29{
30 queryParser = _CL_POINTER(other.queryParser);
31}
32
33QCLuceneQueryParserPrivate::~QCLuceneQueryParserPrivate()
34{
35 if (deleteCLuceneQueryParser)
36 _CLDECDELETE(queryParser);
37}
38
39
40QCLuceneQueryParser::QCLuceneQueryParser(const QString &field,
41 QCLuceneAnalyzer &analyzer)
42 : d(new QCLuceneQueryParserPrivate())
43 , field(field)
44 , analyzer(analyzer)
45{
46 TCHAR *fieldName = QStringToTChar(field);
47
48 d->queryParser = new lucene::queryParser::QueryParser(fieldName,
49 analyzer.d->analyzer);
50
51 delete [] fieldName;
52}
53
54QCLuceneQueryParser::~QCLuceneQueryParser()
55{
56 // nothing todo
57}
58
59QCLuceneQuery* QCLuceneQueryParser::parse(const QString &query)
60{
61 TCHAR *string = QStringToTChar(query);
62
63 QCLuceneQuery *retValue = 0;
64 lucene::search::Query* q = d->queryParser->parse(string);
65 if (q) {
66 retValue = new QCLuceneQuery();
67 retValue->d->query = q;
68 }
69
70 delete [] string;
71 return retValue;
72}
73
74QCLuceneQuery* QCLuceneQueryParser::parse(QCLuceneReader &reader)
75{
76 QCLuceneQuery *retValue = 0;
77 lucene::search::Query* q = d->queryParser->parse(reader.d->reader);
78 if (q) {
79 retValue = new QCLuceneQuery();
80 retValue->d->query = q;
81 }
82
83 return retValue;
84}
85
86QCLuceneQuery* QCLuceneQueryParser::parse(const QString &query, const QString &field,
87 QCLuceneAnalyzer &analyzer)
88{
89 QCLuceneQueryParser parser(field, analyzer);
90 return parser.parse(query);
91}
92
93QCLuceneAnalyzer QCLuceneQueryParser::getAnalyzer()
94{
95 return analyzer;
96}
97
98QString QCLuceneQueryParser::getField()
99{
100 return field;
101}
102
103
104QCLuceneMultiFieldQueryParser::QCLuceneMultiFieldQueryParser(
105 const QStringList &fieldList, QCLuceneAnalyzer &analyzer)
106 : QCLuceneQueryParser(QLatin1String(""), analyzer)
107{
108 Q_UNUSED(fieldList)
109}
110
111QCLuceneMultiFieldQueryParser::~QCLuceneMultiFieldQueryParser()
112{
113 // nothing todo
114}
115
116QCLuceneQuery* QCLuceneMultiFieldQueryParser::parse(const QString &query,
117 const QStringList &fieldList,
118 QCLuceneAnalyzer &analyzer)
119{
120 QCLuceneBooleanQuery *retValue = new QCLuceneBooleanQuery();
121 foreach (const QString &field, fieldList) {
122 QCLuceneQuery *q = QCLuceneQueryParser::parse(query, field, analyzer);
123 if (!q) {
124 delete retValue;
125 retValue = 0; break;
126 } else {
127 retValue->add(q, true, false, false);
128 }
129 }
130
131 return retValue;
132}
133
134QCLuceneQuery* QCLuceneMultiFieldQueryParser::parse(const QString &query,
135 const QStringList &fieldList,
136 QList<FieldFlags> flags,
137 QCLuceneAnalyzer &analyzer)
138{
139 QCLuceneBooleanQuery *retValue = new QCLuceneBooleanQuery();
140 qint32 i = 0;
141 foreach (const QString &field, fieldList) {
142 QCLuceneQuery *q = QCLuceneQueryParser::parse(query, field, analyzer);
143 if (q) {
144 qint32 flag = flags.at(i);
145 switch (flag) {
146 case QCLuceneMultiFieldQueryParser::REQUIRED_FIELD: {
147 retValue->add(q, true, true, false);
148 } break;
149
150 case QCLuceneMultiFieldQueryParser::PROHIBITED_FIELD: {
151 retValue->add(q, true, false, true);
152 } break;
153
154 default: {
155 retValue->add(q, true, false, false);
156 } break;
157 }
158
159 ++i;
160 } else {
161 delete retValue;
162 retValue = 0; break;
163 }
164 }
165 return retValue;
166}
167
168QT_END_NAMESPACE
Note: See TracBrowser for help on using the repository browser.