home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Demos / OOFILE / Buildable, limited OOFILE / OOFILE headers / oofquery.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-09-26  |  6.6 KB  |  283 lines  |  [TEXT/CWIE]

  1. #ifndef H_OOFquery
  2. #define H_OOFquery
  3.  
  4. // COPYRIGHT 1994 A.D. Software, All rights reserved
  5.  
  6. // IMPLEMENTATION of queries
  7. // known to Fields and Query implementations
  8.  
  9. class dbQueryField ;
  10. class dbQueryLiteral;
  11. class dbQueryLiteralStr;
  12. class dbQueryBinaryCombo;
  13. class dbField;
  14. class dbCompoundField;
  15.  
  16. class dbQueryClause {
  17. public:
  18.     enum BinaryQueryOps {equals, notEquals, lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual, startsWith};
  19.     enum TrinaryQueryOps {between, outside};
  20.     enum QueryCombinatorialOps {and, or};
  21.     enum QueryClauseTypes {binaryfieldToLiteral, binaryfieldTofield, trinaryFieldToLiterals, atomicfield, atomicLiteral, atomicLiteralStr, binaryCombination};
  22.  
  23.     virtual ~dbQueryClause() {};
  24.     
  25.     virtual dbQueryClause::QueryClauseTypes  queryClauseType() const=0;
  26.     
  27. // combinatorial operators
  28.     dbQueryBinaryCombo operator&(dbQueryClause&) const;
  29.     dbQueryBinaryCombo operator&&(dbQueryClause&) const;
  30.     dbQueryBinaryCombo operator|(dbQueryClause&) const;
  31.     dbQueryBinaryCombo operator||(dbQueryClause&) const;
  32.     
  33. protected:
  34.     dbQueryClause() {};
  35.     
  36. // other protocol
  37. // part of testing    dbTable *AppliesToTable();
  38.  
  39. };
  40.  
  41. //operator=(dbTable lhs, dbQueryClause& rhs);
  42.  
  43.  
  44. class dbQueryBinary : public dbQueryClause {
  45. public:
  46.     dbQueryBinary(dbQueryField* fld, BinaryQueryOps op, dbQueryClause* litOrFld) :
  47.                 mLhs(fld),
  48.                 mRhs(litOrFld),
  49.                 mBinOp(op)
  50.                 {};        
  51.     dbQueryBinary(dbQueryBinary&);
  52.     virtual ~dbQueryBinary();
  53. private:
  54.     dbQueryBinary& operator=(dbQueryBinary&);
  55.  
  56. public:
  57.     virtual dbQueryClause::QueryClauseTypes queryClauseType()  const;
  58.     dbQueryLiteralStr* literalStrClause() const;
  59.     dbQueryLiteral* literalClause() const;
  60.     dbQueryClause::BinaryQueryOps binaryOperator() const;
  61.     const dbField* lhsField() const;
  62.  
  63. protected:
  64.     
  65. // other protocol
  66. // part of testing    dbTable *AppliesToTable();
  67.  
  68. // data storage
  69. protected:
  70.     dbQueryField  *mLhs;  // owned
  71.     dbQueryClause* mRhs;  // owned
  72.     BinaryQueryOps  mBinOp;
  73. };
  74.  
  75.  
  76. class dbQueryBinaryCombo : public dbQueryClause {
  77. public:
  78. // NOT YET IMPLEMENTED extend to any number of clauses with same op
  79.     dbQueryBinaryCombo(const dbQueryClause* lhs, QueryCombinatorialOps op, const dbQueryClause* rhs) :
  80.                 mLhs(lhs),
  81.                 mRhs(rhs),
  82.                 mComboOp(op),
  83.                 mTempKeyStoreToDispose(0)
  84.                 {};        
  85.     dbQueryBinaryCombo(dbQueryBinaryCombo&);
  86.     virtual ~dbQueryBinaryCombo();
  87. private:
  88.     dbQueryBinaryCombo& operator=(dbQueryBinaryCombo&);
  89.  
  90. public:
  91.     virtual dbQueryClause::QueryClauseTypes queryClauseType()  const;
  92.     dbQueryClause::QueryCombinatorialOps binaryOperator() const;
  93.     const dbQueryClause* item(unsigned int) const;
  94.     unsigned long pairFieldsIfCouldUseCompoundIndex() const;
  95.     dbQueryBinary makeCompoundSearch(const dbCompoundField*);
  96.  
  97. protected:
  98.     
  99. // other protocol
  100. // part of testing    dbTable *AppliesToTable();
  101.  
  102. // data storage
  103. protected:
  104. // NOTE unlike the other Binary and Trinary, we do NOT own our lhs & rhs
  105.     const dbQueryClause  *mLhs, *mRhs;
  106.     QueryCombinatorialOps  mComboOp;
  107.     char* mTempKeyStoreToDispose;
  108. };
  109.  
  110.  
  111. class dbQueryTrinary : public dbQueryClause {
  112. public:
  113.     dbQueryTrinary(dbQueryField* fld, TrinaryQueryOps op, dbQueryClause* litOrFldFrom, dbQueryClause* litOrFldTo) :
  114.                 mLhs(fld),
  115.                 mFrom(litOrFldFrom),
  116.                 mTo(litOrFldTo),
  117.                 mTrinOp(op)
  118.                 {};        
  119.     dbQueryTrinary(dbQueryTrinary&);
  120.     virtual ~dbQueryTrinary();
  121. private:
  122.     dbQueryTrinary& operator=(dbQueryTrinary&);
  123.  
  124. public:
  125.     virtual dbQueryClause::QueryClauseTypes queryClauseType()  const;
  126.     dbQueryLiteralStr* literalStrFromClause() const;
  127.     dbQueryLiteralStr* literalStrToClause() const;
  128.     dbQueryLiteral* literalFromClause() const;
  129.     dbQueryLiteral* literalToClause() const;
  130.     dbQueryClause::TrinaryQueryOps trinaryOperator() const;
  131.     const dbField* lhsField() const;
  132.  
  133. protected:
  134.     
  135. // data storage
  136. protected:
  137.     dbQueryField  *mLhs;  // owned
  138.     dbQueryClause *mFrom, *mTo;  // owned
  139.     TrinaryQueryOps  mTrinOp;
  140. };
  141.  
  142.  
  143. class dbQueryLiteral : public dbQueryClause {
  144. public:
  145.     virtual dbQueryClause::QueryClauseTypes  queryClauseType()  const;
  146.     virtual const void* binaryContents() const;
  147.     virtual unsigned short literalLen() const;
  148.     
  149. protected:
  150.     dbQueryLiteral() {};        
  151. };
  152.  
  153.  
  154. class dbQueryLiteralStr : public dbQueryLiteral {
  155. public:
  156.     dbQueryLiteralStr(const char* str) :
  157.     mStr(str) {};
  158.     virtual ~dbQueryLiteralStr() {};
  159.  
  160.     virtual dbQueryClause::QueryClauseTypes  queryClauseType()  const;
  161.     const char* Str() const;
  162.     virtual const void* binaryContents() const;
  163.     virtual unsigned short literalLen() const;
  164.  
  165. // data storage
  166. private:
  167.     const char* mStr;
  168. }; 
  169.  
  170.  
  171. class dbQueryLiteralDouble : public dbQueryLiteral {
  172. public:
  173.     dbQueryLiteralDouble(double d) :
  174.     mNum(d) {};
  175.     virtual ~dbQueryLiteralDouble() {};
  176.     
  177.     virtual const void* binaryContents() const;
  178.     virtual unsigned short literalLen() const;
  179.  
  180. // data storage
  181. private:
  182.     const double mNum;
  183. }; 
  184.  
  185.  
  186. class dbQueryLiteralBLOB : public dbQueryLiteral {
  187. // mainly used to support compound key queries ending in binary number
  188. public:
  189.     dbQueryLiteralBLOB(void* blob, unsigned short len) :
  190.                                         mBLOB(blob),
  191.                                         mBLOBlen(len)
  192.                                         {};
  193.     virtual ~dbQueryLiteralBLOB() {};
  194.     
  195.     virtual const void* binaryContents() const;
  196.     virtual unsigned short literalLen() const;
  197.  
  198. // data storage
  199. private:
  200.     const void* mBLOB;
  201.     unsigned short mBLOBlen;
  202. }; 
  203.  
  204.  
  205. class dbQueryLiteralLong : public dbQueryLiteral {
  206. public:
  207.     dbQueryLiteralLong(long l) :
  208.     mNum(l) {};
  209.     virtual ~dbQueryLiteralLong() {};
  210.     
  211.     virtual const void* binaryContents() const;
  212.     virtual unsigned short literalLen() const;
  213.  
  214. // data storage
  215. private:
  216.     const long mNum;
  217. }; 
  218.  
  219.  
  220. class dbQueryLiteralUlong : public dbQueryLiteral {
  221. public:
  222.     dbQueryLiteralUlong(unsigned long l) :
  223.     mNum(l) {};
  224.     virtual ~dbQueryLiteralUlong() {};
  225.     
  226.     virtual const void* binaryContents() const;
  227.     virtual unsigned short literalLen() const;
  228.  
  229. // data storage
  230. private:
  231.     const unsigned long mNum;
  232. };
  233.  
  234.  
  235. class dbQueryLiteralShort : public dbQueryLiteral {
  236. public:
  237.     dbQueryLiteralShort(short s) :
  238.     mNum(s) {};
  239.     virtual ~dbQueryLiteralShort() {};
  240.     
  241.     virtual const void* binaryContents() const;
  242.     virtual unsigned short literalLen() const;
  243.  
  244. // data storage
  245. private:
  246.     const short mNum;
  247. };
  248.  
  249.  
  250. class dbQueryLiteralUshort : public dbQueryLiteral {
  251. public:
  252.     dbQueryLiteralUshort(unsigned short s) :
  253.     mNum(s) {};
  254.     virtual~dbQueryLiteralUshort() {};
  255.     
  256.     virtual const void* binaryContents() const;
  257.     virtual unsigned short literalLen() const;
  258.  
  259. // data storage
  260. private:
  261.     const unsigned short mNum;
  262. };
  263.  
  264.  
  265. class dbQueryField : public dbQueryClause {
  266. public:
  267. // constructors
  268.     dbQueryField(const dbField* fld) :
  269.                 mfield(fld) {};
  270.     virtual~dbQueryField() {};
  271.     
  272.     const dbField*  field()  const {return mfield;};
  273.     virtual dbQueryClause::QueryClauseTypes  queryClauseType()  const;
  274.     
  275. // data storage
  276.     const dbField* mfield;
  277. };
  278.  
  279.  
  280. // include inline definitions
  281. #include "oofquery.inl"
  282. #endif
  283.