This commit is contained in:
Alexander Tokmakov 2020-01-20 23:08:47 +03:00
parent 1e72b37a21
commit 05c4405b65
5 changed files with 44 additions and 0 deletions

View File

@ -9,6 +9,7 @@ namespace DB
DatabaseMemory::DatabaseMemory(const String & name_)
: DatabaseWithOwnTablesBase(name_, "DatabaseMemory(" + name_ + ")")
, data_path("data/" + escapeForFileName(database_name) + "/")
{}
void DatabaseMemory::createTable(

View File

@ -1,6 +1,8 @@
#pragma once
#include <Databases/DatabasesCommon.h>
#include <Common/escapeForFileName.h>
#include <Parsers/ASTCreateQuery.h>
namespace Poco { class Logger; }
@ -32,6 +34,16 @@ public:
const String & table_name) override;
ASTPtr getCreateDatabaseQuery(const Context & /*context*/) const override;
/// DatabaseMemory allows to create tables, which store data on disk.
/// It's needed to create such tables in default database of clickhouse-local.
/// TODO May be it's better to use DiskMemory for such tables.
/// To save data on disk it's possible to explicitly CREATE DATABASE db ENGINE=Ordinary in clickhouse-local.
String getTableDataPath(const String & table_name) const override { return data_path + escapeForFileName(table_name) + "/"; }
String getTableDataPath(const ASTCreateQuery & query) const override { return getTableDataPath(query.table); }
private:
String data_path;
};
}

View File

@ -132,6 +132,12 @@ StoragePtr StorageFactory::get(
}
}
if (relative_data_path.empty())
{
if (endsWith(name, "MergeTree") || endsWith(name, "Log") || name == "Join" || name == "Set")
throw Exception("Data path cannot be empty for table with engine " + name, ErrorCodes::LOGICAL_ERROR);
}
auto it = storages.find(name);
if (it == storages.end())
{

View File

@ -0,0 +1,7 @@
CREATE DATABASE memory_01069 ENGINE = Memory()
1
2
3
4
3
4

View File

@ -0,0 +1,18 @@
DROP DATABASE IF EXISTS memory_01069;
CREATE DATABASE memory_01069 ENGINE = Memory;
SHOW CREATE DATABASE memory_01069;
CREATE TABLE memory_01069.mt (n UInt8) ENGINE = MergeTree() ORDER BY n;
CREATE TABLE memory_01069.file (n UInt8) ENGINE = File(CSV);
INSERT INTO memory_01069.mt VALUES (1), (2);
INSERT INTO memory_01069.file VALUES (3), (4);
SELECT * FROM memory_01069.mt ORDER BY n;
SELECT * FROM memory_01069.file ORDER BY n;
DROP TABLE memory_01069.mt;
SELECT * FROM memory_01069.mt ORDER BY n; -- { serverError 60 }
SELECT * FROM memory_01069.file ORDER BY n;
DROP DATABASE memory_01069;