SQLon test coverage


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 96.2% 75 / 0 / 78
Functions: 100.0% 6 / 0 / 6
Branches: 100.0% 4 / 0 / 4

src/presets.cpp
Line Branch Exec Source
1 /******************************************************************************
2 **
3 ** Copyright (C) 2026 Ivan Pinezhaninov <ivan.pinezhaninov@gmail.com>
4 **
5 ** This file is part of the SQLon - which can be found at
6 ** https://github.com/IvanPinezhaninov/sqlon/.
7 **
8 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
9 ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10 ** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
11 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13 ** OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
14 ** THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15 **
16 ******************************************************************************/
17
18 #include <sqlon/sql_options.h>
19
20 namespace sqlon::presets {
21
22 144 sql_options postgresql()
23 {
24 144 sql_options options;
25 144 options.placeholders = placeholder_style::numbered;
26 144 options.identifier_quotes = identifier_quote_style::double_quote;
27 144 options.default_values = default_values_style::standard;
28 144 options.inserted_row_references = inserted_row_reference_style::excluded_table;
29 // clang-format off
30 144 options.capabilities =
31 sql_capability::returning |
32 sql_capability::on_conflict |
33 sql_capability::full_join |
34 sql_capability::reusable_numbered_parameters |
35 sql_capability::reusable_named_parameters |
36 sql_capability::conflict_update_requires_target |
37 sql_capability::right_join |
38 sql_capability::nulls_ordering |
39 sql_capability::recursive_cte |
40 sql_capability::intersect |
41 sql_capability::except |
42 sql_capability::window_functions |
43 sql_capability::groups_window_frame |
44 sql_capability::default_values |
45 sql_capability::default_value |
46 sql_capability::insert_select |
47 sql_capability::update_from |
48 sql_capability::delete_using |
49 sql_capability::default_values_with_conflict |
50 144 sql_capability::data_modifying_cte |
51 sql_capability::multi_row_values;
52 // clang-format on
53 144 return options;
54 }
55
56 29 sql_options mysql()
57 {
58 29 sql_options options;
59 29 options.placeholders = placeholder_style::question_mark;
60 29 options.identifier_quotes = identifier_quote_style::backtick;
61 29 options.default_values = default_values_style::empty_parenthesized_values;
62 29 options.offset_without_limit = offset_without_limit_style::maximum_unsigned_limit;
63 29 options.string_literals = string_literal_style::mode_independent;
64 29 options.inserted_row_references = inserted_row_reference_style::values_row_alias;
65 // clang-format off
66 29 options.capabilities =
67 sql_capability::on_duplicate_key_update |
68 sql_capability::right_join |
69 sql_capability::recursive_cte |
70 sql_capability::intersect |
71 sql_capability::except |
72 sql_capability::window_functions |
73 sql_capability::default_values |
74 sql_capability::default_value |
75 sql_capability::insert_select |
76 29 sql_capability::default_values_with_conflict |
77 sql_capability::multi_row_values;
78 // clang-format on
79 29 return options;
80 }
81
82 29 sql_options sqlite()
83 {
84 29 sql_options options;
85 29 options.placeholders = placeholder_style::named;
86 29 options.identifier_quotes = identifier_quote_style::double_quote;
87 29 options.set_operands = set_operand_style::derived_table;
88 29 options.default_values = default_values_style::standard;
89 29 options.offset_without_limit = offset_without_limit_style::negative_one_limit;
90 29 options.inserted_row_references = inserted_row_reference_style::excluded_table;
91 // clang-format off
92 29 options.capabilities =
93 sql_capability::returning |
94 sql_capability::on_conflict |
95 sql_capability::full_join |
96 sql_capability::reusable_named_parameters |
97 sql_capability::right_join |
98 sql_capability::nulls_ordering |
99 sql_capability::recursive_cte |
100 sql_capability::intersect |
101 sql_capability::except |
102 sql_capability::window_functions |
103 sql_capability::groups_window_frame |
104 sql_capability::default_values |
105 sql_capability::insert_select |
106 sql_capability::update_from |
107 29 sql_capability::insert_select_conflict_requires_where |
108 sql_capability::multi_row_values;
109 // clang-format on
110 29 return options;
111 }
112
113 11 sql_options oracle()
114 {
115 11 sql_options options;
116 11 options.placeholders = placeholder_style::named;
117 11 options.identifier_quotes = identifier_quote_style::double_quote;
118 11 options.row_limits = row_limit_style::offset_fetch;
119
1/1
✓ Branch 1 taken 11 times.
22 options.implicit_select_source = implicit_relation_source{{"DUAL"}, false};
120 11 options.recursive_ctes = recursive_cte_style::plain_with;
121 11 options.except_operator = except_style::minus_keyword;
122 11 options.boolean_literals = boolean_literal_style::integers;
123 11 options.relation_aliases = relation_alias_style::without_as;
124 11 options.conflict_updates = conflict_update_style::merge_statement;
125 11 options.merge_sources = merge_source_style::union_all_select;
126 11 options.inserted_row_references = inserted_row_reference_style::merge_source;
127 // clang-format off
128 11 options.capabilities =
129 sql_capability::reusable_named_parameters |
130 sql_capability::full_join |
131 sql_capability::right_join |
132 sql_capability::nulls_ordering |
133 sql_capability::recursive_cte |
134 sql_capability::intersect |
135 sql_capability::except |
136 sql_capability::window_functions |
137 sql_capability::default_value |
138 11 sql_capability::insert_select |
139 sql_capability::merge;
140 // clang-format on
141 11 return options;
142 ✗ }
143
144 12 sql_options sql_server()
145 {
146 12 sql_options options;
147 12 options.placeholders = placeholder_style::named;
148 12 options.identifier_quotes = identifier_quote_style::brackets;
149 12 options.row_limits = row_limit_style::top_offset_fetch;
150 12 options.recursive_ctes = recursive_cte_style::plain_with;
151 12 options.boolean_literals = boolean_literal_style::integers;
152 12 options.default_values = default_values_style::standard;
153 12 options.conflict_updates = conflict_update_style::merge_statement;
154 12 options.merge_sources = merge_source_style::values_table;
155
1/1
✓ Branch 1 taken 12 times.
12 options.merge_target_hint = "WITH (HOLDLOCK)";
156 12 options.inserted_row_references = inserted_row_reference_style::merge_source;
157 12 options.terminate_merge = true;
158
1/1
✓ Branch 1 taken 12 times.
12 options.named_parameter_prefix = "@";
159 // clang-format off
160 12 options.capabilities =
161 sql_capability::reusable_named_parameters |
162 sql_capability::full_join |
163 sql_capability::right_join |
164 sql_capability::recursive_cte |
165 sql_capability::intersect |
166 sql_capability::except |
167 sql_capability::window_functions |
168 sql_capability::default_values |
169 sql_capability::default_value |
170 sql_capability::insert_select |
171 sql_capability::update_from |
172 12 sql_capability::multi_row_values |
173 sql_capability::merge;
174 // clang-format on
175 12 return options;
176 ✗ }
177
178 11 sql_options firebird()
179 {
180 11 sql_options options;
181 11 options.placeholders = placeholder_style::question_mark;
182 11 options.identifier_quotes = identifier_quote_style::double_quote;
183 11 options.row_limits = row_limit_style::offset_fetch;
184
1/1
✓ Branch 1 taken 11 times.
22 options.implicit_select_source = implicit_relation_source{{"RDB$DATABASE"}, false};
185 11 options.default_values = default_values_style::standard;
186 11 options.conflict_updates = conflict_update_style::update_or_insert;
187 // clang-format off
188 11 options.capabilities =
189 sql_capability::returning |
190 sql_capability::full_join |
191 sql_capability::right_join |
192 sql_capability::nulls_ordering |
193 sql_capability::recursive_cte |
194 sql_capability::intersect |
195 sql_capability::except |
196 sql_capability::window_functions |
197 sql_capability::default_values |
198 11 sql_capability::default_value |
199 sql_capability::insert_select;
200 // clang-format on
201 11 return options;
202 ✗ }
203
204 } // namespace sqlon::presets
205