summaryrefslogtreecommitdiffstats
path: root/contrib/clickhouse/src/Processors/Formats/Impl/SQLInsertRowOutputFormat.cpp
diff options
context:
space:
mode:
authorvitalyisaev <[email protected]>2023-11-14 09:58:56 +0300
committervitalyisaev <[email protected]>2023-11-14 10:20:20 +0300
commitc2b2dfd9827a400a8495e172a56343462e3ceb82 (patch)
treecd4e4f597d01bede4c82dffeb2d780d0a9046bd0 /contrib/clickhouse/src/Processors/Formats/Impl/SQLInsertRowOutputFormat.cpp
parentd4ae8f119e67808cb0cf776ba6e0cf95296f2df7 (diff)
YQ Connector: move tests from yql to ydb (OSS)
Перенос папки с тестами на Коннектор из папки yql в папку ydb (синхронизируется с github).
Diffstat (limited to 'contrib/clickhouse/src/Processors/Formats/Impl/SQLInsertRowOutputFormat.cpp')
-rw-r--r--contrib/clickhouse/src/Processors/Formats/Impl/SQLInsertRowOutputFormat.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/contrib/clickhouse/src/Processors/Formats/Impl/SQLInsertRowOutputFormat.cpp b/contrib/clickhouse/src/Processors/Formats/Impl/SQLInsertRowOutputFormat.cpp
new file mode 100644
index 00000000000..6f490c8b085
--- /dev/null
+++ b/contrib/clickhouse/src/Processors/Formats/Impl/SQLInsertRowOutputFormat.cpp
@@ -0,0 +1,105 @@
+#include <Processors/Formats/Impl/SQLInsertRowOutputFormat.h>
+#include <IO/WriteHelpers.h>
+
+
+namespace DB
+{
+
+SQLInsertRowOutputFormat::SQLInsertRowOutputFormat(WriteBuffer & out_, const Block & header_, const FormatSettings & format_settings_)
+ : IRowOutputFormat(header_, out_), column_names(header_.getNames()), format_settings(format_settings_)
+{
+}
+
+void SQLInsertRowOutputFormat::writeRowStartDelimiter()
+{
+ if (rows_in_line == 0)
+ printLineStart();
+ writeChar('(', out);
+}
+
+void SQLInsertRowOutputFormat::printLineStart()
+{
+ if (format_settings.sql_insert.use_replace)
+ writeCString("REPLACE INTO ", out);
+ else
+ writeCString("INSERT INTO ", out);
+
+ writeString(format_settings.sql_insert.table_name, out);
+
+ if (format_settings.sql_insert.include_column_names)
+ printColumnNames();
+
+ writeCString(" VALUES ", out);
+}
+
+void SQLInsertRowOutputFormat::printColumnNames()
+{
+ writeCString(" (", out);
+ for (size_t i = 0; i != column_names.size(); ++i)
+ {
+ if (format_settings.sql_insert.quote_names)
+ writeChar('`', out);
+
+ writeString(column_names[i], out);
+
+ if (format_settings.sql_insert.quote_names)
+ writeChar('`', out);
+
+ if (i + 1 != column_names.size())
+ writeCString(", ", out);
+ }
+ writeChar(')', out);
+}
+
+void SQLInsertRowOutputFormat::writeField(const IColumn & column, const ISerialization & serialization, size_t row_num)
+{
+ serialization.serializeTextQuoted(column, row_num, out, format_settings);
+}
+
+void SQLInsertRowOutputFormat::writeFieldDelimiter()
+{
+ writeCString(", ", out);
+}
+
+void SQLInsertRowOutputFormat::writeRowEndDelimiter()
+{
+ writeChar(')', out);
+ ++rows_in_line;
+}
+
+void SQLInsertRowOutputFormat::writeRowBetweenDelimiter()
+{
+ if (rows_in_line >= format_settings.sql_insert.max_batch_size)
+ {
+ writeCString(";\n", out);
+ rows_in_line = 0;
+ }
+ else
+ {
+ writeCString(", ", out);
+ }
+}
+
+void SQLInsertRowOutputFormat::writeSuffix()
+{
+ writeCString(";\n", out);
+}
+
+void SQLInsertRowOutputFormat::resetFormatterImpl()
+{
+ rows_in_line = 0;
+}
+
+void registerOutputFormatSQLInsert(FormatFactory & factory)
+{
+ factory.registerOutputFormat("SQLInsert", [](
+ WriteBuffer & buf,
+ const Block & sample,
+ const FormatSettings & settings)
+ {
+ return std::make_shared<SQLInsertRowOutputFormat>(buf, sample, settings);
+ });
+}
+
+
+}