home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / Software / TemaCD / tcvpa / data1.cab / MyFileGroup / INCLUDE / Query.hpp < prev    next >
C/C++ Source or Header  |  1999-06-03  |  21KB  |  615 lines

  1. #ifndef _INC_QUERY_HPP
  2. #define _INC_QUERY_HPP
  3. class TC_CPsPredTerm;
  4. class TC_CPsMember;
  5. class TC_CPsSort;
  6. class TC_CPsPredicate;
  7. class TC_CPsQuery;
  8. class TC_CPsClassedMember;
  9. enum TCPsQryOperType {
  10.  op_EQ,
  11.  op_NE,
  12.  op_LT,
  13.  op_LE,
  14.  op_GT,
  15.  op_GE,
  16.  op_MATCHES,
  17.  op_NOT_MATCHES,
  18.  op_NULL,
  19.  op_NOT_NULL,
  20.  op_IN,
  21.  op_NOT_IN,
  22. };
  23. enum TCPsQryConjType {
  24.  conj_AND,
  25.  conj_OR,
  26.  conj_NOT,
  27.  conj_None,
  28. };
  29. enum TCPsQryOrderType {
  30.  order_Asc,
  31.  order_Desc,
  32. };
  33. enum TCPsQryAgr {
  34.  agr_None,
  35.  agr_Count,
  36.  agr_Max,
  37.  agr_Min,
  38.  agr_Avg,
  39.  agr_Sum,
  40. };
  41. typedef TC_TArrayCPP <TC_CPsClassedMember>     TCPsClassedMembers;
  42. typedef TC_TArrayCPP <TC_CPsAttribInfo>        TCPsAttribInfos;
  43. typedef    TC_TArrayCPP <TC_CPsPredTerm>        TCPsPredTerms;
  44. typedef    TC_TArrayCPP <TC_CPsPredicate>        TCPsPredicates;
  45.  extern  TC_PS_EXPORT TC_CPsPredicate tcPsNullPredicate ;
  46.  extern  TC_PS_EXPORT TC_CPsSort tcPsNullSort ;
  47. TC_PS_EXPORT int tcPsAtomicResult ( long * p)  ;
  48. TC_PS_EXPORT int tcPsAtomicResult ( unsigned long * p)  ;
  49. TC_PS_EXPORT int tcPsAtomicResult ( short * p)  ;
  50. TC_PS_EXPORT int tcPsAtomicResult ( unsigned short * p)  ;
  51. TC_PS_EXPORT int tcPsAtomicResult ( char * p)  ;
  52. TC_PS_EXPORT int tcPsAtomicResult ( unsigned char * p)  ;
  53. TC_PS_EXPORT int tcPsAtomicResult ( float * p)  ;
  54. TC_PS_EXPORT int tcPsAtomicResult ( double * p)  ;
  55. TC_PS_EXPORT int tcPsAtomicResult (TC_CDate * p)  ;
  56. TC_PS_EXPORT int tcPsAtomicResult (TC_CTime * p)  ;
  57. TC_PS_EXPORT int tcPsAtomicResult (TC_CString * p)  ;
  58. TC_PS_EXPORT int tcPsAtomicResult (TC_CBCD * p)  ;
  59. TC_PS_EXPORT int tcPsAtomicResult (TC_CBinArray * p)  ;
  60.  
  61. // **********************************************************************
  62. class TC_PS_EXPORT TC_CPsAtomicResult 
  63. {
  64. private:  int m_Type ;
  65. private:  long m_Size ;
  66. protected:  void * m_Value ;
  67. public:   TC_CPsAtomicResult (int type, void * val, long size)  ;
  68. public:  void SetValue (void * val, int type = 0, long size=0)  ;
  69. public:  void * GetValue () 
  70. {
  71. return m_Value;
  72. } // end of func
  73. // **********************************************************************
  74.  
  75. public:  int GetType () 
  76. {
  77. return m_Type;
  78. } // end of func
  79. // **********************************************************************
  80.  
  81. public:  long GetSize () 
  82. {
  83. return m_Size;
  84. } // end of func
  85. // **********************************************************************
  86.  
  87.  
  88. }; // end of class TC_CPsAtomicResult
  89.  
  90. // **********************************************************************
  91.  
  92. // **********************************************************************
  93.  template <class T>
  94. class TC_TPsAtomicResult 
  95.     : public TC_CPsAtomicResult
  96. {
  97. public:   TC_TPsAtomicResult (T & value, int size=0) 
  98. : TC_CPsAtomicResult(tcPsAtomicResult((T*)-1), &value, size)    
  99. {
  100. } // end of func
  101. // **********************************************************************
  102.  
  103. public:   operator T () 
  104. {
  105. return *((T*)GetValue());
  106. } // end of func
  107. // **********************************************************************
  108.  
  109. public:  T& operator = (T & value) 
  110. {
  111. SetValue(&value); 
  112. return value;
  113.  
  114. } // end of func
  115. // **********************************************************************
  116.  
  117.  
  118. }; // end of class TC_TPsAtomicResult
  119.  
  120. // **********************************************************************
  121. typedef TC_TPsAtomicResult <long>            TCPsARLong;
  122. typedef TC_TPsAtomicResult <short>            TCPsARShort;
  123. typedef TC_TPsAtomicResult <unsigned long>    TCPsARULong;
  124. typedef TC_TPsAtomicResult <unsigned short>    TCPsARUShort;
  125. typedef TC_TPsAtomicResult <char>            TCPsARChar;
  126. typedef TC_TPsAtomicResult <unsigned char>    TCPsARByte;
  127. typedef TC_TPsAtomicResult <TC_CDate>        TCPsARDate;
  128. typedef TC_TPsAtomicResult <TC_CTime>        TCPsARTime;
  129. typedef TC_TPsAtomicResult <float>            TCPsARFloat;
  130. typedef TC_TPsAtomicResult <double>            TCPsARDouble;
  131. typedef TC_TPsAtomicResult <TC_CBCD>        TCPsARBCD;
  132.  
  133. // **********************************************************************
  134. class TCPsARString 
  135.     : public TC_TPsAtomicResult <TC_CString>
  136. {
  137. public:   TCPsARString (TC_CString & value, int size=0) 
  138. : TC_TPsAtomicResult <TC_CString> (value, size)
  139. {
  140. } // end of func
  141. // **********************************************************************
  142.  
  143. public:   operator const char * () 
  144. {
  145. return (const char*)GetValue();
  146. } // end of func
  147. // **********************************************************************
  148.  
  149. public:  TC_CString& operator = (const char * value) 
  150. {
  151. SetValue((void*)value, TC_PS_AT_STRING);
  152. return *(TC_CString*)GetValue();
  153.  
  154. } // end of func
  155. // **********************************************************************
  156.  
  157.  
  158. }; // end of class TCPsARString
  159.  
  160. // **********************************************************************
  161.  
  162. // **********************************************************************
  163. class TCPsARBinary 
  164.     : public TC_TPsAtomicResult <TC_CBinArray>
  165. {
  166. public:   TCPsARBinary (TC_CBinArray & value, int size=0) 
  167. : TC_TPsAtomicResult <TC_CBinArray> (value, size)
  168. {
  169. } // end of func
  170. // **********************************************************************
  171.  
  172. public:  unsigned char * Array ()  ;
  173. public:  ULONG Size ()  ;
  174.  
  175. }; // end of class TCPsARBinary
  176.  
  177. // **********************************************************************
  178.  
  179. // **********************************************************************
  180. class TC_PS_EXPORT TC_CPsPredTerm 
  181. {
  182. friend class TC_CPsPredicate;
  183. friend class TC_CPsQuery;
  184. friend class TC_TArrayCPP <TC_CPsPredTerm>;
  185. private:  TC_CString m_AttribName ;
  186. private:  TCPsQryOperType m_Oper ;
  187. private:  TC_CPsBuffer m_Buffer ;
  188. private:  int m_JoinIdx ;
  189. private:  TC_CPsQuery * m_SubQuery ;
  190. private:   TC_CPsPredTerm ()  ;
  191. public:   TC_CPsPredTerm (TC_CPsMember * member, TCPsQryOperType oper, const TC_CPsBuffer & psbuf)  ;
  192. public:   TC_CPsPredTerm (TC_CPsMember & member, TCPsQryOperType oper, const TC_CPsBuffer & psbuf)  ;
  193. public:   TC_CPsPredTerm (TC_CPsMember * member, TCPsQryOperType oper)  ;
  194. public:   TC_CPsPredTerm (TC_CPsMember & member, TCPsQryOperType oper)  ;
  195. public:   TC_CPsPredTerm (TC_CPsMember * member, TCPsQryOperType oper, TC_CPsQuery * subquery)  ;
  196. public:   TC_CPsPredTerm (TC_CPsMember & member, TCPsQryOperType oper, TC_CPsQuery * subquery)  ;
  197. public:   TC_CPsPredTerm (TC_CPsPredTerm & term)  ;
  198. public:  TC_CPsPredTerm & operator = (const TC_CPsPredTerm & term)  ;
  199. public:  TC_CPsPredicate operator && (TC_CPsPredTerm & term)  ;
  200. public:  TC_CPsPredicate operator && (TC_CPsPredicate & pred)  ;
  201. public:  TC_CPsPredicate operator || (TC_CPsPredTerm & term)  ;
  202. public:  TC_CPsPredicate operator || (TC_CPsPredicate & pred)  ;
  203. public:  TC_CPsPredicate operator ! ()  ;
  204. public:  const char * GetAttribName ()  ;
  205. public:   ~TC_CPsPredTerm ()  ;
  206. public:  int GetJoinIdx () 
  207. {
  208. return m_JoinIdx;
  209. } // end of func
  210. // **********************************************************************
  211.  
  212. public:  TCPsQryOperType GetOper () 
  213. {
  214. return m_Oper;
  215. } // end of func
  216. // **********************************************************************
  217.  
  218. public:  TC_CPsBuffer & GetBuffer ()  ;
  219. public:  TC_CPsQuery * GetSubQuery () 
  220. {
  221. return m_SubQuery;
  222. } // end of func
  223. // **********************************************************************
  224.  
  225. public:  BOOL IsSubQuery () 
  226. {
  227. return m_SubQuery != 0;
  228. } // end of func
  229. // **********************************************************************
  230.  
  231.  
  232. }; // end of class TC_CPsPredTerm
  233.  
  234. // **********************************************************************
  235.  
  236. // **********************************************************************
  237. class TC_PS_EXPORT TC_CPsMember 
  238. {
  239. friend class TC_CPsPredTerm;
  240. friend class TC_CPsSort;
  241. private:  TC_CString m_Name ;
  242. public:   TC_CPsMember (const char * name)  ;
  243. public:  TC_CPsPredTerm operator != (const TC_CPsBuffer & psbuf)  ;
  244. public:  TC_CPsPredTerm operator < (const TC_CPsBuffer & psbuf)  ;
  245. public:  TC_CPsPredTerm operator <= (const TC_CPsBuffer & psbuf)  ;
  246. public:  TC_CPsPredTerm operator == (const TC_CPsBuffer & psbuf)  ;
  247. public:  TC_CPsPredTerm operator > (const TC_CPsBuffer & psbuf)  ;
  248. public:  TC_CPsPredTerm operator >= (const TC_CPsBuffer & psbuf)  ;
  249. public:  const char * GetName ()  ;
  250.  
  251. }; // end of class TC_CPsMember
  252.  
  253. // **********************************************************************
  254.  
  255. // **********************************************************************
  256. class TC_PS_EXPORT TC_CPsSort 
  257. {
  258. friend class TC_CPsQuery;
  259. friend class DSDQueryResSet;
  260. #define    SortCriteria TC_CPsSort::Criteria
  261.  
  262. // **********************************************************************
  263. public: 
  264. class TC_PS_EXPORT Criteria 
  265. {
  266. public:  TC_CString m_AttribName ;
  267. public:  TCPsQryOrderType m_Type ;
  268. public:  int m_JoinIdx ;
  269. public:   Criteria ()  ;
  270. public:  const char * GetAttribName ()  ;
  271.  
  272. }; // end of class Criteria
  273.  
  274. // **********************************************************************
  275. private:  TC_TArrayCPP <Criteria> m_Criteries ;
  276. public:   TC_CPsSort ()  ;
  277. public:   TC_CPsSort (TC_CPsMember * member, TCPsQryOrderType orderType = order_Asc)  ;
  278. public:   TC_CPsSort (TC_CPsMember & member, TCPsQryOrderType orderType = order_Asc)  ;
  279. public:  TC_CPsSort & operator = (TC_CPsSort & sort)  ;
  280. public:  void Add (TC_CPsMember * member, TCPsQryOrderType orderType = order_Asc)  ;
  281. public:  void Add (TC_CPsMember & member, TCPsQryOrderType orderType = order_Asc)  ;
  282. public:  void Add (TC_CPsSort & sort)  ;
  283. public:  TC_CPsSort & operator += (TC_CPsMember & member)  ;
  284. public:  TC_CPsSort & operator += (TC_CPsSort & sort)  ;
  285. public:  BOOL IsNull () 
  286. {
  287. return m_Criteries.Count()==0;
  288. } // end of func
  289. // **********************************************************************
  290.  
  291. public:  int Count () 
  292. {
  293. return m_Criteries.Count();
  294. } // end of func
  295. // **********************************************************************
  296.  
  297. public:  const char * GetCriteriaAttribName (int idx) 
  298. {
  299. if(idx < 0 || idx >=Count())
  300.     return "";
  301. return m_Criteries[idx].GetAttribName();
  302. } // end of func
  303. // **********************************************************************
  304.  
  305. private:  void _Add (const char * attrib_name, TCPsQryOrderType orderType)  ;
  306.  
  307. }; // end of class TC_CPsSort
  308.  
  309. // **********************************************************************
  310.  
  311. // **********************************************************************
  312. class TC_PS_EXPORT TC_CPsPredicate 
  313. {
  314. friend class TC_CPsPredTerm;
  315. friend class TC_CPsQuery;
  316. friend class DSDQueryResSet;
  317. private:  TCPsQryConjType m_Conj ;
  318. private:  TCPsPredTerms m_PredTerms ;
  319. private:  TCPsPredicates m_PredBlocks ;
  320. public:   TC_CPsPredicate ()  ;
  321. public:   TC_CPsPredicate (TC_CPsPredTerm & term)  ;
  322. public:   TC_CPsPredicate (TC_CPsPredicate & pred)  ;
  323. public:  void Set (TC_CPsPredicate & pred)  ;
  324. public:  void AndTerm (TC_CPsPredTerm & term)  ;
  325. public:  void AndPred (TC_CPsPredicate & pred)  ;
  326. public:  void OrTerm (TC_CPsPredTerm & term)  ;
  327. public:  void OrPred (TC_CPsPredicate & pred)  ;
  328. public:  void Not ()  ;
  329. public:  TC_CPsPredicate & operator = (TC_CPsPredicate & pred)  ;
  330. public:  TC_CPsPredicate operator && (TC_CPsPredTerm & term)  ;
  331. public:  TC_CPsPredicate operator && (TC_CPsPredicate & pred)  ;
  332. public:  TC_CPsPredicate operator || (TC_CPsPredTerm & term)  ;
  333. public:  TC_CPsPredicate operator || (TC_CPsPredicate & pred)  ;
  334. public:  TC_CPsPredicate operator ! ()  ;
  335. public:  int TermCount ()  ;
  336. public:  int PredCount ()  ;
  337. public:  BOOL IsNull ()  ;
  338. public:  TCPsQryConjType GetConj () 
  339. {
  340. return m_Conj;
  341. } // end of func
  342. // **********************************************************************
  343.  
  344. private:  BOOL NeedChangeConj ()  ;
  345. private:  void DoCopy (TC_CPsPredicate * dest, TC_CPsPredicate * src, int start_block=0)  ;
  346. private:  void PropagateThis ()  ;
  347. private:  int m_Level ;
  348. public:  void Trace ()  ;
  349. private:  void DoTrace (TC_CPsPredicate * pred)  ;
  350. private:  TC_CString StrConj (TCPsQryConjType conj)  ;
  351.  
  352. }; // end of class TC_CPsPredicate
  353.  
  354. // **********************************************************************
  355. #define ClJoin    TC_CPsClassJoins::Join
  356.  
  357. // **********************************************************************
  358. class TC_PS_EXPORT TC_CPsClassJoins 
  359. {
  360. friend class TC_CPsQuery;
  361. friend class TC_CPsClassedMember;
  362.  
  363. // **********************************************************************
  364. public: 
  365. class TC_PS_EXPORT Join 
  366. {
  367. public:  Join * m_Anc ;
  368. public:  TC_TArrayCPP <Join> m_Descs ;
  369. public:  TCPsHClass m_hClass ;
  370. public:  TCPsHAttrib m_hAttribOfRel ;
  371. public:  int m_NN ;
  372. public:  BOOL m_IsJoinBasis ;
  373. public:   Join ()  ;
  374. public:   ~Join ()  ;
  375. public:  int DescCount () 
  376. {
  377. return m_Descs.Count();
  378. } // end of func
  379. // **********************************************************************
  380.  
  381.  
  382. }; // end of class Join
  383.  
  384. // **********************************************************************
  385. private:  ClJoin m_Root ;
  386. private:  int m_Count ;
  387. private:  BOOL m_HasM2O ;
  388. private:  BOOL m_HasMemberJoins ;
  389. public:  int GetInheritCount ()  ;
  390. public:   TC_CPsClassJoins ()  ;
  391. public:  ClJoin  * GetRoot ()  ;
  392. public:  void Clear ()  ;
  393. public:  BOOL HasM2O () 
  394. {
  395. return m_HasM2O;
  396. } // end of func
  397. // **********************************************************************
  398.  
  399. public:  BOOL HasMemberJoins () 
  400. {
  401. return m_HasMemberJoins;
  402. } // end of func
  403. // **********************************************************************
  404.  
  405. public:  int m_Level ;
  406. public:  void Trace ( ClJoin * parent)  ;
  407.  
  408. }; // end of class TC_CPsClassJoins
  409.  
  410. // **********************************************************************
  411.  
  412. // **********************************************************************
  413. class TC_PS_EXPORT TC_CPsClassedMember 
  414. {
  415. friend class TC_CPsQuery;
  416. private: 
  417. enum  {
  418.  tok_Undef,
  419.  tok_Str,
  420.  tok_Dot,
  421.  tok_End,
  422. };
  423. private:  TC_CString m_QualifiedName ;
  424. private:  TCPsAttribInfos m_AttribPath ;
  425. private:  TCPsHClass m_hDestClass ;
  426. private:  ClJoin * m_Join ;
  427. public:   TC_CPsClassedMember ()  ;
  428. private:  int NextToken (TC_CString &dest, char * &ptr)  ;
  429. private:  TCPsRetCode Parse ()  ;
  430. private:  int AttribsInPath ()  ;
  431. public:  TC_CPsAttribInfo LastAttrib ()  ;
  432. public:  ClJoin * GetClassJoin () 
  433. {
  434. return m_Join;
  435. } // end of func
  436. // **********************************************************************
  437.  
  438. public:  const char * GetQualifiedName ()  ;
  439.  
  440. }; // end of class TC_CPsClassedMember
  441.  
  442. // **********************************************************************
  443.  
  444. // **********************************************************************
  445. class TC_PS_EXPORT TC_CPsQueryDest 
  446. {
  447. friend class TC_CPsQuery;
  448. private:  TCPsHClass m_hClass ;
  449. private:  TCPsHAttrib m_hAttrib ;
  450. private:  TCPsQryAgr m_Agregate ;
  451. private:   TC_CPsQueryDest ()  ;
  452. public:   TC_CPsQueryDest (TCPsHClass hClass, TCPsQryAgr agr = agr_None)  ;
  453. public:   TC_CPsQueryDest (TCPsHClass hClass, char * attr_name, TCPsQryAgr agr = agr_None)  ;
  454. public:  BOOL IsNonObj () 
  455. {
  456. if(m_Agregate == agr_Count)
  457.     return TRUE;
  458. if(m_hAttrib)
  459.     return TRUE;
  460.  
  461. return FALSE;
  462. } // end of func
  463. // **********************************************************************
  464.  
  465. public:  BOOL IsValid () 
  466. {
  467. return m_hClass != 0;
  468. } // end of func
  469. // **********************************************************************
  470.  
  471. public:  TCPsHClass HClass () 
  472. {
  473. return m_hClass;
  474. } // end of func
  475. // **********************************************************************
  476.  
  477. public:  TC_CPsAttribInfo AttribInfo () 
  478. {
  479. return TC_CPsAttribInfo(m_hClass, m_hAttrib);
  480. } // end of func
  481. // **********************************************************************
  482.  
  483. public:  TCPsQryAgr GetAgr () 
  484. {
  485. return m_Agregate;
  486. } // end of func
  487. // **********************************************************************
  488.  
  489.  
  490. }; // end of class TC_CPsQueryDest
  491.  
  492. // **********************************************************************
  493.  
  494. // **********************************************************************
  495. class TC_PS_EXPORT TC_CPsQuery 
  496. {
  497. friend class DSDQueryResSet;
  498. private:  TC_CPsPredicate m_Pred ;
  499. private:  TC_CPsSort m_Sort ;
  500. private:  TCPsClassedMembers m_Members ;
  501. private:  TC_CPsClassJoins m_Joins ;
  502. private:  TC_CPsQueryDest m_QueryDest ;
  503. private:  void Reset ()  ;
  504. private:  void DefineJoin (TC_CPsClassedMember * cl_member)  ;
  505. private:  TCPsRetCode AddSortJoins ()  ;
  506. private:  TCPsRetCode DoAddPredJoins (TC_CPsPredicate * pred)  ;
  507. private:  TCPsRetCode ParseSubQuery (TC_CPsQuery * subquery)  ;
  508. private:  int SearchMember (const char * name)  ;
  509. private:  TCPsRetCode CheckTypeMatch (TC_CPsAttribInfo & atInfo, TC_CPsPredTerm & term)  ;
  510. public:   TC_CPsQuery ()  ;
  511. public:   TC_CPsQuery (TC_CPsQueryDest qry_dest,TC_CPsPredicate & pred = tcPsNullPredicate, TC_CPsSort & sort = tcPsNullSort)  ;
  512. public:   ~TC_CPsQuery ()  ;
  513. public:  TC_CPsQuery & operator = (TC_CPsQuery &qry)  ;
  514. public:  void SetQuery (TC_CPsPredicate &pred=tcPsNullPredicate, TC_CPsSort &sort=tcPsNullSort)  ;
  515. public:  void SetQueryDest (TC_CPsQueryDest qry_dest)  ;
  516. public:  void QueryDest (TC_CPsQueryDest &qry_dest)  ;
  517. public:  void Predicate (TC_CPsPredicate &pred)  ;
  518. public:  void Sort (TC_CPsSort &sort)  ;
  519. public:  TCPsRetCode Parse ()  ;
  520. public:  TCPsHClass HClass () 
  521. {
  522. return m_QueryDest.HClass();
  523. } // end of func
  524. // **********************************************************************
  525.  
  526. public:  BOOL HasPredicate () 
  527. {
  528. return !m_Pred.IsNull();
  529. } // end of func
  530. // **********************************************************************
  531.  
  532. public:  BOOL HasSort () 
  533. {
  534. return !m_Sort.IsNull();
  535. } // end of func
  536. // **********************************************************************
  537.  
  538. public:  BOOL HasMemberJoins ()  ;
  539. public:  BOOL IsDestNonObj () 
  540. {
  541. return m_QueryDest.IsNonObj();
  542. } // end of func
  543. // **********************************************************************
  544.  
  545. public:  int InheritedCount () 
  546. {
  547. return m_Joins.GetInheritCount();
  548. } // end of func
  549. // **********************************************************************
  550.  
  551. public:  void TraceJoins ()  ;
  552.  
  553. }; // end of class TC_CPsQuery
  554.  
  555. // **********************************************************************
  556.  
  557. // **********************************************************************
  558. class TC_PS_EXPORT TC_CPsResSet 
  559. {
  560. friend TC_PS_EXPORT TCPsRetCode tcPsExecute(TC_CPsQuery&, TC_CPsResSet&);
  561. private:  TC_CPsQuery * m_Query ;
  562. private:  BOOL m_Executed ;
  563. public:   TC_CPsResSet ()  ;
  564. public:  TC_CPsObject * Fetch ()  ;
  565. public:  BOOL Next (TC_CPsAtomicResult & result)  ;
  566.  
  567. }; // end of class TC_CPsResSet
  568.  
  569. // **********************************************************************
  570.  
  571. // **********************************************************************
  572.  template <class T>
  573. class TC_TPsCursor 
  574.     : public TC_CPsResSet
  575. {
  576. public:  BOOL Next (T* & obj) 
  577. {
  578. obj= (T *)Fetch();
  579. return obj != 0;
  580. } // end of func
  581. // **********************************************************************
  582.  
  583. public:  BOOL Next (TC_TPsRef<T>& objRef) 
  584. {
  585. T * obj = (T *)Fetch();
  586. if(obj)
  587.     obj->RemoveRef();
  588. TC_CPsRef::Assign(objRef, obj);
  589. return ((T*)objRef) != 0;
  590. } // end of func
  591. // **********************************************************************
  592.  
  593.  
  594. }; // end of class TC_TPsCursor
  595.  
  596. // **********************************************************************
  597. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query, TC_CPsResSet & res_set)  ;
  598. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query, TC_CPsAtomicResult & result)  ;
  599. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query, TC_CPsCollection & cltn)  ;
  600. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  long & result) TC_PS_THROW_FUNC ;
  601. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  unsigned long & result)  ;
  602. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  short & result)  ;
  603. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  unsigned short & result)  ;
  604. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  char & result)  ;
  605. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  unsigned char & result)  ;
  606. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  float & result)  ;
  607. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  double & result)  ;
  608. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  TC_CDate & result)  ;
  609. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  TC_CTime & result)  ;
  610. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  TC_CBCD & result)  ;
  611. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  TC_CString & result) TC_PS_THROW_FUNC ;
  612. TC_PS_EXPORT TCPsRetCode tcPsExecute (TC_CPsQuery & query,  TC_CBinArray & result) TC_PS_THROW_FUNC ;
  613.  
  614. #endif // _INC_QUERY_HPP
  615.