/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 #ifndef DBITABLEMETADATA_H 00002 #define DBITABLEMETADATA_H 00003 00004 00008 00029 #include <string> 00030 using std::string; 00031 #include <vector> 00032 00033 #include "DatabaseInterface/DbiFieldType.h" 00034 00035 class DbiTableMetaData 00036 { 00037 00038 friend class DbiDBProxy; //See ctor program notes. 00039 00040 public: 00041 00042 // Constructors and destructors. 00043 DbiTableMetaData(const string& tableName = "Unknown"); 00044 virtual ~DbiTableMetaData(); 00045 00046 // State testing member functions 00047 00049 string Sql(Dbi::DbTypes dbType = Dbi::kMySQL) const; 00050 00051 string TableName() const { return fTableName; } 00052 Bool_t HasRowCounter() const {return this->NumCols() >=2 && this->ColName(2) == "ROW_COUNTER"; } 00053 UInt_t NumCols() const { return fNumCols;} 00054 00055 // Column attribute getters (columns number starts from 1 NOT zero) 00056 00057 const DbiFieldType& ColFieldType(Int_t colNum) const { return GetAttributes(colNum).Type;} 00058 UInt_t ColFieldConcept(Int_t colNum) const { return GetAttributes(colNum).Concept;} 00059 Bool_t ColIsNullable(Int_t colNum) const { return GetAttributes(colNum).IsNullable;} 00060 Bool_t ColMustDelimit(Int_t colNum) const { return GetAttributes(colNum).MustDelimit;} 00061 string ColName(Int_t colNum) const { return GetAttributes(colNum).Name;} 00062 00063 // State changing member functions 00064 00066 void SetFromSql(const string& sql); 00067 00068 protected: 00069 00070 void Clear(); 00071 00072 // Column attribute setters (columns number starts from 1 NOT zero) 00073 00074 void SetColIsNullable(Int_t colNum, Bool_t isNullable = true) { SetAttributes(colNum).IsNullable = isNullable;} 00075 void SetColName(const string& name, Int_t colNum) { SetAttributes(colNum).Name = name;} 00076 void SetColFieldType(const DbiFieldType& type, Int_t colNum); 00077 00078 private: 00079 00081 static string GetToken(const char*& strPtr); 00082 00084 enum { MAXCOL = 1000}; 00085 00086 void ExpandTo(UInt_t colNum); 00087 00089 struct ColumnAttributes { 00090 ColumnAttributes() { this->SetDefault(); } 00091 void SetDefault() { 00092 Name = "Unknown"; 00093 Concept = Dbi::kUnknown; 00094 MustDelimit = false; 00095 IsNullable = false; 00096 Type = Dbi::kUnknown; 00097 } 00098 string Name; 00099 Int_t Concept; 00100 Bool_t MustDelimit; 00101 Bool_t IsNullable; 00102 DbiFieldType Type; 00103 }; 00104 00106 static ColumnAttributes fgDummy; 00107 00108 00110 const ColumnAttributes& GetAttributes(Int_t colNum) const; 00111 00113 ColumnAttributes& SetAttributes(Int_t colNum); 00114 00115 // Data members 00116 00118 std::vector<ColumnAttributes> fColAttr; 00119 00121 UInt_t fNumCols; 00122 00124 string fTableName; 00125 00126 // Removed: ClassDef(DbiTableMetaData,0) //TableMetaData for database table 00127 00128 }; 00129 00130 00131 #endif // DBITABLEMETADATA_H