ClickHouse
104 строки · 3.1 Кб
1#include <iostream>
2#include <iomanip>
3
4#include <Core/Field.h>
5#include <Common/FieldVisitorToString.h>
6
7#include <Common/Stopwatch.h>
8#include <IO/ReadHelpers.h>
9#include <DataTypes/DataTypeString.h>
10
11
12int main(int argc, char ** argv)
13{
14using namespace DB;
15
16FieldVisitorToString to_string;
17
18Field field = UInt64(0);
19std::cerr << applyVisitor(to_string, field) << std::endl;
20
21field = std::string("Hello, world!");
22std::cerr << applyVisitor(to_string, field) << std::endl;
23
24field = Null();
25std::cerr << applyVisitor(to_string, field) << std::endl;
26
27Field field2;
28field2 = field;
29std::cerr << applyVisitor(to_string, field2) << std::endl;
30
31{
32Array array;
33array.push_back(UInt64(123));
34array.push_back(Int64(-123));
35array.push_back(String("Hello"));
36field = array;
37std::cerr << applyVisitor(to_string, field) << std::endl;
38}
39
40field.get<Array &>().push_back(field);
41std::cerr << applyVisitor(to_string, field) << std::endl;
42
43std::cerr << (field < field2) << std::endl;
44std::cerr << (field2 < field) << std::endl;
45
46
47try
48{
49size_t n = argc == 2 ? parse<UInt64>(argv[1]) : 10000000;
50
51Stopwatch watch;
52
53{
54Array array(n);
55
56{
57watch.restart();
58
59for (size_t i = 0; i < n; ++i)
60array[i] = String(i % 32, '!');
61
62watch.stop();
63std::cerr << std::fixed << std::setprecision(2)
64<< "Set " << n << " fields (" << n * sizeof(array[0]) / 1000000.0 << " MB) in " << watch.elapsedSeconds() << " sec., "
65<< n / watch.elapsedSeconds() << " elem/sec. (" << n * sizeof(array[0]) / watch.elapsedSeconds() / 1000000 << " MB/s.)"
66<< std::endl;
67}
68
69{
70watch.restart();
71
72size_t sum = 0;
73for (size_t i = 0; i < n; ++i)
74sum += array[i].safeGet<const String &>().size();
75
76watch.stop();
77std::cerr << std::fixed << std::setprecision(2)
78<< "Got " << n << " fields (" << n * sizeof(array[0]) / 1000000.0 << " MB) in " << watch.elapsedSeconds() << " sec., "
79<< n / watch.elapsedSeconds() << " elem/sec. (" << n * sizeof(array[0]) / watch.elapsedSeconds() / 1000000 << " MB/s.)"
80<< std::endl;
81
82std::cerr << sum << std::endl;
83}
84
85watch.restart();
86}
87
88watch.stop();
89
90std::cerr << std::fixed << std::setprecision(2)
91<< "Destroyed " << n << " fields (" << n * sizeof(Array::value_type) / 1000000.0 << " MB) in " << watch.elapsedSeconds() << " sec., "
92<< n / watch.elapsedSeconds() << " elem/sec. (" << n * sizeof(Array::value_type) / watch.elapsedSeconds() / 1000000 << " MB/s.)"
93<< std::endl;
94}
95catch (const Exception & e)
96{
97std::cerr << e.what() << ", " << e.displayText() << std::endl;
98return 1;
99}
100
101std::cerr << "sizeof(Field) = " << sizeof(Field) << std::endl;
102
103return 0;
104}
105