ROOT logo
//*-- AUTHOR : Ilse Koenig
//*-- Modified : 11/09/2000

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
// HDbColumn
//
// Class for a column in an Oracle table
//
/////////////////////////////////////////////////////////////
using namespace std;
#include "hdbcolumn.h"
#include "hdbcolumntype.h"
#include <stdio.h>
#include <iostream> 
#include <iomanip> 

ClassImp(HDbColumn)

HDbColumn::HDbColumn() {
  // Default constructor
  colType=0;
  colId=0;
  colNullable=kTRUE;
}

HDbColumn::HDbColumn(const Char_t* cName) {
  // Constructor creates a column with name cName and default type varchar2(80)
  // By default the column is nullable
  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) {
  // Copy constructor
  SetName(c.GetName());
  colType=0;
  copyColumn(&c);
}  

HDbColumn::~HDbColumn() {
  // Destructor
  if (colType) delete colType;
}

void HDbColumn::setColType(const Char_t* tName, Int_t dlen, Int_t prec, Int_t scale) {
  // Sets the column type
  // Parameters are:  tName = Name of the type, dlen = length in bytes,
  //                  prec = data precision, scale = data 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) {
  // Sets the column type (e.g  varchar3(20) or number(4,2))
  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) {
  // Copies the parameters of a column
  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() {
  // Shows a column
  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;
}
 hdbcolumn.cc:1
 hdbcolumn.cc:2
 hdbcolumn.cc:3
 hdbcolumn.cc:4
 hdbcolumn.cc:5
 hdbcolumn.cc:6
 hdbcolumn.cc:7
 hdbcolumn.cc:8
 hdbcolumn.cc:9
 hdbcolumn.cc:10
 hdbcolumn.cc:11
 hdbcolumn.cc:12
 hdbcolumn.cc:13
 hdbcolumn.cc:14
 hdbcolumn.cc:15
 hdbcolumn.cc:16
 hdbcolumn.cc:17
 hdbcolumn.cc:18
 hdbcolumn.cc:19
 hdbcolumn.cc:20
 hdbcolumn.cc:21
 hdbcolumn.cc:22
 hdbcolumn.cc:23
 hdbcolumn.cc:24
 hdbcolumn.cc:25
 hdbcolumn.cc:26
 hdbcolumn.cc:27
 hdbcolumn.cc:28
 hdbcolumn.cc:29
 hdbcolumn.cc:30
 hdbcolumn.cc:31
 hdbcolumn.cc:32
 hdbcolumn.cc:33
 hdbcolumn.cc:34
 hdbcolumn.cc:35
 hdbcolumn.cc:36
 hdbcolumn.cc:37
 hdbcolumn.cc:38
 hdbcolumn.cc:39
 hdbcolumn.cc:40
 hdbcolumn.cc:41
 hdbcolumn.cc:42
 hdbcolumn.cc:43
 hdbcolumn.cc:44
 hdbcolumn.cc:45
 hdbcolumn.cc:46
 hdbcolumn.cc:47
 hdbcolumn.cc:48
 hdbcolumn.cc:49
 hdbcolumn.cc:50
 hdbcolumn.cc:51
 hdbcolumn.cc:52
 hdbcolumn.cc:53
 hdbcolumn.cc:54
 hdbcolumn.cc:55
 hdbcolumn.cc:56
 hdbcolumn.cc:57
 hdbcolumn.cc:58
 hdbcolumn.cc:59
 hdbcolumn.cc:60
 hdbcolumn.cc:61
 hdbcolumn.cc:62
 hdbcolumn.cc:63
 hdbcolumn.cc:64
 hdbcolumn.cc:65
 hdbcolumn.cc:66
 hdbcolumn.cc:67
 hdbcolumn.cc:68
 hdbcolumn.cc:69
 hdbcolumn.cc:70
 hdbcolumn.cc:71
 hdbcolumn.cc:72
 hdbcolumn.cc:73
 hdbcolumn.cc:74
 hdbcolumn.cc:75
 hdbcolumn.cc:76
 hdbcolumn.cc:77
 hdbcolumn.cc:78
 hdbcolumn.cc:79
 hdbcolumn.cc:80
 hdbcolumn.cc:81
 hdbcolumn.cc:82
 hdbcolumn.cc:83
 hdbcolumn.cc:84
 hdbcolumn.cc:85
 hdbcolumn.cc:86
 hdbcolumn.cc:87
 hdbcolumn.cc:88
 hdbcolumn.cc:89
 hdbcolumn.cc:90
 hdbcolumn.cc:91
 hdbcolumn.cc:92
 hdbcolumn.cc:93
 hdbcolumn.cc:94
 hdbcolumn.cc:95
 hdbcolumn.cc:96
 hdbcolumn.cc:97
 hdbcolumn.cc:98
 hdbcolumn.cc:99
 hdbcolumn.cc:100
 hdbcolumn.cc:101
 hdbcolumn.cc:102
 hdbcolumn.cc:103
 hdbcolumn.cc:104
 hdbcolumn.cc:105
 hdbcolumn.cc:106
 hdbcolumn.cc:107
 hdbcolumn.cc:108
 hdbcolumn.cc:109
 hdbcolumn.cc:110
 hdbcolumn.cc:111
 hdbcolumn.cc:112
 hdbcolumn.cc:113
 hdbcolumn.cc:114
 hdbcolumn.cc:115
 hdbcolumn.cc:116
 hdbcolumn.cc:117
 hdbcolumn.cc:118
 hdbcolumn.cc:119
 hdbcolumn.cc:120
 hdbcolumn.cc:121