dbms: fixed exception in TinyLog when it is empty [#METR-12532]

This commit is contained in:
Pavel Kartavyy 2014-08-29 22:44:44 +04:00
parent 3258e4a160
commit b5624cd57f
4 changed files with 14 additions and 1 deletions

View File

@ -144,6 +144,8 @@ public:
Files_t & getFiles(); Files_t & getFiles();
std::string full_path() { return path + escapeForFileName(name) + '/';}
private: private:
String path; String path;
String name; String name;

View File

@ -16,7 +16,7 @@
#include <DB/Columns/ColumnNested.h> #include <DB/Columns/ColumnNested.h>
#include <DB/Storages/StorageTinyLog.h> #include <DB/Storages/StorageTinyLog.h>
#include <Poco/DirectoryIterator.h>
#define DBMS_STORAGE_LOG_DATA_FILE_EXTENSION ".bin" #define DBMS_STORAGE_LOG_DATA_FILE_EXTENSION ".bin"
@ -61,6 +61,12 @@ Block TinyLogBlockInputStream::readImpl()
return res; return res;
} }
{
/// если в папке нет файлов, то это значит, что таблица пока пуста
if (Poco::DirectoryIterator(storage.full_path()) == Poco::DirectoryIterator())
return res;
}
/// Если файлы не открыты, то открываем их. /// Если файлы не открыты, то открываем их.
if (streams.empty()) if (streams.empty())
for (Names::const_iterator it = column_names.begin(); it != column_names.end(); ++it) for (Names::const_iterator it = column_names.begin(); it != column_names.end(); ++it)

View File

@ -0,0 +1,5 @@
CREATE TABLE IF NOT EXISTS test_empty_tiny_log(A UInt8) Engine = TinyLog;
SELECT A FROM test_empty_tiny_log;
DROP TABLE test_empty_tiny_log;