1#pragma once
2
3#include <Core/Types.h>
4
5
6namespace DB
7{
8
9/** Various tweaks for input/output formats.
10 * Text serialization/deserialization of data types also depend on some of these settings.
11 * NOTE Parameters for unrelated formats and unrelated data types
12 * are collected in this struct - it prevents modularity, but they are difficult to separate.
13 */
14struct FormatSettings
15{
16 struct JSON
17 {
18 bool quote_64bit_integers = true;
19 bool quote_denormals = true;
20 bool escape_forward_slashes = true;
21 };
22
23 JSON json;
24
25 struct CSV
26 {
27 char delimiter = ',';
28 bool allow_single_quotes = true;
29 bool allow_double_quotes = true;
30 bool unquoted_null_literal_as_null = false;
31 bool empty_as_default = false;
32 };
33
34 CSV csv;
35
36 struct Pretty
37 {
38 UInt64 max_rows = 10000;
39 UInt64 max_column_pad_width = 250;
40 bool color = true;
41 };
42
43 Pretty pretty;
44
45 struct Values
46 {
47 bool interpret_expressions = true;
48 bool deduce_templates_of_expressions = true;
49 bool accurate_types_of_literals = true;
50 };
51
52 Values values;
53
54 struct Template
55 {
56 String resultset_format;
57 String row_format;
58 String row_between_delimiter;
59 };
60
61 Template template_settings;
62
63 struct TSV
64 {
65 bool empty_as_default = false;
66 };
67
68 TSV tsv;
69
70 bool skip_unknown_fields = false;
71 bool with_names_use_header = false;
72 bool write_statistics = true;
73 bool import_nested_json = false;
74 bool null_as_default = false;
75
76 enum class DateTimeInputFormat
77 {
78 Basic, /// Default format for fast parsing: YYYY-MM-DD hh:mm:ss (ISO-8601 without fractional part and timezone) or NNNNNNNNNN unix timestamp.
79 BestEffort /// Use sophisticated rules to parse whatever possible.
80 };
81
82 DateTimeInputFormat date_time_input_format = DateTimeInputFormat::Basic;
83
84 UInt64 input_allow_errors_num = 0;
85 Float32 input_allow_errors_ratio = 0;
86
87 struct Parquet
88 {
89 UInt64 row_group_size = 1000000;
90 } parquet;
91
92 struct Schema
93 {
94 std::string format_schema;
95 std::string format_schema_path;
96 bool is_server = false;
97 };
98
99 Schema schema;
100
101 struct Custom
102 {
103 std::string result_before_delimiter;
104 std::string result_after_delimiter;
105 std::string row_before_delimiter;
106 std::string row_after_delimiter;
107 std::string row_between_delimiter;
108 std::string field_delimiter;
109 std::string escaping_rule;
110 };
111
112 Custom custom;
113};
114
115}
116
117