ROOT logo

/* Result Sets Interface */
#ifndef SQL_CRSR
#  define SQL_CRSR
  struct sql_cursor
  {
    unsigned int curocn;
    void *ptr1;
    void *ptr2;
    unsigned int magic;
  };
  typedef struct sql_cursor sql_cursor;
  typedef struct sql_cursor SQL_CURSOR;
#endif /* SQL_CRSR */

/* Thread Safety */
typedef void * sql_context;
typedef void * SQL_CONTEXT;

/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn; 
  unsigned short tvnvsnl; 
  unsigned char *tvnnm;
  unsigned short tvnnml; 
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;

struct sqladts
{
  unsigned int adtvsn; 
  unsigned short adtmode; 
  unsigned short adtnum;  
  sqltvn adttvn[1];       
};
typedef struct sqladts sqladts;

static struct sqladts sqladt = {
  1,1,0,
};

/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn; 
  unsigned short tdsnum; 
  unsigned char *tdsval[1]; 
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,
  0,
};

/* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[12];
};
static const struct sqlcxp sqlfpn =
{
    11,
    "hdbtable.pc"
};


static unsigned int sqlctx = 144643;


static struct sqlexd {
   unsigned long  sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
   unsigned char  **sqphsv;
   unsigned long  *sqphsl;
            int   *sqphss;
            short **sqpind;
            int   *sqpins;
   unsigned long  *sqparm;
   unsigned long  **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
            int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
   unsigned int   sqlpfmem;
   unsigned char  *sqhstv[7];
   unsigned long  sqhstl[7];
            int   sqhsts[7];
            short *sqindv[7];
            int   sqinds[7];
   unsigned long  sqharm[7];
   unsigned long  *sqharc[7];
   unsigned short  sqadto[7];
   unsigned short  sqtdso[7];
} sqlstm = {13,7};

// Prototypes
extern "C" {
  void sqlcxt (void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlcx2t(void **, unsigned int *,
               struct sqlexd *, const struct sqlcxp *);
  void sqlbuft(void **, char *);
  void sqlgs2t(void **, char *);
  void sqlorat(void **, unsigned int *, void *);
}

// Forms Interface
static const int IAPSUCC = 0;
static const int IAPFAIL = 1403;
static const int IAPFTL  = 535;
extern "C" { void sqliem(unsigned char *, signed int *); }

typedef struct { unsigned short len; unsigned char arr[1]; } VARCHAR;
typedef struct { unsigned short len; unsigned char arr[1]; } varchar;

/* cud (compilation unit data) array */
static const short sqlcud0[] =
{13,4130,1,0,0,
5,0,0,1,0,0,17,225,0,0,1,1,0,1,0,1,97,0,0,
24,0,0,1,0,0,45,227,0,0,0,0,0,1,0,
39,0,0,1,0,0,13,228,0,0,7,0,0,1,0,2,9,0,0,2,3,0,0,2,3,0,0,2,9,0,0,2,3,0,0,2,3,
0,0,2,9,0,0,
82,0,0,1,0,0,15,248,0,0,0,0,0,1,0,
97,0,0,2,0,0,17,377,0,0,1,1,0,1,0,1,97,0,0,
116,0,0,2,0,0,45,379,0,0,0,0,0,1,0,
131,0,0,2,0,0,13,382,0,0,1,0,0,1,0,2,9,0,0,
150,0,0,2,0,0,15,390,0,0,0,0,0,1,0,
165,0,0,2,0,0,15,394,0,0,0,0,0,1,0,
};


//*-- AUTHOR : Ilse Koenig
//*-- Modified : 15/09/2000

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
// HDbColumnTable
//
// Class for an Oracle table
//
/////////////////////////////////////////////////////////////
using namespace std;
#include "hdbtable.h"
#include "hdbconn.h"
#include "hdbfileutil.h"
#include "hdbcolumn.h"
#include "hdbcolumntype.h"
#include <stdio.h>
#include <iostream>
#include <iomanip>

#define SQLCA_STORAGE_CLASS extern
#define ORACA_STORAGE_CLASS extern

// Oracle communication area
#include <oraca.h>
// SQL Communications Area
#include <sqlca.h>

ClassImp(HDbTable)

#define MAXCOLNUM 254
#define MAXROWS   200

HDbTable::HDbTable() {
  // Default constructor
  dbConn=0;
  dbUtil=0;
  tabColumns=new TList;
  nColumns=0;
  tempTable=kFALSE;
  existing=kTRUE;
}

HDbTable::HDbTable(HDbConn* p, HDbFileUtil* u, const Char_t* tName) {
  // Constructor
  // Parameters: pointer to the Oracle connection class, the Oracle utility class
  // and the name of the table
  dbConn=p;
  dbUtil=u;
  setNames(tName);
  tabColumns=new TList;
  nColumns=0;
  tempTable=kFALSE;
  existing=kTRUE;
}

HDbTable::HDbTable(HDbConn* p, HDbFileUtil* u, HDbTable& t) {
  // Copy constructor
  // Parameters: pointer to the Oracle connection class, the Oracle utility class
  // and reference to an other table
  dbConn=p;
  dbUtil=u;
  setNames(t.GetName());
  tabColumns=new TList;
  nColumns=t.getNColumns();
  for(Int_t i=0;i<nColumns;i++) {
    HDbColumn* tc=t.getColumn(i);
    HDbColumn* c=new HDbColumn(*tc);
    tabColumns->Add(c);
  }  
  tempTable=t.isTempTable();
  existing=t.isExisting();
}

HDbTable::~HDbTable() {
  // Destructor
  if (tabColumns) {
    tabColumns->Delete();
    delete tabColumns;
  }  
}

HDbColumn* HDbTable::getColumn(Int_t n) {
  // Returns the column number n (starting with index 0)
  return (HDbColumn*)tabColumns->At(n);
}

HDbColumn* HDbTable::getColumn(const Char_t* colName) {
  // Returns the column with the specified name
  if (colName) {
    TString c(colName);
    c=c.Strip(c.kBoth);
    if (c.Length()>0)
      c.ToUpper();
      return (HDbColumn*)tabColumns->FindObject(c.Data());
  }
  return 0;
}

HDbColumn* HDbTable::addColumn(const Char_t* colName, const Char_t* columnType) {
  // Adds a column to the list. The type of the column is optional and needed
  // only for the creation of a non-existing table with non default types.
  HDbColumn* p=0;
  TString c(colName);
  c=c.Strip(c.kBoth);
  c.ToUpper();
  if (tabColumns->FindObject(c.Data()))
    cout<<"Column "<<c<<" already exists!"<<endl;
  else {
    p=new HDbColumn(c.Data());
    if(columnType) p->setColType(columnType);
    tabColumns->Add(p);
    nColumns++;
  }
  return p;
}

void HDbTable::addColumn(HDbColumn* p) {
  // Adds a copy of the column p to the list
  if (!p) return;
  if (!tabColumns->FindObject(p->GetName())) {
    HDbColumn* c=new HDbColumn(*p);             // copies the column
    tabColumns->Add(c);
    nColumns++;
  }
  else cout<<"Column "<<p->GetName()<<" already exists!"<<endl;
}


void HDbTable::removeColumn(const Char_t* colName) {
  // Removes the column with this name and deletes it
  HDbColumn* p=getColumn(colName);
  if (p) {
    tabColumns->Remove(p);
    delete p;
    nColumns--;
  }
}

