src_other/tuplebase/ZTQL.h

00001 /*  @(#) $Id: ZTQL.h,v 1.1 2007/07/22 04:27:09 agreen Exp $ */
00002 
00003 /* ------------------------------------------------------------
00004 Copyright (c) 2007 Andrew Green and Learning in Motion, Inc.
00005 http://www.zoolib.org
00006 
00007 Permission is hereby granted, free of charge, to any person obtaining a copy
00008 of this software and associated documentation files (the "Software"), to deal
00009 in the Software without restriction, including without limitation the rights
00010 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00011 copies of the Software, and to permit persons to whom the Software is
00012 furnished to do so, subject to the following conditions:
00013 
00014 The above copyright notice and this permission notice shall be included in
00015 all copies or substantial portions of the Software.
00016 
00017 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00018 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00019 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00020 COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
00021 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
00022 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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 } // namespace ZTQL
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 } // namespace ZTQL
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 } // namespace ZTQL
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 } // namespace ZTQL
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 } // namespace ZTQL
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 } // namespace ZTQL
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 } // namespace ZTQL
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 } // namespace ZTQL
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 } // namespace ZTQL
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 } // namespace ZTQL
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 } // namespace ZTQL
00352 
00353 #endif // __ZTQL__

Generated on Thu Jul 26 11:21:59 2007 for ZooLib by  doxygen 1.4.7