Skip to content

Commit 141e979

Browse files
Fixed error with "extractURLParameter" function (read after buffer); improved performance; added support for zero bytes in URLs; renamed Chars_t type [#CLICKHOUSE-2]
1 parent 244e64a commit 141e979

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+368
-282
lines changed

dbms/programs/client/Client.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#include <Poco/File.h>
1919
#include <Poco/Util/Application.h>
2020
#include <common/readline_use.h>
21-
#include <common/find_first_symbols.h>
21+
#include <common/find_symbols.h>
2222
#include <Common/ClickHouseRevision.h>
2323
#include <Common/Stopwatch.h>
2424
#include <Common/Exception.h>

dbms/programs/odbc-bridge/validateODBCConnectionString.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#include <cstring>
33
#include <algorithm>
44
#include <Poco/String.h>
5-
#include <common/find_first_symbols.h>
5+
#include <common/find_symbols.h>
66
#include <Common/Exception.h>
77
#include <Common/StringUtils/StringUtils.h>
88
#include "validateODBCConnectionString.h"

dbms/src/Columns/ColumnArray.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -437,11 +437,11 @@ ColumnPtr ColumnArray::filterString(const Filter & filt, ssize_t result_size_hin
437437
auto res = ColumnArray::create(data->cloneEmpty());
438438

439439
const ColumnString & src_string = typeid_cast<const ColumnString &>(*data);
440-
const ColumnString::Chars_t & src_chars = src_string.getChars();
440+
const ColumnString::Chars & src_chars = src_string.getChars();
441441
const Offsets & src_string_offsets = src_string.getOffsets();
442442
const Offsets & src_offsets = getOffsets();
443443

444-
ColumnString::Chars_t & res_chars = typeid_cast<ColumnString &>(res->getData()).getChars();
444+
ColumnString::Chars & res_chars = typeid_cast<ColumnString &>(res->getData()).getChars();
445445
Offsets & res_string_offsets = typeid_cast<ColumnString &>(res->getData()).getOffsets();
446446
Offsets & res_offsets = res->getOffsets();
447447

@@ -781,11 +781,11 @@ ColumnPtr ColumnArray::replicateString(const Offsets & replicate_offsets) const
781781
ColumnArray & res_ = static_cast<ColumnArray &>(*res);
782782

783783
const ColumnString & src_string = typeid_cast<const ColumnString &>(*data);
784-
const ColumnString::Chars_t & src_chars = src_string.getChars();
784+
const ColumnString::Chars & src_chars = src_string.getChars();
785785
const Offsets & src_string_offsets = src_string.getOffsets();
786786
const Offsets & src_offsets = getOffsets();
787787

788-
ColumnString::Chars_t & res_chars = typeid_cast<ColumnString &>(res_.getData()).getChars();
788+
ColumnString::Chars & res_chars = typeid_cast<ColumnString &>(res_.getData()).getChars();
789789
Offsets & res_string_offsets = typeid_cast<ColumnString &>(res_.getData()).getOffsets();
790790
Offsets & res_offsets = res_.getOffsets();
791791

dbms/src/Columns/ColumnFixedString.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ ColumnPtr ColumnFixedString::permute(const Permutation & perm, size_t limit) con
248248

249249
auto res = ColumnFixedString::create(n);
250250

251-
Chars_t & res_chars = res->chars;
251+
Chars & res_chars = res->chars;
252252

253253
res_chars.resize(n * limit);
254254

@@ -274,7 +274,7 @@ ColumnPtr ColumnFixedString::indexImpl(const PaddedPODArray<Type> & indexes, siz
274274

275275
auto res = ColumnFixedString::create(n);
276276

277-
Chars_t & res_chars = res->chars;
277+
Chars & res_chars = res->chars;
278278

279279
res_chars.resize(n * limit);
280280

@@ -296,7 +296,7 @@ ColumnPtr ColumnFixedString::replicate(const Offsets & offsets) const
296296
if (0 == col_size)
297297
return res;
298298

299-
Chars_t & res_chars = res->chars;
299+
Chars & res_chars = res->chars;
300300
res_chars.resize(n * offsets.back());
301301

302302
Offset curr_offset = 0;

dbms/src/Columns/ColumnFixedString.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ class ColumnFixedString final : public COWPtrHelper<IColumn, ColumnFixedString>
1717
public:
1818
friend class COWPtrHelper<IColumn, ColumnFixedString>;
1919

20-
using Chars_t = PaddedPODArray<UInt8>;
20+
using Chars = PaddedPODArray<UInt8>;
2121

2222
private:
2323
/// Bytes of rows, laid in succession. The strings are stored without a trailing zero byte.
2424
/** NOTE It is required that the offset and type of chars in the object be the same as that of `data in ColumnUInt8`.
2525
* Used in `packFixed` function (AggregationCommon.h)
2626
*/
27-
Chars_t chars;
27+
Chars chars;
2828
/// The size of the rows.
2929
const size_t n;
3030

@@ -138,8 +138,8 @@ class ColumnFixedString final : public COWPtrHelper<IColumn, ColumnFixedString>
138138

139139
/// Specialized part of interface, not from IColumn.
140140

141-
Chars_t & getChars() { return chars; }
142-
const Chars_t & getChars() const { return chars; }
141+
Chars & getChars() { return chars; }
142+
const Chars & getChars() const { return chars; }
143143

144144
size_t getN() const { return n; }
145145
};

dbms/src/Columns/ColumnString.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ ColumnPtr ColumnString::filter(const Filter & filt, ssize_t result_size_hint) co
101101

102102
auto res = ColumnString::create();
103103

104-
Chars_t & res_chars = res->chars;
104+
Chars & res_chars = res->chars;
105105
Offsets & res_offsets = res->offsets;
106106

107107
filterArraysImpl<UInt8>(chars, offsets, res_chars, res_offsets, filt, result_size_hint);
@@ -126,7 +126,7 @@ ColumnPtr ColumnString::permute(const Permutation & perm, size_t limit) const
126126

127127
auto res = ColumnString::create();
128128

129-
Chars_t & res_chars = res->chars;
129+
Chars & res_chars = res->chars;
130130
Offsets & res_offsets = res->offsets;
131131

132132
if (limit == size)
@@ -202,7 +202,7 @@ ColumnPtr ColumnString::indexImpl(const PaddedPODArray<Type> & indexes, size_t l
202202

203203
auto res = ColumnString::create();
204204

205-
Chars_t & res_chars = res->chars;
205+
Chars & res_chars = res->chars;
206206
Offsets & res_offsets = res->offsets;
207207

208208
size_t new_chars_size = 0;
@@ -287,7 +287,7 @@ ColumnPtr ColumnString::replicate(const Offsets & replicate_offsets) const
287287
if (0 == col_size)
288288
return res;
289289

290-
Chars_t & res_chars = res->chars;
290+
Chars & res_chars = res->chars;
291291
Offsets & res_offsets = res->offsets;
292292
res_chars.reserve(chars.size() / col_size * replicate_offsets.back());
293293
res_offsets.reserve(replicate_offsets.back());

dbms/src/Columns/ColumnString.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace DB
1919
class ColumnString final : public COWPtrHelper<IColumn, ColumnString>
2020
{
2121
public:
22-
using Chars_t = PaddedPODArray<UInt8>;
22+
using Chars = PaddedPODArray<UInt8>;
2323

2424
private:
2525
friend class COWPtrHelper<IColumn, ColumnString>;
@@ -29,7 +29,7 @@ class ColumnString final : public COWPtrHelper<IColumn, ColumnString>
2929

3030
/// Bytes of strings, placed contiguously.
3131
/// For convenience, every string ends with terminating zero byte. Note that strings could contain zero bytes in the middle.
32-
Chars_t chars;
32+
Chars chars;
3333

3434
size_t ALWAYS_INLINE offsetAt(size_t i) const { return i == 0 ? 0 : offsets[i - 1]; }
3535

@@ -245,8 +245,8 @@ class ColumnString final : public COWPtrHelper<IColumn, ColumnString>
245245
bool canBeInsideNullable() const override { return true; }
246246

247247

248-
Chars_t & getChars() { return chars; }
249-
const Chars_t & getChars() const { return chars; }
248+
Chars & getChars() { return chars; }
249+
const Chars & getChars() const { return chars; }
250250

251251
Offsets & getOffsets() { return offsets; }
252252
const Offsets & getOffsets() const { return offsets; }

dbms/src/Common/parseAddress.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include <Common/parseAddress.h>
22
#include <Common/Exception.h>
33
#include <IO/ReadHelpers.h>
4-
#include <common/find_first_symbols.h>
4+
#include <common/find_symbols.h>
55

66

77
namespace DB

dbms/src/DataTypes/DataTypeFixedString.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ void DataTypeFixedString::serializeBinary(const IColumn & column, size_t row_num
6464

6565
void DataTypeFixedString::deserializeBinary(IColumn & column, ReadBuffer & istr) const
6666
{
67-
ColumnFixedString::Chars_t & data = static_cast<ColumnFixedString &>(column).getChars();
67+
ColumnFixedString::Chars & data = static_cast<ColumnFixedString &>(column).getChars();
6868
size_t old_size = data.size();
6969
data.resize(old_size + n);
7070
try
@@ -81,7 +81,7 @@ void DataTypeFixedString::deserializeBinary(IColumn & column, ReadBuffer & istr)
8181

8282
void DataTypeFixedString::serializeBinaryBulk(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const
8383
{
84-
const ColumnFixedString::Chars_t & data = typeid_cast<const ColumnFixedString &>(column).getChars();
84+
const ColumnFixedString::Chars & data = typeid_cast<const ColumnFixedString &>(column).getChars();
8585

8686
size_t size = data.size() / n;
8787

@@ -95,7 +95,7 @@ void DataTypeFixedString::serializeBinaryBulk(const IColumn & column, WriteBuffe
9595

9696
void DataTypeFixedString::deserializeBinaryBulk(IColumn & column, ReadBuffer & istr, size_t limit, double /*avg_value_size_hint*/) const
9797
{
98-
ColumnFixedString::Chars_t & data = typeid_cast<ColumnFixedString &>(column).getChars();
98+
ColumnFixedString::Chars & data = typeid_cast<ColumnFixedString &>(column).getChars();
9999

100100
size_t initial_size = data.size();
101101
size_t max_bytes = limit * n;
@@ -126,7 +126,7 @@ void DataTypeFixedString::serializeTextEscaped(const IColumn & column, size_t ro
126126
template <typename Reader>
127127
static inline void read(const DataTypeFixedString & self, IColumn & column, Reader && reader)
128128
{
129-
ColumnFixedString::Chars_t & data = typeid_cast<ColumnFixedString &>(column).getChars();
129+
ColumnFixedString::Chars & data = typeid_cast<ColumnFixedString &>(column).getChars();
130130
size_t prev_size = data.size();
131131

132132
try
@@ -152,7 +152,7 @@ static inline void read(const DataTypeFixedString & self, IColumn & column, Read
152152

153153
void DataTypeFixedString::deserializeTextEscaped(IColumn & column, ReadBuffer & istr, const FormatSettings &) const
154154
{
155-
read(*this, column, [&istr](ColumnFixedString::Chars_t & data) { readEscapedStringInto(data, istr); });
155+
read(*this, column, [&istr](ColumnFixedString::Chars & data) { readEscapedStringInto(data, istr); });
156156
}
157157

158158

@@ -165,7 +165,7 @@ void DataTypeFixedString::serializeTextQuoted(const IColumn & column, size_t row
165165

166166
void DataTypeFixedString::deserializeTextQuoted(IColumn & column, ReadBuffer & istr, const FormatSettings &) const
167167
{
168-
read(*this, column, [&istr](ColumnFixedString::Chars_t & data) { readQuotedStringInto<true>(data, istr); });
168+
read(*this, column, [&istr](ColumnFixedString::Chars & data) { readQuotedStringInto<true>(data, istr); });
169169
}
170170

171171

@@ -178,7 +178,7 @@ void DataTypeFixedString::serializeTextJSON(const IColumn & column, size_t row_n
178178

179179
void DataTypeFixedString::deserializeTextJSON(IColumn & column, ReadBuffer & istr, const FormatSettings &) const
180180
{
181-
read(*this, column, [&istr](ColumnFixedString::Chars_t & data) { readJSONStringInto(data, istr); });
181+
read(*this, column, [&istr](ColumnFixedString::Chars & data) { readJSONStringInto(data, istr); });
182182
}
183183

184184

@@ -198,7 +198,7 @@ void DataTypeFixedString::serializeTextCSV(const IColumn & column, size_t row_nu
198198

199199
void DataTypeFixedString::deserializeTextCSV(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const
200200
{
201-
read(*this, column, [&istr, &csv = settings.csv](ColumnFixedString::Chars_t & data) { readCSVStringInto(data, istr, csv); });
201+
read(*this, column, [&istr, &csv = settings.csv](ColumnFixedString::Chars & data) { readCSVStringInto(data, istr, csv); });
202202
}
203203

204204

dbms/src/DataTypes/DataTypeString.cpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ void DataTypeString::serializeBinary(const IColumn & column, size_t row_num, Wri
5353
void DataTypeString::deserializeBinary(IColumn & column, ReadBuffer & istr) const
5454
{
5555
ColumnString & column_string = static_cast<ColumnString &>(column);
56-
ColumnString::Chars_t & data = column_string.getChars();
56+
ColumnString::Chars & data = column_string.getChars();
5757
ColumnString::Offsets & offsets = column_string.getOffsets();
5858

5959
UInt64 size;
@@ -81,7 +81,7 @@ void DataTypeString::deserializeBinary(IColumn & column, ReadBuffer & istr) cons
8181
void DataTypeString::serializeBinaryBulk(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const
8282
{
8383
const ColumnString & column_string = typeid_cast<const ColumnString &>(column);
84-
const ColumnString::Chars_t & data = column_string.getChars();
84+
const ColumnString::Chars & data = column_string.getChars();
8585
const ColumnString::Offsets & offsets = column_string.getOffsets();
8686

8787
size_t size = column.size();
@@ -111,7 +111,7 @@ void DataTypeString::serializeBinaryBulk(const IColumn & column, WriteBuffer & o
111111

112112

113113
template <int UNROLL_TIMES>
114-
static NO_INLINE void deserializeBinarySSE2(ColumnString::Chars_t & data, ColumnString::Offsets & offsets, ReadBuffer & istr, size_t limit)
114+
static NO_INLINE void deserializeBinarySSE2(ColumnString::Chars & data, ColumnString::Offsets & offsets, ReadBuffer & istr, size_t limit)
115115
{
116116
size_t offset = data.size();
117117
for (size_t i = 0; i < limit; ++i)
@@ -174,7 +174,7 @@ static NO_INLINE void deserializeBinarySSE2(ColumnString::Chars_t & data, Column
174174
void DataTypeString::deserializeBinaryBulk(IColumn & column, ReadBuffer & istr, size_t limit, double avg_value_size_hint) const
175175
{
176176
ColumnString & column_string = typeid_cast<ColumnString &>(column);
177-
ColumnString::Chars_t & data = column_string.getChars();
177+
ColumnString::Chars & data = column_string.getChars();
178178
ColumnString::Offsets & offsets = column_string.getOffsets();
179179

180180
double avg_chars_size = 1; /// By default reserve only for empty strings.
@@ -235,7 +235,7 @@ template <typename Reader>
235235
static inline void read(IColumn & column, Reader && reader)
236236
{
237237
ColumnString & column_string = static_cast<ColumnString &>(column);
238-
ColumnString::Chars_t & data = column_string.getChars();
238+
ColumnString::Chars & data = column_string.getChars();
239239
ColumnString::Offsets & offsets = column_string.getOffsets();
240240

241241
size_t old_chars_size = data.size();
@@ -258,7 +258,7 @@ static inline void read(IColumn & column, Reader && reader)
258258

259259
void DataTypeString::deserializeTextEscaped(IColumn & column, ReadBuffer & istr, const FormatSettings &) const
260260
{
261-
read(column, [&](ColumnString::Chars_t & data) { readEscapedStringInto(data, istr); });
261+
read(column, [&](ColumnString::Chars & data) { readEscapedStringInto(data, istr); });
262262
}
263263

264264

@@ -270,7 +270,7 @@ void DataTypeString::serializeTextQuoted(const IColumn & column, size_t row_num,
270270

271271
void DataTypeString::deserializeTextQuoted(IColumn & column, ReadBuffer & istr, const FormatSettings &) const
272272
{
273-
read(column, [&](ColumnString::Chars_t & data) { readQuotedStringInto<true>(data, istr); });
273+
read(column, [&](ColumnString::Chars & data) { readQuotedStringInto<true>(data, istr); });
274274
}
275275

276276

@@ -282,7 +282,7 @@ void DataTypeString::serializeTextJSON(const IColumn & column, size_t row_num, W
282282

283283
void DataTypeString::deserializeTextJSON(IColumn & column, ReadBuffer & istr, const FormatSettings &) const
284284
{
285-
read(column, [&](ColumnString::Chars_t & data) { readJSONStringInto(data, istr); });
285+
read(column, [&](ColumnString::Chars & data) { readJSONStringInto(data, istr); });
286286
}
287287

288288

@@ -300,7 +300,7 @@ void DataTypeString::serializeTextCSV(const IColumn & column, size_t row_num, Wr
300300

301301
void DataTypeString::deserializeTextCSV(IColumn & column, ReadBuffer & istr, const FormatSettings & settings) const
302302
{
303-
read(column, [&](ColumnString::Chars_t & data) { readCSVStringInto(data, istr, settings.csv); });
303+
read(column, [&](ColumnString::Chars & data) { readCSVStringInto(data, istr, settings.csv); });
304304
}
305305

306306

dbms/src/DataTypes/tests/data_type_string.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ try
2525

2626
{
2727
auto column = ColumnString::create();
28-
ColumnString::Chars_t & data = column->getChars();
28+
ColumnString::Chars & data = column->getChars();
2929
ColumnString::Offsets & offsets = column->getOffsets();
3030

3131
data.resize(n * size);

dbms/src/Functions/EmptyImpl.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ struct EmptyImpl
1919
/// If the function will return constant value for FixedString data type.
2020
static constexpr auto is_fixed_to_constant = false;
2121

22-
static void vector(const ColumnString::Chars_t & /*data*/, const ColumnString::Offsets & offsets, PaddedPODArray<UInt8> & res)
22+
static void vector(const ColumnString::Chars & /*data*/, const ColumnString::Offsets & offsets, PaddedPODArray<UInt8> & res)
2323
{
2424
size_t size = offsets.size();
2525
ColumnString::Offset prev_offset = 1;
@@ -31,12 +31,12 @@ struct EmptyImpl
3131
}
3232

3333
/// Only make sense if is_fixed_to_constant.
34-
static void vector_fixed_to_constant(const ColumnString::Chars_t & /*data*/, size_t /*n*/, UInt8 & /*res*/)
34+
static void vector_fixed_to_constant(const ColumnString::Chars & /*data*/, size_t /*n*/, UInt8 & /*res*/)
3535
{
3636
throw Exception("Logical error: 'vector_fixed_to_constant method' is called", ErrorCodes::LOGICAL_ERROR);
3737
}
3838

39-
static void vector_fixed_to_vector(const ColumnString::Chars_t & data, size_t n, PaddedPODArray<UInt8> & res)
39+
static void vector_fixed_to_vector(const ColumnString::Chars & data, size_t n, PaddedPODArray<UInt8> & res)
4040
{
4141
std::vector<char> empty_chars(n);
4242
size_t size = data.size() / n;

0 commit comments

Comments
 (0)