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;
00039
00040 public:
00041
00042
00043 DbiTableMetaData(const string& tableName = "Unknown");
00044 virtual ~DbiTableMetaData();
00045
00046
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
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
00064
00066 void SetFromSql(const string& sql);
00067
00068 protected:
00069
00070 void Clear();
00071
00072
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
00116
00118 std::vector<ColumnAttributes> fColAttr;
00119
00121 UInt_t fNumCols;
00122
00124 string fTableName;
00125
00126 ClassDef(DbiTableMetaData,0)
00127
00128 };
00129
00130
00131 #endif // DBITABLEMETADATA_H