using namespace std;
#include "hdbcolumn.h"
#include "hdbcolumntype.h"
#include <stdio.h>
#include <iostream>
#include <iomanip>
ClassImp(HDbColumn)
HDbColumn::HDbColumn() {
colType=0;
colId=0;
colNullable=kTRUE;
}
HDbColumn::HDbColumn(const Char_t* cName) {
TString c(cName);
c=c.Strip(c.kBoth);
c.ToUpper();
SetName(c.Data());
colType=new HDbColVcType(80);
colId=0;
colNullable=kTRUE;
}
HDbColumn::HDbColumn(HDbColumn& c) {
SetName(c.GetName());
colType=0;
copyColumn(&c);
}
HDbColumn::~HDbColumn() {
if (colType) delete colType;
}
void HDbColumn::setColType(const Char_t* tName, Int_t dlen, Int_t prec, Int_t scale) {
TString t(tName);
t=t.Strip(t.kBoth);
if (t.Length()==0) return;
if (colType) {
delete colType;
colType=0;
}
t.ToUpper();
Char_t ta[7][10]={"VARCHAR","CHAR","NUMBER","DATE","LONG","ROWID","RAW"};
Int_t i=0;
for(;i<7;i++) {
if (t.Contains(ta[i])) break;
}
switch (i) {
case 0: colType=new HDbColVcType(dlen); break;
case 1: colType=new HDbColCharType(dlen); break;
case 2: if (prec==0) prec=dlen;
colType=new HDbColNumType(prec,scale); break;
case 3: colType=new HDbColDateType(dlen); break;
case 4: colType=new HDbColLongType(dlen); break;
case 5: colType=new HDbColRowidType(); break;
case 6: colType=new HDbColRawType(dlen); break;
default: colType=new HDbColumnType(t,dlen); break;
}
}
void HDbColumn::setColType(const Char_t* c) {
TString cType(c);
Int_t n1=cType.First("(");
if (n1<0) return setColType(cType.Data(),0);
TString ctn=cType(0,(n1));
Int_t n2=cType.First(")");
TString ss=cType((n1+1),(n2-n1-1));
n1=ss.First(",");
if (n1<0) {
sscanf(ss.Data(),"%i",&n2);
return setColType(ctn,n2);
}
TString ss1=ss(0,n1);
ss=ss((n1+1),(ss.Length()-n1-1));
sscanf(ss1.Data(),"%i",&n1);
sscanf(ss.Data(),"%i",&n2);
return setColType(ctn,0,n1,n2);
}
void HDbColumn::copyColumn(HDbColumn* p) {
if (!p) return;
colId=p->getColumnId();
colNullable=p->isNullable();
HDbColumnType* t=p->getColType();
setColType(t->GetName(),t->varLength,t->dataPrecision,t->dataScale);
}
void HDbColumn::show() {
Char_t c='Y';
if (colNullable) c='N';
cout<<setiosflags(ios::left)<<setw(30)<<GetName()<<c<<" ";
if (colType) cout<<setiosflags(ios::left)
<<setw(12)<<colType->GetName()
<<setw(6) <<colType->varLength
<<setw(12)<<colType->dataPrecision
<<setw(12)<<colType->dataScale<<endl;
else cout<<endl;
}
Last change: Sat May 22 12:54:27 2010
Last generated: 2010-05-22 12:54
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.