void HDbTable::clearColumns() {
  // Clears the list of columns
  tabColumns->Delete();
  nColumns=0;
}

void HDbTable::setColumns(const Char_t* colNames, const Char_t* colTypes) {
  // Sets a list of columns and types(optional). The lists must be comma separated.
  TString sNames, sTypes;
  Int_t nlen=0, tlen=0; 
  if (colNames) {
    sNames=colNames;
    sNames.Strip(sNames.kBoth);
    sNames.ToUpper();
    nlen=sNames.Length();
  }
  if (colTypes) {
    sTypes=colTypes;
    sTypes.Strip(sTypes.kBoth);
    sTypes.ToUpper();
    tlen=sTypes.Length();
  }
  if (nlen==0) {
    Error("HDbTable::setColumns","List of column is empty ");
    return;
  }
  TString ssn, sst;
  while (nlen>0) {
    nlen=dbUtil->getTokString(sNames,ssn,",");
    if (tlen>0) {
      tlen=dbUtil->getTokString(sTypes,sst,",");
      if (sst.First("(")>0 && sst.First(")")<0) {
        TString s;
        tlen=dbUtil->getTokString(sTypes,s,",");
        sst=sst + "," + s;
      }
      addColumn(ssn.Data(),sst.Data());
    } else addColumn(ssn.Data(),colDefaultType);
  }
}

void HDbTable::setCondition(const Char_t* s) {
  // Sets the condition for a SELECT statement ("WHERE" is added internally!)
  if (s) {
    cond=s;
    cond=cond.Strip(cond.kBoth);
    cond.ToUpper();
  } else cond="";
}

