diff --git a/dbms/include/DB/Interpreters/Set.h b/dbms/include/DB/Interpreters/Set.h index 1c16f0e1743..4b45f73ae96 100644 --- a/dbms/include/DB/Interpreters/Set.h +++ b/dbms/include/DB/Interpreters/Set.h @@ -55,9 +55,8 @@ struct SetMethodOneNumber Key getKey( const ConstColumnPlainPtrs & key_columns, /// Ключевые столбцы. size_t keys_size, /// Количество ключевых столбцов. - size_t i, /// Из какой строки блока достать ключ. - const Sizes & key_sizes, /// Если ключи фиксированной длины - их длины. Не используется в методах по ключам переменной длины. - StringRefs & keys) const /// Сюда могут быть записаны ссылки на данные ключей в столбцах. Они могут быть использованы в дальнейшем. + size_t i, /// Из какой строки блока достать ключ. + const Sizes & key_sizes) const /// Если ключи фиксированной длины - их длины. Не используется в методах по ключам переменной длины. { return unionCastToUInt64(vec[i]); } @@ -65,7 +64,7 @@ struct SetMethodOneNumber /** Разместить дополнительные данные, если это необходимо, в случае, когда в хэш-таблицу был вставлен новый ключ. */ - static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, StringRefs & keys, Arena & pool) {} + static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, Arena & pool) {} }; /// Для случая, когда есть один строковый ключ. @@ -94,8 +93,7 @@ struct SetMethodString const ConstColumnPlainPtrs & key_columns, size_t keys_size, size_t i, - const Sizes & key_sizes, - StringRefs & keys) const + const Sizes & key_sizes) const { return StringRef( &(*chars)[i == 0 ? 0 : (*offsets)[i - 1]], @@ -103,7 +101,7 @@ struct SetMethodString } }; - static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, StringRefs & keys, Arena & pool) + static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, Arena & pool) { value.data = pool.insert(value.data, value.size); } @@ -135,14 +133,13 @@ struct SetMethodFixedString const ConstColumnPlainPtrs & key_columns, size_t keys_size, size_t i, - const Sizes & key_sizes, - StringRefs & keys) const + const Sizes & key_sizes) const { return StringRef(&(*chars)[i * n], n); } }; - static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, StringRefs & keys, Arena & pool) + static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, Arena & pool) { value.data = pool.insert(value.data, value.size); } @@ -167,14 +164,13 @@ struct SetMethodKeysFixed const ConstColumnPlainPtrs & key_columns, size_t keys_size, size_t i, - const Sizes & key_sizes, - StringRefs & keys) const + const Sizes & key_sizes) const { return packFixed(i, keys_size, key_columns, key_sizes); } }; - static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, StringRefs & keys, Arena & pool) {} + static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, Arena & pool) {} }; /// Для остальных случаев. По 128 битному хэшу от ключа. (При этом, строки, содержащие нули посередине, могут склеиться.) @@ -196,14 +192,13 @@ struct SetMethodHashed const ConstColumnPlainPtrs & key_columns, size_t keys_size, size_t i, - const Sizes & key_sizes, - StringRefs & keys) const + const Sizes & key_sizes) const { - return hash128(i, keys_size, key_columns, keys); + return hash128(i, keys_size, key_columns); } }; - static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, StringRefs & keys, Arena & pool) {} + static void onNewKey(typename Data::value_type & value, size_t keys_size, size_t i, Arena & pool) {} }; @@ -367,7 +362,6 @@ private: Method & method, const ConstColumnPlainPtrs & key_columns, size_t rows, - StringRefs & keys, SetVariants & variants); template @@ -376,8 +370,7 @@ private: const ConstColumnPlainPtrs & key_columns, ColumnUInt8::Container_t & vec_res, bool negative, - size_t rows, - StringRefs & keys) const; + size_t rows) const; template void executeArrayImpl( @@ -386,8 +379,7 @@ private: const ColumnArray::Offsets_t & offsets, ColumnUInt8::Container_t & vec_res, bool negative, - size_t rows, - StringRefs & keys) const; + size_t rows) const; }; typedef Poco::SharedPtr SetPtr; diff --git a/dbms/src/Interpreters/Set.cpp b/dbms/src/Interpreters/Set.cpp index 1d49fbfe483..e61ce0e6354 100644 --- a/dbms/src/Interpreters/Set.cpp +++ b/dbms/src/Interpreters/Set.cpp @@ -140,7 +140,6 @@ void NO_INLINE Set::insertFromBlockImpl( Method & method, const ConstColumnPlainPtrs & key_columns, size_t rows, - StringRefs & keys, SetVariants & variants) { typename Method::State state; @@ -151,14 +150,14 @@ void NO_INLINE Set::insertFromBlockImpl( for (size_t i = 0; i < rows; ++i) { /// Строим ключ - typename Method::Key key = state.getKey(key_columns, keys_size, i, key_sizes, keys); + typename Method::Key key = state.getKey(key_columns, keys_size, i, key_sizes); typename Method::Data::iterator it = method.data.find(key); bool inserted; method.data.emplace(key, it, inserted); if (inserted) - method.onNewKey(*it, keys_size, i, keys, variants.string_pool); + method.onNewKey(*it, keys_size, i, variants.string_pool); } } @@ -184,12 +183,10 @@ bool Set::insertFromBlock(const Block & block, bool create_ordered_set) if (empty()) data.init(data.chooseMethod(key_columns, key_sizes)); - StringRefs keys; - if (false) {} #define M(NAME) \ else if (data.type == SetVariants::Type::NAME) \ - insertFromBlockImpl(*data.NAME, key_columns, rows, keys, data); + insertFromBlockImpl(*data.NAME, key_columns, rows, data); APPLY_FOR_SET_VARIANTS(M) #undef M else @@ -471,8 +468,7 @@ void NO_INLINE Set::executeImpl( const ConstColumnPlainPtrs & key_columns, ColumnUInt8::Container_t & vec_res, bool negative, - size_t rows, - StringRefs & keys) const + size_t rows) const { typename Method::State state; state.init(key_columns); @@ -484,7 +480,7 @@ void NO_INLINE Set::executeImpl( for (size_t i = 0; i < rows; ++i) { /// Строим ключ - typename Method::Key key = state.getKey(key_columns, keys_size, i, key_sizes, keys); + typename Method::Key key = state.getKey(key_columns, keys_size, i, key_sizes); vec_res[i] = negative ^ (method.data.end() != method.data.find(key)); } } @@ -496,8 +492,7 @@ void NO_INLINE Set::executeArrayImpl( const ColumnArray::Offsets_t & offsets, ColumnUInt8::Container_t & vec_res, bool negative, - size_t rows, - StringRefs & keys) const + size_t rows) const { typename Method::State state; state.init(key_columns); @@ -512,7 +507,7 @@ void NO_INLINE Set::executeArrayImpl( for (size_t j = prev_offset; j < offsets[i]; ++j) { /// Строим ключ - typename Method::Key key = state.getKey(key_columns, keys_size, i, key_sizes, keys); + typename Method::Key key = state.getKey(key_columns, keys_size, i, key_sizes); res |= negative ^ (method.data.end() != method.data.find(key)); if (res) break; @@ -526,12 +521,11 @@ void NO_INLINE Set::executeArrayImpl( void Set::executeOrdinary(const ConstColumnPlainPtrs & key_columns, ColumnUInt8::Container_t & vec_res, bool negative) const { size_t rows = key_columns[0]->size(); - StringRefs keys; if (false) {} #define M(NAME) \ else if (data.type == SetVariants::Type::NAME) \ - executeImpl(*data.NAME, key_columns, vec_res, negative, rows, keys); + executeImpl(*data.NAME, key_columns, vec_res, negative, rows); APPLY_FOR_SET_VARIANTS(M) #undef M else @@ -543,12 +537,11 @@ void Set::executeArray(const ColumnArray * key_column, ColumnUInt8::Container_t size_t rows = key_column->size(); const ColumnArray::Offsets_t & offsets = key_column->getOffsets(); const IColumn & nested_column = key_column->getData(); - StringRefs keys; if (false) {} #define M(NAME) \ else if (data.type == SetVariants::Type::NAME) \ - executeArrayImpl(*data.NAME, ConstColumnPlainPtrs{key_column}, offsets, vec_res, negative, rows, keys); + executeArrayImpl(*data.NAME, ConstColumnPlainPtrs{key_column}, offsets, vec_res, negative, rows); APPLY_FOR_SET_VARIANTS(M) #undef M else