ClickHouse

Форк
0
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

12
int main(int argc, char ** argv)
13
{
14
    using namespace DB;
15

16
    FieldVisitorToString to_string;
17

18
    Field field = UInt64(0);
19
    std::cerr << applyVisitor(to_string, field) << std::endl;
20

21
    field = std::string("Hello, world!");
22
    std::cerr << applyVisitor(to_string, field) << std::endl;
23

24
    field = Null();
25
    std::cerr << applyVisitor(to_string, field) << std::endl;
26

27
    Field field2;
28
    field2 = field;
29
    std::cerr << applyVisitor(to_string, field2) << std::endl;
30

31
    {
32
        Array array;
33
        array.push_back(UInt64(123));
34
        array.push_back(Int64(-123));
35
        array.push_back(String("Hello"));
36
        field = array;
37
        std::cerr << applyVisitor(to_string, field) << std::endl;
38
    }
39

40
    field.get<Array &>().push_back(field);
41
    std::cerr << applyVisitor(to_string, field) << std::endl;
42

43
    std::cerr << (field < field2) << std::endl;
44
    std::cerr << (field2 < field) << std::endl;
45

46

47
    try
48
    {
49
        size_t n = argc == 2 ? parse<UInt64>(argv[1]) : 10000000;
50

51
        Stopwatch watch;
52

53
        {
54
            Array array(n);
55

56
            {
57
                watch.restart();
58

59
                for (size_t i = 0; i < n; ++i)
60
                    array[i] = String(i % 32, '!');
61

62
                watch.stop();
63
                std::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
            {
70
                watch.restart();
71

72
                size_t sum = 0;
73
                for (size_t i = 0; i < n; ++i)
74
                    sum += array[i].safeGet<const String &>().size();
75

76
                watch.stop();
77
                std::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

82
                std::cerr << sum << std::endl;
83
            }
84

85
            watch.restart();
86
        }
87

88
        watch.stop();
89

90
        std::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
    }
95
    catch (const Exception & e)
96
    {
97
        std::cerr << e.what() << ", " << e.displayText() << std::endl;
98
        return 1;
99
    }
100

101
    std::cerr << "sizeof(Field) = " << sizeof(Field) << std::endl;
102

103
    return 0;
104
}
105

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.