From 869a6f6aa040af26ba45e6751e47637a1f409c34 Mon Sep 17 00:00:00 2001 From: Evgeniia Sudarikova Date: Thu, 12 Nov 2020 16:25:05 +0300 Subject: [PATCH 01/99] Add EN and RU description --- docs/en/operations/settings/settings.md | 10 ++++++++++ docs/ru/operations/settings/settings.md | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/docs/en/operations/settings/settings.md b/docs/en/operations/settings/settings.md index f9c3c8a5d75..f720024f524 100644 --- a/docs/en/operations/settings/settings.md +++ b/docs/en/operations/settings/settings.md @@ -2233,4 +2233,14 @@ Possible values: Default value: `1`. +## output_format_tsv_null_representation {#output_format_tsv_null_representation} + +Allows configurable `NULL` representation for [TSV](../../interfaces/formats.md#tabseparated) output format. The setting only controls output format and `\N` is the only supported `NULL` representation for TSV input format. + +Possible values: + +- `\N` — Enabled. + +Default value: `\N`. + [Original article](https://clickhouse.tech/docs/en/operations/settings/settings/) diff --git a/docs/ru/operations/settings/settings.md b/docs/ru/operations/settings/settings.md index 39a996cb44e..9e192348f51 100644 --- a/docs/ru/operations/settings/settings.md +++ b/docs/ru/operations/settings/settings.md @@ -2095,4 +2095,14 @@ SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x); Значение по умолчанию: `1`. +## output_format_tsv_null_representation {#output_format_tsv_null_representation} + +Позволяет настраивать представление `NULL` для формата выходных данных [TSV](../../interfaces/formats.md#tabseparated). Настройка управляет форматом выходных данных, `\N` является единственным поддерживаемым представлением для формата входных данных TSV. + +Возможные значения: + +- `\N` — включено. + +Значение по умолчанию: `\N`. + [Оригинальная статья](https://clickhouse.tech/docs/ru/operations/settings/settings/) From 9961182e86732f155a2193ce3c7c6286f37daccd Mon Sep 17 00:00:00 2001 From: Amos Bird Date: Mon, 9 Nov 2020 20:31:51 +0800 Subject: [PATCH 02/99] Fix verbatim partition pruner --- src/Storages/MergeTree/KeyCondition.cpp | 7 +++++++ .../0_stateless/01540_verbatim_partition_pruning.reference | 1 + .../0_stateless/01540_verbatim_partition_pruning.sql | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/src/Storages/MergeTree/KeyCondition.cpp b/src/Storages/MergeTree/KeyCondition.cpp index 4caeafc093f..b89c68617b7 100644 --- a/src/Storages/MergeTree/KeyCondition.cpp +++ b/src/Storages/MergeTree/KeyCondition.cpp @@ -714,6 +714,13 @@ bool KeyCondition::canConstantBeWrappedByFunctions( break; } } + + // Check if we have enough columns to fulfill the action. + for (const auto & name : action.getNeededColumns()) + { + if (!transform.has(name)) + return false; + } action.execute(transform, true); } diff --git a/tests/queries/0_stateless/01540_verbatim_partition_pruning.reference b/tests/queries/0_stateless/01540_verbatim_partition_pruning.reference index 90888a9eaf5..b9338e6a9c4 100644 --- a/tests/queries/0_stateless/01540_verbatim_partition_pruning.reference +++ b/tests/queries/0_stateless/01540_verbatim_partition_pruning.reference @@ -1,3 +1,4 @@ 2 3 9 5 8 4 +1 2 3 diff --git a/tests/queries/0_stateless/01540_verbatim_partition_pruning.sql b/tests/queries/0_stateless/01540_verbatim_partition_pruning.sql index 2ef9c9e8917..16ab51d1160 100644 --- a/tests/queries/0_stateless/01540_verbatim_partition_pruning.sql +++ b/tests/queries/0_stateless/01540_verbatim_partition_pruning.sql @@ -21,3 +21,10 @@ select * from xy where intHash64(x) % 2 = intHash64(2) % 2; select * from xy where x = 8; drop table if exists xy; + +-- Test if we provide enough columns to generate a partition value +drop table if exists xyz; +create table xyz(x int, y int, z int) engine MergeTree partition by if(toUInt8(x), y, z) order by x settings index_granularity = 1; +insert into xyz values (1, 2, 3); +select * from xyz where y = 2; +drop table if exists xyz; From bef6463cb4546ac3e1ec0c1d8171fc791675d6e0 Mon Sep 17 00:00:00 2001 From: Ivan Lezhankin Date: Fri, 13 Nov 2020 18:50:50 +0300 Subject: [PATCH 03/99] Implement tcpPort() function --- .../registerFunctionsMiscellaneous.cpp | 2 + src/Functions/tcpPort.cpp | 49 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/Functions/tcpPort.cpp diff --git a/src/Functions/registerFunctionsMiscellaneous.cpp b/src/Functions/registerFunctionsMiscellaneous.cpp index 86c06b47b1d..2c0baa7bba4 100644 --- a/src/Functions/registerFunctionsMiscellaneous.cpp +++ b/src/Functions/registerFunctionsMiscellaneous.cpp @@ -65,6 +65,7 @@ void registerFunctionGlobalVariable(FunctionFactory &); void registerFunctionHasThreadFuzzer(FunctionFactory &); void registerFunctionInitializeAggregation(FunctionFactory &); void registerFunctionErrorCodeToName(FunctionFactory &); +void registerFunctionTcpPort(FunctionFactory &); #if USE_ICU void registerFunctionConvertCharset(FunctionFactory &); @@ -130,6 +131,7 @@ void registerFunctionsMiscellaneous(FunctionFactory & factory) registerFunctionHasThreadFuzzer(factory); registerFunctionInitializeAggregation(factory); registerFunctionErrorCodeToName(factory); + registerFunctionTcpPort(factory); #if USE_ICU registerFunctionConvertCharset(factory); diff --git a/src/Functions/tcpPort.cpp b/src/Functions/tcpPort.cpp new file mode 100644 index 00000000000..bd7ab0361e2 --- /dev/null +++ b/src/Functions/tcpPort.cpp @@ -0,0 +1,49 @@ +#include +#include + + +namespace DB +{ + +namespace +{ + +class FunctionTcpPort : public IFunction +{ +public: + static constexpr auto name = "tcpPort"; + + static FunctionPtr create(const Context & context) + { + return std::make_shared(context.getTCPPort()); + } + + explicit FunctionTcpPort(UInt16 port_) : port(port_) + { + } + + String getName() const override { return name; } + + size_t getNumberOfArguments() const override { return 0; } + + DataTypePtr getReturnTypeImpl(const DataTypes &) const override { return std::make_shared(); } + + bool isDeterministic() const override { return false; } + + ColumnPtr executeImpl(ColumnsWithTypeAndName &, const DataTypePtr &, size_t input_rows_count) const override + { + return DataTypeUInt16().createColumnConst(input_rows_count, port); + } + +private: + const UInt64 port; +}; + +} + +void registerFunctionTcpPort(FunctionFactory & factory) +{ + factory.registerFunction(); +} + +} From 6ef93ac73cac86399d8f7a674c46f03df4cb79bd Mon Sep 17 00:00:00 2001 From: zhang2014 Date: Mon, 16 Nov 2020 21:46:36 +0800 Subject: [PATCH 04/99] Try fix MaterializeMySQL SYNC with modify binlog_checksum --- src/Core/MySQL/MySQLClient.cpp | 17 ++++++++--- src/Core/MySQL/MySQLClient.h | 4 ++- src/Core/MySQL/MySQLReplication.cpp | 3 +- src/Core/MySQL/MySQLReplication.h | 4 +++ src/Core/tests/mysql_protocol.cpp | 6 ++-- src/Databases/MySQL/MaterializeMetadata.cpp | 24 ++++++++++++++++ src/Databases/MySQL/MaterializeMetadata.h | 3 ++ .../MySQL/MaterializeMySQLSyncThread.cpp | 27 ++++++++++++------ src/IO/MySQLBinlogEventReadBuffer.cpp | 28 +++++++++++-------- src/IO/MySQLBinlogEventReadBuffer.h | 6 ++-- .../gtest_mysql_binlog_event_read_buffer.cpp | 8 +++--- .../materialize_with_ddl.py | 21 ++++++++++++++ .../test_materialize_mysql_database/test.py | 9 ++++++ utils/check-mysql-binlog/main.cpp | 5 +--- 14 files changed, 126 insertions(+), 39 deletions(-) diff --git a/src/Core/MySQL/MySQLClient.cpp b/src/Core/MySQL/MySQLClient.cpp index 9cb21a2d39a..f65fbe62274 100644 --- a/src/Core/MySQL/MySQLClient.cpp +++ b/src/Core/MySQL/MySQLClient.cpp @@ -6,6 +6,7 @@ #include #include #include +#include namespace DB { @@ -132,11 +133,19 @@ void MySQLClient::ping() writeCommand(Command::COM_PING, ""); } -void MySQLClient::startBinlogDumpGTID(UInt32 slave_id, String replicate_db, String gtid_str) +void MySQLClient::setBinlogChecksum(const String & binlog_checksum) { - /// Set binlog checksum to CRC32. - String checksum = "CRC32"; - writeCommand(Command::COM_QUERY, "SET @master_binlog_checksum = '" + checksum + "'"); + replication.setChecksumSignatureLength(Poco::toUpper(binlog_checksum) == "NONE" ? 0 : 4); +} + +void MySQLClient::startBinlogDumpGTID(UInt32 slave_id, String replicate_db, String gtid_str, const String & binlog_checksum) +{ + /// Maybe CRC32 or NONE. mysqlbinlog.cc use NONE, see its below comments: + /// Make a notice to the server that this client is checksum-aware. + /// It does not need the first fake Rotate necessary checksummed. + writeCommand(Command::COM_QUERY, "SET @master_binlog_checksum = 'CRC32'"); + + setBinlogChecksum(binlog_checksum); /// Set heartbeat 1s. UInt64 period_ns = (1 * 1e9); diff --git a/src/Core/MySQL/MySQLClient.h b/src/Core/MySQL/MySQLClient.h index a31794acc42..5835e980149 100644 --- a/src/Core/MySQL/MySQLClient.h +++ b/src/Core/MySQL/MySQLClient.h @@ -29,10 +29,12 @@ public: void disconnect(); void ping(); + void setBinlogChecksum(const String & binlog_checksum); + /// Start replication stream by GTID. /// replicate_db: replication database schema, events from other databases will be ignored. /// gtid: executed gtid sets format like 'hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh:x-y'. - void startBinlogDumpGTID(UInt32 slave_id, String replicate_db, String gtid); + void startBinlogDumpGTID(UInt32 slave_id, String replicate_db, String gtid, const String & binlog_checksum); BinlogEventPtr readOneBinlogEvent(UInt64 milliseconds = 0); Position getPosition() const { return replication.getPosition(); } diff --git a/src/Core/MySQL/MySQLReplication.cpp b/src/Core/MySQL/MySQLReplication.cpp index 6ff1670777a..a33d65fcbd5 100644 --- a/src/Core/MySQL/MySQLReplication.cpp +++ b/src/Core/MySQL/MySQLReplication.cpp @@ -57,7 +57,6 @@ namespace MySQLReplication payload.readStrict(reinterpret_cast(&create_timestamp), 4); payload.readStrict(reinterpret_cast(&event_header_length), 1); assert(event_header_length == EVENT_HEADER_LENGTH); - readStringUntilEOF(event_type_header_length, payload); } @@ -745,7 +744,7 @@ namespace MySQLReplication // skip the generic response packets header flag. payload.ignore(1); - MySQLBinlogEventReadBuffer event_payload(payload); + MySQLBinlogEventReadBuffer event_payload(payload, checksum_signature_length); EventHeader event_header; event_header.parse(event_payload); diff --git a/src/Core/MySQL/MySQLReplication.h b/src/Core/MySQL/MySQLReplication.h index 394ac729d1b..bbefb368aaf 100644 --- a/src/Core/MySQL/MySQLReplication.h +++ b/src/Core/MySQL/MySQLReplication.h @@ -526,6 +526,8 @@ namespace MySQLReplication virtual BinlogEventPtr readOneEvent() = 0; virtual void setReplicateDatabase(String db) = 0; virtual void setGTIDSets(GTIDSets sets) = 0; + virtual void setChecksumSignatureLength(size_t checksum_signature_length_) = 0; + virtual ~IFlavor() override = default; }; @@ -538,12 +540,14 @@ namespace MySQLReplication BinlogEventPtr readOneEvent() override { return event; } void setReplicateDatabase(String db) override { replicate_do_db = std::move(db); } void setGTIDSets(GTIDSets sets) override { position.gtid_sets = std::move(sets); } + void setChecksumSignatureLength(size_t checksum_signature_length_) override { checksum_signature_length = checksum_signature_length_; } private: Position position; BinlogEventPtr event; String replicate_do_db; std::shared_ptr table_map; + size_t checksum_signature_length = 4; inline bool do_replicate() { return (replicate_do_db.empty() || table_map->schema == replicate_do_db); } }; diff --git a/src/Core/tests/mysql_protocol.cpp b/src/Core/tests/mysql_protocol.cpp index 9dc46891241..98555ddcfe0 100644 --- a/src/Core/tests/mysql_protocol.cpp +++ b/src/Core/tests/mysql_protocol.cpp @@ -304,7 +304,8 @@ int main(int argc, char ** argv) "user", boost::program_options::value()->default_value("root"), "master user")( "password", boost::program_options::value()->required(), "master password")( "gtid", boost::program_options::value()->default_value(""), "executed GTID sets")( - "db", boost::program_options::value()->required(), "replicate do db"); + "db", boost::program_options::value()->required(), "replicate do db")( + "binlog_checksum", boost::program_options::value()->default_value("CRC32"), "master binlog_checksum"); boost::program_options::variables_map options; boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), options); @@ -319,6 +320,7 @@ int main(int argc, char ** argv) auto master_password = options.at("password").as(); auto gtid_sets = options.at("gtid").as(); auto replicate_db = options.at("db").as(); + auto binlog_checksum = options.at("binlog_checksum").as(); std::cerr << "Master Host: " << host << ", Port: " << port << ", User: " << master_user << ", Password: " << master_password << ", Replicate DB: " << replicate_db << ", GTID: " << gtid_sets << std::endl; @@ -328,7 +330,7 @@ int main(int argc, char ** argv) /// Connect to the master. slave.connect(); - slave.startBinlogDumpGTID(slave_id, replicate_db, gtid_sets); + slave.startBinlogDumpGTID(slave_id, replicate_db, gtid_sets, binlog_checksum); WriteBufferFromOStream cerr(std::cerr); diff --git a/src/Databases/MySQL/MaterializeMetadata.cpp b/src/Databases/MySQL/MaterializeMetadata.cpp index 3c5bfdec594..cacf03675b4 100644 --- a/src/Databases/MySQL/MaterializeMetadata.cpp +++ b/src/Databases/MySQL/MaterializeMetadata.cpp @@ -88,6 +88,29 @@ void MaterializeMetadata::fetchMasterStatus(mysqlxx::PoolWithFailover::Entry & c executed_gtid_set = (*master_status.getByPosition(4).column)[0].safeGet(); } +void MaterializeMetadata::fetchMasterVariablesValue(const mysqlxx::PoolWithFailover::Entry & connection) +{ + Block variables_header{ + {std::make_shared(), "Variable_name"}, + {std::make_shared(), "Value"} + }; + + const String & fetch_query = "SHOW VARIABLES WHERE Variable_name = 'binlog_checksum'"; + MySQLBlockInputStream variables_input(connection, fetch_query, variables_header, DEFAULT_BLOCK_SIZE); + + while (Block variables_block = variables_input.read()) + { + ColumnPtr variables_name = variables_block.getByName("Variable_name").column; + ColumnPtr variables_value = variables_block.getByName("Value").column; + + for (size_t index = 0; index < variables_block.rows(); ++index) + { + if (variables_name->getDataAt(index) == "binlog_checksum") + binlog_checksum = variables_value->getDataAt(index).toString(); + } + } +} + static Block getShowMasterLogHeader(const String & mysql_version) { if (startsWith(mysql_version, "5.")) @@ -193,6 +216,7 @@ MaterializeMetadata::MaterializeMetadata( locked_tables = true; fetchMasterStatus(connection); + fetchMasterVariablesValue(connection); connection->query("SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;").execute(); connection->query("START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */;").execute(); diff --git a/src/Databases/MySQL/MaterializeMetadata.h b/src/Databases/MySQL/MaterializeMetadata.h index 5e77620e365..94dfc73e5df 100644 --- a/src/Databases/MySQL/MaterializeMetadata.h +++ b/src/Databases/MySQL/MaterializeMetadata.h @@ -34,10 +34,13 @@ struct MaterializeMetadata size_t data_version = 1; size_t meta_version = 2; + String binlog_checksum = "CRC32"; std::unordered_map need_dumping_tables; void fetchMasterStatus(mysqlxx::PoolWithFailover::Entry & connection); + void fetchMasterVariablesValue(const mysqlxx::PoolWithFailover::Entry & connection); + bool checkBinlogFileExists(mysqlxx::PoolWithFailover::Entry & connection, const String & mysql_version) const; void transaction(const MySQLReplication::Position & position, const std::function & fun); diff --git a/src/Databases/MySQL/MaterializeMySQLSyncThread.cpp b/src/Databases/MySQL/MaterializeMySQLSyncThread.cpp index 7e42b2548b0..223f3466da4 100644 --- a/src/Databases/MySQL/MaterializeMySQLSyncThread.cpp +++ b/src/Databases/MySQL/MaterializeMySQLSyncThread.cpp @@ -340,7 +340,7 @@ std::optional MaterializeMySQLSyncThread::prepareSynchroniz connection->query("COMMIT").execute(); client.connect(); - client.startBinlogDumpGTID(randomNumber(), mysql_database_name, metadata.executed_gtid_set); + client.startBinlogDumpGTID(randomNumber(), mysql_database_name, metadata.executed_gtid_set, metadata.binlog_checksum); return metadata; } catch (...) @@ -624,16 +624,27 @@ void MaterializeMySQLSyncThread::onEvent(Buffers & buffers, const BinlogEventPtr metadata.transaction(position_before_ddl, [&]() { buffers.commit(global_context); }); metadata.transaction(client.getPosition(),[&](){ executeDDLAtomic(query_event); }); } - else if (receive_event->header.type != HEARTBEAT_EVENT) + else { - const auto & dump_event_message = [&]() + /// MYSQL_UNHANDLED_EVENT + if (receive_event->header.type == ROTATE_EVENT) { - WriteBufferFromOwnString buf; - receive_event->dump(buf); - return buf.str(); - }; + /// Some behaviors(such as changing the value of "binlog_checksum") rotate the binlog file. + /// To ensure that the synchronization continues, we need to handle these events + metadata.fetchMasterVariablesValue(pool.get()); + client.setBinlogChecksum(metadata.binlog_checksum); + } + else if (receive_event->header.type != HEARTBEAT_EVENT) + { + const auto & dump_event_message = [&]() + { + WriteBufferFromOwnString buf; + receive_event->dump(buf); + return buf.str(); + }; - LOG_DEBUG(log, "Skip MySQL event: \n {}", dump_event_message()); + LOG_DEBUG(log, "Skip MySQL event: \n {}", dump_event_message()); + } } } diff --git a/src/IO/MySQLBinlogEventReadBuffer.cpp b/src/IO/MySQLBinlogEventReadBuffer.cpp index 3a2aba045d3..c495cbdfd90 100644 --- a/src/IO/MySQLBinlogEventReadBuffer.cpp +++ b/src/IO/MySQLBinlogEventReadBuffer.cpp @@ -4,9 +4,12 @@ namespace DB { -MySQLBinlogEventReadBuffer::MySQLBinlogEventReadBuffer(ReadBuffer & in_) - : ReadBuffer(nullptr, 0, 0), in(in_) +MySQLBinlogEventReadBuffer::MySQLBinlogEventReadBuffer(ReadBuffer & in_, size_t checksum_signature_length_) + : ReadBuffer(nullptr, 0, 0), in(in_), checksum_signature_length(checksum_signature_length_) { + if (checksum_signature_length) + checksum_buf = new char[checksum_signature_length]; + nextIfAtEnd(); } @@ -20,15 +23,15 @@ bool MySQLBinlogEventReadBuffer::nextImpl() if (checksum_buff_size == checksum_buff_limit) { - if (likely(in.available() > CHECKSUM_CRC32_SIGNATURE_LENGTH)) + if (likely(in.available() > checksum_signature_length)) { - working_buffer = ReadBuffer::Buffer(in.position(), in.buffer().end() - CHECKSUM_CRC32_SIGNATURE_LENGTH); + working_buffer = ReadBuffer::Buffer(in.position(), in.buffer().end() - checksum_signature_length); in.ignore(working_buffer.size()); return true; } - in.readStrict(checksum_buf, CHECKSUM_CRC32_SIGNATURE_LENGTH); - checksum_buff_size = checksum_buff_limit = CHECKSUM_CRC32_SIGNATURE_LENGTH; + in.readStrict(checksum_buf, checksum_signature_length); + checksum_buff_size = checksum_buff_limit = checksum_signature_length; } else { @@ -36,17 +39,17 @@ bool MySQLBinlogEventReadBuffer::nextImpl() checksum_buf[index] = checksum_buf[checksum_buff_limit + index]; checksum_buff_size -= checksum_buff_limit; - size_t read_bytes = CHECKSUM_CRC32_SIGNATURE_LENGTH - checksum_buff_size; - in.readStrict(checksum_buf + checksum_buff_size, read_bytes); /// Minimum CHECKSUM_CRC32_SIGNATURE_LENGTH bytes - checksum_buff_size = checksum_buff_limit = CHECKSUM_CRC32_SIGNATURE_LENGTH; + size_t read_bytes = checksum_signature_length - checksum_buff_size; + in.readStrict(checksum_buf + checksum_buff_size, read_bytes); /// Minimum checksum_signature_length bytes + checksum_buff_size = checksum_buff_limit = checksum_signature_length; } if (in.eof()) return false; - if (in.available() < CHECKSUM_CRC32_SIGNATURE_LENGTH) + if (in.available() < checksum_signature_length) { - size_t left_move_size = CHECKSUM_CRC32_SIGNATURE_LENGTH - in.available(); + size_t left_move_size = checksum_signature_length - in.available(); checksum_buff_limit = checksum_buff_size - left_move_size; } @@ -60,6 +63,9 @@ MySQLBinlogEventReadBuffer::~MySQLBinlogEventReadBuffer() { /// ignore last 4 bytes nextIfAtEnd(); + + if (checksum_signature_length) + delete checksum_buf; } catch (...) { diff --git a/src/IO/MySQLBinlogEventReadBuffer.h b/src/IO/MySQLBinlogEventReadBuffer.h index e9452aa551e..c1c02b6406a 100644 --- a/src/IO/MySQLBinlogEventReadBuffer.h +++ b/src/IO/MySQLBinlogEventReadBuffer.h @@ -8,19 +8,19 @@ namespace DB class MySQLBinlogEventReadBuffer : public ReadBuffer { protected: - static const size_t CHECKSUM_CRC32_SIGNATURE_LENGTH = 4; ReadBuffer & in; + size_t checksum_signature_length; size_t checksum_buff_size = 0; size_t checksum_buff_limit = 0; - char checksum_buf[CHECKSUM_CRC32_SIGNATURE_LENGTH]; + char * checksum_buf = nullptr; bool nextImpl() override; public: ~MySQLBinlogEventReadBuffer() override; - MySQLBinlogEventReadBuffer(ReadBuffer & in_); + MySQLBinlogEventReadBuffer(ReadBuffer & in_, size_t checksum_signature_length_); }; diff --git a/src/IO/tests/gtest_mysql_binlog_event_read_buffer.cpp b/src/IO/tests/gtest_mysql_binlog_event_read_buffer.cpp index f4d39c73a7c..536e5a89ca9 100644 --- a/src/IO/tests/gtest_mysql_binlog_event_read_buffer.cpp +++ b/src/IO/tests/gtest_mysql_binlog_event_read_buffer.cpp @@ -13,7 +13,7 @@ TEST(MySQLBinlogEventReadBuffer, CheckBoundary) std::vector memory_data(index, 0x01); ReadBufferFromMemory nested_in(memory_data.data(), index); - EXPECT_THROW({ MySQLBinlogEventReadBuffer binlog_in(nested_in); }, Exception); + EXPECT_THROW({ MySQLBinlogEventReadBuffer binlog_in(nested_in, 4); }, Exception); } } @@ -23,7 +23,7 @@ TEST(MySQLBinlogEventReadBuffer, NiceBufferSize) std::vector memory_data(6, 0x01); ReadBufferFromMemory nested_in(memory_data.data(), 6); - MySQLBinlogEventReadBuffer binlog_in(nested_in); + MySQLBinlogEventReadBuffer binlog_in(nested_in, 4); binlog_in.readStrict(res, 2); ASSERT_EQ(res[0], 0x01); ASSERT_EQ(res[1], 0x01); @@ -46,7 +46,7 @@ TEST(MySQLBinlogEventReadBuffer, BadBufferSizes) } ConcatReadBuffer concat_buffer(nested_buffers); - MySQLBinlogEventReadBuffer binlog_in(concat_buffer); + MySQLBinlogEventReadBuffer binlog_in(concat_buffer, 4); binlog_in.readStrict(res, 4); for (const auto & res_byte : res) @@ -71,7 +71,7 @@ TEST(MySQLBinlogEventReadBuffer, NiceAndBadBufferSizes) } ConcatReadBuffer concat_buffer(nested_buffers); - MySQLBinlogEventReadBuffer binlog_in(concat_buffer); + MySQLBinlogEventReadBuffer binlog_in(concat_buffer, 4); binlog_in.readStrict(res, 12); for (const auto & res_byte : res) diff --git a/tests/integration/test_materialize_mysql_database/materialize_with_ddl.py b/tests/integration/test_materialize_mysql_database/materialize_with_ddl.py index b97a1563212..189e28d5233 100644 --- a/tests/integration/test_materialize_mysql_database/materialize_with_ddl.py +++ b/tests/integration/test_materialize_mysql_database/materialize_with_ddl.py @@ -432,6 +432,7 @@ def query_event_with_empty_transaction(clickhouse_node, mysql_node, service_name clickhouse_node.query("DROP DATABASE test_database") mysql_node.query("DROP DATABASE test_database") + def select_without_columns(clickhouse_node, mysql_node, service_name): mysql_node.query("CREATE DATABASE db") mysql_node.query("CREATE TABLE db.t (a INT PRIMARY KEY, b INT)") @@ -461,3 +462,23 @@ def select_without_columns(clickhouse_node, mysql_node, service_name): clickhouse_node.query("DROP VIEW v") clickhouse_node.query("DROP DATABASE db") mysql_node.query("DROP DATABASE db") + + +def insert_with_modify_binlog_checksum(clickhouse_node, mysql_node, service_name): + mysql_node.query("CREATE DATABASE test_checksum") + mysql_node.query("CREATE TABLE test_checksum.t (a INT PRIMARY KEY, b varchar(200))") + clickhouse_node.query("CREATE DATABASE test_checksum ENGINE = MaterializeMySQL('{}:3306', 'test_checksum', 'root', 'clickhouse')".format(service_name)) + check_query(clickhouse_node, "SHOW TABLES FROM test_checksum FORMAT TSV", "t\n") + mysql_node.query("INSERT INTO test_checksum.t VALUES(1, '1111')") + check_query(clickhouse_node, "SELECT * FROM test_checksum ORDER BY a FORMAT TSV", "1\t1111\n") + + mysql_node.query("SET GLOBAL binlog_checksum=NONE") + mysql_node.query("INSERT INTO test_checksum.t VALUES(2, '2222')") + check_query(clickhouse_node, "SELECT * FROM test_checksum ORDER BY a FORMAT TSV", "1\t1111\n2\t2222\n") + + mysql_node.query("SET GLOBAL binlog_checksum=CRC32") + mysql_node.query("INSERT INTO test_checksum.t VALUES(3, '3333')") + check_query(clickhouse_node, "SELECT * FROM test_checksum ORDER BY a FORMAT TSV", "1\t1111\n2\t2222\n3\t3333\n") + + clickhouse_node.query("DROP DATABASE test_checksum") + mysql_node.query("DROP DATABASE test_checksum") diff --git a/tests/integration/test_materialize_mysql_database/test.py b/tests/integration/test_materialize_mysql_database/test.py index 6df831e1e7d..6d617ea00e2 100644 --- a/tests/integration/test_materialize_mysql_database/test.py +++ b/tests/integration/test_materialize_mysql_database/test.py @@ -151,5 +151,14 @@ def test_materialize_database_ddl_with_empty_transaction_8_0(started_cluster, st def test_select_without_columns_5_7(started_cluster, started_mysql_5_7): materialize_with_ddl.select_without_columns(clickhouse_node, started_mysql_5_7, "mysql1") + def test_select_without_columns_8_0(started_cluster, started_mysql_8_0): materialize_with_ddl.select_without_columns(clickhouse_node, started_mysql_8_0, "mysql8_0") + + +def test_insert_with_modify_binlog_checksum_5_7(started_cluster, started_mysql_5_7): + materialize_with_ddl.insert_with_modify_binlog_checksum(clickhouse_node, started_mysql_5_7, "mysql1") + + +def test_insert_with_modify_binlog_checksum_8_0(started_cluster, started_mysql_5_7): + materialize_with_ddl.insert_with_modify_binlog_checksum(clickhouse_node, started_mysql_5_7, "mysql1") diff --git a/utils/check-mysql-binlog/main.cpp b/utils/check-mysql-binlog/main.cpp index 0d831b84dce..ccdc4cd168c 100644 --- a/utils/check-mysql-binlog/main.cpp +++ b/utils/check-mysql-binlog/main.cpp @@ -18,10 +18,7 @@ static DB::MySQLReplication::BinlogEventPtr parseSingleEventBody( { DB::MySQLReplication::BinlogEventPtr event; DB::ReadBufferPtr limit_read_buffer = std::make_shared(payload, header.event_size - 19, false); - DB::ReadBufferPtr event_payload = limit_read_buffer; - - if (exist_checksum) - event_payload = std::make_shared(*limit_read_buffer); + DB::ReadBufferPtr event_payload = std::make_shared(*limit_read_buffer, exist_checksum ? 4 : 0); switch (header.type) { From b4fc2ecc0065cccce4de30ed6de055da0331b880 Mon Sep 17 00:00:00 2001 From: zhang2014 Date: Tue, 17 Nov 2020 09:41:35 +0800 Subject: [PATCH 05/99] Try fix integration test --- .../test_materialize_mysql_database/materialize_with_ddl.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration/test_materialize_mysql_database/materialize_with_ddl.py b/tests/integration/test_materialize_mysql_database/materialize_with_ddl.py index 009d15a5db8..4b5355e08ff 100644 --- a/tests/integration/test_materialize_mysql_database/materialize_with_ddl.py +++ b/tests/integration/test_materialize_mysql_database/materialize_with_ddl.py @@ -496,15 +496,15 @@ def insert_with_modify_binlog_checksum(clickhouse_node, mysql_node, service_name clickhouse_node.query("CREATE DATABASE test_checksum ENGINE = MaterializeMySQL('{}:3306', 'test_checksum', 'root', 'clickhouse')".format(service_name)) check_query(clickhouse_node, "SHOW TABLES FROM test_checksum FORMAT TSV", "t\n") mysql_node.query("INSERT INTO test_checksum.t VALUES(1, '1111')") - check_query(clickhouse_node, "SELECT * FROM test_checksum ORDER BY a FORMAT TSV", "1\t1111\n") + check_query(clickhouse_node, "SELECT * FROM test_checksum.t ORDER BY a FORMAT TSV", "1\t1111\n") mysql_node.query("SET GLOBAL binlog_checksum=NONE") mysql_node.query("INSERT INTO test_checksum.t VALUES(2, '2222')") - check_query(clickhouse_node, "SELECT * FROM test_checksum ORDER BY a FORMAT TSV", "1\t1111\n2\t2222\n") + check_query(clickhouse_node, "SELECT * FROM test_checksum.t ORDER BY a FORMAT TSV", "1\t1111\n2\t2222\n") mysql_node.query("SET GLOBAL binlog_checksum=CRC32") mysql_node.query("INSERT INTO test_checksum.t VALUES(3, '3333')") - check_query(clickhouse_node, "SELECT * FROM test_checksum ORDER BY a FORMAT TSV", "1\t1111\n2\t2222\n3\t3333\n") + check_query(clickhouse_node, "SELECT * FROM test_checksum.t ORDER BY a FORMAT TSV", "1\t1111\n2\t2222\n3\t3333\n") clickhouse_node.query("DROP DATABASE test_checksum") mysql_node.query("DROP DATABASE test_checksum") From 389b88353489205278f22e9d34bac8983147dc93 Mon Sep 17 00:00:00 2001 From: alesapin Date: Tue, 17 Nov 2020 12:37:13 +0300 Subject: [PATCH 06/99] Fix index granularity calculation on block borders --- .../MergeTree/IMergeTreeDataPartWriter.cpp | 12 ++++++++ .../MergeTree/IMergeTreeDataPartWriter.h | 9 ++++++ .../MergeTree/MergeTreeDataPartWriterWide.cpp | 3 ++ .../MergeTree/MergeTreeIndexGranularity.cpp | 11 ++++++++ .../MergeTree/MergeTreeIndexGranularity.h | 4 +++ ...aptive_granularity_block_borders.reference | 2 ++ ...577_adaptive_granularity_block_borders.sql | 28 +++++++++++++++++++ 7 files changed, 69 insertions(+) create mode 100644 tests/queries/0_stateless/01577_adaptive_granularity_block_borders.reference create mode 100644 tests/queries/0_stateless/01577_adaptive_granularity_block_borders.sql diff --git a/src/Storages/MergeTree/IMergeTreeDataPartWriter.cpp b/src/Storages/MergeTree/IMergeTreeDataPartWriter.cpp index 143a9920b93..1cddeda9a5d 100644 --- a/src/Storages/MergeTree/IMergeTreeDataPartWriter.cpp +++ b/src/Storages/MergeTree/IMergeTreeDataPartWriter.cpp @@ -44,6 +44,18 @@ void IMergeTreeDataPartWriter::next() index_offset = next_index_offset; } +void IMergeTreeDataPartWriter::adjustLastUnfinishedMark(size_t new_block_index_granularity) +{ + /// If amount of rest rows in last granule more than granularity of the new block + /// than finish it. + if (!index_granularity.empty() && index_offset > new_block_index_granularity) + { + size_t already_written_rows_in_last_granule = index_granularity.getLastMarkRows() - index_offset; + index_granularity.setLastMarkRows(already_written_rows_in_last_granule); + index_offset = 0; + } +} + IMergeTreeDataPartWriter::~IMergeTreeDataPartWriter() = default; } diff --git a/src/Storages/MergeTree/IMergeTreeDataPartWriter.h b/src/Storages/MergeTree/IMergeTreeDataPartWriter.h index 4a42a58a65b..906c3e1ed85 100644 --- a/src/Storages/MergeTree/IMergeTreeDataPartWriter.h +++ b/src/Storages/MergeTree/IMergeTreeDataPartWriter.h @@ -62,6 +62,14 @@ public: protected: size_t getCurrentMark() const { return current_mark; } size_t getIndexOffset() const { return index_offset; } + /// Finishes our current unfinished mark if we have already written more rows for it + /// than granularity in the new block. + /// Example: + /// __|________|___. <- previous block with granularity 8 and last unfinished mark with 3 rows + /// new_block_index_granularity = 2, so + /// __|________|___|__|__|__| + /// ^ finish last unfinished mark, new marks will have granularity 2 + void adjustLastUnfinishedMark(size_t new_block_index_granularity); using SerializationState = IDataType::SerializeBinaryBulkStatePtr; using SerializationStates = std::unordered_map; @@ -84,6 +92,7 @@ private: /// Data is already written up to this mark. size_t current_mark = 0; /// The offset to the first row of the block for which you want to write the index. + /// Or how many rows we have to write for this last unfinished mark. size_t index_offset = 0; }; diff --git a/src/Storages/MergeTree/MergeTreeDataPartWriterWide.cpp b/src/Storages/MergeTree/MergeTreeDataPartWriterWide.cpp index c15c39e7b7f..0317f52001b 100644 --- a/src/Storages/MergeTree/MergeTreeDataPartWriterWide.cpp +++ b/src/Storages/MergeTree/MergeTreeDataPartWriterWide.cpp @@ -95,6 +95,9 @@ void MergeTreeDataPartWriterWide::write(const Block & block, if (compute_granularity) { size_t index_granularity_for_block = computeIndexGranularity(block); + /// Finish last unfinished mark rows it it's required + adjustLastUnfinishedMark(index_granularity_for_block); + /// Fill index granularity with granules of new size fillIndexGranularity(index_granularity_for_block, block.rows()); } diff --git a/src/Storages/MergeTree/MergeTreeIndexGranularity.cpp b/src/Storages/MergeTree/MergeTreeIndexGranularity.cpp index bca0d0cb883..2db087a394f 100644 --- a/src/Storages/MergeTree/MergeTreeIndexGranularity.cpp +++ b/src/Storages/MergeTree/MergeTreeIndexGranularity.cpp @@ -55,6 +55,17 @@ void MergeTreeIndexGranularity::addRowsToLastMark(size_t rows_count) marks_rows_partial_sums.back() += rows_count; } +void MergeTreeIndexGranularity::setLastMarkRows(size_t rows_count) +{ + if (marks_rows_partial_sums.empty()) + marks_rows_partial_sums.push_back(rows_count); + else + { + marks_rows_partial_sums.back() -= getLastMarkRows(); + marks_rows_partial_sums.back() += rows_count; + } +} + void MergeTreeIndexGranularity::popMark() { if (!marks_rows_partial_sums.empty()) diff --git a/src/Storages/MergeTree/MergeTreeIndexGranularity.h b/src/Storages/MergeTree/MergeTreeIndexGranularity.h index 5aefd0f102b..bfb48511285 100644 --- a/src/Storages/MergeTree/MergeTreeIndexGranularity.h +++ b/src/Storages/MergeTree/MergeTreeIndexGranularity.h @@ -98,6 +98,10 @@ public: /// Extends last mark by rows_count. void addRowsToLastMark(size_t rows_count); + /// Set amount of rows to last mark + /// (add new mark if new have nothing) + void setLastMarkRows(size_t rows_count); + /// Drops last mark if any exists. void popMark(); diff --git a/tests/queries/0_stateless/01577_adaptive_granularity_block_borders.reference b/tests/queries/0_stateless/01577_adaptive_granularity_block_borders.reference new file mode 100644 index 00000000000..81c7e6e4df0 --- /dev/null +++ b/tests/queries/0_stateless/01577_adaptive_granularity_block_borders.reference @@ -0,0 +1,2 @@ +849 +102400 diff --git a/tests/queries/0_stateless/01577_adaptive_granularity_block_borders.sql b/tests/queries/0_stateless/01577_adaptive_granularity_block_borders.sql new file mode 100644 index 00000000000..a73045f5a6f --- /dev/null +++ b/tests/queries/0_stateless/01577_adaptive_granularity_block_borders.sql @@ -0,0 +1,28 @@ +DROP TABLE IF EXISTS adaptive_table; + +--- If granularity of consequent blocks differs a lot, then adaptive +--- granularity will adjust amout of marks correctly. Data for test empirically +--- derived, it's quite hard to get good parameters. + +CREATE TABLE adaptive_table( + key UInt64, + value String +) ENGINE MergeTree() +ORDER BY key +SETTINGS index_granularity_bytes=1048576, min_bytes_for_wide_part = 0, enable_vertical_merge_algorithm = 0; + +SET max_block_size=900; + +-- There are about 900 marks for our settings. +INSERT INTO adaptive_table SELECT number, if(number > 700, randomPrintableASCII(102400), randomPrintableASCII(1)) FROM numbers(10000); + +OPTIMIZE TABLE adaptive_table FINAL; + +SELECT marks FROM system.parts WHERE table = 'adaptive_table' and database=currentDatabase() and active; + +-- If we have computed granularity incorrectly than we will exceed this limit. +SET max_memory_usage='30M'; + +SELECT max(length(value)) FROM adaptive_table; + +DROP TABLE IF EXISTS adaptive_table; From b4f025a5e6cfbde847d281ba8327513ac498f829 Mon Sep 17 00:00:00 2001 From: zhang2014 Date: Tue, 17 Nov 2020 17:44:03 +0800 Subject: [PATCH 07/99] trigger CI From 70f898e66786fc4de56e9e30208af44885142efa Mon Sep 17 00:00:00 2001 From: Nikolai Kochetov Date: Tue, 17 Nov 2020 15:34:31 +0300 Subject: [PATCH 08/99] Order inputs for ActionsDAG. --- src/Interpreters/ActionsDAG.cpp | 54 +++++++++++++++++++++----- src/Interpreters/ActionsDAG.h | 11 +++++- src/Interpreters/ExpressionActions.cpp | 33 ++++++++++++++-- src/Interpreters/ExpressionActions.h | 10 ++++- 4 files changed, 91 insertions(+), 17 deletions(-) diff --git a/src/Interpreters/ActionsDAG.cpp b/src/Interpreters/ActionsDAG.cpp index a788d6f84e3..0256090abc6 100644 --- a/src/Interpreters/ActionsDAG.cpp +++ b/src/Interpreters/ActionsDAG.cpp @@ -24,7 +24,7 @@ namespace ErrorCodes ActionsDAG::ActionsDAG(const NamesAndTypesList & inputs) { for (const auto & input : inputs) - addInput(input.name, input.type); + addInput(input.name, input.type, true); } ActionsDAG::ActionsDAG(const ColumnsWithTypeAndName & inputs) @@ -32,9 +32,9 @@ ActionsDAG::ActionsDAG(const ColumnsWithTypeAndName & inputs) for (const auto & input : inputs) { if (input.column && isColumnConst(*input.column)) - addInput(input); + addInput(input, true); else - addInput(input.name, input.type); + addInput(input.name, input.type, true); } } @@ -46,6 +46,9 @@ ActionsDAG::Node & ActionsDAG::addNode(Node node, bool can_replace) auto & res = nodes.emplace_back(std::move(node)); + if (res.type == ActionType::INPUT) + inputs.emplace_back(&res); + index.replace(&res); return res; } @@ -59,17 +62,17 @@ ActionsDAG::Node & ActionsDAG::getNode(const std::string & name) return **it; } -const ActionsDAG::Node & ActionsDAG::addInput(std::string name, DataTypePtr type) +const ActionsDAG::Node & ActionsDAG::addInput(std::string name, DataTypePtr type, bool can_replace) { Node node; node.type = ActionType::INPUT; node.result_type = std::move(type); node.result_name = std::move(name); - return addNode(std::move(node)); + return addNode(std::move(node), can_replace); } -const ActionsDAG::Node & ActionsDAG::addInput(ColumnWithTypeAndName column) +const ActionsDAG::Node & ActionsDAG::addInput(ColumnWithTypeAndName column, bool can_replace) { Node node; node.type = ActionType::INPUT; @@ -77,7 +80,7 @@ const ActionsDAG::Node & ActionsDAG::addInput(ColumnWithTypeAndName column) node.result_name = std::move(column.name); node.column = std::move(column.column); - return addNode(std::move(node)); + return addNode(std::move(node), can_replace); } const ActionsDAG::Node & ActionsDAG::addColumn(ColumnWithTypeAndName column) @@ -144,6 +147,14 @@ const ActionsDAG::Node & ActionsDAG::addFunction( compilation_cache = context.getCompiledExpressionCache(); #endif + return addFunction(function, argument_names, std::move(result_name)); +} + +const ActionsDAG::Node & ActionsDAG::addFunction( + const FunctionOverloadResolverPtr & function, + const Names & argument_names, + std::string result_name) +{ size_t num_arguments = argument_names.size(); Node node; @@ -231,9 +242,8 @@ const ActionsDAG::Node & ActionsDAG::addFunction( NamesAndTypesList ActionsDAG::getRequiredColumns() const { NamesAndTypesList result; - for (const auto & node : nodes) - if (node.type == ActionType::INPUT) - result.emplace_back(node.result_name, node.result_type); + for (const auto & input : inputs) + result.emplace_back(input->result_name, input->result_type); return result; } @@ -347,6 +357,8 @@ void ActionsDAG::removeUnusedActions() } nodes.remove_if([&](const Node & node) { return visited_nodes.count(&node) == 0; }); + auto it = std::remove_if(inputs.begin(), inputs.end(), [&](const Node * node) { return visited_nodes.count(node) == 0; }); + inputs.erase(it, inputs.end()); } void ActionsDAG::addAliases(const NamesWithAliases & aliases, std::vector & result_nodes) @@ -442,6 +454,9 @@ ActionsDAGPtr ActionsDAG::clone() const for (const auto & node : index) actions->index.insert(copy_map[node]); + for (const auto & node : inputs) + actions->inputs.push_back(copy_map[node]); + return actions; } @@ -540,6 +555,7 @@ ActionsDAGPtr ActionsDAG::splitActionsBeforeArrayJoin(const NameSet & array_join std::list split_nodes; Index this_index; Index split_index; + Inputs new_inputs; struct Frame { @@ -627,6 +643,7 @@ ActionsDAGPtr ActionsDAG::splitActionsBeforeArrayJoin(const NameSet & array_join input_node.result_type = child->result_type; input_node.result_name = child->result_name; // getUniqueNameForIndex(index, child->result_name); child_data.to_this = &this_nodes.emplace_back(std::move(input_node)); + new_inputs.push_back(child_data.to_this); /// This node is needed for current action, so put it to index also. split_index.replace(child_data.to_split); @@ -658,6 +675,7 @@ ActionsDAGPtr ActionsDAG::splitActionsBeforeArrayJoin(const NameSet & array_join input_node.result_type = node.result_type; input_node.result_name = node.result_name; cur_data.to_this = &this_nodes.emplace_back(std::move(input_node)); + new_inputs.push_back(cur_data.to_this); } } } @@ -676,12 +694,28 @@ ActionsDAGPtr ActionsDAG::splitActionsBeforeArrayJoin(const NameSet & array_join if (split_actions_are_empty) return {}; + Inputs this_inputs; + Inputs split_inputs; + + for (auto * input : inputs) + { + const auto & cur = data[input]; + if (cur.to_this) + this_inputs.push_back(cur.to_this); + else + split_inputs.push_back(cur.to_split); + } + + this_inputs.insert(this_inputs.end(), new_inputs.begin(), new_inputs.end()); + index.swap(this_index); nodes.swap(this_nodes); + inputs.swap(this_inputs); auto split_actions = cloneEmpty(); split_actions->nodes.swap(split_nodes); split_actions->index.swap(split_index); + split_actions->inputs.swap(split_inputs); split_actions->settings.project_input = false; return split_actions; diff --git a/src/Interpreters/ActionsDAG.h b/src/Interpreters/ActionsDAG.h index 4765456ca4f..5a5dbebdedd 100644 --- a/src/Interpreters/ActionsDAG.h +++ b/src/Interpreters/ActionsDAG.h @@ -151,6 +151,7 @@ public: }; using Nodes = std::list; + using Inputs = std::vector; struct ActionsSettings { @@ -165,6 +166,7 @@ public: private: Nodes nodes; Index index; + Inputs inputs; ActionsSettings settings; @@ -181,6 +183,7 @@ public: const Nodes & getNodes() const { return nodes; } const Index & getIndex() const { return index; } + const Inputs & getInputs() const { return inputs; } NamesAndTypesList getRequiredColumns() const; ColumnsWithTypeAndName getResultColumns() const; @@ -190,11 +193,15 @@ public: std::string dumpNames() const; std::string dumpDAG() const; - const Node & addInput(std::string name, DataTypePtr type); - const Node & addInput(ColumnWithTypeAndName column); + const Node & addInput(std::string name, DataTypePtr type, bool can_replace = false); + const Node & addInput(ColumnWithTypeAndName column, bool can_replace = false); const Node & addColumn(ColumnWithTypeAndName column); const Node & addAlias(const std::string & name, std::string alias, bool can_replace = false); const Node & addArrayJoin(const std::string & source_name, std::string result_name); + const Node & addFunction( + const FunctionOverloadResolverPtr & function, + const Names & argument_names, + std::string result_name); const Node & addFunction( const FunctionOverloadResolverPtr & function, const Names & argument_names, diff --git a/src/Interpreters/ExpressionActions.cpp b/src/Interpreters/ExpressionActions.cpp index 53c08481fc2..4c332036b41 100644 --- a/src/Interpreters/ExpressionActions.cpp +++ b/src/Interpreters/ExpressionActions.cpp @@ -83,6 +83,7 @@ void ExpressionActions::linearizeActions() const auto & nodes = getNodes(); const auto & index = actions_dag->getIndex(); + const auto & inputs = actions_dag->getInputs(); std::vector data(nodes.size()); std::unordered_map reverse_index; @@ -163,11 +164,11 @@ void ExpressionActions::linearizeActions() { /// Argument for input is special. It contains the position from required columns. ExpressionActions::Argument argument; - argument.pos = required_columns.size(); + // argument.pos = required_columns.size(); argument.needed_later = !cur.parents.empty(); arguments.emplace_back(argument); - required_columns.push_back({node->result_name, node->result_type}); + //required_columns.push_back({node->result_name, node->result_type}); } actions.push_back({node, arguments, free_position}); @@ -199,6 +200,15 @@ void ExpressionActions::linearizeActions() ColumnWithTypeAndName col{node->column, node->result_type, node->result_name}; sample_block.insert(std::move(col)); } + + for (const auto * input : inputs) + { + const auto & cur = data[reverse_index[input]]; + auto pos = required_columns.size(); + actions[cur.position].arguments.front().pos = pos; + required_columns.push_back({input->result_name, input->result_type}); + input_positions[input->result_name].emplace_back(pos); + } } @@ -412,7 +422,24 @@ void ExpressionActions::execute(Block & block, size_t & num_rows, bool dry_run) .num_rows = num_rows, }; - execution_context.inputs_pos.reserve(required_columns.size()); + execution_context.inputs_pos.assign(required_columns.size(), -1); + + for (size_t pos = 0; pos < block.columns(); ++pos) + { + const auto & col = block.getByPosition(pos); + auto it = input_positions.find(col.name); + if (it != input_positions.end()) + { + for (auto input_pos : it->second) + { + if (execution_context.inputs_pos[input_pos] < 0) + { + execution_context.inputs_pos[input_pos] = pos; + break; + } + } + } + } for (const auto & column : required_columns) { diff --git a/src/Interpreters/ExpressionActions.h b/src/Interpreters/ExpressionActions.h index f2f5862856b..2b1aa5e2456 100644 --- a/src/Interpreters/ExpressionActions.h +++ b/src/Interpreters/ExpressionActions.h @@ -44,10 +44,10 @@ public: struct Argument { /// Position in ExecutionContext::columns - size_t pos; + size_t pos = 0; /// True if there is another action which will use this column. /// Otherwise column will be removed. - bool needed_later; + bool needed_later = false; }; using Arguments = std::vector; @@ -63,6 +63,11 @@ public: using Actions = std::vector; + /// This map helps to find input position bu it's name. + /// Key is a view to input::result_name. + /// Result is a list because it is allowed for inputs to have same names. + using NameToInputMap = std::unordered_map>; + private: ActionsDAGPtr actions_dag; @@ -70,6 +75,7 @@ private: size_t num_columns = 0; NamesAndTypesList required_columns; + NameToInputMap input_positions; ColumnNumbers result_positions; Block sample_block; From d007e5671dceabecb6bfcb393ab17687ae2d7a07 Mon Sep 17 00:00:00 2001 From: Nikolai Kochetov Date: Tue, 17 Nov 2020 15:39:41 +0300 Subject: [PATCH 09/99] Order inputs for ActionsDAG. --- src/Interpreters/ActionsDAG.cpp | 8 ++++---- src/Interpreters/ActionsDAG.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Interpreters/ActionsDAG.cpp b/src/Interpreters/ActionsDAG.cpp index 0256090abc6..d046f7d4f2c 100644 --- a/src/Interpreters/ActionsDAG.cpp +++ b/src/Interpreters/ActionsDAG.cpp @@ -21,15 +21,15 @@ namespace ErrorCodes } -ActionsDAG::ActionsDAG(const NamesAndTypesList & inputs) +ActionsDAG::ActionsDAG(const NamesAndTypesList & inputs_) { - for (const auto & input : inputs) + for (const auto & input : inputs_) addInput(input.name, input.type, true); } -ActionsDAG::ActionsDAG(const ColumnsWithTypeAndName & inputs) +ActionsDAG::ActionsDAG(const ColumnsWithTypeAndName & inputs_) { - for (const auto & input : inputs) + for (const auto & input : inputs_) { if (input.column && isColumnConst(*input.column)) addInput(input, true); diff --git a/src/Interpreters/ActionsDAG.h b/src/Interpreters/ActionsDAG.h index 5a5dbebdedd..7b959ff5e29 100644 --- a/src/Interpreters/ActionsDAG.h +++ b/src/Interpreters/ActionsDAG.h @@ -178,8 +178,8 @@ public: ActionsDAG() = default; ActionsDAG(const ActionsDAG &) = delete; ActionsDAG & operator=(const ActionsDAG &) = delete; - explicit ActionsDAG(const NamesAndTypesList & inputs); - explicit ActionsDAG(const ColumnsWithTypeAndName & inputs); + explicit ActionsDAG(const NamesAndTypesList & inputs_); + explicit ActionsDAG(const ColumnsWithTypeAndName & inputs_); const Nodes & getNodes() const { return nodes; } const Index & getIndex() const { return index; } From 71d726ea214ef1a1d367ce2f9273f5f62746cdd9 Mon Sep 17 00:00:00 2001 From: Nikolai Kochetov Date: Tue, 17 Nov 2020 16:20:23 +0300 Subject: [PATCH 10/99] Order inputs for ActionsDAG. --- src/Interpreters/ExpressionActions.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/Interpreters/ExpressionActions.cpp b/src/Interpreters/ExpressionActions.cpp index 4c332036b41..c1dec121c90 100644 --- a/src/Interpreters/ExpressionActions.cpp +++ b/src/Interpreters/ExpressionActions.cpp @@ -441,14 +441,6 @@ void ExpressionActions::execute(Block & block, size_t & num_rows, bool dry_run) } } - for (const auto & column : required_columns) - { - ssize_t pos = -1; - if (block.has(column.name)) - pos = block.getPositionByName(column.name); - execution_context.inputs_pos.push_back(pos); - } - execution_context.columns.resize(num_columns); for (const auto & action : actions) From 1787cd89a73e37665bb586196b7514d50b771e68 Mon Sep 17 00:00:00 2001 From: Ivan Lezhankin Date: Tue, 17 Nov 2020 16:24:13 +0300 Subject: [PATCH 11/99] Implement tcpPort() function literal --- .../getDictionaryConfigurationFromAST.cpp | 33 ++++++++++++++----- .../getDictionaryConfigurationFromAST.h | 3 +- src/Interpreters/InterpreterCreateQuery.cpp | 2 +- src/Parsers/ExpressionListParsers.cpp | 5 +-- .../01018_ddl_dictionaries_create.reference | 2 +- .../01018_ddl_dictionaries_create.sql | 2 +- 6 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/Dictionaries/getDictionaryConfigurationFromAST.cpp b/src/Dictionaries/getDictionaryConfigurationFromAST.cpp index 430c1d591dd..40e86d590c4 100644 --- a/src/Dictionaries/getDictionaryConfigurationFromAST.cpp +++ b/src/Dictionaries/getDictionaryConfigurationFromAST.cpp @@ -14,6 +14,7 @@ #include #include #include +#include namespace DB { @@ -356,7 +357,8 @@ NamesToTypeNames buildDictionaryAttributesConfiguration( void buildConfigurationFromFunctionWithKeyValueArguments( AutoPtr doc, AutoPtr root, - const ASTExpressionList * ast_expr_list) + const ASTExpressionList * ast_expr_list, + const Context & context) { const auto & children = ast_expr_list->children; for (size_t i = 0; i != children.size(); ++i) @@ -365,19 +367,30 @@ void buildConfigurationFromFunctionWithKeyValueArguments( AutoPtr current_xml_element(doc->createElement(pair->first)); root->appendChild(current_xml_element); - if (const auto * identifier = pair->second->as(); identifier) + if (const auto * identifier = pair->second->as()) { AutoPtr value(doc->createTextNode(identifier->name())); current_xml_element->appendChild(value); } - else if (const auto * literal = pair->second->as(); literal) + else if (const auto * literal = pair->second->as()) { AutoPtr value(doc->createTextNode(getFieldAsString(literal->value))); current_xml_element->appendChild(value); } - else if (const auto * list = pair->second->as(); list) + else if (const auto * list = pair->second->as()) { - buildConfigurationFromFunctionWithKeyValueArguments(doc, current_xml_element, list); + buildConfigurationFromFunctionWithKeyValueArguments(doc, current_xml_element, list, context); + } + else if (const auto * func = pair->second->as()) + { + auto builder = FunctionFactory::instance().tryGet(func->name, context); + auto function = builder->build({}); + auto result = function->execute({}, {}, 0); + + Field value; + result->get(0, value); + AutoPtr text_value(doc->createTextNode(getFieldAsString(value))); + current_xml_element->appendChild(text_value); } else { @@ -406,13 +419,14 @@ void buildSourceConfiguration( AutoPtr doc, AutoPtr root, const ASTFunctionWithKeyValueArguments * source, - const ASTDictionarySettings * settings) + const ASTDictionarySettings * settings, + const Context & context) { AutoPtr outer_element(doc->createElement("source")); root->appendChild(outer_element); AutoPtr source_element(doc->createElement(source->name)); outer_element->appendChild(source_element); - buildConfigurationFromFunctionWithKeyValueArguments(doc, source_element, source->elements->as()); + buildConfigurationFromFunctionWithKeyValueArguments(doc, source_element, source->elements->as(), context); if (settings != nullptr) { @@ -466,7 +480,8 @@ void checkPrimaryKey(const NamesToTypeNames & all_attrs, const Names & key_attrs } -DictionaryConfigurationPtr getDictionaryConfigurationFromAST(const ASTCreateQuery & query, const std::string & database_) +DictionaryConfigurationPtr +getDictionaryConfigurationFromAST(const ASTCreateQuery & query, const Context & context, const std::string & database_) { checkAST(query); @@ -510,7 +525,7 @@ DictionaryConfigurationPtr getDictionaryConfigurationFromAST(const ASTCreateQuer buildPrimaryKeyConfiguration(xml_document, structure_element, complex, pk_attrs, query.dictionary_attributes_list); buildLayoutConfiguration(xml_document, current_dictionary, dictionary_layout); - buildSourceConfiguration(xml_document, current_dictionary, query.dictionary->source, query.dictionary->dict_settings); + buildSourceConfiguration(xml_document, current_dictionary, query.dictionary->source, query.dictionary->dict_settings, context); buildLifetimeConfiguration(xml_document, current_dictionary, query.dictionary->lifetime); if (query.dictionary->range) diff --git a/src/Dictionaries/getDictionaryConfigurationFromAST.h b/src/Dictionaries/getDictionaryConfigurationFromAST.h index 3038f450914..5132e3c77e0 100644 --- a/src/Dictionaries/getDictionaryConfigurationFromAST.h +++ b/src/Dictionaries/getDictionaryConfigurationFromAST.h @@ -10,5 +10,6 @@ using DictionaryConfigurationPtr = Poco::AutoPtrgetObjectMetadataModificationTime(dictionary_name); database->attachDictionary(dictionary_name, DictionaryAttachInfo{query_ptr, config, modification_time}); } diff --git a/src/Parsers/ExpressionListParsers.cpp b/src/Parsers/ExpressionListParsers.cpp index 0f06a0d2480..c1ec00befaf 100644 --- a/src/Parsers/ExpressionListParsers.cpp +++ b/src/Parsers/ExpressionListParsers.cpp @@ -735,6 +735,7 @@ bool ParserKeyValuePair::parseImpl(Pos & pos, ASTPtr & node, Expected & expected { ParserIdentifier id_parser; ParserLiteral literal_parser; + ParserFunction func_parser; ASTPtr identifier; ASTPtr value; @@ -742,8 +743,8 @@ bool ParserKeyValuePair::parseImpl(Pos & pos, ASTPtr & node, Expected & expected if (!id_parser.parse(pos, identifier, expected)) return false; - /// If it's not literal or identifier, than it's possible list of pairs - if (!literal_parser.parse(pos, value, expected) && !id_parser.parse(pos, value, expected)) + /// If it's neither literal, nor identifier, nor function, than it's possible list of pairs + if (!func_parser.parse(pos, value, expected) && !literal_parser.parse(pos, value, expected) && !id_parser.parse(pos, value, expected)) { ParserKeyValuePairsList kv_pairs_list; ParserToken open(TokenType::OpeningRoundBracket); diff --git a/tests/queries/0_stateless/01018_ddl_dictionaries_create.reference b/tests/queries/0_stateless/01018_ddl_dictionaries_create.reference index 5b020911d2e..e591300eddc 100644 --- a/tests/queries/0_stateless/01018_ddl_dictionaries_create.reference +++ b/tests/queries/0_stateless/01018_ddl_dictionaries_create.reference @@ -1,5 +1,5 @@ =DICTIONARY in Ordinary DB -CREATE DICTIONARY db_01018.dict1\n(\n `key_column` UInt64 DEFAULT 0,\n `second_column` UInt8 DEFAULT 1,\n `third_column` String DEFAULT \'qqq\'\n)\nPRIMARY KEY key_column\nSOURCE(CLICKHOUSE(HOST \'localhost\' PORT 9000 USER \'default\' TABLE \'table_for_dict\' PASSWORD \'\' DB \'database_for_dict_01018\'))\nLIFETIME(MIN 1 MAX 10)\nLAYOUT(FLAT()) +CREATE DICTIONARY db_01018.dict1\n(\n `key_column` UInt64 DEFAULT 0,\n `second_column` UInt8 DEFAULT 1,\n `third_column` String DEFAULT \'qqq\'\n)\nPRIMARY KEY key_column\nSOURCE(CLICKHOUSE(HOST \'localhost\' PORT tcpPort() USER \'default\' TABLE \'table_for_dict\' PASSWORD \'\' DB \'database_for_dict_01018\'))\nLIFETIME(MIN 1 MAX 10)\nLAYOUT(FLAT()) dict1 1 db_01018 dict1 diff --git a/tests/queries/0_stateless/01018_ddl_dictionaries_create.sql b/tests/queries/0_stateless/01018_ddl_dictionaries_create.sql index 3261b1e61d1..1a3733fd5cb 100644 --- a/tests/queries/0_stateless/01018_ddl_dictionaries_create.sql +++ b/tests/queries/0_stateless/01018_ddl_dictionaries_create.sql @@ -32,7 +32,7 @@ CREATE DICTIONARY db_01018.dict1 third_column String DEFAULT 'qqq' ) PRIMARY KEY key_column -SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'table_for_dict' PASSWORD '' DB 'database_for_dict_01018')) +SOURCE(CLICKHOUSE(HOST 'localhost' PORT tcpPort() USER 'default' TABLE 'table_for_dict' PASSWORD '' DB 'database_for_dict_01018')) LIFETIME(MIN 1 MAX 10) LAYOUT(FLAT()); From f897f7c93ff7be363dafe3de5a593dcb457251a1 Mon Sep 17 00:00:00 2001 From: Ivan Lezhankin Date: Tue, 17 Nov 2020 16:24:45 +0300 Subject: [PATCH 12/99] Refactor IFunction to execute with const arguments --- .../AggregateFunctionMLMethod.cpp | 32 ++++++------- .../AggregateFunctionMLMethod.h | 44 ++++++++--------- src/AggregateFunctions/IAggregateFunction.h | 4 +- src/Columns/ColumnAggregateFunction.cpp | 2 +- src/Columns/ColumnAggregateFunction.h | 2 +- src/Databases/DatabaseOrdinary.cpp | 6 +-- src/Databases/DatabaseWithDictionaries.cpp | 4 +- src/Dictionaries/DictionaryFactory.cpp | 2 +- .../tests/gtest_dictionary_configuration.cpp | 17 +++---- src/Functions/CustomWeekTransforms.h | 2 +- src/Functions/DateTimeTransforms.h | 2 +- src/Functions/FunctionBase64Conversion.h | 2 +- src/Functions/FunctionBinaryArithmetic.h | 22 ++++----- src/Functions/FunctionBitTestMany.h | 4 +- src/Functions/FunctionCustomWeekToSomething.h | 2 +- .../FunctionDateOrDateTimeAddInterval.h | 4 +- .../FunctionDateOrDateTimeToSomething.h | 2 +- src/Functions/FunctionFQDN.cpp | 2 +- src/Functions/FunctionJoinGet.cpp | 2 +- src/Functions/FunctionJoinGet.h | 2 +- src/Functions/FunctionMathBinaryFloat64.h | 2 +- src/Functions/FunctionMathConstFloat64.h | 2 +- src/Functions/FunctionMathUnary.h | 2 +- src/Functions/FunctionNumericPredicate.h | 2 +- src/Functions/FunctionStartsEndsWith.h | 4 +- src/Functions/FunctionStringOrArrayToT.h | 2 +- src/Functions/FunctionStringReplace.h | 2 +- src/Functions/FunctionStringToString.h | 2 +- src/Functions/FunctionUnaryArithmetic.h | 2 +- src/Functions/FunctionUnixTimestamp64.h | 2 +- src/Functions/FunctionsAES.h | 4 +- src/Functions/FunctionsBitmap.h | 34 ++++++------- src/Functions/FunctionsCoding.h | 34 ++++++------- src/Functions/FunctionsComparison.h | 2 +- src/Functions/FunctionsConsistentHashing.h | 4 +- src/Functions/FunctionsConversion.h | 24 +++++----- src/Functions/FunctionsEmbeddedDictionaries.h | 8 ++-- src/Functions/FunctionsExternalDictionaries.h | 48 +++++++++---------- src/Functions/FunctionsExternalModels.cpp | 4 +- src/Functions/FunctionsExternalModels.h | 2 +- src/Functions/FunctionsHashing.h | 18 +++---- src/Functions/FunctionsJSON.cpp | 2 +- src/Functions/FunctionsJSON.h | 6 +-- src/Functions/FunctionsLogical.cpp | 6 +-- src/Functions/FunctionsLogical.h | 4 +- src/Functions/FunctionsMiscellaneous.h | 4 +- .../FunctionsMultiStringFuzzySearch.h | 2 +- src/Functions/FunctionsMultiStringPosition.h | 2 +- src/Functions/FunctionsMultiStringSearch.h | 2 +- src/Functions/FunctionsRandom.h | 4 +- src/Functions/FunctionsRound.h | 6 +-- src/Functions/FunctionsStringArray.h | 12 ++--- src/Functions/FunctionsStringSearch.h | 2 +- src/Functions/FunctionsStringSearchToString.h | 2 +- src/Functions/FunctionsStringSimilarity.h | 2 +- src/Functions/IFunction.cpp | 9 ++-- src/Functions/IFunction.h | 5 +- src/Functions/IFunctionAdaptors.h | 12 ++--- src/Functions/IFunctionImpl.h | 8 ++-- src/Functions/LeastGreatestGeneric.h | 2 +- src/Functions/PerformanceAdaptors.h | 2 +- src/Functions/URL/URLHierarchy.cpp | 2 +- src/Functions/URL/URLPathHierarchy.cpp | 2 +- .../URL/extractURLParameterNames.cpp | 2 +- src/Functions/URL/extractURLParameters.cpp | 2 +- src/Functions/URL/port.cpp | 2 +- src/Functions/abtesting.cpp | 2 +- src/Functions/addressToLine.cpp | 2 +- src/Functions/addressToSymbol.cpp | 2 +- src/Functions/appendTrailingCharIfAbsent.cpp | 2 +- src/Functions/array/FunctionArrayMapped.h | 2 +- src/Functions/array/array.cpp | 2 +- src/Functions/array/arrayConcat.cpp | 2 +- src/Functions/array/arrayDistinct.cpp | 4 +- src/Functions/array/arrayElement.cpp | 48 ++++++++++--------- src/Functions/array/arrayEnumerate.cpp | 2 +- src/Functions/array/arrayEnumerateExtended.h | 4 +- src/Functions/array/arrayEnumerateRanked.h | 4 +- src/Functions/array/arrayFlatten.cpp | 2 +- src/Functions/array/arrayIndex.h | 16 +++---- src/Functions/array/arrayIntersect.cpp | 8 ++-- src/Functions/array/arrayJoin.cpp | 2 +- src/Functions/array/arrayPop.h | 2 +- src/Functions/array/arrayPush.h | 2 +- src/Functions/array/arrayReduce.cpp | 4 +- src/Functions/array/arrayReduceInRanges.cpp | 4 +- src/Functions/array/arrayResize.cpp | 2 +- src/Functions/array/arrayReverse.cpp | 4 +- src/Functions/array/arrayScalarProduct.h | 12 ++--- src/Functions/array/arraySlice.cpp | 4 +- src/Functions/array/arrayUniq.cpp | 4 +- src/Functions/array/arrayWithConstant.cpp | 2 +- src/Functions/array/arrayZip.cpp | 2 +- src/Functions/array/emptyArray.cpp | 2 +- src/Functions/array/emptyArrayToSingle.cpp | 6 +-- src/Functions/array/hasAllAny.h | 2 +- src/Functions/array/mapOp.cpp | 2 +- src/Functions/array/mapPopulateSeries.cpp | 2 +- src/Functions/array/range.cpp | 2 +- src/Functions/assumeNotNull.cpp | 2 +- src/Functions/bar.cpp | 4 +- src/Functions/bitmaskToList.cpp | 4 +- src/Functions/blockNumber.cpp | 2 +- src/Functions/blockSerializedSize.cpp | 2 +- src/Functions/blockSize.cpp | 2 +- src/Functions/buildId.cpp | 2 +- src/Functions/caseWithExpression.cpp | 2 +- src/Functions/coalesce.cpp | 2 +- src/Functions/concat.cpp | 6 +-- src/Functions/convertCharset.cpp | 2 +- src/Functions/countDigits.cpp | 2 +- src/Functions/currentDatabase.cpp | 2 +- src/Functions/currentUser.cpp | 2 +- src/Functions/dateDiff.cpp | 2 +- src/Functions/date_trunc.cpp | 2 +- src/Functions/defaultValueOfArgumentType.cpp | 2 +- src/Functions/defaultValueOfTypeName.cpp | 2 +- src/Functions/demange.cpp | 2 +- src/Functions/dumpColumnStructure.cpp | 2 +- src/Functions/errorCodeToName.cpp | 2 +- src/Functions/evalMLMethod.cpp | 2 +- src/Functions/extractAllGroups.h | 2 +- src/Functions/extractGroups.cpp | 2 +- .../extractTimeZoneFromFunctionArguments.h | 2 +- src/Functions/filesystem.cpp | 2 +- src/Functions/finalizeAggregation.cpp | 2 +- src/Functions/formatDateTime.cpp | 4 +- src/Functions/formatReadable.h | 4 +- src/Functions/formatReadableTimeDelta.cpp | 2 +- src/Functions/formatRow.cpp | 2 +- src/Functions/formatString.cpp | 2 +- src/Functions/fuzzBits.cpp | 2 +- src/Functions/generateUUIDv4.cpp | 4 +- src/Functions/geoToH3.cpp | 2 +- src/Functions/geohashDecode.cpp | 2 +- src/Functions/geohashEncode.cpp | 2 +- src/Functions/geohashesInBox.cpp | 2 +- src/Functions/getMacro.cpp | 2 +- src/Functions/getScalar.cpp | 2 +- src/Functions/getSetting.cpp | 2 +- src/Functions/getSizeOfEnumType.cpp | 2 +- src/Functions/globalVariable.cpp | 2 +- src/Functions/greatCircleDistance.cpp | 4 +- src/Functions/h3EdgeAngle.cpp | 2 +- src/Functions/h3EdgeLengthM.cpp | 2 +- src/Functions/h3GetBaseCell.cpp | 2 +- src/Functions/h3GetResolution.cpp | 2 +- src/Functions/h3HexAreaM2.cpp | 2 +- src/Functions/h3IndexesAreNeighbors.cpp | 2 +- src/Functions/h3IsValid.cpp | 2 +- src/Functions/h3ToChildren.cpp | 2 +- src/Functions/h3ToParent.cpp | 2 +- src/Functions/h3ToString.cpp | 2 +- src/Functions/h3kRing.cpp | 2 +- src/Functions/hasColumnInTable.cpp | 6 +-- src/Functions/hasThreadFuzzer.cpp | 2 +- src/Functions/hostName.cpp | 2 +- src/Functions/identity.cpp | 2 +- src/Functions/if.cpp | 30 ++++++------ src/Functions/ifNotFinite.cpp | 2 +- src/Functions/ifNull.cpp | 2 +- src/Functions/ignore.cpp | 2 +- src/Functions/in.cpp | 2 +- src/Functions/initializeAggregation.cpp | 4 +- src/Functions/isConstant.cpp | 2 +- src/Functions/isDecimalOverflow.cpp | 2 +- src/Functions/isNotNull.cpp | 2 +- src/Functions/isNull.cpp | 2 +- src/Functions/isZeroOrNull.cpp | 2 +- src/Functions/logTrace.cpp | 2 +- src/Functions/lowCardinalityIndices.cpp | 2 +- src/Functions/lowCardinalityKeys.cpp | 2 +- src/Functions/materialize.cpp | 2 +- src/Functions/multiIf.cpp | 2 +- src/Functions/neighbor.cpp | 2 +- src/Functions/normalizedQueryHash.cpp | 2 +- src/Functions/now.cpp | 2 +- src/Functions/now64.cpp | 2 +- src/Functions/nullIf.cpp | 2 +- src/Functions/pointInEllipses.cpp | 2 +- src/Functions/pointInPolygon.cpp | 8 ++-- src/Functions/randConstant.cpp | 2 +- src/Functions/randomFixedString.cpp | 4 +- src/Functions/randomPrintableASCII.cpp | 2 +- src/Functions/randomString.cpp | 4 +- src/Functions/randomStringUTF8.cpp | 2 +- src/Functions/regexpQuoteMeta.cpp | 2 +- src/Functions/reinterpretAs.cpp | 2 +- src/Functions/reinterpretAsFixedString.cpp | 2 +- src/Functions/reinterpretAsString.cpp | 2 +- src/Functions/repeat.cpp | 2 +- src/Functions/replicate.cpp | 2 +- src/Functions/reverse.cpp | 2 +- src/Functions/rowNumberInAllBlocks.cpp | 4 +- src/Functions/rowNumberInBlock.cpp | 2 +- src/Functions/runningAccumulate.cpp | 2 +- src/Functions/runningDifference.h | 4 +- src/Functions/sleep.h | 2 +- src/Functions/stringToH3.cpp | 2 +- src/Functions/substring.cpp | 2 +- src/Functions/tcpPort.cpp | 2 +- src/Functions/throwIf.cpp | 2 +- src/Functions/tid.cpp | 2 +- src/Functions/timeSlots.cpp | 2 +- src/Functions/timezone.cpp | 2 +- src/Functions/toColumnTypeName.cpp | 2 +- src/Functions/toFixedString.h | 4 +- src/Functions/toLowCardinality.cpp | 2 +- src/Functions/toNullable.cpp | 2 +- src/Functions/toStartOfInterval.cpp | 2 +- src/Functions/toTimeZone.cpp | 2 +- src/Functions/toTypeName.cpp | 2 +- src/Functions/today.cpp | 2 +- src/Functions/transform.cpp | 6 +-- src/Functions/tuple.cpp | 2 +- src/Functions/tupleElement.cpp | 2 +- src/Functions/uptime.cpp | 2 +- src/Functions/version.cpp | 2 +- src/Functions/visibleWidth.cpp | 2 +- src/Functions/yesterday.cpp | 2 +- 220 files changed, 471 insertions(+), 470 deletions(-) diff --git a/src/AggregateFunctions/AggregateFunctionMLMethod.cpp b/src/AggregateFunctions/AggregateFunctionMLMethod.cpp index 812794902df..6c5c5af2f1d 100644 --- a/src/AggregateFunctions/AggregateFunctionMLMethod.cpp +++ b/src/AggregateFunctions/AggregateFunctionMLMethod.cpp @@ -143,7 +143,7 @@ void LinearModelData::updateState() void LinearModelData::predict( ColumnVector::Container & container, - ColumnsWithTypeAndName & arguments, + const ColumnsWithTypeAndName & arguments, size_t offset, size_t limit, const Context & context) const @@ -264,8 +264,8 @@ void Adam::merge(const IWeightsUpdater & rhs, Float64 frac, Float64 rhs_frac) average_gradient[i] = average_gradient[i] * frac + adam_rhs.average_gradient[i] * rhs_frac; average_squared_gradient[i] = average_squared_gradient[i] * frac + adam_rhs.average_squared_gradient[i] * rhs_frac; } - beta1_powered_ *= adam_rhs.beta1_powered_; - beta2_powered_ *= adam_rhs.beta2_powered_; + beta1_powered *= adam_rhs.beta1_powered; + beta2_powered *= adam_rhs.beta2_powered; } void Adam::update(UInt64 batch_size, std::vector & weights, Float64 & bias, Float64 learning_rate, const std::vector & batch_gradient) @@ -282,21 +282,21 @@ void Adam::update(UInt64 batch_size, std::vector & weights, Float64 & b for (size_t i = 0; i != average_gradient.size(); ++i) { Float64 normed_gradient = batch_gradient[i] / batch_size; - average_gradient[i] = beta1_ * average_gradient[i] + (1 - beta1_) * normed_gradient; - average_squared_gradient[i] = beta2_ * average_squared_gradient[i] + - (1 - beta2_) * normed_gradient * normed_gradient; + average_gradient[i] = beta1 * average_gradient[i] + (1 - beta1) * normed_gradient; + average_squared_gradient[i] = beta2 * average_squared_gradient[i] + + (1 - beta2) * normed_gradient * normed_gradient; } for (size_t i = 0; i < weights.size(); ++i) { weights[i] += (learning_rate * average_gradient[i]) / - ((1 - beta1_powered_) * (sqrt(average_squared_gradient[i] / (1 - beta2_powered_)) + eps_)); + ((1 - beta1_powered) * (sqrt(average_squared_gradient[i] / (1 - beta2_powered)) + eps)); } bias += (learning_rate * average_gradient[weights.size()]) / - ((1 - beta1_powered_) * (sqrt(average_squared_gradient[weights.size()] / (1 - beta2_powered_)) + eps_)); + ((1 - beta1_powered) * (sqrt(average_squared_gradient[weights.size()] / (1 - beta2_powered)) + eps)); - beta1_powered_ *= beta1_; - beta2_powered_ *= beta2_; + beta1_powered *= beta1; + beta2_powered *= beta2; } void Adam::addToBatch( @@ -348,7 +348,7 @@ void Nesterov::update(UInt64 batch_size, std::vector & weights, Float64 for (size_t i = 0; i < batch_gradient.size(); ++i) { - accumulated_gradient[i] = accumulated_gradient[i] * alpha_ + (learning_rate * batch_gradient[i]) / batch_size; + accumulated_gradient[i] = accumulated_gradient[i] * alpha + (learning_rate * batch_gradient[i]) / batch_size; } for (size_t i = 0; i < weights.size(); ++i) { @@ -375,9 +375,9 @@ void Nesterov::addToBatch( std::vector shifted_weights(weights.size()); for (size_t i = 0; i != shifted_weights.size(); ++i) { - shifted_weights[i] = weights[i] + accumulated_gradient[i] * alpha_; + shifted_weights[i] = weights[i] + accumulated_gradient[i] * alpha; } - auto shifted_bias = bias + accumulated_gradient[weights.size()] * alpha_; + auto shifted_bias = bias + accumulated_gradient[weights.size()] * alpha; gradient_computer.compute(batch_gradient, shifted_weights, shifted_bias, l2_reg_coef, target, columns, row_num); } @@ -411,7 +411,7 @@ void Momentum::update(UInt64 batch_size, std::vector & weights, Float64 for (size_t i = 0; i < batch_gradient.size(); ++i) { - accumulated_gradient[i] = accumulated_gradient[i] * alpha_ + (learning_rate * batch_gradient[i]) / batch_size; + accumulated_gradient[i] = accumulated_gradient[i] * alpha + (learning_rate * batch_gradient[i]) / batch_size; } for (size_t i = 0; i < weights.size(); ++i) { @@ -448,7 +448,7 @@ void IWeightsUpdater::addToBatch( void LogisticRegression::predict( ColumnVector::Container & container, - ColumnsWithTypeAndName & arguments, + const ColumnsWithTypeAndName & arguments, size_t offset, size_t limit, const std::vector & weights, @@ -516,7 +516,7 @@ void LogisticRegression::compute( void LinearRegression::predict( ColumnVector::Container & container, - ColumnsWithTypeAndName & arguments, + const ColumnsWithTypeAndName & arguments, size_t offset, size_t limit, const std::vector & weights, diff --git a/src/AggregateFunctions/AggregateFunctionMLMethod.h b/src/AggregateFunctions/AggregateFunctionMLMethod.h index 494907c4002..b6912405fef 100644 --- a/src/AggregateFunctions/AggregateFunctionMLMethod.h +++ b/src/AggregateFunctions/AggregateFunctionMLMethod.h @@ -23,7 +23,7 @@ GradientComputer class computes gradient according to its loss function class IGradientComputer { public: - IGradientComputer() {} + IGradientComputer() = default; virtual ~IGradientComputer() = default; @@ -39,7 +39,7 @@ public: virtual void predict( ColumnVector::Container & container, - ColumnsWithTypeAndName & arguments, + const ColumnsWithTypeAndName & arguments, size_t offset, size_t limit, const std::vector & weights, @@ -51,7 +51,7 @@ public: class LinearRegression : public IGradientComputer { public: - LinearRegression() {} + LinearRegression() = default; void compute( std::vector & batch_gradient, @@ -64,7 +64,7 @@ public: void predict( ColumnVector::Container & container, - ColumnsWithTypeAndName & arguments, + const ColumnsWithTypeAndName & arguments, size_t offset, size_t limit, const std::vector & weights, @@ -76,7 +76,7 @@ public: class LogisticRegression : public IGradientComputer { public: - LogisticRegression() {} + LogisticRegression() = default; void compute( std::vector & batch_gradient, @@ -89,7 +89,7 @@ public: void predict( ColumnVector::Container & container, - ColumnsWithTypeAndName & arguments, + const ColumnsWithTypeAndName & arguments, size_t offset, size_t limit, const std::vector & weights, @@ -147,9 +147,9 @@ public: class Momentum : public IWeightsUpdater { public: - Momentum() {} + Momentum() = default; - Momentum(Float64 alpha) : alpha_(alpha) {} + explicit Momentum(Float64 alpha_) : alpha(alpha_) {} void update(UInt64 batch_size, std::vector & weights, Float64 & bias, Float64 learning_rate, const std::vector & batch_gradient) override; @@ -160,7 +160,7 @@ public: void read(ReadBuffer & buf) override; private: - Float64 alpha_{0.1}; + Float64 alpha{0.1}; std::vector accumulated_gradient; }; @@ -168,9 +168,9 @@ private: class Nesterov : public IWeightsUpdater { public: - Nesterov() {} + Nesterov() = default; - Nesterov(Float64 alpha) : alpha_(alpha) {} + explicit Nesterov(Float64 alpha_) : alpha(alpha_) {} void addToBatch( std::vector & batch_gradient, @@ -191,7 +191,7 @@ public: void read(ReadBuffer & buf) override; private: - const Float64 alpha_ = 0.9; + const Float64 alpha = 0.9; std::vector accumulated_gradient; }; @@ -201,8 +201,8 @@ class Adam : public IWeightsUpdater public: Adam() { - beta1_powered_ = beta1_; - beta2_powered_ = beta2_; + beta1_powered = beta1; + beta2_powered = beta2; } void addToBatch( @@ -225,11 +225,11 @@ public: private: /// beta1 and beta2 hyperparameters have such recommended values - const Float64 beta1_ = 0.9; - const Float64 beta2_ = 0.999; - const Float64 eps_ = 0.000001; - Float64 beta1_powered_; - Float64 beta2_powered_; + const Float64 beta1 = 0.9; + const Float64 beta2 = 0.999; + const Float64 eps = 0.000001; + Float64 beta1_powered; + Float64 beta2_powered; std::vector average_gradient; std::vector average_squared_gradient; @@ -241,7 +241,7 @@ private: class LinearModelData { public: - LinearModelData() {} + LinearModelData() = default; LinearModelData( Float64 learning_rate_, @@ -261,7 +261,7 @@ public: void predict( ColumnVector::Container & container, - ColumnsWithTypeAndName & arguments, + const ColumnsWithTypeAndName & arguments, size_t offset, size_t limit, const Context & context) const; @@ -360,7 +360,7 @@ public: void predictValues( ConstAggregateDataPtr place, IColumn & to, - ColumnsWithTypeAndName & arguments, + const ColumnsWithTypeAndName & arguments, size_t offset, size_t limit, const Context & context) const override diff --git a/src/AggregateFunctions/IAggregateFunction.h b/src/AggregateFunctions/IAggregateFunction.h index 4f9552d2345..87f6a11406c 100644 --- a/src/AggregateFunctions/IAggregateFunction.h +++ b/src/AggregateFunctions/IAggregateFunction.h @@ -60,7 +60,7 @@ public: throw Exception("Prediction is not supported for " + getName(), ErrorCodes::NOT_IMPLEMENTED); } - virtual ~IAggregateFunction() {} + virtual ~IAggregateFunction() = default; /** Data manipulating functions. */ @@ -113,7 +113,7 @@ public: virtual void predictValues( ConstAggregateDataPtr /* place */, IColumn & /*to*/, - ColumnsWithTypeAndName & /*arguments*/, + const ColumnsWithTypeAndName & /*arguments*/, size_t /*offset*/, size_t /*limit*/, const Context & /*context*/) const diff --git a/src/Columns/ColumnAggregateFunction.cpp b/src/Columns/ColumnAggregateFunction.cpp index f5b266b6983..99b3342f314 100644 --- a/src/Columns/ColumnAggregateFunction.cpp +++ b/src/Columns/ColumnAggregateFunction.cpp @@ -161,7 +161,7 @@ MutableColumnPtr ColumnAggregateFunction::convertToValues(MutableColumnPtr colum return res; } -MutableColumnPtr ColumnAggregateFunction::predictValues(ColumnsWithTypeAndName & arguments, const Context & context) const +MutableColumnPtr ColumnAggregateFunction::predictValues(const ColumnsWithTypeAndName & arguments, const Context & context) const { MutableColumnPtr res = func->getReturnTypeToPredict()->createColumn(); res->reserve(data.size()); diff --git a/src/Columns/ColumnAggregateFunction.h b/src/Columns/ColumnAggregateFunction.h index 79e52e5769a..4e5e66542e9 100644 --- a/src/Columns/ColumnAggregateFunction.h +++ b/src/Columns/ColumnAggregateFunction.h @@ -119,7 +119,7 @@ public: const char * getFamilyName() const override { return "AggregateFunction"; } TypeIndex getDataType() const override { return TypeIndex::AggregateFunction; } - MutableColumnPtr predictValues(ColumnsWithTypeAndName & arguments, const Context & context) const; + MutableColumnPtr predictValues(const ColumnsWithTypeAndName & arguments, const Context & context) const; size_t size() const override { diff --git a/src/Databases/DatabaseOrdinary.cpp b/src/Databases/DatabaseOrdinary.cpp index a1d24226444..24e2bdcd6b2 100644 --- a/src/Databases/DatabaseOrdinary.cpp +++ b/src/Databases/DatabaseOrdinary.cpp @@ -67,14 +67,14 @@ namespace } - void tryAttachDictionary(const ASTPtr & query, DatabaseOrdinary & database, const String & metadata_path) + void tryAttachDictionary(const ASTPtr & query, DatabaseOrdinary & database, const String & metadata_path, const Context & context) { auto & create_query = query->as(); assert(create_query.is_dictionary); try { Poco::File meta_file(metadata_path); - auto config = getDictionaryConfigurationFromAST(create_query, database.getDatabaseName()); + auto config = getDictionaryConfigurationFromAST(create_query, context, database.getDatabaseName()); time_t modification_time = meta_file.getLastModified().epochTime(); database.attachDictionary(create_query.table, DictionaryAttachInfo{query, config, modification_time}); } @@ -190,7 +190,7 @@ void DatabaseOrdinary::loadStoredObjects(Context & context, bool has_force_resto auto create_query = query->as(); if (create_query.is_dictionary) { - tryAttachDictionary(query, *this, getMetadataPath() + name); + tryAttachDictionary(query, *this, getMetadataPath() + name, context); /// Messages, so that it's not boring to wait for the server to load for a long time. logAboutProgress(log, ++dictionaries_processed, total_dictionaries, watch); diff --git a/src/Databases/DatabaseWithDictionaries.cpp b/src/Databases/DatabaseWithDictionaries.cpp index 6c5173c986f..ee16f4ae15e 100644 --- a/src/Databases/DatabaseWithDictionaries.cpp +++ b/src/Databases/DatabaseWithDictionaries.cpp @@ -176,7 +176,7 @@ void DatabaseWithDictionaries::createDictionary(const Context & context, const S /// Add a temporary repository containing the dictionary. /// We need this temp repository to try loading the dictionary before actually attaching it to the database. auto temp_repository = external_loader.addConfigRepository(std::make_unique( - getDatabaseName(), dictionary_metadata_tmp_path, getDictionaryConfigurationFromAST(query->as()))); + getDatabaseName(), dictionary_metadata_tmp_path, getDictionaryConfigurationFromAST(query->as(), context))); bool lazy_load = context.getConfigRef().getBool("dictionaries_lazy_load", true); if (!lazy_load) @@ -186,7 +186,7 @@ void DatabaseWithDictionaries::createDictionary(const Context & context, const S external_loader.load(dict_id.getInternalDictionaryName()); } - auto config = getDictionaryConfigurationFromAST(query->as()); + auto config = getDictionaryConfigurationFromAST(query->as(), context); attachDictionary(dictionary_name, DictionaryAttachInfo{query, config, time(nullptr)}); SCOPE_EXIT({ if (!succeeded) diff --git a/src/Dictionaries/DictionaryFactory.cpp b/src/Dictionaries/DictionaryFactory.cpp index c33b7b5a3ae..ad19d7c20ea 100644 --- a/src/Dictionaries/DictionaryFactory.cpp +++ b/src/Dictionaries/DictionaryFactory.cpp @@ -62,7 +62,7 @@ DictionaryPtr DictionaryFactory::create( DictionaryPtr DictionaryFactory::create(const std::string & name, const ASTCreateQuery & ast, const Context & context) const { - auto configuration = getDictionaryConfigurationFromAST(ast); + auto configuration = getDictionaryConfigurationFromAST(ast, context); return DictionaryFactory::create(name, *configuration, "dictionary", context, true); } diff --git a/src/Dictionaries/tests/gtest_dictionary_configuration.cpp b/src/Dictionaries/tests/gtest_dictionary_configuration.cpp index 62422124bd8..830d4655331 100644 --- a/src/Dictionaries/tests/gtest_dictionary_configuration.cpp +++ b/src/Dictionaries/tests/gtest_dictionary_configuration.cpp @@ -1,12 +1,13 @@ -#include -#include +#include +#include +#include #include #include #include #include #include -#include -#include +#include +#include #include @@ -47,7 +48,7 @@ TEST(ConvertDictionaryAST, SimpleDictConfiguration) ParserCreateDictionaryQuery parser; ASTPtr ast = parseQuery(parser, input.data(), input.data() + input.size(), "", 0, 0); ASTCreateQuery * create = ast->as(); - DictionaryConfigurationPtr config = getDictionaryConfigurationFromAST(*create); + DictionaryConfigurationPtr config = getDictionaryConfigurationFromAST(*create, Context::createGlobal(Context::createShared().get())); /// name EXPECT_EQ(config->getString("dictionary.database"), "test"); @@ -115,7 +116,7 @@ TEST(ConvertDictionaryAST, TrickyAttributes) ParserCreateDictionaryQuery parser; ASTPtr ast = parseQuery(parser, input.data(), input.data() + input.size(), "", 0, 0); ASTCreateQuery * create = ast->as(); - DictionaryConfigurationPtr config = getDictionaryConfigurationFromAST(*create); + DictionaryConfigurationPtr config = getDictionaryConfigurationFromAST(*create, Context::createGlobal(Context::createShared().get())); Poco::Util::AbstractConfiguration::Keys keys; config->keys("dictionary.structure", keys); @@ -160,7 +161,7 @@ TEST(ConvertDictionaryAST, ComplexKeyAndLayoutWithParams) ParserCreateDictionaryQuery parser; ASTPtr ast = parseQuery(parser, input.data(), input.data() + input.size(), "", 0, 0); ASTCreateQuery * create = ast->as(); - DictionaryConfigurationPtr config = getDictionaryConfigurationFromAST(*create); + DictionaryConfigurationPtr config = getDictionaryConfigurationFromAST(*create, Context::createGlobal(Context::createShared().get())); Poco::Util::AbstractConfiguration::Keys keys; config->keys("dictionary.structure.key", keys); @@ -211,7 +212,7 @@ TEST(ConvertDictionaryAST, ComplexSource) ParserCreateDictionaryQuery parser; ASTPtr ast = parseQuery(parser, input.data(), input.data() + input.size(), "", 0, 0); ASTCreateQuery * create = ast->as(); - DictionaryConfigurationPtr config = getDictionaryConfigurationFromAST(*create); + DictionaryConfigurationPtr config = getDictionaryConfigurationFromAST(*create, Context::createGlobal(Context::createShared().get())); /// source EXPECT_EQ(config->getString("dictionary.source.mysql.host"), "localhost"); EXPECT_EQ(config->getInt("dictionary.source.mysql.port"), 9000); diff --git a/src/Functions/CustomWeekTransforms.h b/src/Functions/CustomWeekTransforms.h index 53baaff8db9..afcbadc835c 100644 --- a/src/Functions/CustomWeekTransforms.h +++ b/src/Functions/CustomWeekTransforms.h @@ -116,7 +116,7 @@ template struct CustomWeekTransformImpl { template - static ColumnPtr execute(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/, Transform transform = {}) + static ColumnPtr execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/, Transform transform = {}) { const auto op = Transformer{std::move(transform)}; diff --git a/src/Functions/DateTimeTransforms.h b/src/Functions/DateTimeTransforms.h index 52cc43c3847..4ad99b528ea 100644 --- a/src/Functions/DateTimeTransforms.h +++ b/src/Functions/DateTimeTransforms.h @@ -683,7 +683,7 @@ struct Transformer template struct DateTimeTransformImpl { - static ColumnPtr execute(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t /*input_rows_count*/, const Transform & transform = {}) + static ColumnPtr execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t /*input_rows_count*/, const Transform & transform = {}) { using Op = Transformer; diff --git a/src/Functions/FunctionBase64Conversion.h b/src/Functions/FunctionBase64Conversion.h index adc131053e2..4bc2a779cf4 100644 --- a/src/Functions/FunctionBase64Conversion.h +++ b/src/Functions/FunctionBase64Conversion.h @@ -91,7 +91,7 @@ public: return std::make_shared(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { const ColumnPtr column_string = arguments[0].column; const ColumnString * input = checkAndGetColumn(column_string.get()); diff --git a/src/Functions/FunctionBinaryArithmetic.h b/src/Functions/FunctionBinaryArithmetic.h index 43ff42956cd..7ffdc033a00 100644 --- a/src/Functions/FunctionBinaryArithmetic.h +++ b/src/Functions/FunctionBinaryArithmetic.h @@ -613,7 +613,7 @@ class FunctionBinaryArithmetic : public IFunction } /// Multiply aggregation state by integer constant: by merging it with itself specified number of times. - ColumnPtr executeAggregateMultiply(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const + ColumnPtr executeAggregateMultiply(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const { ColumnsWithTypeAndName new_arguments = arguments; if (WhichDataType(new_arguments[1].type).isAggregateFunction()) @@ -680,7 +680,7 @@ class FunctionBinaryArithmetic : public IFunction } /// Merge two aggregation states together. - ColumnPtr executeAggregateAddition(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const + ColumnPtr executeAggregateAddition(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const { const IColumn & lhs_column = *arguments[0].column; const IColumn & rhs_column = *arguments[1].column; @@ -712,7 +712,7 @@ class FunctionBinaryArithmetic : public IFunction return column_to; } - ColumnPtr executeDateTimeIntervalPlusMinus(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, + ColumnPtr executeDateTimeIntervalPlusMinus(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count, const FunctionOverloadResolverPtr & function_builder) const { ColumnsWithTypeAndName new_arguments = arguments; @@ -847,7 +847,7 @@ public: return type_res; } - ColumnPtr executeFixedString(ColumnsWithTypeAndName & arguments) const + ColumnPtr executeFixedString(const ColumnsWithTypeAndName & arguments) const { using OpImpl = FixedStringOperationImpl>; @@ -923,7 +923,7 @@ public: } template - ColumnPtr executeNumeric(ColumnsWithTypeAndName & arguments, const A & left, const B & right) const + ColumnPtr executeNumeric(const ColumnsWithTypeAndName & arguments, const A & left, const B & right) const { using LeftDataType = std::decay_t; using RightDataType = std::decay_t; @@ -1047,7 +1047,7 @@ public: return nullptr; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { /// Special case when multiply aggregate function state if (isAggregateMultiply(arguments[0].type, arguments[1].type)) @@ -1181,7 +1181,7 @@ public: { } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { if (left.column && isColumnConst(*left.column) && arguments.size() == 1) { @@ -1205,12 +1205,8 @@ public: bool hasInformationAboutMonotonicity() const override { - std::string_view name_ = Name::name; - if (name_ == "minus" || name_ == "plus" || name_ == "divide" || name_ == "intDiv") - { - return true; - } - return false; + std::string_view name = Name::name; + return (name == "minus" || name == "plus" || name == "divide" || name == "intDiv"); } Monotonicity getMonotonicityForRange(const IDataType &, const Field & left_point, const Field & right_point) const override diff --git a/src/Functions/FunctionBitTestMany.h b/src/Functions/FunctionBitTestMany.h index 0c8b803bd22..6d527c66390 100644 --- a/src/Functions/FunctionBitTestMany.h +++ b/src/Functions/FunctionBitTestMany.h @@ -54,7 +54,7 @@ public: return std::make_shared(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t /*input_rows_count*/) const override { const auto * value_col = arguments.front().column.get(); @@ -75,7 +75,7 @@ public: private: template ColumnPtr execute( - ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, + const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, const IColumn * const value_col_untyped) const { if (const auto value_col = checkAndGetColumn>(value_col_untyped)) diff --git a/src/Functions/FunctionCustomWeekToSomething.h b/src/Functions/FunctionCustomWeekToSomething.h index 74d6a2b5182..8a343cffb95 100644 --- a/src/Functions/FunctionCustomWeekToSomething.h +++ b/src/Functions/FunctionCustomWeekToSomething.h @@ -96,7 +96,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {1, 2}; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { const IDataType * from_type = arguments[0].type.get(); WhichDataType which(from_type); diff --git a/src/Functions/FunctionDateOrDateTimeAddInterval.h b/src/Functions/FunctionDateOrDateTimeAddInterval.h index bf2d20ceba7..70e2616eeac 100644 --- a/src/Functions/FunctionDateOrDateTimeAddInterval.h +++ b/src/Functions/FunctionDateOrDateTimeAddInterval.h @@ -305,7 +305,7 @@ private: template struct DateTimeAddIntervalImpl { - static ColumnPtr execute(Transform transform, ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type) + static ColumnPtr execute(Transform transform, const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type) { using FromValueType = typename FromDataType::FieldType; using FromColumnType = typename FromDataType::ColumnType; @@ -463,7 +463,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {2}; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t /*input_rows_count*/) const override { const IDataType * from_type = arguments[0].type.get(); WhichDataType which(from_type); diff --git a/src/Functions/FunctionDateOrDateTimeToSomething.h b/src/Functions/FunctionDateOrDateTimeToSomething.h index 2d2e4a7ad6f..e0676f3dc0f 100644 --- a/src/Functions/FunctionDateOrDateTimeToSomething.h +++ b/src/Functions/FunctionDateOrDateTimeToSomething.h @@ -95,7 +95,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {1}; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { const IDataType * from_type = arguments[0].type.get(); WhichDataType which(from_type); diff --git a/src/Functions/FunctionFQDN.cpp b/src/Functions/FunctionFQDN.cpp index b47675d63b4..7b3b89eb511 100644 --- a/src/Functions/FunctionFQDN.cpp +++ b/src/Functions/FunctionFQDN.cpp @@ -34,7 +34,7 @@ public: return std::make_shared(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName &, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName &, const DataTypePtr & result_type, size_t input_rows_count) const override { return result_type->createColumnConst( input_rows_count, getFQDNOrHostName())->convertToFullColumnIfConst(); diff --git a/src/Functions/FunctionJoinGet.cpp b/src/Functions/FunctionJoinGet.cpp index 4e97951fbc0..6b15bf821b2 100644 --- a/src/Functions/FunctionJoinGet.cpp +++ b/src/Functions/FunctionJoinGet.cpp @@ -17,7 +17,7 @@ namespace ErrorCodes } template -ColumnPtr ExecutableFunctionJoinGet::execute(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t) +ColumnPtr ExecutableFunctionJoinGet::execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t) const { ColumnsWithTypeAndName keys; for (size_t i = 2; i < arguments.size(); ++i) diff --git a/src/Functions/FunctionJoinGet.h b/src/Functions/FunctionJoinGet.h index 780b59e20f4..27f348e9698 100644 --- a/src/Functions/FunctionJoinGet.h +++ b/src/Functions/FunctionJoinGet.h @@ -24,7 +24,7 @@ public: bool useDefaultImplementationForLowCardinalityColumns() const override { return true; } bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr execute(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) override; + ColumnPtr execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override; String getName() const override { return name; } diff --git a/src/Functions/FunctionMathBinaryFloat64.h b/src/Functions/FunctionMathBinaryFloat64.h index ea222379e1c..0a0688dc75c 100644 --- a/src/Functions/FunctionMathBinaryFloat64.h +++ b/src/Functions/FunctionMathBinaryFloat64.h @@ -204,7 +204,7 @@ private: return nullptr; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnWithTypeAndName & col_left = arguments[0]; const ColumnWithTypeAndName & col_right = arguments[1]; diff --git a/src/Functions/FunctionMathConstFloat64.h b/src/Functions/FunctionMathConstFloat64.h index 42729d5e9f6..f03f469bc35 100644 --- a/src/Functions/FunctionMathConstFloat64.h +++ b/src/Functions/FunctionMathConstFloat64.h @@ -25,7 +25,7 @@ private: return std::make_shared(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName &, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName &, const DataTypePtr & result_type, size_t input_rows_count) const override { return result_type->createColumnConst(input_rows_count, Impl::value); } diff --git a/src/Functions/FunctionMathUnary.h b/src/Functions/FunctionMathUnary.h index abf38d277f3..49b0428811a 100644 --- a/src/Functions/FunctionMathUnary.h +++ b/src/Functions/FunctionMathUnary.h @@ -148,7 +148,7 @@ private: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnWithTypeAndName & col = arguments[0]; ColumnPtr res; diff --git a/src/Functions/FunctionNumericPredicate.h b/src/Functions/FunctionNumericPredicate.h index 825a8b0de15..72a17adac4c 100644 --- a/src/Functions/FunctionNumericPredicate.h +++ b/src/Functions/FunctionNumericPredicate.h @@ -46,7 +46,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const auto * in = arguments.front().column.get(); diff --git a/src/Functions/FunctionStartsEndsWith.h b/src/Functions/FunctionStartsEndsWith.h index 612e0b3b046..2899bc259d5 100644 --- a/src/Functions/FunctionStartsEndsWith.h +++ b/src/Functions/FunctionStartsEndsWith.h @@ -63,7 +63,7 @@ public: return std::make_shared(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { const IColumn * haystack_column = arguments[0].column.get(); const IColumn * needle_column = arguments[1].column.get(); @@ -159,7 +159,7 @@ public: #endif } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { return selector.selectAndExecute(arguments, result_type, input_rows_count); } diff --git a/src/Functions/FunctionStringOrArrayToT.h b/src/Functions/FunctionStringOrArrayToT.h index f806106560c..6330d8f90d6 100644 --- a/src/Functions/FunctionStringOrArrayToT.h +++ b/src/Functions/FunctionStringOrArrayToT.h @@ -50,7 +50,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t /*input_rows_count*/) const override { const ColumnPtr column = arguments[0].column; if (const ColumnString * col = checkAndGetColumn(column.get())) diff --git a/src/Functions/FunctionStringReplace.h b/src/Functions/FunctionStringReplace.h index 4ec85591726..bd8edbf9202 100644 --- a/src/Functions/FunctionStringReplace.h +++ b/src/Functions/FunctionStringReplace.h @@ -52,7 +52,7 @@ public: return std::make_shared(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnPtr column_src = arguments[0].column; const ColumnPtr column_needle = arguments[1].column; diff --git a/src/Functions/FunctionStringToString.h b/src/Functions/FunctionStringToString.h index db85e85a053..4123b41c547 100644 --- a/src/Functions/FunctionStringToString.h +++ b/src/Functions/FunctionStringToString.h @@ -52,7 +52,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnPtr column = arguments[0].column; if (const ColumnString * col = checkAndGetColumn(column.get())) diff --git a/src/Functions/FunctionUnaryArithmetic.h b/src/Functions/FunctionUnaryArithmetic.h index e62781cc3a1..389c171bfce 100644 --- a/src/Functions/FunctionUnaryArithmetic.h +++ b/src/Functions/FunctionUnaryArithmetic.h @@ -154,7 +154,7 @@ public: return result; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { ColumnPtr result_column; bool valid = castType(arguments[0].type.get(), [&](const auto & type) diff --git a/src/Functions/FunctionUnixTimestamp64.h b/src/Functions/FunctionUnixTimestamp64.h index 2a5dee7734a..20e225990bd 100644 --- a/src/Functions/FunctionUnixTimestamp64.h +++ b/src/Functions/FunctionUnixTimestamp64.h @@ -65,7 +65,7 @@ public: } } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { using SourceColumnType = typename SourceDataType::ColumnType; using ResultColumnType = typename ResultDataType::ColumnType; diff --git a/src/Functions/FunctionsAES.h b/src/Functions/FunctionsAES.h index 68d8b41407d..5a5c5dc05b0 100644 --- a/src/Functions/FunctionsAES.h +++ b/src/Functions/FunctionsAES.h @@ -178,7 +178,7 @@ private: return std::make_shared(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { using namespace OpenSSLDetails; @@ -448,7 +448,7 @@ private: return std::make_shared(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { using namespace OpenSSLDetails; diff --git a/src/Functions/FunctionsBitmap.h b/src/Functions/FunctionsBitmap.h index ec43ae6351f..93da4906658 100644 --- a/src/Functions/FunctionsBitmap.h +++ b/src/Functions/FunctionsBitmap.h @@ -122,7 +122,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /* input_rows_count */) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /* input_rows_count */) const override { const IDataType * from_type = arguments[0].type.get(); const auto * array_type = typeid_cast(from_type); @@ -146,7 +146,7 @@ public: private: template - ColumnPtr executeBitmapData(DataTypes & argument_types, ColumnsWithTypeAndName & arguments) const + ColumnPtr executeBitmapData(DataTypes & argument_types, const ColumnsWithTypeAndName & arguments) const { // input data const ColumnArray * array = typeid_cast(arguments[0].column.get()); @@ -207,7 +207,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { // input data const auto & return_type = result_type; @@ -240,7 +240,7 @@ private: template void executeIntType( - ColumnsWithTypeAndName & arguments, size_t input_rows_count, IColumn & res_data_col, ColumnArray::Offsets & res_offsets) + const ColumnsWithTypeAndName & arguments, size_t input_rows_count, IColumn & res_data_col, ColumnArray::Offsets & res_offsets) const { const ColumnAggregateFunction * column @@ -299,7 +299,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { const IDataType * from_type = arguments[0].type.get(); const DataTypeAggregateFunction * aggr_type = typeid_cast(from_type); @@ -321,7 +321,7 @@ private: using ToType = UInt64; template - ColumnPtr executeIntType(ColumnsWithTypeAndName & arguments, size_t input_rows_count) const + ColumnPtr executeIntType(const ColumnsWithTypeAndName & arguments, size_t input_rows_count) const { const IColumn * column_ptrs[3]; bool is_column_const[3]; @@ -417,7 +417,7 @@ public: ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); for (size_t i = 0; i < 2; ++i) { - auto array_type = typeid_cast(arguments[i + 1].get()); + const auto * array_type = typeid_cast(arguments[i + 1].get()); String msg(i == 0 ? "Second" : "Third"); msg += " argument for function " + getName() + " must be an UInt32 array but it has type " + arguments[i + 1]->getName() + "."; if (!array_type) @@ -433,7 +433,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { const IDataType * from_type = arguments[0].type.get(); const DataTypeAggregateFunction * aggr_type = typeid_cast(from_type); @@ -455,7 +455,7 @@ private: using ToType = UInt64; template - ColumnPtr executeIntType(ColumnsWithTypeAndName & arguments, size_t input_rows_count) const + ColumnPtr executeIntType(const ColumnsWithTypeAndName & arguments, size_t input_rows_count) const { const IColumn * column_ptrs[3]; bool is_column_const[3]; @@ -565,7 +565,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { auto col_to = ColumnVector::create(input_rows_count); typename ColumnVector::Container & vec_to = col_to->getData(); @@ -593,7 +593,7 @@ private: template void executeIntType( - ColumnsWithTypeAndName & arguments, size_t input_rows_count, typename ColumnVector::Container & vec_to) const + const ColumnsWithTypeAndName & arguments, size_t input_rows_count, typename ColumnVector::Container & vec_to) const { const ColumnAggregateFunction * column = typeid_cast(arguments[0].column.get()); @@ -735,7 +735,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { auto col_to = ColumnVector::create(input_rows_count); typename ColumnVector::Container & vec_to = col_to->getData(); @@ -761,7 +761,7 @@ public: private: template void executeIntType( - ColumnsWithTypeAndName & arguments, size_t input_rows_count, typename ColumnVector::Container & vec_to) const + const ColumnsWithTypeAndName & arguments, size_t input_rows_count, typename ColumnVector::Container & vec_to) const { const IColumn * column_ptrs[2]; bool is_column_const[2]; @@ -832,7 +832,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { auto col_to = ColumnVector::create(input_rows_count); typename ColumnVector::Container & vec_to = col_to->getData(); @@ -858,7 +858,7 @@ public: private: template void executeIntType( - ColumnsWithTypeAndName & arguments, size_t input_rows_count, typename ColumnVector::Container & vec_to) const + const ColumnsWithTypeAndName & arguments, size_t input_rows_count, typename ColumnVector::Container & vec_to) const { const ColumnAggregateFunction * column_ptrs[2]; bool is_column_const[2]; @@ -967,7 +967,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { const IDataType * from_type = arguments[0].type.get(); const DataTypeAggregateFunction * aggr_type = typeid_cast(from_type); @@ -987,7 +987,7 @@ public: private: template - ColumnPtr executeBitmapData(ColumnsWithTypeAndName & arguments, size_t input_rows_count) const + ColumnPtr executeBitmapData(const ColumnsWithTypeAndName & arguments, size_t input_rows_count) const { const ColumnAggregateFunction * column_ptrs[2]; bool is_column_const[2]; diff --git a/src/Functions/FunctionsCoding.h b/src/Functions/FunctionsCoding.h index 6ae75318f72..ac3262f5131 100644 --- a/src/Functions/FunctionsCoding.h +++ b/src/Functions/FunctionsCoding.h @@ -88,7 +88,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const auto & col_type_name = arguments[0]; const ColumnPtr & column = col_type_name.column; @@ -168,7 +168,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {1, 2}; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const auto & col_type_name = arguments[0]; const ColumnPtr & column = col_type_name.column; @@ -277,7 +277,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnPtr & column = arguments[0].column; @@ -339,7 +339,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnPtr & column = arguments[0].column; @@ -407,7 +407,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnPtr & column = arguments[0].column; @@ -460,7 +460,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const auto & col_type_name = arguments[0]; const ColumnPtr & column = col_type_name.column; @@ -578,7 +578,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnPtr & column = arguments[0].column; @@ -688,7 +688,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnPtr & column = arguments[0].column; @@ -755,7 +755,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnWithTypeAndName & col_type_name = arguments[0]; const ColumnPtr & column = col_type_name.column; @@ -857,7 +857,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnWithTypeAndName & col_type_name = arguments[0]; const ColumnPtr & column = col_type_name.column; @@ -1187,7 +1187,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const IColumn * column = arguments[0].column.get(); ColumnPtr res_column; @@ -1255,7 +1255,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const ColumnPtr & column = arguments[0].column; @@ -1335,7 +1335,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { auto col_str = ColumnString::create(); ColumnString::Chars & out_vec = col_str->getChars(); @@ -1461,7 +1461,7 @@ public: } } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const IColumn * in_column = arguments[0].column.get(); ColumnPtr out_column; @@ -1599,7 +1599,7 @@ public: } } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const IColumn * column = arguments[0].column.get(); ColumnPtr res_column; @@ -1668,7 +1668,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { const auto & col_type_name_ip = arguments[0]; const ColumnPtr & column_ip = col_type_name_ip.column; @@ -1782,7 +1782,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { const auto & col_type_name_ip = arguments[0]; const ColumnPtr & column_ip = col_type_name_ip.column; diff --git a/src/Functions/FunctionsComparison.h b/src/Functions/FunctionsComparison.h index 057f52501e5..e674f8690ff 100644 --- a/src/Functions/FunctionsComparison.h +++ b/src/Functions/FunctionsComparison.h @@ -1136,7 +1136,7 @@ public: return std::make_shared(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { const auto & col_with_type_and_name_left = arguments[0]; const auto & col_with_type_and_name_right = arguments[1]; diff --git a/src/Functions/FunctionsConsistentHashing.h b/src/Functions/FunctionsConsistentHashing.h index edadfd659e2..faf66579fc4 100644 --- a/src/Functions/FunctionsConsistentHashing.h +++ b/src/Functions/FunctionsConsistentHashing.h @@ -65,7 +65,7 @@ public: return {1}; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { if (isColumnConst(*arguments[1].column)) return executeConstBuckets(arguments); @@ -93,7 +93,7 @@ private: return static_cast(buckets); } - ColumnPtr executeConstBuckets(ColumnsWithTypeAndName & arguments) const + ColumnPtr executeConstBuckets(const ColumnsWithTypeAndName & arguments) const { Field buckets_field = (*arguments[1].column)[0]; BucketsType num_buckets; diff --git a/src/Functions/FunctionsConversion.h b/src/Functions/FunctionsConversion.h index 70e8904cfc1..6554c02b36a 100644 --- a/src/Functions/FunctionsConversion.h +++ b/src/Functions/FunctionsConversion.h @@ -102,7 +102,7 @@ struct ConvertImpl template static ColumnPtr NO_SANITIZE_UNDEFINED execute( - ColumnsWithTypeAndName & arguments, const DataTypePtr & /*result_type*/, size_t /*input_rows_count*/, + const ColumnsWithTypeAndName & arguments, const DataTypePtr & /*result_type*/, size_t /*input_rows_count*/, Additions additions [[maybe_unused]] = Additions()) { const ColumnWithTypeAndName & named_from = arguments[0]; @@ -442,7 +442,7 @@ struct FormatImpl> template struct ConvertImpl, DataTypeNumber, Name> { - static ColumnPtr execute(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) + static ColumnPtr execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) { return arguments[0].column; } @@ -455,7 +455,7 @@ struct ConvertImpl, ColumnDecimal, ColumnVector>; - static ColumnPtr execute(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) + static ColumnPtr execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) { const auto & col_with_type_and_name = arguments[0]; const auto & type = static_cast(*col_with_type_and_name.type); @@ -509,7 +509,7 @@ struct ConvertImpl - static ColumnPtr execute(ColumnsWithTypeAndName & arguments, const DataTypePtr & res_type, size_t input_rows_count, + static ColumnPtr execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr & res_type, size_t input_rows_count, Additions additions [[maybe_unused]] = Additions()) { using ColVecTo = typename ToDataType::ColumnType; @@ -932,7 +932,7 @@ struct ConvertImpl template struct ConvertImpl, T, Name> { - static ColumnPtr execute(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) + static ColumnPtr execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) { return arguments[0].column; } @@ -945,7 +945,7 @@ struct ConvertImpl, T, Name> template struct ConvertImpl { - static ColumnPtr execute(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) + static ColumnPtr execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) { if (const ColumnFixedString * col_from = checkAndGetColumn(arguments[0].column.get())) { @@ -1141,7 +1141,7 @@ public: ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {1}; } bool canBeExecutedOnDefaultArguments() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { try { @@ -1186,7 +1186,7 @@ public: } private: - ColumnPtr executeInternal(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const + ColumnPtr executeInternal(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const { if (arguments.empty()) throw Exception{"Function " + getName() + " expects at least 1 arguments", @@ -1406,7 +1406,7 @@ public: } template - ColumnPtr executeInternal(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count, UInt32 scale = 0) const + ColumnPtr executeInternal(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count, UInt32 scale = 0) const { const IDataType * from_type = arguments[0].type.get(); @@ -1424,7 +1424,7 @@ public: return nullptr; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { ColumnPtr result_column; @@ -1880,7 +1880,7 @@ public: String getName() const override { return name; } protected: - ColumnPtr execute(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) override + ColumnPtr execute(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { /// drop second argument, pass others ColumnsWithTypeAndName new_arguments{arguments.front()}; diff --git a/src/Functions/FunctionsEmbeddedDictionaries.h b/src/Functions/FunctionsEmbeddedDictionaries.h index 7c1221601f6..01456365740 100644 --- a/src/Functions/FunctionsEmbeddedDictionaries.h +++ b/src/Functions/FunctionsEmbeddedDictionaries.h @@ -183,7 +183,7 @@ public: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { /// The dictionary key that defines the "point of view". std::string dict_key; @@ -279,7 +279,7 @@ public: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { /// The dictionary key that defines the "point of view". std::string dict_key; @@ -415,7 +415,7 @@ public: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { /// The dictionary key that defines the "point of view". std::string dict_key; @@ -620,7 +620,7 @@ public: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { RegionsNames::Language language = RegionsNames::Language::ru; diff --git a/src/Functions/FunctionsExternalDictionaries.h b/src/Functions/FunctionsExternalDictionaries.h index 0fae3de1fb2..92a1389d212 100644 --- a/src/Functions/FunctionsExternalDictionaries.h +++ b/src/Functions/FunctionsExternalDictionaries.h @@ -163,7 +163,7 @@ private: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { /** Do not require existence of the dictionary if the function is called for empty columns. * This is needed to allow successful query analysis on a server, @@ -204,7 +204,7 @@ private: template ColumnPtr executeDispatchSimple( - ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -227,7 +227,7 @@ private: template ColumnPtr executeDispatchComplex( - ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -324,7 +324,7 @@ private: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { if (input_rows_count == 0) return result_type->createColumn(); @@ -359,7 +359,7 @@ private: template ColumnPtr executeDispatch( - ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -388,7 +388,7 @@ private: template ColumnPtr executeDispatchComplex( - ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -423,7 +423,7 @@ private: template ColumnPtr executeDispatchRange( - ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -502,7 +502,7 @@ private: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { if (input_rows_count == 0) return result_type->createColumn(); @@ -621,7 +621,7 @@ private: template ColumnPtr executeDispatchComplex( - ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -839,7 +839,7 @@ private: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { if (input_rows_count == 0) return result_type->createColumn(); @@ -873,7 +873,7 @@ private: } template - ColumnPtr executeDispatch(ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + ColumnPtr executeDispatch(const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -926,7 +926,7 @@ private: template ColumnPtr executeDispatchComplex( - ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -967,7 +967,7 @@ private: template ColumnPtr executeDispatchRange( - ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -1094,7 +1094,7 @@ private: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { if (input_rows_count == 0) return result_type->createColumn(); @@ -1127,7 +1127,7 @@ private: } template - ColumnPtr executeDispatch(ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + ColumnPtr executeDispatch(const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -1150,7 +1150,7 @@ private: template ColumnPtr executeDispatch( - ColumnsWithTypeAndName & arguments, const DictionaryType * dict, + const ColumnsWithTypeAndName & arguments, const DictionaryType * dict, const std::string & attr_name, const ColumnUInt64 * id_col) const { const auto * default_col_untyped = arguments[3].column.get(); @@ -1189,7 +1189,7 @@ private: template ColumnPtr executeDispatch( - ColumnsWithTypeAndName & arguments, const DictionaryType * dict, + const ColumnsWithTypeAndName & arguments, const DictionaryType * dict, const std::string & attr_name, const ColumnConst * id_col) const { const auto * default_col_untyped = arguments[3].column.get(); @@ -1246,7 +1246,7 @@ private: template ColumnPtr executeDispatchComplex( - ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -1472,7 +1472,7 @@ private: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { return impl->executeImpl(arguments, result_type, input_rows_count); } @@ -1613,7 +1613,7 @@ private: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { return impl->executeImpl(arguments, result_type, input_rows_count); } @@ -1661,7 +1661,7 @@ private: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { if (input_rows_count == 0) return result_type->createColumn(); @@ -1679,7 +1679,7 @@ private: } template - ColumnPtr executeDispatch(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, const std::shared_ptr & dict_ptr) const + ColumnPtr executeDispatch(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) @@ -1814,7 +1814,7 @@ private: bool isDeterministic() const override { return false; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { if (input_rows_count == 0) return result_type->createColumn(); @@ -1832,7 +1832,7 @@ private: } template - ColumnPtr executeDispatch(ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const + ColumnPtr executeDispatch(const ColumnsWithTypeAndName & arguments, const std::shared_ptr & dict_ptr) const { const auto * dict = typeid_cast(dict_ptr.get()); if (!dict) diff --git a/src/Functions/FunctionsExternalModels.cpp b/src/Functions/FunctionsExternalModels.cpp index 9c1892012e1..ecec9383252 100644 --- a/src/Functions/FunctionsExternalModels.cpp +++ b/src/Functions/FunctionsExternalModels.cpp @@ -69,7 +69,7 @@ DataTypePtr FunctionModelEvaluate::getReturnTypeImpl(const ColumnsWithTypeAndNam return type; } -ColumnPtr FunctionModelEvaluate::executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const +ColumnPtr FunctionModelEvaluate::executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const { const auto * name_col = checkAndGetColumnConst(arguments[0].column.get()); if (!name_col) @@ -85,7 +85,7 @@ ColumnPtr FunctionModelEvaluate::executeImpl(ColumnsWithTypeAndName & arguments, column_ptrs.reserve(arguments.size()); for (auto arg : ext::range(1, arguments.size())) { - auto & column = arguments[arg].column; + const auto & column = arguments[arg].column; column_ptrs.push_back(column.get()); if (auto full_column = column->convertToFullColumnIfConst()) { diff --git a/src/Functions/FunctionsExternalModels.h b/src/Functions/FunctionsExternalModels.h index 336dc164248..9bb6cc5a77c 100644 --- a/src/Functions/FunctionsExternalModels.h +++ b/src/Functions/FunctionsExternalModels.h @@ -32,7 +32,7 @@ public: DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override; - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override; + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override; private: const ExternalModelsLoader & models_loader; diff --git a/src/Functions/FunctionsHashing.h b/src/Functions/FunctionsHashing.h index 17165e12e37..fca27fe2f14 100644 --- a/src/Functions/FunctionsHashing.h +++ b/src/Functions/FunctionsHashing.h @@ -555,7 +555,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { if (const ColumnString * col_from = checkAndGetColumn(arguments[0].column.get())) { @@ -616,7 +616,7 @@ private: using ToType = typename Impl::ReturnType; template - ColumnPtr executeType(ColumnsWithTypeAndName & arguments) const + ColumnPtr executeType(const ColumnsWithTypeAndName & arguments) const { using ColVecType = std::conditional_t, ColumnDecimal, ColumnVector>; @@ -659,7 +659,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const IDataType * from_type = arguments[0].type.get(); WhichDataType which(from_type); @@ -713,7 +713,7 @@ public: #endif } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { return selector.selectAndExecute(arguments, result_type, input_rows_count); } @@ -1065,7 +1065,7 @@ public: return std::make_shared>(); } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override { size_t rows = input_rows_count; auto col_to = ColumnVector::create(rows); @@ -1107,7 +1107,7 @@ public: #endif } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { return selector.selectAndExecute(arguments, result_type, input_rows_count); } @@ -1230,7 +1230,7 @@ public: bool useDefaultImplementationForConstants() const override { return true; } ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {1}; } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t /*input_rows_count*/) const override { const auto arg_count = arguments.size(); @@ -1243,7 +1243,7 @@ public: } private: - ColumnPtr executeSingleArg(ColumnsWithTypeAndName & arguments) const + ColumnPtr executeSingleArg(const ColumnsWithTypeAndName & arguments) const { const auto * col_untyped = arguments.front().column.get(); @@ -1273,7 +1273,7 @@ private: " of argument of function " + getName(), ErrorCodes::ILLEGAL_COLUMN}; } - ColumnPtr executeTwoArgs(ColumnsWithTypeAndName & arguments) const + ColumnPtr executeTwoArgs(const ColumnsWithTypeAndName & arguments) const { const auto * level_col = arguments.back().column.get(); if (!isColumnConst(*level_col)) diff --git a/src/Functions/FunctionsJSON.cpp b/src/Functions/FunctionsJSON.cpp index 7478c1627af..7516600ac85 100644 --- a/src/Functions/FunctionsJSON.cpp +++ b/src/Functions/FunctionsJSON.cpp @@ -10,7 +10,7 @@ namespace ErrorCodes } -std::vector FunctionJSONHelpers::prepareMoves(const char * function_name, ColumnsWithTypeAndName & columns, size_t first_index_argument, size_t num_index_arguments) +std::vector FunctionJSONHelpers::prepareMoves(const char * function_name, const ColumnsWithTypeAndName & columns, size_t first_index_argument, size_t num_index_arguments) { std::vector moves; moves.reserve(num_index_arguments); diff --git a/src/Functions/FunctionsJSON.h b/src/Functions/FunctionsJSON.h index 0fcf1f57f82..aea5829eaef 100644 --- a/src/Functions/FunctionsJSON.h +++ b/src/Functions/FunctionsJSON.h @@ -55,7 +55,7 @@ public: class Executor { public: - static ColumnPtr run(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) + static ColumnPtr run(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) { MutableColumnPtr to{result_type->createColumn()}; to->reserve(input_rows_count); @@ -166,7 +166,7 @@ private: String key; }; - static std::vector prepareMoves(const char * function_name, ColumnsWithTypeAndName & columns, size_t first_index_argument, size_t num_index_arguments); + static std::vector prepareMoves(const char * function_name, const ColumnsWithTypeAndName & columns, size_t first_index_argument, size_t num_index_arguments); /// Performs moves of types MoveType::Index and MoveType::ConstIndex. template @@ -286,7 +286,7 @@ public: return Impl::getReturnType(Name::name, arguments); } - ColumnPtr executeImpl(ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override + ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override { /// Choose JSONParser. #if USE_SIMDJSON diff --git a/src/Functions/FunctionsLogical.cpp b/src/Functions/FunctionsLogical.cpp index 3e19516daaa..ab8e1cfc0b2 100644 --- a/src/Functions/FunctionsLogical.cpp +++ b/src/Functions/FunctionsLogical.cpp @@ -509,7 +509,7 @@ DataTypePtr FunctionAnyArityLogical::getReturnTypeImpl(const DataTyp template ColumnPtr FunctionAnyArityLogical::executeImpl( - ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const + const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const { ColumnRawPtrs args_in; for (const auto & arg_index : arguments) @@ -550,7 +550,7 @@ DataTypePtr FunctionUnaryLogical::getReturnTypeImpl(const DataTypes } template