Update contrib.
1 // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
21 #include "D32Assert.h"
23 //Forward declarations
30 template <class T,class D> class TMatcher;
31 template <class T,class D> class TDesMatcher;
32 template <class T,class D> class TStreamMatcher;
33 template <class T,class D> class HMatcherPattern;
34 class CSqlCreateTableStatement;
35 class CSqlDropTableStatement;
36 class CSqlAlterTableStatement;
37 class CSqlCreateIndexStatement;
38 class CSqlDropIndexStatement;
76 #define KEYWORD(s) ESqlKeyword_##s
86 friend class TSqlLexer;
88 inline TBool operator==(TSqlTokenType aType) const;
89 inline TBool operator!=(TSqlTokenType aType) const;
91 inline void SetError(TInt aError);
92 inline TInt Error() const;
94 inline TSqlTokenType Type() const;
95 inline const RSqlLiteral& Literal() const;
96 inline RSqlLiteral& Literal();
98 inline TSqlTokenType operator=(TSqlTokenType aType);
101 RSqlLiteral iLiteral;
110 TSqlLexer(const TDesC& aSql);
111 inline TSqlTokenType NextToken(TSqlToken& aToken);
112 static TSqlKeyword Keyword(const TSqlToken& aToken);
113 static inline TBool IsKeyword(TSqlKeyword aKeyword,const TSqlToken& aToken);
114 const TText* Next() const;
115 void Set(const TText* aNext);
117 TSqlTokenType GetIdentifier(TSqlToken& aToken);
118 TSqlTokenType GetString(TSqlToken& aToken);
119 TInt GetInteger(TInt64& aValue);
120 TSqlTokenType GetNumber(TSqlToken& aToken);
121 TSqlTokenType GetDate(TSqlToken& aToken);
122 TSqlTokenType GetNextToken(TSqlToken& aToken);
123 TSqlTokenType GetBlob(TSqlToken& aToken);
125 static inline TSqlTokenType SqlError(TInt aError=KErrArgument);
126 static TInt CompareKeyword(TInt aKeyword,const RSqlLiteral& aIdentifier);
137 friend class TSqlParser2;
139 TSqlParser(const TDesC& aSql);
141 CSqlQuery* QueryLC();
142 CSqlSearchCondition* SearchConditionLC();
143 CSqlDDLStatement* DDLStatementLC();
144 CSqlDMLStatement* DMLStatementLC();
145 Sql::TStatementType Type();
146 TInt PatternFilter(const TDesC& aPattern,const TChar aEscape, TText *aNewPatternBuffer );
148 TSqlTokenType NextToken();
149 CSqlSearchCondition* SqlError();
150 inline TInt Error() const;
151 static TSqlTokenType SqlErrorL();
153 TSqlTokenType Parse(TSqlKeyword aKeyword);
154 TSqlTokenType ParseL(TSqlTokenType aToken);
155 TSqlTokenType ParseL(TSqlKeyword aKeyword);
156 TSqlKeyword Keyword();
157 TSqlTokenType RightBracketL();
158 TSqlTokenType IdentifierL(TPtrC& aIdentifier);
162 TSqlTokenType ColumnNameL(RSqlColumnList& aList);
163 TSqlTokenType ColumnListL(RSqlColumnList& aList);
164 CSqlSearchCondition* SearchCondition(TInt aNot);
165 CSqlSearchCondition* BooleanTerm(TInt aNot);
166 CSqlSearchCondition* BooleanFactor(TInt aNot);
167 CSqlSearchCondition* BooleanPrimary(TInt aNot);
168 CSqlSearchCondition* Predicate(TInt aNot);
169 void SortSpecificationL(CDbKey& aKey);
170 CDbKey* SortSpecificationL();
171 void DoQueryL(CSqlQuery& aQuery);
172 CSqlSearchCondition* SearchConditionL();
174 TSqlTokenType AddColumnSpecL(TDbCol& aDef);
175 CSqlDDLStatement* CreateTableLC();
176 CSqlDDLStatement* DropTableLC();
177 CSqlDDLStatement* AlterTableLC();
178 CSqlDDLStatement* CreateIndexLC(TBool aUnique);
179 CSqlDDLStatement* DropIndexLC();
181 TSqlTokenType ColumnValueL(CSqlValues& aValues);
182 CSqlDMLStatement* InsertStatementLC();
183 CSqlDMLStatement* UpdateStatementLC();
184 CSqlDMLStatement* DeleteStatementLC();
192 LIKE evaluation support
195 enum TSegmentType {ENull,ESuccess,EStop,EBeginning,EEnd,EMiddle,ESkip,EEscape,EMask=0xf,EWild=0x80};
199 const TInt KPatternGranularity=0x20;
201 // If this value is changed class documentation must be updated.
202 // Namely, RDbDatabase and TDbQuery.
203 const TInt KMaxSegmentLength=0xff;
205 template <class T,class D>
206 class HMatcherPattern
211 friend class TMatcher<T,D>;
212 typedef HMatcherPattern<T,D> TThis;
214 static HMatcherPattern<T,D>* NewL(const D& aPattern,TBool aEscape = EFalse);
215 TInt MatchL(const D& aDes,const TTextOps& aTextOp) const;
216 TInt MatchL(MStreamBuf& aBuf,TInt aLength,const TTextOps& aTextOp) const;
218 static TInt Construct(HMatcherPattern<T,D>*& aCell,const D& aPattern,TBool aEscape = EFalse);
219 static inline HMatcherPattern<T,D>* Realloc(HMatcherPattern<T,D>* aThis,TInt aSize);
224 template <class T,class D>
231 TBool MatchL(const HMatcherPattern<T,D>& aPattern,const TTextOps& aTextOp);
233 virtual const T* UnderflowL(const T*& aEnd,TInt aRetain=0) =0;
236 template <class T,class D>
237 class TDesMatcher : public TMatcher<T,D>
243 inline TDesMatcher(const D& aDes);
245 const T* UnderflowL(const T*& aEnd,TInt aRetain=0);
251 template <class T,class D>
252 class TStreamMatcher : public TMatcher<T,D>
258 inline TStreamMatcher(MStreamBuf& aStreamBuf,TInt aLength);
260 const T* UnderflowL(const T*& aEnd,TInt aRetain=0);
262 enum {EBufSize=0x200};
270 NONSHARABLE_CLASS(CSqlCreateTableStatement) : public CSqlDDLStatement
278 CDbIncremental* ExecuteL(CDbDatabase& aDatabase,TDbTextComparison aComparison,TInt& aSteps);
284 NONSHARABLE_CLASS(CSqlDropTableStatement) : public CSqlDDLStatement
290 CDbIncremental* ExecuteL(CDbDatabase& aDatabase,TDbTextComparison aComparison,TInt& aSteps);
295 NONSHARABLE_CLASS(CSqlAlterTableStatement) : public CSqlDDLStatement
301 ~CSqlAlterTableStatement();
303 CDbIncremental* ExecuteL(CDbDatabase& aDatabase,TDbTextComparison aComparison,TInt& aSteps);
307 RSqlColumnList iDrop;
310 NONSHARABLE_CLASS(CSqlCreateIndexStatement) : public CSqlDDLStatement
316 CDbIncremental* ExecuteL(CDbDatabase& aDatabase,TDbTextComparison aComparison,TInt& aSteps);
323 NONSHARABLE_CLASS(CSqlDropIndexStatement) : public CSqlDDLStatement
329 CDbIncremental* ExecuteL(CDbDatabase& aDatabase,TDbTextComparison aComparison,TInt& aSteps);
335 #include "UQ_STD.INL"