#ifndef HDBCOLUMNTYPE
#define HDBCOLUMNTYPE
#include "TNamed.h"
class HDbColumnType : public TNamed {
friend class HDbColumn;
protected:
  Int_t   varLength;        
  Int_t   dataPrecision;    
  Int_t   dataScale;        
public:
  HDbColumnType() {}
  HDbColumnType(const Char_t*, Int_t l=0, Int_t p=0, Int_t s=0 );
  virtual ~HDbColumnType() {}
  virtual TString getTypeString() { return TString(GetName()); }
  virtual TString getSelectString(const Char_t*, const Char_t*);
  virtual TString getNvlSelectString(const Char_t*, const Char_t*, const Char_t*);
  ClassDef(HDbColumnType,0) 
};
class HDbColCharType : public HDbColumnType {
friend class HDbColumn;
public:
  HDbColCharType(Int_t l=1);
  ~HDbColCharType() {}
  TString getTypeString();
  TString getSelectString(const Char_t*, const Char_t*);
  TString getNvlSelectString(const Char_t*, const Char_t*, const Char_t*);
  ClassDef(HDbColCharType,0) 
};
class HDbColVcType : public HDbColumnType {
friend class HDbColumn;
public:
  HDbColVcType(Int_t l=80);
  ~HDbColVcType() {}
  TString getTypeString();
  TString getSelectString(const Char_t*, const Char_t*);
  TString getNvlSelectString(const Char_t*, const Char_t*, const Char_t*);
  ClassDef(HDbColVcType,0) 
};
class HDbColNumType : public HDbColumnType {
friend class HDbColumn;
public:
  HDbColNumType(Int_t p=40, Int_t s=0);
  ~HDbColNumType() {}
  TString getTypeString();
  TString getSelectString(const Char_t*, const Char_t*);
  TString getNvlSelectString(const Char_t*, const Char_t*, const Char_t*);
  ClassDef(HDbColNumType,0) 
};
class HDbColDateType : public HDbColumnType {
friend class HDbColumn;
public:
  HDbColDateType(Int_t l=75);
  ~HDbColDateType() {}
  TString getSelectString(const Char_t*, const Char_t*);
  TString getNvlSelectString(const Char_t*, const Char_t*, const Char_t*);
  ClassDef(HDbColDateType,0) 
};
class HDbColLongType : public HDbColumnType {
friend class HDbColumn;
public:
  HDbColLongType(Int_t l=32767);
  ~HDbColLongType() {}
  ClassDef(HDbColLongType,0) 
};
class HDbColRowidType : public HDbColumnType {
friend class HDbColumn;
public:
  HDbColRowidType() : HDbColumnType("ROWID",18) {}
  ~HDbColRowidType() {}
  TString getSelectString(const Char_t*, const Char_t*);
  TString getNvlSelectString(const Char_t*, const Char_t*, const Char_t*);
  ClassDef(HDbColRowidType,0) 
};
class HDbColRawType : public HDbColumnType {
friend class HDbColumn;
public:
  HDbColRawType(Int_t l=255);
  ~HDbColRawType() {}
  TString getTypeString();
  ClassDef(HDbColRawType,0) 
};
#endif /* !HDBCOLUMNTYPE_H */