GPUdb C++ API  Version 6.0.1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
Type.hpp
Go to the documentation of this file.
1 #ifndef __GPUDB__TYPE_HPP__
2 #define __GPUDB__TYPE_HPP__
3 
4 #include "ColumnProperties.h"
5 
6 #include <avro/Schema.hh>
7 
8 namespace gpudb
9 {
10  class GPUdb;
11 
12  class Type
13  {
14  friend class GenericRecord;
15 
16  public:
17  class Column
18  {
19  public:
21  {
22  BYTES = ::avro::AVRO_BYTES,
23  DOUBLE = ::avro::AVRO_DOUBLE,
24  FLOAT = ::avro::AVRO_FLOAT,
25  INT = ::avro::AVRO_INT,
26  LONG = ::avro::AVRO_LONG,
27  STRING = ::avro::AVRO_STRING
28  };
29 
30  Column(const std::string& name, const ColumnType type, const std::string& property1 = "", const std::string& property2 = "", const std::string& property3 = "");
31  Column(const std::string& name, const ColumnType type, const std::vector<std::string>& properties);
32  const std::string& getName() const;
33  ColumnType getType() const;
34  bool isNullable() const;
35  const std::vector<std::string>& getProperties() const;
36 
37  private:
38  std::string m_name;
39  ColumnType m_type;
40  bool m_isNullable;
41  std::vector<std::string> m_properties;
42 
43  void initialize();
44  };
45 
46  static Type fromTable(const GPUdb& gpudb, const std::string& tableName);
47  static Type fromType(const GPUdb& gpudb, const std::string& typeId);
48 
49  Type(const std::vector<Column>& columns);
50  Type(const std::string& label, const std::vector<Column>& columns);
51  Type(const std::string& typeSchema);
52  Type(const std::string& label, const std::string& typeSchema, const std::map<std::string, std::vector<std::string> >& properties);
53  const std::string& getLabel() const;
54  const std::vector<Column>& getColumns() const;
55  const Column& getColumn(const size_t index) const;
56  const Column& getColumn(const std::string& name) const;
57  size_t getColumnCount() const;
58  size_t getColumnIndex(const std::string& name) const;
59  bool hasColumn(const std::string& name) const;
60  const ::avro::ValidSchema& getSchema() const;
61  std::string create(const GPUdb& gpudb) const;
62 
63  private:
64  struct TypeData
65  {
66  std::string label;
67  std::vector<Type::Column> columns;
68  std::map<std::string, size_t> columnMap;
69  ::avro::ValidSchema schema;
70  };
71 
72  boost::shared_ptr<TypeData> m_data;
73 
74  Type();
75  void initialize();
76  void createFromSchema(const std::string& typeSchema, const std::map<std::string, std::vector<std::string> >& properties);
77  void createSchema();
78  };
79 }
80 
81 #endif
bool isNullable() const
const std::vector< std::string > & getProperties() const
const std::string & getName() const
ColumnType getType() const
static Type fromTable(const GPUdb &gpudb, const std::string &tableName)
size_t getColumnIndex(const std::string &name) const
Column(const std::string &name, const ColumnType type, const std::string &property1="", const std::string &property2="", const std::string &property3="")
bool hasColumn(const std::string &name) const
const std::vector< Column > & getColumns() const
const ::avro::ValidSchema & getSchema() const
static Type fromType(const GPUdb &gpudb, const std::string &typeId)
std::string create(const GPUdb &gpudb) const
const std::string & getLabel() const
size_t getColumnCount() const
const Column & getColumn(const size_t index) const