00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __ZTQL__
00026 #define __ZTQL__ 1
00027 #include "zconfig.h"
00028
00029 #include "ZTSpec.h"
00030
00031
00032 #pragma mark -
00033 #pragma mark * ZTQL
00034
00035 namespace ZTQL {
00036
00037 class Node;
00038
00039 class Query
00040 {
00041 public:
00042 Query();
00043 Query(const Query& iOther);
00044 Query(ZRef<Node> iNode);
00045 Query& operator=(const Query& iOther);
00046 ~Query();
00047
00048 ZRef<Node> GetNode();
00049
00050 Query(const ZTuple* iTuples, size_t iCount);
00051
00052 Query(const std::vector<ZTuple>& iTuples);
00053
00054 static Query sAll();
00055
00056 static Query sAll(const ZTName& iIDPropName);
00057
00058 Query Intersect(const Query& iOther) const;
00059
00060 Query Join(const Query& iOther) const;
00061
00062 Query Project(const ZTName* iPropNames, size_t iCount) const;
00063
00064 Query Project(const std::vector<ZTName>& iPropNames) const;
00065
00066 Query Project(const ZTName& iPropName0) const;
00067
00068 Query Project(
00069 const ZTName& iPropName0,
00070 const ZTName& iPropName1) const;
00071
00072 Query Project(
00073 const ZTName& iPropName0,
00074 const ZTName& iPropName1,
00075 const ZTName& iPropName2) const;
00076
00077 Query Project(
00078 const ZTName& iPropName0,
00079 const ZTName& iPropName1,
00080 const ZTName& iPropName2,
00081 const ZTName& iPropName3) const;
00082
00083 Query Project(
00084 const ZTName& iPropName0,
00085 const ZTName& iPropName1,
00086 const ZTName& iPropName2,
00087 const ZTName& iPropName3,
00088 const ZTName& iPropName4) const;
00089
00090 Query Rename(const ZTName& iOld, const ZTName& iNew) const;
00091
00092 Query Select(const ZTSpec& iTSpec) const;
00093
00094 Query Union(const Query& iOther) const;
00095
00096 private:
00097 ZRef<Node> fNode;
00098 };
00099
00100 Query sAll();
00101 Query sAll(const ZTName& iIDName);
00102
00103 Query sDifference(const Query& iQuery1, const Query& iQuery2);
00104
00105 Query sExplicit(const ZTuple* iTuples, size_t iCount);
00106
00107 Query sExplicit(const std::vector<ZTuple>& iTuples);
00108
00109 Query sIntersect(const Query& iQuery1, const Query& iQuery2);
00110
00111 Query sJoin(const Query& iQuery1, const Query& iQuery2);
00112
00113 Query sProject(const Query& iQuery, const ZTName* iPropNames, size_t iCount);
00114
00115 Query sProject(const Query& iQuery, const std::vector<ZTName>& iPropNames);
00116
00117 Query sProject(const Query& iQuery, const ZTName& iPropName0);
00118
00119 Query sProject(const Query& iQuery,
00120 const ZTName& iPropName0,
00121 const ZTName& iPropName1);
00122
00123 Query sProject(const Query& iQuery,
00124 const ZTName& iPropName0,
00125 const ZTName& iPropName1,
00126 const ZTName& iPropName2);
00127
00128 Query sProject(const Query& iQuery,
00129 const ZTName& iPropName0,
00130 const ZTName& iPropName1,
00131 const ZTName& iPropName2,
00132 const ZTName& iPropName3);
00133
00134 Query sProject(const Query& iQuery,
00135 const ZTName& iPropName0,
00136 const ZTName& iPropName1,
00137 const ZTName& iPropName2,
00138 const ZTName& iPropName3,
00139 const ZTName& iPropName4);
00140
00141 Query sRename(const Query& iQuery, const ZTName& iOldPropName, const ZTName& iNewPropName);
00142
00143 Query sSelect(const Query& iQuery, const ZTSpec& iTSpec);
00144
00145 Query sUnion(const Query& iQuery1, const Query& iQuery2);
00146
00147 }
00148
00149
00150 #pragma mark -
00151 #pragma mark * ZTQL::Node
00152
00153 namespace ZTQL {
00154
00155 class Node : public ZRefCounted
00156 {
00157 protected:
00158 Node();
00159 };
00160
00161 }
00162
00163
00164 #pragma mark -
00165 #pragma mark * ZTQL::Node_All
00166
00167 namespace ZTQL {
00168
00169 class Node_All : public Node
00170 {
00171 public:
00172 Node_All();
00173 Node_All(const ZTName& iIDPropName);
00174
00175 const ZTName& GetIDPropName();
00176
00177 private:
00178 ZTName fIDPropName;
00179 };
00180
00181 }
00182
00183
00184 #pragma mark -
00185 #pragma mark * ZTQL::Node_Difference
00186
00187 namespace ZTQL {
00188
00189 class Node_Difference : public Node
00190 {
00191 public:
00192 Node_Difference(ZRef<Node> iNodeA, ZRef<Node> iNodeB);
00193
00194 ZRef<Node> GetNodeA();
00195 ZRef<Node> GetNodeB();
00196
00197 private:
00198 ZRef<Node> fNodeA;
00199 ZRef<Node> fNodeB;
00200 };
00201
00202 }
00203
00204
00205 #pragma mark -
00206 #pragma mark * ZTQL::Node_Explicit
00207
00208 namespace ZTQL {
00209
00210 class Node_Explicit : public Node
00211 {
00212 public:
00213 Node_Explicit(const ZTuple* iTuples, size_t iCount);
00214 Node_Explicit(const std::vector<ZTuple>& iTuples);
00215
00216 const vector<ZTuple>& GetTuples();
00217
00218 private:
00219 vector<ZTuple> fTuples;
00220 };
00221
00222 }
00223
00224
00225 #pragma mark -
00226 #pragma mark * ZTQL::Node_Intersect
00227
00228 namespace ZTQL {
00229
00230 class Node_Intersect : public Node
00231 {
00232 public:
00233 Node_Intersect(ZRef<Node> iNodeA, ZRef<Node> iNodeB);
00234
00235 ZRef<Node> GetNodeA();
00236 ZRef<Node> GetNodeB();
00237
00238 private:
00239 ZRef<Node> fNodeA;
00240 ZRef<Node> fNodeB;
00241 };
00242
00243 }
00244
00245
00246 #pragma mark -
00247 #pragma mark * ZTQL::Node_Join
00248
00249 namespace ZTQL {
00250
00251 class Node_Join : public Node
00252 {
00253 public:
00254 Node_Join(ZRef<Node> iNodeA, ZRef<Node> iNodeB);
00255
00256 ZRef<Node> GetNodeA();
00257 ZRef<Node> GetNodeB();
00258
00259 private:
00260 ZRef<Node> fNodeA;
00261 ZRef<Node> fNodeB;
00262 };
00263
00264 }
00265
00266
00267 #pragma mark -
00268 #pragma mark * ZTQL::Node_Project
00269
00270 namespace ZTQL {
00271
00272 class Node_Project : public Node
00273 {
00274 public:
00275 Node_Project(ZRef<Node> iNode, const ZTName* iPropNames, size_t iCount);
00276 Node_Project(ZRef<Node> iNode, const vector<ZTName>& iPropNames);
00277
00278 ZRef<Node> GetNode();
00279 const vector<ZTName>& GetPropNames();
00280
00281 private:
00282 ZRef<Node> fNode;
00283 vector<ZTName> fPropNames;
00284 };
00285
00286 }
00287
00288
00289 #pragma mark -
00290 #pragma mark * ZTQL::Node_Rename
00291
00292 namespace ZTQL {
00293
00294 class Node_Rename : public Node
00295 {
00296 public:
00297 Node_Rename(ZRef<Node> iNode, const ZTName& iOld, const ZTName& iNew);
00298
00299 ZRef<Node> GetNode();
00300 const ZTName& GetOld();
00301 const ZTName& GetNew();
00302
00303 private:
00304 ZRef<Node> fNode;
00305 ZTName fOld;
00306 ZTName fNew;
00307 };
00308
00309 }
00310
00311
00312 #pragma mark -
00313 #pragma mark * ZTQL::Node_Select
00314
00315 namespace ZTQL {
00316
00317 class Node_Select : public Node
00318 {
00319 public:
00320 Node_Select(ZRef<Node> iNode, const ZTSpec& iTSpec);
00321
00322 ZRef<Node> GetNode();
00323 const ZTSpec& GetTSpec();
00324
00325 private:
00326 ZRef<Node> fNode;
00327 ZTSpec fTSpec;
00328 };
00329
00330 }
00331
00332
00333 #pragma mark -
00334 #pragma mark * ZTQL::Node_Union
00335
00336 namespace ZTQL {
00337
00338 class Node_Union : public Node
00339 {
00340 public:
00341 Node_Union(ZRef<Node> iNodeA, ZRef<Node> iNodeB);
00342
00343 ZRef<Node> GetNodeA();
00344 ZRef<Node> GetNodeB();
00345
00346 private:
00347 ZRef<Node> fNodeA;
00348 ZRef<Node> fNodeB;
00349 };
00350
00351 }
00352
00353 #endif // __ZTQL__