void HDbTable::setOrderBy(const Char_t* s) {
  // Sets the ORDER BY clause for a SELECT statement
  // Multiple columns must by separated by commas.
  // ("ORDER BY" is added internally!)
  if (s) {
    orderClause=s;
    orderClause=orderClause.Strip(orderClause.kBoth);
    orderClause.ToUpper();
  } else orderClause="";
}

     
Bool_t HDbTable::describeTable() {
  // Gets the table definition (columns, types, nullable) from Oracle
  if (!dbConn->isOpen()) return kFALSE;
  tempTable=kFALSE;
  existing=kTRUE;
  clearColumns();
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* dynstmt;
    /* varchar colName[MAXCOLNUM][30]; */ 
struct { unsigned short len; unsigned char arr[30]; } colName[254];

    int     colId[MAXCOLNUM];
    int     dLen[MAXCOLNUM];
    /* varchar colType[MAXCOLNUM][30]; */ 
struct { unsigned short len; unsigned char arr[30]; } colType[254];

    int     dPrec[MAXCOLNUM];
    int     dScale[MAXCOLNUM];
    /* varchar nn[MAXCOLNUM][1]; */ 
struct { unsigned short len; unsigned char arr[2]; } nn[254];

  /* EXEC SQL END DECLARE SECTION; */ 

  /* EXEC SQL WHENEVER SQLERROR GOTO  errorFound; */ 

  /* EXEC SQL WHENEVER NOT FOUND CONTINUE; */ 

  TString s(("select column_name,column_id,data_length,data_type,"
                   "nvl(data_precision,0),nvl(data_scale,0), nullable "
                   "from all_tab_columns where table_name='")); 
  s=s + tabName + "' and owner='" + tabOwner +"' order by column_id";
  dynstmt=(Char_t*)s.Data();
  /* EXEC SQL PREPARE S FROM :dynstmt; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 1;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )5;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)dynstmt;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorFound;
}


  /* EXEC SQL DECLARE C CURSOR FOR S; */ 

  /* EXEC SQL OPEN C; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 1;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )24;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.sqlpfmem = (unsigned int  )0;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqcmod = (unsigned int )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorFound;
}


  /* EXEC SQL FETCH C INTO :colName, :colId, :dLen, :colType, : dPrec, :dScale, :nn; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 7;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )254;
  sqlstm.offset = (unsigned int  )39;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.sqlpfmem = (unsigned int  )0;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqfoff = (         int )0;
  sqlstm.sqfmod = (unsigned int )2;
  sqlstm.sqhstv[0] = (unsigned char  *)colName;
  sqlstm.sqhstl[0] = (unsigned long )32;
  sqlstm.sqhsts[0] = (         int  )32;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqharc[0] = (unsigned long  *)0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqhstv[1] = (unsigned char  *)colId;
  sqlstm.sqhstl[1] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[1] = (         int  )sizeof(int);
  sqlstm.sqindv[1] = (         short *)0;
  sqlstm.sqinds[1] = (         int  )0;
  sqlstm.sqharm[1] = (unsigned long )0;
  sqlstm.sqharc[1] = (unsigned long  *)0;
  sqlstm.sqadto[1] = (unsigned short )0;
  sqlstm.sqtdso[1] = (unsigned short )0;
  sqlstm.sqhstv[2] = (unsigned char  *)dLen;
  sqlstm.sqhstl[2] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[2] = (         int  )sizeof(int);
  sqlstm.sqindv[2] = (         short *)0;
  sqlstm.sqinds[2] = (         int  )0;
  sqlstm.sqharm[2] = (unsigned long )0;
  sqlstm.sqharc[2] = (unsigned long  *)0;
  sqlstm.sqadto[2] = (unsigned short )0;
  sqlstm.sqtdso[2] = (unsigned short )0;
  sqlstm.sqhstv[3] = (unsigned char  *)colType;
  sqlstm.sqhstl[3] = (unsigned long )32;
  sqlstm.sqhsts[3] = (         int  )32;
  sqlstm.sqindv[3] = (         short *)0;
  sqlstm.sqinds[3] = (         int  )0;
  sqlstm.sqharm[3] = (unsigned long )0;
  sqlstm.sqharc[3] = (unsigned long  *)0;
  sqlstm.sqadto[3] = (unsigned short )0;
  sqlstm.sqtdso[3] = (unsigned short )0;
  sqlstm.sqhstv[4] = (unsigned char  *)dPrec;
  sqlstm.sqhstl[4] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[4] = (         int  )sizeof(int);
  sqlstm.sqindv[4] = (         short *)0;
  sqlstm.sqinds[4] = (         int  )0;
  sqlstm.sqharm[4] = (unsigned long )0;
  sqlstm.sqharc[4] = (unsigned long  *)0;
  sqlstm.sqadto[4] = (unsigned short )0;
  sqlstm.sqtdso[4] = (unsigned short )0;
  sqlstm.sqhstv[5] = (unsigned char  *)dScale;
  sqlstm.sqhstl[5] = (unsigned long )sizeof(int);
  sqlstm.sqhsts[5] = (         int  )sizeof(int);
  sqlstm.sqindv[5] = (         short *)0;
  sqlstm.sqinds[5] = (         int  )0;
  sqlstm.sqharm[5] = (unsigned long )0;
  sqlstm.sqharc[5] = (unsigned long  *)0;
  sqlstm.sqadto[5] = (unsigned short )0;
  sqlstm.sqtdso[5] = (unsigned short )0;
  sqlstm.sqhstv[6] = (unsigned char  *)nn;
  sqlstm.sqhstl[6] = (unsigned long )3;
  sqlstm.sqhsts[6] = (         int  )4;
  sqlstm.sqindv[6] = (         short *)0;
  sqlstm.sqinds[6] = (         int  )0;
  sqlstm.sqharm[6] = (unsigned long )0;
  sqlstm.sqharc[6] = (unsigned long  *)0;
  sqlstm.sqadto[6] = (unsigned short )0;
  sqlstm.sqtdso[6] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorFound;
}


  nColumns=sqlca.sqlerrd[2];
  if (nColumns<=0) {
    cout<<"Table "<<GetName()<<" does not exist!"<<endl;
    tempTable=kTRUE;
    existing=kFALSE;
    return kFALSE;
  }
  for(Int_t i=0;i<nColumns;i++) {
    colName[i].arr[colName[i].len]='\0';
    colType[i].arr[colType[i].len]='\0';
    HDbColumn* p=new HDbColumn((const Char_t*)colName[i].arr);
    p->setColumnId(colId[i]);
    p->setColType((const Char_t*)colType[i].arr,dLen[i],dPrec[i],dScale[i]);
    if (nn[i].arr[0]=='N') p->setNullable(kFALSE);
    tabColumns->Add(p);
  }
  return kTRUE;
errorFound:
  dbUtil->showSqlError("HDbTable::describeTable");
  /* EXEC SQL CLOSE C; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 7;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )82;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorFound;
}


  return kFALSE;
}

Bool_t HDbTable::createTable() {
  // Creates the table in Oracle (created only in the account of the connected user)
  if (!dbConn->isOpen() || dbConn->isReadonly()) return kFALSE;
  if (nColumns==0) {
    Error("HDbTable::createTable()","No columns defined");
    return kFALSE;
  }
  if (tabOwner.CompareTo(dbConn->getUserName())!=0) {
    Error("HDbTable::createTable()","Table cannot be created in an other user account");
    return kFALSE;
  }
  TString str="create table ";
  str=str + GetName() + " (\n  ";
  TIter next(tabColumns);
  HDbColumn* p;
  Int_t n=0;
  while ((p=(HDbColumn*)next())) {
    str=str + p->GetName() + " " + p->getColType()->getTypeString();
    if (!p->isNullable()) str=str + " " + "NOT NULL";
    if (++n<nColumns) str=str + ",\n  ";
  }
  str=str + " )";
  cout<<"-----------------------------------------"<<endl;
  cout<<"-------------  Create table  ------------"<<endl;
  cout<<"-----------------------------------------"<<endl;
  cout<<str<<endl;
  if (dbUtil->confirm("creation")==kFALSE) return kFALSE;
  Bool_t rc=dbUtil->executeDirect(str);
  if (rc) {
    cout<<"Temporary table "<<GetName()<<" created."<<endl;
    tempTable=kTRUE;
    existing=kTRUE; 
  }
  return rc;
}

Bool_t HDbTable::dropTable() {
  // Drops the table (drops the table only if created inside the current Oracle session)
  if (!dbConn->isOpen() || dbConn->isReadonly()) return kFALSE;
  if (!tempTable) {
    Error("HDbTable::dropTable","\nCannot drop permanent table %s",
          GetName());
    return kFALSE;
  }
  if (!existing) {
    Error("HDbTable::dropTable","Table does not exist");
    return kFALSE;
  }
  if (tabOwner.CompareTo(dbConn->getUserName())!=0) {
    Error("HDbTable::dropTable","\nA table in an other user account cannot be dropped");
    return kFALSE;
  }
  TString s("drop table ");
  s=s + GetName();  TString      tabOwner;       // Owner of the table

  cout<<"-----------------------------------------"<<endl;
  cout<<"-------------  Drop table  --------------"<<endl;
  cout<<"-----------------------------------------"<<endl;
  cout<<s<<endl;
  if (dbUtil->confirm("drop")==kFALSE) return kFALSE;
  Bool_t rc=dbUtil->executeDirect(s);
  if (rc) cout<<"Temporary table "<<GetName()<<" dropped."<<endl;
  return rc;
}

void HDbTable::show() {
  // Shows the table definition 
  TIter next(tabColumns);
  HDbColumn* p;
  cout<<"---------------------------------------------------------------------"<<endl;
  cout<<"            Table: "<<GetName();
  if (tempTable) {
    if (existing) cout<<"   (Existing temporary table)"<<endl;
    else cout<<"   (Non-existing temporary table)"<<endl;
  } 
  else cout<<"  (Permanent table)"<<endl;
  cout<<setiosflags(ios::left)<<setw(30)<<"ColumnName"
                      <<setw(4) <<"NN"
                      <<setw(12)<<"ColumnType"
                      <<setw(6) <<"Size"
                      <<setw(12)<<"Precision"
                      <<setw(12)<<"Scale"<<endl;
  cout<<"---------------------------------------------------------------------"<<endl;
  while ((p=(HDbColumn*)next())) {
    p->show();
  }
}

Int_t HDbTable::writeTable(ostream& pout, const Char_t* colDelim,
                           const Char_t* textDelim, const Char_t* nullString) {
  // Writes the content of the table to a stream.
  // Fetches the table in batches of 200 rows.
  if (!dbConn->isOpen()) {
    cout<<"Connection closed before end of reading!"<<endl;
    return -1;
  }
  TString stm("select ");
  HDbColumn* p;
  TString c;
  for(Int_t i=0;i<nColumns;i++) {
    p=(HDbColumn*)tabColumns->At(i);
    if (p->isNullable())
      c=p->getColType()->getNvlSelectString(p->GetName(),textDelim,nullString);
    else c=p->getColType()->getSelectString(p->GetName(),textDelim);
    if (c.Length()==0) return -1;
    stm=stm + c;
    if (i<(nColumns-1)) stm=stm + "||'" + colDelim + "'||";
  }
  stm=stm + "from " + GetName();
  if (cond.Length()>0) {
    stm=stm + " where " + cond;
    pout<<"// Condition:  "<<cond<<endl;
  }
  if (orderClause.Length()>0) {
    stm=stm + " order by " + orderClause;
    pout<<"// Order by:  "<<orderClause<<endl;
  }
  //cout<<stm<<endl;
  /* EXEC SQL BEGIN DECLARE SECTION; */ 

    char* dynstmt;
    /* varchar sResult[MAXROWS][4000]; */ 
struct { unsigned short len; unsigned char arr[4002]; } sResult[200];

  /* EXEC SQL END DECLARE SECTION; */ 

  dynstmt=(Char_t*)stm.Data();
  Int_t nbs=0, nbslast=0;
  /* EXEC SQL WHENEVER SQLERROR GOTO errorFound; */ 

  /* EXEC SQL PREPARE SW FROM :dynstmt; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 7;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )97;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqhstv[0] = (unsigned char  *)dynstmt;
  sqlstm.sqhstl[0] = (unsigned long )0;
  sqlstm.sqhsts[0] = (         int  )0;
  sqlstm.sqindv[0] = (         short *)0;
  sqlstm.sqinds[0] = (         int  )0;
  sqlstm.sqharm[0] = (unsigned long )0;
  sqlstm.sqadto[0] = (unsigned short )0;
  sqlstm.sqtdso[0] = (unsigned short )0;
  sqlstm.sqphsv = sqlstm.sqhstv;
  sqlstm.sqphsl = sqlstm.sqhstl;
  sqlstm.sqphss = sqlstm.sqhsts;
  sqlstm.sqpind = sqlstm.sqindv;
  sqlstm.sqpins = sqlstm.sqinds;
  sqlstm.sqparm = sqlstm.sqharm;
  sqlstm.sqparc = sqlstm.sqharc;
  sqlstm.sqpadto = sqlstm.sqadto;
  sqlstm.sqptdso = sqlstm.sqtdso;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorFound;
}


  /* EXEC SQL DECLARE CW CURSOR FOR SW; */ 

  /* EXEC SQL OPEN CW; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 7;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.stmt = "";
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )116;
  sqlstm.selerr = (unsigned short)1;
  sqlstm.sqlpfmem = (unsigned int  )0;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlstm.sqcmod = (unsigned int )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorFound;
}


  /* EXEC SQL WHENEVER NOT FOUND CONTINUE; */ 

  do {
    /* EXEC SQL FETCH CW INTO :sResult; */ 

{
    struct sqlexd sqlstm;
    sqlorat((void **)0, &sqlctx, &oraca);
    sqlstm.sqlvsn = 13;
    sqlstm.arrsiz = 7;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )200;
    sqlstm.offset = (unsigned int  )131;
    sqlstm.selerr = (unsigned short)1;
    sqlstm.sqlpfmem = (unsigned int  )0;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)4352;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqfoff = (         int )0;
    sqlstm.sqfmod = (unsigned int )2;
    sqlstm.sqhstv[0] = (unsigned char  *)sResult;
    sqlstm.sqhstl[0] = (unsigned long )4002;
    sqlstm.sqhsts[0] = (         int  )4004;
    sqlstm.sqindv[0] = (         short *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned long )0;
    sqlstm.sqharc[0] = (unsigned long  *)0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    if (sqlca.sqlcode < 0) goto errorFound;
}

 
    nbs=sqlca.sqlerrd[2] - nbslast;
    nbslast+=nbs;
    for(Int_t i=0;i<nbs;i++) {
      sResult[i].arr[sResult[i].len]='\0';
      pout<<(Char_t*)sResult[i].arr<<endl;
    }
  } while (nbs==MAXROWS);
  /* EXEC SQL CLOSE CW; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 7;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )150;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorFound;
}


  return nbslast;
errorFound:
  dbUtil->showSqlError("HDbTable::writeTable");
  /* EXEC SQL CLOSE CW; */ 

