mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
dbms: development.
This commit is contained in:
parent
d741d53889
commit
bee9f2ea55
@ -1,20 +0,0 @@
|
||||
#ifndef DBMS_COLUMN_TYPES_COLUMNTYPES_H
|
||||
#define DBMS_COLUMN_TYPES_COLUMNTYPES_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <Poco/SharedPtr.h>
|
||||
|
||||
#include <DB/ColumnTypes/IColumnType.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
using Poco::SharedPtr;
|
||||
|
||||
typedef std::vector<SharedPtr<IColumnType> > ColumnTypes;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@ -1,35 +0,0 @@
|
||||
#ifndef DBMS_COLUMN_TYPES_NUMBER_FIXED_H
|
||||
#define DBMS_COLUMN_TYPES_NUMBER_FIXED_H
|
||||
|
||||
#include <DB/Core/Column.h>
|
||||
#include <DB/ColumnTypes/IColumnTypeNumberFixed.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
/** Типы столбцов для чисел фиксированной ширины. */
|
||||
|
||||
#define DEFINE_COLUMN_TYPE_NUMBER_FIXED(TYPE) \
|
||||
class ColumnType ## TYPE : public IColumnTypeNumberFixed<TYPE, TYPE ## Column> \
|
||||
{ \
|
||||
public: \
|
||||
std::string getName() const { return #TYPE; } \
|
||||
};
|
||||
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(UInt8);
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(UInt16);
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(UInt32);
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(UInt64);
|
||||
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(Int8);
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(Int16);
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(Int32);
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(Int64);
|
||||
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(Float32);
|
||||
DEFINE_COLUMN_TYPE_NUMBER_FIXED(Float64);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@ -4,7 +4,7 @@
|
||||
#include <Poco/SharedPtr.h>
|
||||
|
||||
#include <DB/Core/Column.h>
|
||||
#include <DB/ColumnTypes/IColumnType.h>
|
||||
#include <DB/DataTypes/IDataType.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
@ -18,7 +18,7 @@ using Poco::SharedPtr;
|
||||
struct ColumnWithNameAndType
|
||||
{
|
||||
SharedPtr<Column> column;
|
||||
SharedPtr<IColumnType> type;
|
||||
SharedPtr<IDataType> type;
|
||||
String name;
|
||||
};
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include <Poco/SharedPtr.h>
|
||||
|
||||
#include <DB/Core/Column.h>
|
||||
#include <DB/ColumnTypes/IColumnType.h>
|
||||
#include <DB/DataTypes/IDataType.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
@ -17,7 +17,7 @@ using Poco::SharedPtr;
|
||||
|
||||
struct NameAndType
|
||||
{
|
||||
SharedPtr<IColumnType> type;
|
||||
SharedPtr<IDataType> type;
|
||||
String name;
|
||||
};
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
#include <Poco/SharedPtr.h>
|
||||
|
||||
#include <DB/ColumnTypes/ColumnTypes.h>
|
||||
#include <DB/DataTypes/DataTypes.h>
|
||||
#include <DB/DataStreams/IRowOutputStream.h>
|
||||
|
||||
|
||||
@ -20,7 +20,7 @@ using Poco::SharedPtr;
|
||||
class TabSeparatedRowOutputStream : public IRowOutputStream
|
||||
{
|
||||
public:
|
||||
TabSeparatedRowOutputStream(std::ostream & ostr_, SharedPtr<ColumnTypes> column_types_);
|
||||
TabSeparatedRowOutputStream(std::ostream & ostr_, SharedPtr<DataTypes> data_types_);
|
||||
|
||||
void writeField(const Field & field);
|
||||
void writeFieldDelimiter();
|
||||
@ -28,7 +28,7 @@ public:
|
||||
|
||||
private:
|
||||
std::ostream & ostr;
|
||||
SharedPtr<ColumnTypes> column_types;
|
||||
SharedPtr<DataTypes> data_types;
|
||||
size_t field_number;
|
||||
};
|
||||
|
||||
|
20
dbms/include/DB/DataTypes/DataTypes.h
Normal file
20
dbms/include/DB/DataTypes/DataTypes.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef DBMS_DATA_TYPES_DATATYPES_H
|
||||
#define DBMS_DATA_TYPES_DATATYPES_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <Poco/SharedPtr.h>
|
||||
|
||||
#include <DB/DataTypes/IDataType.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
using Poco::SharedPtr;
|
||||
|
||||
typedef std::vector<SharedPtr<IDataType> > DataTypes;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
35
dbms/include/DB/DataTypes/DataTypesNumberFixed.h
Normal file
35
dbms/include/DB/DataTypes/DataTypesNumberFixed.h
Normal file
@ -0,0 +1,35 @@
|
||||
#ifndef DBMS_DATA_TYPES_NUMBER_FIXED_H
|
||||
#define DBMS_DATA_TYPES_NUMBER_FIXED_H
|
||||
|
||||
#include <DB/Core/Column.h>
|
||||
#include <DB/DataTypes/IDataTypeNumberFixed.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
/** Типы столбцов для чисел фиксированной ширины. */
|
||||
|
||||
#define DEFINE_DATA_TYPE_NUMBER_FIXED(TYPE) \
|
||||
class DataType ## TYPE : public IDataTypeNumberFixed<TYPE, TYPE ## Column> \
|
||||
{ \
|
||||
public: \
|
||||
std::string getName() const { return #TYPE; } \
|
||||
};
|
||||
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(UInt8);
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(UInt16);
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(UInt32);
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(UInt64);
|
||||
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(Int8);
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(Int16);
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(Int32);
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(Int64);
|
||||
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(Float32);
|
||||
DEFINE_DATA_TYPE_NUMBER_FIXED(Float64);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
@ -1,5 +1,5 @@
|
||||
#ifndef DBMS_COLUMN_TYPES_ICOLUMNTYPE_H
|
||||
#define DBMS_COLUMN_TYPES_ICOLUMNTYPE_H
|
||||
#ifndef DBMS_DATA_TYPES_IDATATYPE_H
|
||||
#define DBMS_DATA_TYPES_IDATATYPE_H
|
||||
|
||||
#include <ostream>
|
||||
|
||||
@ -14,7 +14,7 @@ namespace DB
|
||||
/** Метаданные типа для хранения (столбца).
|
||||
* Содержит методы для сериализации/десериализации.
|
||||
*/
|
||||
class IColumnType
|
||||
class IDataType
|
||||
{
|
||||
public:
|
||||
/// Основное имя типа (например, BIGINT UNSIGNED).
|
||||
@ -53,7 +53,7 @@ public:
|
||||
virtual void deserializeTextQuoted(Field & field, std::istream & istr, bool compatible = false) const = 0;
|
||||
|
||||
|
||||
virtual ~IColumnType() {}
|
||||
virtual ~IDataType() {}
|
||||
};
|
||||
|
||||
}
|
@ -1,18 +1,18 @@
|
||||
#ifndef DBMS_COLUMN_TYPES_ICOLUMNTYPE_NUMBER_H
|
||||
#define DBMS_COLUMN_TYPES_ICOLUMNTYPE_NUMBER_H
|
||||
#ifndef DBMS_DATA_TYPES_IDATATYPE_NUMBER_H
|
||||
#define DBMS_DATA_TYPES_IDATATYPE_NUMBER_H
|
||||
|
||||
#include <DB/ColumnTypes/IColumnType.h>
|
||||
#include <DB/DataTypes/IDataType.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
|
||||
/** Реализует часть интерфейса IColumnType, общую для всяких чисел
|
||||
/** Реализует часть интерфейса IDataType, общую для всяких чисел
|
||||
* - ввод и вывод в текстовом виде.
|
||||
*/
|
||||
template <typename FieldType>
|
||||
class IColumnTypeNumber : public IColumnType
|
||||
class IDataTypeNumber : public IDataType
|
||||
{
|
||||
public:
|
||||
void serializeText(const Field & field, std::ostream & ostr) const
|
@ -1,17 +1,17 @@
|
||||
#ifndef DBMS_COLUMN_TYPES_ICOLUMNTYPE_NUMBER_FIXED_H
|
||||
#define DBMS_COLUMN_TYPES_ICOLUMNTYPE_NUMBER_FIXED_H
|
||||
#ifndef DBMS_DATA_TYPES_IDATATYPE_NUMBER_FIXED_H
|
||||
#define DBMS_DATA_TYPES_IDATATYPE_NUMBER_FIXED_H
|
||||
|
||||
#include <Poco/BinaryWriter.h>
|
||||
#include <Poco/BinaryReader.h>
|
||||
|
||||
#include <DB/ColumnTypes/IColumnTypeNumber.h>
|
||||
#include <DB/DataTypes/IDataTypeNumber.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
{
|
||||
|
||||
|
||||
/** Реализует часть интерфейса IColumnType, общую для всяких чисел фиксированной ширины
|
||||
/** Реализует часть интерфейса IDataType, общую для всяких чисел фиксированной ширины
|
||||
* - ввод и вывод в текстовом и бинарном виде.
|
||||
* Остаётся лишь чисто виртуальный метод getName().
|
||||
*
|
||||
@ -19,7 +19,7 @@ namespace DB
|
||||
* (см. Field.h, Column.h)
|
||||
*/
|
||||
template <typename FieldType, typename ColumnType>
|
||||
class IColumnTypeNumberFixed : public IColumnTypeNumber<FieldType>
|
||||
class IDataTypeNumberFixed : public IDataTypeNumber<FieldType>
|
||||
{
|
||||
public:
|
||||
/** Формат платформозависимый (зависит от представления данных в памяти).
|
@ -1,31 +0,0 @@
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
#include <Poco/Stopwatch.h>
|
||||
|
||||
#include <DB/ColumnTypes/ColumnTypesNumberFixed.h>
|
||||
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
DB::Column column = DB::UInt64Column();
|
||||
DB::UInt64Column & vec = boost::get<DB::UInt64Column>(column);
|
||||
DB::ColumnTypeUInt64 column_type;
|
||||
|
||||
Poco::Stopwatch stopwatch;
|
||||
size_t n = 10000000;
|
||||
|
||||
vec.resize(n);
|
||||
for (size_t i = 0; i < n; ++i)
|
||||
vec[i] = i;
|
||||
|
||||
std::ofstream ostr("/dev/null");
|
||||
|
||||
stopwatch.restart();
|
||||
column_type.serializeBinary(column, ostr);
|
||||
stopwatch.stop();
|
||||
|
||||
std::cout << "Elapsed: " << static_cast<double>(stopwatch.elapsed()) / 1000000 << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
@ -7,15 +7,15 @@ namespace DB
|
||||
using Poco::SharedPtr;
|
||||
|
||||
|
||||
TabSeparatedRowOutputStream::TabSeparatedRowOutputStream(std::ostream & ostr_, SharedPtr<ColumnTypes> column_types_)
|
||||
: ostr(ostr_), column_types(column_types_), field_number(0)
|
||||
TabSeparatedRowOutputStream::TabSeparatedRowOutputStream(std::ostream & ostr_, SharedPtr<DataTypes> data_types_)
|
||||
: ostr(ostr_), data_types(data_types_), field_number(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void TabSeparatedRowOutputStream::writeField(const Field & field)
|
||||
{
|
||||
column_types->at(field_number)->serializeTextEscaped(field, ostr);
|
||||
data_types->at(field_number)->serializeTextEscaped(field, ostr);
|
||||
++field_number;
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
#include <DB/Core/Exception.h>
|
||||
#include <DB/Core/ErrorCodes.h>
|
||||
#include <DB/ColumnTypes/ColumnTypesNumberFixed.h>
|
||||
#include <DB/DataTypes/DataTypesNumberFixed.h>
|
||||
#include <DB/Storages/StorageSystemNumbers.h>
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ Block NumbersBlockInputStream::read()
|
||||
res.insert(ColumnWithNameAndType());
|
||||
ColumnWithNameAndType & column_with_name_and_type = res.getByPosition(0);
|
||||
column_with_name_and_type.name = "number";
|
||||
column_with_name_and_type.type = new ColumnTypeUInt64();
|
||||
column_with_name_and_type.type = new DataTypeUInt64();
|
||||
column_with_name_and_type.column = new Column;
|
||||
*column_with_name_and_type.column = UInt64Column(block_size);
|
||||
UInt64Column & vec = boost::get<UInt64Column>(*column_with_name_and_type.column);
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include <DB/Storages/StorageSystemNumbers.h>
|
||||
#include <DB/DataStreams/TabSeparatedRowOutputStream.h>
|
||||
#include <DB/DataStreams/copyData.h>
|
||||
#include <DB/ColumnTypes/ColumnTypesNumberFixed.h>
|
||||
#include <DB/DataTypes/DataTypesNumberFixed.h>
|
||||
|
||||
using Poco::SharedPtr;
|
||||
|
||||
@ -19,8 +19,8 @@ int main(int argc, char ** argv)
|
||||
DB::ColumnNames column_names;
|
||||
column_names.push_back("number");
|
||||
|
||||
Poco::SharedPtr<DB::ColumnTypes> column_types = new DB::ColumnTypes;
|
||||
column_types->push_back(new DB::ColumnTypeUInt64);
|
||||
Poco::SharedPtr<DB::DataTypes> column_types = new DB::DataTypes;
|
||||
column_types->push_back(new DB::DataTypeUInt64);
|
||||
|
||||
SharedPtr<DB::IBlockInputStream> input = table.read(column_names, 0);
|
||||
DB::TabSeparatedRowOutputStream output(std::cout, column_types);
|
||||
|
Loading…
Reference in New Issue
Block a user