2011-09-19 01:42:16 +00:00
|
|
|
#pragma once
|
2010-03-04 19:20:28 +00:00
|
|
|
|
2013-01-07 00:57:43 +00:00
|
|
|
#include <boost/noncopyable.hpp>
|
2016-05-28 12:22:22 +00:00
|
|
|
#include <memory>
|
2017-02-02 16:30:27 +00:00
|
|
|
#include <string>
|
2010-03-04 19:20:28 +00:00
|
|
|
|
2017-12-14 20:58:18 +00:00
|
|
|
#include <Columns/IColumn.h>
|
|
|
|
|
2010-03-04 19:20:28 +00:00
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
2018-12-06 17:20:17 +00:00
|
|
|
/// Contains extra information about read data.
|
2018-12-04 14:09:47 +00:00
|
|
|
struct RowReadExtension
|
2018-07-04 17:02:47 +00:00
|
|
|
{
|
2018-12-06 17:20:17 +00:00
|
|
|
/// IRowInputStream.read() output. It contains non zero for columns that actually read from the source and zero otherwise.
|
|
|
|
/// It's used to attach defaults for partially filled rows.
|
2019-06-20 12:46:36 +00:00
|
|
|
/// Can be empty, this means that all columns are read.
|
2018-11-08 15:51:31 +00:00
|
|
|
std::vector<UInt8> read_columns;
|
2018-07-04 17:02:47 +00:00
|
|
|
};
|
2016-02-16 16:39:39 +00:00
|
|
|
|
2017-01-27 04:29:47 +00:00
|
|
|
/** Interface of stream, that allows to read data by rows.
|
2010-03-04 19:20:28 +00:00
|
|
|
*/
|
2013-01-07 00:57:43 +00:00
|
|
|
class IRowInputStream : private boost::noncopyable
|
2010-03-04 19:20:28 +00:00
|
|
|
{
|
|
|
|
public:
|
2017-12-14 20:58:18 +00:00
|
|
|
/** Read next row and append it to the columns.
|
2017-04-01 07:20:54 +00:00
|
|
|
* If no more rows - return false.
|
|
|
|
*/
|
2018-12-04 14:09:47 +00:00
|
|
|
virtual bool read(MutableColumns & columns, RowReadExtension & extra) = 0;
|
2017-04-01 07:20:54 +00:00
|
|
|
|
2018-06-03 17:43:56 +00:00
|
|
|
virtual void readPrefix() {} /// delimiter before begin of result
|
|
|
|
virtual void readSuffix() {} /// delimiter after end of result
|
2017-04-01 07:20:54 +00:00
|
|
|
|
|
|
|
/// Skip data until next row.
|
|
|
|
/// This is intended for text streams, that allow skipping of errors.
|
|
|
|
/// By default - throws not implemented exception.
|
|
|
|
virtual bool allowSyncAfterError() const { return false; }
|
|
|
|
virtual void syncAfterError();
|
|
|
|
|
|
|
|
/// In case of parse error, try to roll back and parse last one or two rows very carefully
|
|
|
|
/// and collect as much as possible diagnostic information about error.
|
|
|
|
/// If not implemented, returns empty string.
|
2018-06-03 17:43:56 +00:00
|
|
|
virtual std::string getDiagnosticInfo() { return {}; }
|
2017-04-01 07:20:54 +00:00
|
|
|
|
|
|
|
virtual ~IRowInputStream() {}
|
2010-03-04 19:20:28 +00:00
|
|
|
};
|
|
|
|
|
2016-05-28 12:22:22 +00:00
|
|
|
using RowInputStreamPtr = std::shared_ptr<IRowInputStream>;
|
2011-10-24 12:10:59 +00:00
|
|
|
|
2010-03-04 19:20:28 +00:00
|
|
|
}
|