{
  struct sqlexd sqlstm;
  sqlorat((void **)0, &sqlctx, &oraca);
  sqlstm.sqlvsn = 13;
  sqlstm.arrsiz = 7;
  sqlstm.sqladtp = &sqladt;
  sqlstm.sqltdsp = &sqltds;
  sqlstm.iters = (unsigned int  )1;
  sqlstm.offset = (unsigned int  )165;
  sqlstm.cud = sqlcud0;
  sqlstm.sqlest = (unsigned char  *)&sqlca;
  sqlstm.sqlety = (unsigned short)4352;
  sqlstm.occurs = (unsigned int  )0;
  sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
  if (sqlca.sqlcode < 0) goto errorFound;
}


  cout<<"SQL statement:"<<endl<<stm<<endl;
  return -1;
}

void HDbTable::setNames(const Char_t* tName) {
  // Sets the table owner and name from a concatinated string (separated by ".")
  TString s(tName);
  s.ToUpper();
  s=s.Strip(s.kBoth);
  Ssiz_t n=s.First(".");
  if (n>0) {
    SetName(s.Data());
    tabOwner=s(0,n);
    n++;
    tabName=s(n,s.Length()-n);
  } else {
    tabOwner=dbConn->getUserName();
    tabName=s;    
    s=tabOwner;
    s=s + "." + tabName;
    SetName(s.Data());
  }
}
 hdbtable.pc.cc:1
 hdbtable.pc.cc:2
 hdbtable.pc.cc:3
 hdbtable.pc.cc:4
 hdbtable.pc.cc:5
 hdbtable.pc.cc:6
 hdbtable.pc.cc:7
 hdbtable.pc.cc:8
 hdbtable.pc.cc:9
 hdbtable.pc.cc:10
 hdbtable.pc.cc:11
 hdbtable.pc.cc:12
 hdbtable.pc.cc:13
 hdbtable.pc.cc:14
 hdbtable.pc.cc:15
 hdbtable.pc.cc:16
 hdbtable.pc.cc:17
 hdbtable.pc.cc:18
 hdbtable.pc.cc:19
 hdbtable.pc.cc:20
 hdbtable.pc.cc:21
 hdbtable.pc.cc:22
 hdbtable.pc.cc:23
 hdbtable.pc.cc:24
 hdbtable.pc.cc:25
 hdbtable.pc.cc:26
 hdbtable.pc.cc:27
 hdbtable.pc.cc:28
 hdbtable.pc.cc:29
 hdbtable.pc.cc:30
 hdbtable.pc.cc:31
 hdbtable.pc.cc:32
 hdbtable.pc.cc:33
 hdbtable.pc.cc:34
 hdbtable.pc.cc:35
 hdbtable.pc.cc:36
 hdbtable.pc.cc:37
 hdbtable.pc.cc:38
 hdbtable.pc.cc:39
 hdbtable.pc.cc:40
 hdbtable.pc.cc:41
 hdbtable.pc.cc:42
 hdbtable.pc.cc:43
 hdbtable.pc.cc:44
 hdbtable.pc.cc:45
 hdbtable.pc.cc:46
 hdbtable.pc.cc:47
 hdbtable.pc.cc:48
 hdbtable.pc.cc:49
 hdbtable.pc.cc:50
 hdbtable.pc.cc:51
 hdbtable.pc.cc:52
 hdbtable.pc.cc:53
 hdbtable.pc.cc:54
 hdbtable.pc.cc:55
 hdbtable.pc.cc:56
 hdbtable.pc.cc:57
 hdbtable.pc.cc:58
 hdbtable.pc.cc:59
 hdbtable.pc.cc:60
 hdbtable.pc.cc:61
 hdbtable.pc.cc:62
 hdbtable.pc.cc:63
 hdbtable.pc.cc:64
 hdbtable.pc.cc:65
 hdbtable.pc.cc:66
 hdbtable.pc.cc:67
 hdbtable.pc.cc:68
 hdbtable.pc.cc:69
 hdbtable.pc.cc:70
 hdbtable.pc.cc:71
 hdbtable.pc.cc:72
 hdbtable.pc.cc:73
 hdbtable.pc.cc:74
 hdbtable.pc.cc:75
 hdbtable.pc.cc:76
 hdbtable.pc.cc:77
 hdbtable.pc.cc:78
 hdbtable.pc.cc:79
 hdbtable.pc.cc:80
 hdbtable.pc.cc:81
 hdbtable.pc.cc:82
 hdbtable.pc.cc:83
 hdbtable.pc.cc:84
 hdbtable.pc.cc:85
 hdbtable.pc.cc:86
 hdbtable.pc.cc:87
 hdbtable.pc.cc:88
 hdbtable.pc.cc:89
 hdbtable.pc.cc:90
 hdbtable.pc.cc:91
 hdbtable.pc.cc:92
 hdbtable.pc.cc:93
 hdbtable.pc.cc:94
 hdbtable.pc.cc:95
 hdbtable.pc.cc:96
 hdbtable.pc.cc:97
 hdbtable.pc.cc:98
 hdbtable.pc.cc:99
 hdbtable.pc.cc:100
 hdbtable.pc.cc:101
 hdbtable.pc.cc:102
 hdbtable.pc.cc:103
 hdbtable.pc.cc:104
 hdbtable.pc.cc:105
 hdbtable.pc.cc:106
 hdbtable.pc.cc:107
 hdbtable.pc.cc:108
 hdbtable.pc.cc:109
 hdbtable.pc.cc:110
 hdbtable.pc.cc:111
 hdbtable.pc.cc:112
 hdbtable.pc.cc:113
 hdbtable.pc.cc:114
 hdbtable.pc.cc:115
 hdbtable.pc.cc:116
 hdbtable.pc.cc:117
 hdbtable.pc.cc:118
 hdbtable.pc.cc:119
 hdbtable.pc.cc:120
 hdbtable.pc.cc:121
 hdbtable.pc.cc:122
 hdbtable.pc.cc:123
 hdbtable.pc.cc:124
 hdbtable.pc.cc:125
 hdbtable.pc.cc:126
 hdbtable.pc.cc:127
 hdbtable.pc.cc:128
 hdbtable.pc.cc:129
 hdbtable.pc.cc:130
 hdbtable.pc.cc:131
 hdbtable.pc.cc:132
 hdbtable.pc.cc:133
 hdbtable.pc.cc:134
 hdbtable.pc.cc:135
 hdbtable.pc.cc:136
 hdbtable.pc.cc:137
 hdbtable.pc.cc:138
 hdbtable.pc.cc:139
 hdbtable.pc.cc:140
 hdbtable.pc.cc:141
 hdbtable.pc.cc:142
 hdbtable.pc.cc:143
 hdbtable.pc.cc:144
 hdbtable.pc.cc:145
 hdbtable.pc.cc:146
 hdbtable.pc.cc:147
 hdbtable.pc.cc:148
 hdbtable.pc.cc:149
 hdbtable.pc.cc:150
 hdbtable.pc.cc:151
 hdbtable.pc.cc:152
 hdbtable.pc.cc:153
 hdbtable.pc.cc:154
 hdbtable.pc.cc:155
 hdbtable.pc.cc:156
 hdbtable.pc.cc:157
 hdbtable.pc.cc:158
 hdbtable.pc.cc:159
 hdbtable.pc.cc:160
 hdbtable.pc.cc:161
 hdbtable.pc.cc:162
 hdbtable.pc.cc:163
 hdbtable.pc.cc:164
 hdbtable.pc.cc:165
 hdbtable.pc.cc:166
 hdbtable.pc.cc:167
 hdbtable.pc.cc:168
 hdbtable.pc.cc:169
 hdbtable.pc.cc:170
 hdbtable.pc.cc:171
 hdbtable.pc.cc:172
 hdbtable.pc.cc:173
 hdbtable.pc.cc:174
 hdbtable.pc.cc:175
 hdbtable.pc.cc:176
 hdbtable.pc.cc:177
 hdbtable.pc.cc:178
 hdbtable.pc.cc:179
 hdbtable.pc.cc:180
 hdbtable.pc.cc:181
 hdbtable.pc.cc:182
 hdbtable.pc.cc:183
 hdbtable.pc.cc:184
 hdbtable.pc.cc:185
 hdbtable.pc.cc:186
 hdbtable.pc.cc:187
 hdbtable.pc.cc:188
 hdbtable.pc.cc:189
 hdbtable.pc.cc:190
 hdbtable.pc.cc:191
 hdbtable.pc.cc:192
 hdbtable.pc.cc:193
 hdbtable.pc.cc:194
 hdbtable.pc.cc:195
 hdbtable.pc.cc:196
 hdbtable.pc.cc:197
 hdbtable.pc.cc:198
 hdbtable.pc.cc:199
 hdbtable.pc.cc:200
 hdbtable.pc.cc:201
 hdbtable.pc.cc:202
 hdbtable.pc.cc:203
 hdbtable.pc.cc:204
 hdbtable.pc.cc:205
 hdbtable.pc.cc:206
 hdbtable.pc.cc:207
 hdbtable.pc.cc:208
 hdbtable.pc.cc:209
 hdbtable.pc.cc:210
 hdbtable.pc.cc:211
 hdbtable.pc.cc:212
 hdbtable.pc.cc:213
 hdbtable.pc.cc:214
 hdbtable.pc.cc:215
 hdbtable.pc.cc:216
 hdbtable.pc.cc:217
 hdbtable.pc.cc:218
 hdbtable.pc.cc:219
 hdbtable.pc.cc:220
 hdbtable.pc.cc:221
 hdbtable.pc.cc:222
 hdbtable.pc.cc:223
 hdbtable.pc.cc:224
 hdbtable.pc.cc:225
 hdbtable.pc.cc:226
 hdbtable.pc.cc:227
 hdbtable.pc.cc:228
 hdbtable.pc.cc:229
 hdbtable.pc.cc:230
 hdbtable.pc.cc:231
 hdbtable.pc.cc:232
 hdbtable.pc.cc:233
 hdbtable.pc.cc:234
 hdbtable.pc.cc:235
 hdbtable.pc.cc:236
 hdbtable.pc.cc:237
 hdbtable.pc.cc:238
 hdbtable.pc.cc:239
 hdbtable.pc.cc:240
 hdbtable.pc.cc:241
 hdbtable.pc.cc:242
 hdbtable.pc.cc:243
 hdbtable.pc.cc:244
 hdbtable.pc.cc:245
 hdbtable.pc.cc:246
 hdbtable.pc.cc:247
 hdbtable.pc.cc:248
 hdbtable.pc.cc:249
 hdbtable.pc.cc:250
 hdbtable.pc.cc:251
 hdbtable.pc.cc:252
 hdbtable.pc.cc:253
 hdbtable.pc.cc:254
 hdbtable.pc.cc:255
 hdbtable.pc.cc:256
 hdbtable.pc.cc:257
 hdbtable.pc.cc:258
 hdbtable.pc.cc:259
 hdbtable.pc.cc:260
 hdbtable.pc.cc:261
 hdbtable.pc.cc:262
 hdbtable.pc.cc:263
 hdbtable.pc.cc:264
 hdbtable.pc.cc:265
 hdbtable.pc.cc:266
 hdbtable.pc.cc:267
 hdbtable.pc.cc:268
 hdbtable.pc.cc:269
 hdbtable.pc.cc:270
 hdbtable.pc.cc:271
 hdbtable.pc.cc:272
 hdbtable.pc.cc:273
 hdbtable.pc.cc:274
 hdbtable.pc.cc:275
 hdbtable.pc.cc:276
 hdbtable.pc.cc:277
 hdbtable.pc.cc:278
 hdbtable.pc.cc:279
 hdbtable.pc.cc:280
 hdbtable.pc.cc:281
 hdbtable.pc.cc:282
 hdbtable.pc.cc:283
 hdbtable.pc.cc:284
 hdbtable.pc.cc:285
 hdbtable.pc.cc:286
 hdbtable.pc.cc:287
 hdbtable.pc.cc:288
 hdbtable.pc.cc:289
 hdbtable.pc.cc:290
 hdbtable.pc.cc:291
 hdbtable.pc.cc:292
 hdbtable.pc.cc:293
 hdbtable.pc.cc:294
 hdbtable.pc.cc:295
 hdbtable.pc.cc:296
 hdbtable.pc.cc:297
 hdbtable.pc.cc:298
 hdbtable.pc.cc:299
 hdbtable.pc.cc:300
 hdbtable.pc.cc:301
 hdbtable.pc.cc:302
 hdbtable.pc.cc:303
 hdbtable.pc.cc:304
 hdbtable.pc.cc:305
 hdbtable.pc.cc:306
 hdbtable.pc.cc:307
 hdbtable.pc.cc:308
 hdbtable.pc.cc:309
 hdbtable.pc.cc:310
 hdbtable.pc.cc:311
 hdbtable.pc.cc:312
 hdbtable.pc.cc:313
 hdbtable.pc.cc:314
 hdbtable.pc.cc:315
 hdbtable.pc.cc:316
 hdbtable.pc.cc:317
 hdbtable.pc.cc:318
 hdbtable.pc.cc:319
 hdbtable.pc.cc:320
 hdbtable.pc.cc:321
 hdbtable.pc.cc:322
 hdbtable.pc.cc:323
 hdbtable.pc.cc:324
 hdbtable.pc.cc:325
 hdbtable.pc.cc:326
 hdbtable.pc.cc:327
 hdbtable.pc.cc:328
 hdbtable.pc.cc:329
 hdbtable.pc.cc:330
 hdbtable.pc.cc:331
 hdbtable.pc.cc:332
 hdbtable.pc.cc:333
 hdbtable.pc.cc:334
 hdbtable.pc.cc:335
 hdbtable.pc.cc:336
 hdbtable.pc.cc:337
 hdbtable.pc.cc:338
 hdbtable.pc.cc:339
 hdbtable.pc.cc:340
 hdbtable.pc.cc:341
 hdbtable.pc.cc:342
 hdbtable.pc.cc:343
 hdbtable.pc.cc:344
 hdbtable.pc.cc:345
 hdbtable.pc.cc:346
 hdbtable.pc.cc:347
 hdbtable.pc.cc:348
 hdbtable.pc.cc:349
 hdbtable.pc.cc:350
 hdbtable.pc.cc:351
 hdbtable.pc.cc:352
 hdbtable.pc.cc:353
 hdbtable.pc.cc:354
 hdbtable.pc.cc:355
 hdbtable.pc.cc:356
 hdbtable.pc.cc:357
 hdbtable.pc.cc:358
 hdbtable.pc.cc:359
 hdbtable.pc.cc:360
 hdbtable.pc.cc:361
 hdbtable.pc.cc:362
 hdbtable.pc.cc:363
 hdbtable.pc.cc:364
 hdbtable.pc.cc:365
 hdbtable.pc.cc:366
 hdbtable.pc.cc:367
 hdbtable.pc.cc:368
 hdbtable.pc.cc:369
 hdbtable.pc.cc:370
 hdbtable.pc.cc:371
 hdbtable.pc.cc:372
 hdbtable.pc.cc:373
 hdbtable.pc.cc:374
 hdbtable.pc.cc:375
 hdbtable.pc.cc:376
 hdbtable.pc.cc:377
 hdbtable.pc.cc:378
 hdbtable.pc.cc:379
 hdbtable.pc.cc:380
 hdbtable.pc.cc:381
 hdbtable.pc.cc:382
 hdbtable.pc.cc:383
 hdbtable.pc.cc:384
 hdbtable.pc.cc:385
 hdbtable.pc.cc:386
 hdbtable.pc.cc:387
 hdbtable.pc.cc:388
 hdbtable.pc.cc:389
 hdbtable.pc.cc:390
 hdbtable.pc.cc:391
 hdbtable.pc.cc:392
 hdbtable.pc.cc:393
 hdbtable.pc.cc:394
 hdbtable.pc.cc:395
 hdbtable.pc.cc:396
 hdbtable.pc.cc:397
 hdbtable.pc.cc:398
 hdbtable.pc.cc:399
 hdbtable.pc.cc:400
 hdbtable.pc.cc:401
 hdbtable.pc.cc:402
 hdbtable.pc.cc:403
 hdbtable.pc.cc:404
 hdbtable.pc.cc:405
 hdbtable.pc.cc:406
 hdbtable.pc.cc:407
 hdbtable.pc.cc:408
 hdbtable.pc.cc:409
 hdbtable.pc.cc:410
 hdbtable.pc.cc:411
 hdbtable.pc.cc:412
 hdbtable.pc.cc:413
 hdbtable.pc.cc:414
 hdbtable.pc.cc:415
 hdbtable.pc.cc:416
 hdbtable.pc.cc:417
 hdbtable.pc.cc:418
 hdbtable.pc.cc:419
 hdbtable.pc.cc:420
 hdbtable.pc.cc:421
 hdbtable.pc.cc:422
 hdbtable.pc.cc:423
 hdbtable.pc.cc:424
 hdbtable.pc.cc:425
 hdbtable.pc.cc:426
 hdbtable.pc.cc:427
 hdbtable.pc.cc:428
 hdbtable.pc.cc:429
 hdbtable.pc.cc:430
 hdbtable.pc.cc:431
 hdbtable.pc.cc:432
 hdbtable.pc.cc:433
 hdbtable.pc.cc:434
 hdbtable.pc.cc:435
 hdbtable.pc.cc:436
 hdbtable.pc.cc:437
 hdbtable.pc.cc:438
 hdbtable.pc.cc:439
 hdbtable.pc.cc:440
 hdbtable.pc.cc:441
 hdbtable.pc.cc:442
 hdbtable.pc.cc:443
 hdbtable.pc.cc:444
 hdbtable.pc.cc:445
 hdbtable.pc.cc:446
 hdbtable.pc.cc:447
 hdbtable.pc.cc:448
 hdbtable.pc.cc:449
 hdbtable.pc.cc:450
 hdbtable.pc.cc:451
 hdbtable.pc.cc:452
 hdbtable.pc.cc:453
 hdbtable.pc.cc:454
 hdbtable.pc.cc:455
 hdbtable.pc.cc:456
 hdbtable.pc.cc:457
 hdbtable.pc.cc:458
 hdbtable.pc.cc:459
 hdbtable.pc.cc:460
 hdbtable.pc.cc:461
 hdbtable.pc.cc:462
 hdbtable.pc.cc:463
 hdbtable.pc.cc:464
 hdbtable.pc.cc:465
 hdbtable.pc.cc:466
 hdbtable.pc.cc:467
 hdbtable.pc.cc:468
 hdbtable.pc.cc:469
 hdbtable.pc.cc:470
 hdbtable.pc.cc:471
 hdbtable.pc.cc:472
 hdbtable.pc.cc:473
 hdbtable.pc.cc:474
 hdbtable.pc.cc:475
 hdbtable.pc.cc:476
 hdbtable.pc.cc:477
 hdbtable.pc.cc:478
 hdbtable.pc.cc:479
 hdbtable.pc.cc:480
 hdbtable.pc.cc:481
 hdbtable.pc.cc:482
 hdbtable.pc.cc:483
 hdbtable.pc.cc:484
 hdbtable.pc.cc:485
 hdbtable.pc.cc:486
 hdbtable.pc.cc:487
 hdbtable.pc.cc:488
 hdbtable.pc.cc:489
 hdbtable.pc.cc:490
 hdbtable.pc.cc:491
 hdbtable.pc.cc:492
 hdbtable.pc.cc:493
 hdbtable.pc.cc:494
 hdbtable.pc.cc:495
 hdbtable.pc.cc:496
 hdbtable.pc.cc:497
 hdbtable.pc.cc:498
 hdbtable.pc.cc:499
 hdbtable.pc.cc:500
 hdbtable.pc.cc:501
 hdbtable.pc.cc:502
 hdbtable.pc.cc:503
 hdbtable.pc.cc:504
 hdbtable.pc.cc:505
 hdbtable.pc.cc:506
 hdbtable.pc.cc:507
 hdbtable.pc.cc:508
 hdbtable.pc.cc:509
 hdbtable.pc.cc:510
 hdbtable.pc.cc:511
 hdbtable.pc.cc:512
 hdbtable.pc.cc:513
 hdbtable.pc.cc:514
 hdbtable.pc.cc:515
 hdbtable.pc.cc:516
 hdbtable.pc.cc:517
 hdbtable.pc.cc:518
 hdbtable.pc.cc:519
 hdbtable.pc.cc:520
 hdbtable.pc.cc:521
 hdbtable.pc.cc:522
 hdbtable.pc.cc:523
 hdbtable.pc.cc:524
 hdbtable.pc.cc:525
 hdbtable.pc.cc:526
 hdbtable.pc.cc:527
 hdbtable.pc.cc:528
 hdbtable.pc.cc:529
 hdbtable.pc.cc:530
 hdbtable.pc.cc:531
 hdbtable.pc.cc:532
 hdbtable.pc.cc:533
 hdbtable.pc.cc:534
 hdbtable.pc.cc:535
 hdbtable.pc.cc:536
 hdbtable.pc.cc:537
 hdbtable.pc.cc:538
 hdbtable.pc.cc:539
 hdbtable.pc.cc:540
 hdbtable.pc.cc:541
 hdbtable.pc.cc:542
 hdbtable.pc.cc:543
 hdbtable.pc.cc:544
 hdbtable.pc.cc:545
 hdbtable.pc.cc:546
 hdbtable.pc.cc:547
 hdbtable.pc.cc:548
 hdbtable.pc.cc:549
 hdbtable.pc.cc:550
 hdbtable.pc.cc:551
 hdbtable.pc.cc:552
 hdbtable.pc.cc:553
 hdbtable.pc.cc:554
 hdbtable.pc.cc:555
 hdbtable.pc.cc:556
 hdbtable.pc.cc:557
 hdbtable.pc.cc:558
 hdbtable.pc.cc:559
 hdbtable.pc.cc:560
 hdbtable.pc.cc:561
 hdbtable.pc.cc:562
 hdbtable.pc.cc:563
 hdbtable.pc.cc:564
 hdbtable.pc.cc:565
 hdbtable.pc.cc:566
 hdbtable.pc.cc:567
 hdbtable.pc.cc:568
 hdbtable.pc.cc:569
 hdbtable.pc.cc:570
 hdbtable.pc.cc:571
 hdbtable.pc.cc:572
 hdbtable.pc.cc:573
 hdbtable.pc.cc:574
 hdbtable.pc.cc:575
 hdbtable.pc.cc:576
 hdbtable.pc.cc:577
 hdbtable.pc.cc:578
 hdbtable.pc.cc:579
 hdbtable.pc.cc:580
 hdbtable.pc.cc:581
 hdbtable.pc.cc:582
 hdbtable.pc.cc:583
 hdbtable.pc.cc:584
 hdbtable.pc.cc:585
 hdbtable.pc.cc:586
 hdbtable.pc.cc:587
 hdbtable.pc.cc:588
 hdbtable.pc.cc:589
 hdbtable.pc.cc:590
 hdbtable.pc.cc:591
 hdbtable.pc.cc:592
 hdbtable.pc.cc:593
 hdbtable.pc.cc:594
 hdbtable.pc.cc:595
 hdbtable.pc.cc:596
 hdbtable.pc.cc:597
 hdbtable.pc.cc:598
 hdbtable.pc.cc:599
 hdbtable.pc.cc:600
 hdbtable.pc.cc:601
 hdbtable.pc.cc:602
 hdbtable.pc.cc:603
 hdbtable.pc.cc:604
 hdbtable.pc.cc:605
 hdbtable.pc.cc:606
 hdbtable.pc.cc:607
 hdbtable.pc.cc:608
 hdbtable.pc.cc:609
 hdbtable.pc.cc:610
 hdbtable.pc.cc:611
 hdbtable.pc.cc:612
 hdbtable.pc.cc:613
 hdbtable.pc.cc:614
 hdbtable.pc.cc:615
 hdbtable.pc.cc:616
 hdbtable.pc.cc:617
 hdbtable.pc.cc:618
 hdbtable.pc.cc:619
 hdbtable.pc.cc:620
 hdbtable.pc.cc:621
 hdbtable.pc.cc:622
 hdbtable.pc.cc:623
 hdbtable.pc.cc:624
 hdbtable.pc.cc:625
 hdbtable.pc.cc:626
 hdbtable.pc.cc:627
 hdbtable.pc.cc:628
 hdbtable.pc.cc:629
 hdbtable.pc.cc:630
 hdbtable.pc.cc:631
 hdbtable.pc.cc:632
 hdbtable.pc.cc:633
 hdbtable.pc.cc:634
 hdbtable.pc.cc:635
 hdbtable.pc.cc:636
 hdbtable.pc.cc:637
 hdbtable.pc.cc:638
 hdbtable.pc.cc:639
 hdbtable.pc.cc:640
 hdbtable.pc.cc:641
 hdbtable.pc.cc:642
 hdbtable.pc.cc:643
 hdbtable.pc.cc:644
 hdbtable.pc.cc:645
 hdbtable.pc.cc:646
 hdbtable.pc.cc:647
 hdbtable.pc.cc:648
 hdbtable.pc.cc:649
 hdbtable.pc.cc:650
 hdbtable.pc.cc:651
 hdbtable.pc.cc:652
 hdbtable.pc.cc:653
 hdbtable.pc.cc:654
 hdbtable.pc.cc:655
 hdbtable.pc.cc:656
 hdbtable.pc.cc:657
 hdbtable.pc.cc:658
 hdbtable.pc.cc:659
 hdbtable.pc.cc:660
 hdbtable.pc.cc:661
 hdbtable.pc.cc:662
 hdbtable.pc.cc:663
 hdbtable.pc.cc:664
 hdbtable.pc.cc:665
 hdbtable.pc.cc:666
 hdbtable.pc.cc:667
 hdbtable.pc.cc:668
 hdbtable.pc.cc:669
 hdbtable.pc.cc:670
 hdbtable.pc.cc:671
 hdbtable.pc.cc:672
 hdbtable.pc.cc:673
 hdbtable.pc.cc:674
 hdbtable.pc.cc:675
 hdbtable.pc.cc:676
 hdbtable.pc.cc:677
 hdbtable.pc.cc:678
 hdbtable.pc.cc:679
 hdbtable.pc.cc:680
 hdbtable.pc.cc:681
 hdbtable.pc.cc:682
 hdbtable.pc.cc:683
 hdbtable.pc.cc:684
 hdbtable.pc.cc:685
 hdbtable.pc.cc:686
 hdbtable.pc.cc:687
 hdbtable.pc.cc:688
 hdbtable.pc.cc:689
 hdbtable.pc.cc:690
 hdbtable.pc.cc:691
 hdbtable.pc.cc:692
 hdbtable.pc.cc:693
 hdbtable.pc.cc:694
 hdbtable.pc.cc:695
 hdbtable.pc.cc:696
 hdbtable.pc.cc:697
 hdbtable.pc.cc:698
 hdbtable.pc.cc:699
 hdbtable.pc.cc:700
 hdbtable.pc.cc:701
 hdbtable.pc.cc:702
 hdbtable.pc.cc:703
 hdbtable.pc.cc:704
 hdbtable.pc.cc:705
 hdbtable.pc.cc:706
 hdbtable.pc.cc:707
 hdbtable.pc.cc:708
 hdbtable.pc.cc:709
 hdbtable.pc.cc:710
 hdbtable.pc.cc:711
 hdbtable.pc.cc:712
 hdbtable.pc.cc:713
 hdbtable.pc.cc:714
 hdbtable.pc.cc:715
 hdbtable.pc.cc:716
 hdbtable.pc.cc:717
 hdbtable.pc.cc:718
 hdbtable.pc.cc:719
 hdbtable.pc.cc:720
 hdbtable.pc.cc:721
 hdbtable.pc.cc:722
 hdbtable.pc.cc:723
 hdbtable.pc.cc:724
 hdbtable.pc.cc:725
 hdbtable.pc.cc:726
 hdbtable.pc.cc:727
 hdbtable.pc.cc:728
 hdbtable.pc.cc:729
 hdbtable.pc.cc:730
 hdbtable.pc.cc:731
 hdbtable.pc.cc:732
 hdbtable.pc.cc:733
 hdbtable.pc.cc:734
 hdbtable.pc.cc:735
 hdbtable.pc.cc:736
 hdbtable.pc.cc:737
 hdbtable.pc.cc:738
 hdbtable.pc.cc:739
 hdbtable.pc.cc:740
 hdbtable.pc.cc:741
 hdbtable.pc.cc:742
 hdbtable.pc.cc:743
 hdbtable.pc.cc:744
 hdbtable.pc.cc:745
 hdbtable.pc.cc:746
 hdbtable.pc.cc:747
 hdbtable.pc.cc:748
 hdbtable.pc.cc:749
 hdbtable.pc.cc:750
 hdbtable.pc.cc:751
 hdbtable.pc.cc:752
 hdbtable.pc.cc:753
 hdbtable.pc.cc:754
 hdbtable.pc.cc:755
 hdbtable.pc.cc:756
 hdbtable.pc.cc:757
 hdbtable.pc.cc:758
 hdbtable.pc.cc:759
 hdbtable.pc.cc:760
 hdbtable.pc.cc:761
 hdbtable.pc.cc:762
 hdbtable.pc.cc:763
 hdbtable.pc.cc:764
 hdbtable.pc.cc:765
 hdbtable.pc.cc:766
 hdbtable.pc.cc:767
 hdbtable.pc.cc:768
 hdbtable.pc.cc:769
 hdbtable.pc.cc:770
 hdbtable.pc.cc:771
 hdbtable.pc.cc:772
 hdbtable.pc.cc:773
 hdbtable.pc.cc:774
 hdbtable.pc.cc:775
 hdbtable.pc.cc:776
 hdbtable.pc.cc:777
 hdbtable.pc.cc:778
 hdbtable.pc.cc:779
 hdbtable.pc.cc:780
 hdbtable.pc.cc:781
 hdbtable.pc.cc:782
 hdbtable.pc.cc:783
 hdbtable.pc.cc:784
 hdbtable.pc.cc:785
 hdbtable.pc.cc:786
 hdbtable.pc.cc:787
 hdbtable.pc.cc:788
 hdbtable.pc.cc:789
 hdbtable.pc.cc:790
 hdbtable.pc.cc:791
 hdbtable.pc.cc:792
 hdbtable.pc.cc:793
 hdbtable.pc.cc:794
 hdbtable.pc.cc:795
 hdbtable.pc.cc:796
 hdbtable.pc.cc:797
 hdbtable.pc.cc:798
 hdbtable.pc.cc:799
 hdbtable.pc.cc:800
 hdbtable.pc.cc:801
 hdbtable.pc.cc:802
 hdbtable.pc.cc:803
 hdbtable.pc.cc:804
 hdbtable.pc.cc:805
 hdbtable.pc.cc:806
 hdbtable.pc.cc:807
 hdbtable.pc.cc:808
 hdbtable.pc.cc:809
 hdbtable.pc.cc:810
 hdbtable.pc.cc:811
 hdbtable.pc.cc:812
 hdbtable.pc.cc:813
 hdbtable.pc.cc:814
 hdbtable.pc.cc:815
 hdbtable.pc.cc:816
 hdbtable.pc.cc:817
 hdbtable.pc.cc:818
 hdbtable.pc.cc:819
 hdbtable.pc.cc:820
 hdbtable.pc.cc:821
 hdbtable.pc.cc:822
 hdbtable.pc.cc:823
 hdbtable.pc.cc:824
 hdbtable.pc.cc:825
 hdbtable.pc.cc:826
 hdbtable.pc.cc:827
 hdbtable.pc.cc:828
 hdbtable.pc.cc:829
 hdbtable.pc.cc:830
 hdbtable.pc.cc:831
 hdbtable.pc.cc:832
 hdbtable.pc.cc:833
 hdbtable.pc.cc:834
 hdbtable.pc.cc:835
 hdbtable.pc.cc:836
 hdbtable.pc.cc:837
 hdbtable.pc.cc:838
 hdbtable.pc.cc:839
 hdbtable.pc.cc:840
 hdbtable.pc.cc:841
 hdbtable.pc.cc:842
 hdbtable.pc.cc:843
 hdbtable.pc.cc:844
 hdbtable.pc.cc:845
 hdbtable.pc.cc:846
 hdbtable.pc.cc:847
 hdbtable.pc.cc:848
 hdbtable.pc.cc:849
 hdbtable.pc.cc:850
 hdbtable.pc.cc:851
 hdbtable.pc.cc:852
 hdbtable.pc.cc:853
 hdbtable.pc.cc:854
 hdbtable.pc.cc:855
 hdbtable.pc.cc:856
 hdbtable.pc.cc:857
 hdbtable.pc.cc:858
 hdbtable.pc.cc:859
 hdbtable.pc.cc:860
 hdbtable.pc.cc:861
 hdbtable.pc.cc:862
 hdbtable.pc.cc:863
 hdbtable.pc.cc:864
 hdbtable.pc.cc:865
 hdbtable.pc.cc:866
 hdbtable.pc.cc:867
 hdbtable.pc.cc:868
 hdbtable.pc.cc:869
 hdbtable.pc.cc:870
 hdbtable.pc.cc:871
 hdbtable.pc.cc:872
 hdbtable.pc.cc:873
 hdbtable.pc.cc:874
 hdbtable.pc.cc:875
 hdbtable.pc.cc:876
 hdbtable.pc.cc:877
 hdbtable.pc.cc:878
 hdbtable.pc.cc:879
 hdbtable.pc.cc:880
 hdbtable.pc.cc:881
 hdbtable.pc.cc:882
 hdbtable.pc.cc:883
 hdbtable.pc.cc:884
 hdbtable.pc.cc:885
 hdbtable.pc.cc:886
 hdbtable.pc.cc:887
 hdbtable.pc.cc:888
 hdbtable.pc.cc:889
 hdbtable.pc.cc:890
 hdbtable.pc.cc:891
 hdbtable.pc.cc:892
 hdbtable.pc.cc:893
 hdbtable.pc.cc:894
 hdbtable.pc.cc:895
 hdbtable.pc.cc:896
 hdbtable.pc.cc:897
 hdbtable.pc.cc:898
 hdbtable.pc.cc:899
 hdbtable.pc.cc:900