dbms: development.

This commit is contained in:
Alexey Milovidov 2010-03-05 17:38:01 +00:00
parent d741d53889
commit bee9f2ea55
14 changed files with 84 additions and 115 deletions

View File

@ -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

View File

@ -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

View File

@ -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;
};

View File

@ -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;
};

View File

@ -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;
};

View 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

View 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

View File

@ -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() {}
};
}

View File

@ -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

View File

@ -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:
/** Формат платформозависимый (зависит от представления данных в памяти).

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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);