home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / SRCBDTO.PAK / INDEXDEF.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  5.6 KB  |  294 lines

  1. //-----------------------------------------------------------------------------
  2. // Visual Database Tools
  3. // Copyright (c) 1996 by Borland International, All Rights Reserved
  4. //
  5. // indexdef.cpp
  6. // TIndexDef and TIndexDefs wrapper classes
  7. //-----------------------------------------------------------------------------
  8.  
  9. #include <vdbt\bdto.h>
  10.  
  11. #pragma hdrstop
  12.  
  13. #include "wrapit.h"
  14. #include "misc.h"
  15.  
  16. //-----------------------------------------------------------------------------
  17.  
  18. void TIndexDef::SetTIndexDef( PIUnknown p )
  19. {
  20.     indexdef = 0;
  21.     if (p)
  22.         p->QueryInterface( IID_ITIndexDef, (void**) &indexdef );
  23. }
  24.  
  25. void TIndexDef::ClearTIndexDef( void )
  26. {
  27.     if (indexdef)
  28.     {
  29.         indexdef->Release();
  30.         indexdef = 0;
  31.     }
  32. }
  33.  
  34. TIndexDef::TIndexDef( PTIndexDefs Owner, const string& Name, const string& Fields, TIndexOptions Options )
  35. {
  36.     indexdef = CreateITIndexDef( Owner ? Owner->GetPITIndexDefs() : 0, Name.c_str(), Fields.c_str(), Options );
  37. }
  38.  
  39. TIndexDef::TIndexDef( void )
  40. {
  41.     indexdef = CreateITIndexDef( 0, "", "", (TIndexOptions) 0 );
  42. }
  43.  
  44. TIndexDef::TIndexDef( PITIndexDef p )
  45. {
  46.     SetTIndexDef( p );
  47. }
  48.  
  49. TIndexDef::TIndexDef( const TIndexDef& p )
  50. {
  51.     SetTIndexDef( p.indexdef );
  52. }
  53.  
  54. TIndexDef::TIndexDef( PTIndexDef p )
  55. {
  56.     SetTIndexDef( p ? p->indexdef : 0 );
  57. }
  58.  
  59. TIndexDef& TIndexDef::operator=( PITIndexDef p )
  60. {
  61.     ClearTIndexDef();
  62.     SetTIndexDef( p );
  63.     return *this;
  64. }
  65.  
  66. TIndexDef& TIndexDef::operator=( const TIndexDef& p )
  67. {
  68.     if (this != &p)
  69.     {
  70.         ClearTIndexDef();
  71.         SetTIndexDef( p.indexdef );
  72.     }
  73.     return *this;
  74. }
  75.  
  76. int TIndexDef::operator==( const TIndexDef& p ) const
  77. {
  78.     if (this == &p)
  79.         return true;
  80.     if (indexdef == p.indexdef)
  81.         return true;
  82.     return false;
  83. }
  84.  
  85. int TIndexDef::operator!=( const TIndexDef& p ) const
  86. {
  87.     return ! operator==(p);
  88. }
  89.  
  90. TIndexDef::~TIndexDef()
  91. {
  92.     ClearTIndexDef();
  93. }
  94.  
  95. void TIndexDef::SetPIT( PIUnknown p )
  96. {
  97.     ClearTIndexDef();
  98.     SetTIndexDef( p );
  99. }
  100.  
  101. void TIndexDef::Detach( void )
  102. {
  103.     if (indexdef)
  104.         indexdef->Detach();
  105. }
  106.  
  107. DEFINE_BDTO_OBJECTPROP_RO( TIndexDef, string, Expression );
  108. DEFINE_BDTO_OBJECTPROP_RO( TIndexDef, string, Fields );
  109. DEFINE_BDTO_OBJECTPROP_RO( TIndexDef, string, Name );
  110. DEFINE_BDTO_PROP_RO( TIndexDef, TIndexOptions, Options );
  111.  
  112. void TIndexDef::GetExpression( string& s )
  113. {
  114.     if (indexdef)
  115.         AnyString( indexdef->get_Expression() ).GetString( s );
  116. }
  117.  
  118. void TIndexDef::GetFields( string& s )
  119. {
  120.     if (indexdef)
  121.         AnyString( indexdef->get_Fields() ).GetString( s );
  122. }
  123.  
  124. void TIndexDef::GetName( string& s )
  125. {
  126.     if (indexdef)
  127.         AnyString( indexdef->get_Name() ).GetString( s );
  128. }
  129.  
  130. void TIndexDef::GetOptions( TIndexOptions& o )
  131. {
  132.     if (indexdef)
  133.         o = indexdef->get_Options();
  134. }
  135.  
  136. //-----------------------------------------------------------------------------
  137.  
  138. void TIndexDefs::SetTIndexDefs( PIUnknown p )
  139. {
  140.     indexdefs = 0;
  141.     if (p)
  142.         p->QueryInterface( IID_ITIndexDefs, (void**) &indexdefs );
  143. }
  144.  
  145. void TIndexDefs::ClearTIndexDefs( void )
  146. {
  147.     if (indexdefs)
  148.     {
  149.         indexdefs->Release();
  150.         indexdefs = 0;
  151.     }
  152. }
  153.  
  154. TIndexDefs::TIndexDefs( TTable& Table )
  155. {
  156.     indexdefs = CreateITIndexDefs( Table.GetPITTable() );
  157. }
  158.  
  159. TIndexDefs::TIndexDefs( void )
  160. {
  161.     indexdefs = CreateITIndexDefs( 0 );
  162. }
  163.  
  164. TIndexDefs::TIndexDefs( PITIndexDefs p )
  165. {
  166.     SetTIndexDefs( p );
  167. }
  168.  
  169. TIndexDefs::TIndexDefs( const TIndexDefs& p )
  170. {
  171.     SetTIndexDefs( p.indexdefs );
  172. }
  173.  
  174. TIndexDefs::TIndexDefs( PTIndexDefs p )
  175. {
  176.     SetTIndexDefs( p ? p->indexdefs : 0 );
  177. }
  178.  
  179. TIndexDefs& TIndexDefs::operator=( PITIndexDefs p )
  180. {
  181.     ClearTIndexDefs();
  182.     SetTIndexDefs( p );
  183.     return *this;
  184. }
  185.  
  186. TIndexDefs& TIndexDefs::operator=( const TIndexDefs& p )
  187. {
  188.     if (this != &p)
  189.     {
  190.         ClearTIndexDefs();
  191.         SetTIndexDefs( p.indexdefs );
  192.     }
  193.     return *this;
  194. }
  195.  
  196. int TIndexDefs::operator==( const TIndexDefs& p ) const
  197. {
  198.     if (this == &p)
  199.         return true;
  200.     if (indexdefs == p.indexdefs)
  201.         return true;
  202.     return false;
  203. }
  204.  
  205. int TIndexDefs::operator!=( const TIndexDefs& p ) const
  206. {
  207.     return ! operator==(p);
  208. }
  209.  
  210. TIndexDefs::~TIndexDefs()
  211. {
  212.     ClearTIndexDefs();
  213. }
  214.  
  215. void TIndexDefs::SetPIT( PIUnknown p )
  216. {
  217.     ClearTIndexDefs();
  218.     SetTIndexDefs( p );
  219. }
  220.  
  221. void TIndexDefs::Detach( void )
  222. {
  223.     if (indexdefs)
  224.         indexdefs->Detach();
  225. }
  226.  
  227. void TIndexDefs::Add( const string& name, const string& fields, TIndexOptions options )
  228. {
  229.     if (indexdefs)
  230.         indexdefs->Add( AnyString(name).GetPITAnyString(), AnyString(fields).GetPITAnyString(), options );
  231. }
  232.  
  233. void TIndexDefs::Assign( TIndexDefs& i )
  234. {
  235.     if (indexdefs)
  236.         indexdefs->Assign( i.indexdefs );
  237. }
  238.  
  239. void TIndexDefs::Clear( void )
  240. {
  241.     if (indexdefs)
  242.         indexdefs->Clear();
  243. }
  244.  
  245. DEFINE_BDTO_OBJECTMETHOD1( TIndexDefs, TIndexDef, PITIndexDef, FindIndexForFields, string& );
  246.  
  247. void TIndexDefs::CallFindIndexForFields( string& fields, TIndexDef& i )
  248. {
  249.     if (indexdefs)
  250.     {
  251.         PITIndexDef pit = indexdefs->FindIndexForFields( AnyString(fields).GetPITAnyString() );
  252.         if (pit)
  253.         {
  254.             i.SetPIT( pit );
  255.             pit->Release();
  256.         }
  257.     }
  258. }
  259.  
  260. int TIndexDefs::IndexOf( const string& n )
  261. {
  262.     if (indexdefs)
  263.         return indexdefs->IndexOf( AnyString(n).GetPITAnyString() );
  264.     return 0;
  265. }
  266.  
  267. void TIndexDefs::Update( void )
  268. {
  269.     if (indexdefs)
  270.         indexdefs->Update();
  271. }
  272.  
  273. DEFINE_BDTO_PROP_RO( TIndexDefs, int, Count );
  274. DEFINE_BDTO_ARRAYOBJECTPROP_RO_FAST( TIndexDefs, TIndexDef, PITIndexDef, Items, int );
  275.  
  276. void TIndexDefs::GetCount( int& c )
  277. {
  278.     if (indexdefs)
  279.         c = indexdefs->get_Count();
  280. }
  281.  
  282. void TIndexDefs::GetItems( int index, TIndexDef& i )
  283. {
  284.     if (indexdefs)
  285.     {
  286.         PITIndexDef pit = indexdefs->get_Items( index );
  287.         if (pit)
  288.         {
  289.             i.SetPIT( pit );
  290.             pit->Release();
  291.         }
  292.     }
  293. }
  294.