00001 // File: $Id$ 00002 // Author: John Wu <John.Wu at ACM.org> 00003 // Copyright 2007-2012 the Regents of the University of California 00004 #ifndef IBIS_TAFEL_H 00005 #define IBIS_TAFEL_H 00006 #include "table.h" // ibis::table 00007 #include "bitvector.h" // ibis::bitvector 00008 00011 00012 namespace ibis { 00013 class tafel; 00014 } 00015 00025 class ibis::tafel : public ibis::tablex { 00026 public: 00027 tafel() : mrows(0U) {} 00028 virtual ~tafel() {clear();} 00029 00030 virtual int addColumn(const char* cname, ibis::TYPE_T ctype, 00031 const char* cdesc, const char* idx); 00032 virtual int SQLCreateTable(const char *stmt, std::string&); 00033 00034 virtual int append(const char* cname, uint64_t begin, uint64_t end, 00035 void* values); 00036 virtual int appendRow(const ibis::table::row&); 00037 virtual int appendRow(const char*, const char*); 00038 virtual int appendRows(const std::vector<ibis::table::row>&); 00039 virtual int readCSV(const char* filename, int maxrows, 00040 const char* outputdir, const char* delimiters); 00041 virtual int readSQLDump(const char* filename, std::string& tname, 00042 int maxrows, const char* outputdir); 00043 00044 virtual int write(const char* dir, const char* tname=0, 00045 const char* tdesc=0, const char* idx=0, 00046 const char* nvpairs=0) const; 00047 virtual int writeMetaData(const char* dir, const char* tname=0, 00048 const char* tdesc=0, const char* idx=0, 00049 const char* nvpairs=0) const; 00050 00051 virtual void clearData(); 00052 virtual int32_t reserveSpace(uint32_t); 00053 virtual uint32_t capacity() const; 00054 00055 virtual uint32_t mRows() const {return mrows;} 00056 virtual uint32_t mColumns() const {return cols.size();} 00057 virtual void describe(std::ostream&) const; 00058 virtual table* toTable(const char* nm=0, const char* de=0); 00059 00061 struct column { 00063 std::string name; 00065 std::string desc; 00067 std::string indexSpec; 00069 ibis::TYPE_T type; 00076 void* values; 00078 ibis::array_t<int64_t> starts; 00085 void* defval; 00087 ibis::bitvector mask; 00088 00089 column(); 00090 ~column(); 00091 }; // column 00092 typedef std::map<const char*, column*, ibis::lessi> columnList; 00094 const columnList& getColumns() const {return cols;} 00095 00096 protected: 00098 columnList cols; 00100 std::vector<column*> colorder; 00102 ibis::bitvector::word_t mrows; 00103 00105 void clear(); 00106 00108 void normalize(); 00109 00110 template <typename T> 00111 void append(const T* in, ibis::bitvector::word_t be, 00112 ibis::bitvector::word_t en, array_t<T>& out, 00113 const T& fill, ibis::bitvector& mask) const; 00114 void appendString(const std::vector<std::string>* in, 00115 ibis::bitvector::word_t be, 00116 ibis::bitvector::word_t en, 00117 std::vector<std::string>& out, 00118 ibis::bitvector& mask) const; 00119 void appendRaw(const ibis::array_t<unsigned char>* in, 00120 ibis::bitvector::word_t be, 00121 ibis::bitvector::word_t en, 00122 std::vector<std::string>& out, 00123 ibis::bitvector& mask) const; 00124 00125 template <typename T> 00126 void locate(ibis::TYPE_T, std::vector<array_t<T>*>& buf, 00127 std::vector<ibis::bitvector*>& msk) const; 00128 void locateString(ibis::TYPE_T t, 00129 std::vector<std::vector<std::string>*>& buf, 00130 std::vector<ibis::bitvector*>& msk) const; 00131 template <typename T> 00132 void append(const std::vector<std::string>& nm, const std::vector<T>& va, 00133 std::vector<array_t<T>*>& buf, 00134 std::vector<ibis::bitvector*>& msk); 00135 void appendString(const std::vector<std::string>& nm, 00136 const std::vector<std::string>& va, 00137 std::vector<std::vector<std::string>*>& buf, 00138 std::vector<ibis::bitvector*>& msk); 00139 int parseLine(const char* str, const char* del, const char* id); 00140 00141 int32_t doReserve(uint32_t); 00142 int assignDefaultValue(ibis::tafel::column &col, const char *val) const; 00143 int readSQLStatement(std::istream &, ibis::fileManager::buffer<char>&, 00144 ibis::fileManager::buffer<char>&) const; 00145 uint32_t preferredSize() const; 00146 00147 private: 00148 tafel(const tafel&); 00149 tafel& operator=(const tafel&); 00150 }; // class ibis::tafel 00151 #endif // IBIS_TAFEL_H
![]() |