76.74% (198/258) Uncovered changed code (with context): ================================================================================ src/Parsers/Kusto/ParserKQLDistinct.cpp ================================================================================ --- uncovered block 18-18 --- 16 | 17 | if (!ParserNotEmptyExpressionList(false).parse(new_pos, select_expression_list, expected)) >> 18 | return false; 19 | 20 | node->as()->setExpression(ASTSelectQuery::Expression::SELECT, std::move(select_expression_list)); ================================================================================ src/Parsers/Kusto/ParserKQLExtend.cpp ================================================================================ --- uncovered block 76-76 --- 74 | 75 | if (!ParserSelectQuery().parse(new_pos, select_query, expected)) >> 76 | return false; 77 | if (!setSubQuerySource(select_query, node, false, false)) 78 | return false; ================================================================================ src/Parsers/Kusto/ParserKQLFilter.cpp ================================================================================ --- uncovered block 19-19 --- 17 | IParser::Pos pos_filter(token_filter, pos); 18 | if (!ParserExpressionWithOptionalAlias(false).parse(pos_filter, where_expression, expected)) >> 19 | return false; 20 | 21 | node->as()->setExpression(ASTSelectQuery::Expression::WHERE, std::move(where_expression)); ================================================================================ src/Parsers/Kusto/ParserKQLLimit.cpp ================================================================================ --- uncovered block 20-20 --- 18 | 19 | if (!ParserExpressionWithOptionalAlias(false).parse(new_pos, limit_length, expected)) >> 20 | return false; 21 | 22 | node->as()->setExpression(ASTSelectQuery::Expression::LIMIT_LENGTH, std::move(limit_length)); ================================================================================ src/Parsers/Kusto/ParserKQLMVExpand.cpp ================================================================================ --- uncovered block 260-260 --- 258 | query = fmt::format("Select {} {} From {} {}", columns, extra_columns, input, expand_str); 259 | if (!parseSQLQueryByString(std::make_unique(), query, sub_query_node, parent_pos)) >> 260 | return false; 261 | if (!setSubQuerySource(sub_query_node, select_node, false, false)) 262 | return false; --- uncovered block 262-262 --- 260 | return false; 261 | if (!setSubQuerySource(sub_query_node, select_node, false, false)) >> 262 | return false; 263 | select_node = std::move(sub_query_node); 264 | } --- uncovered block 269-269 --- 267 | query = fmt::format("(Select {} {} From {} {})", columns, extra_columns, input, expand_str); 268 | if (!parseSQLQueryByString(std::make_unique(), query, sub_query_node, parent_pos)) >> 269 | return false; 270 | if (!setSubQuerySource(sub_query_node, select_node, true, false)) 271 | return false; --- uncovered block 271-271 --- 269 | return false; 270 | if (!setSubQuerySource(sub_query_node, select_node, true, false)) >> 271 | return false; 272 | select_node = std::move(sub_query_node); 273 | --- uncovered block 276-276 --- 274 | auto rename_query = fmt::format("(Select * {}, {} From {})", cast_type_column_remove, cast_type_column_rename, "query"); 275 | if (!parseSQLQueryByString(std::make_unique(), rename_query, sub_query_node, parent_pos)) >> 276 | return false; 277 | if (!setSubQuerySource(sub_query_node, select_node, true, true)) 278 | return false; --- uncovered block 278-278 --- 276 | return false; 277 | if (!setSubQuerySource(sub_query_node, select_node, true, true)) >> 278 | return false; 279 | 280 | select_node = std::move(sub_query_node); --- uncovered block 284-284 --- 282 | 283 | if (!parseSQLQueryByString(std::make_unique(), query, sub_query_node, parent_pos)) >> 284 | return false; 285 | sub_query_node->as()->setExpression(ASTSelectQuery::Expression::TABLES, std::move(select_node)); 286 | select_node = std::move(sub_query_node); --- uncovered block 299-299 --- 297 | KQLMVExpand kql_mv_expand; 298 | if (!parserMVExpand(kql_mv_expand, pos, expected)) >> 299 | return false; 300 | if (!genQuery(kql_mv_expand, node, pos)) 301 | return false; --- uncovered block 301-301 --- 299 | return false; 300 | if (!genQuery(kql_mv_expand, node, pos)) >> 301 | return false; 302 | 303 | const String setting_str = "enable_unaligned_array_join = 1"; --- uncovered block 308-308 --- 306 | 307 | if (!ParserSetQuery(true).parse(pos_settings, setting, expected)) >> 308 | return false; 309 | node->as()->setExpression(ASTSelectQuery::Expression::SETTINGS, std::move(setting)); 310 | ================================================================================ src/Parsers/Kusto/ParserKQLMakeSeries.cpp ================================================================================ --- uncovered block 143-143 --- 141 | 142 | if (String(step_pos->begin, step_pos->end) == "time" || String(step_pos->begin, step_pos->end) == "timespan" >> 143 | || ParserKQLDateTypeTimespan().parseConstKQLTimespan(from_to_step.step_str)) 144 | { 145 | from_to_step.is_timespan = true; --- uncovered block 145-146 --- 143 | || ParserKQLDateTypeTimespan().parseConstKQLTimespan(from_to_step.step_str)) 144 | { >> 145 | from_to_step.is_timespan = true; >> 146 | from_to_step.step = std::stod(getExprFromToken(from_to_step.step_str, pos)); 147 | } 148 | else --- uncovered block 149-149 --- 147 | } 148 | else >> 149 | from_to_step.step = std::stod(from_to_step.step_str); 150 | 151 | return true; --- uncovered block 151-151 --- 149 | from_to_step.step = std::stod(from_to_step.step_str); 150 | >> 151 | return true; 152 | } 153 | --- uncovered block 156-157 --- 154 | bool ParserKQLMakeSeries ::makeSeries(KQLMakeSeries & kql_make_series, ASTPtr & select_node, const Pos & parent_pos) 155 | { >> 156 | const uint64_t era_diff >> 157 | = 62135596800; // this magic number is the differicen is second form 0001-01-01 (Azure start time ) and 1970-01-01 (CH start time) 158 | 159 | String start_str; --- uncovered block 169-169 --- 167 | auto & axis_column = kql_make_series.axis_column; 168 | auto & group_expression = kql_make_series.group_expression; >> 169 | auto step = from_to_step.step; 170 | 171 | if (!kql_make_series.from_to_step.from_str.empty()) --- uncovered block 171-172 --- 169 | auto step = from_to_step.step; 170 | >> 171 | if (!kql_make_series.from_to_step.from_str.empty()) >> 172 | start_str = getExprFromToken(kql_make_series.from_to_step.from_str, parent_pos); 173 | 174 | if (!kql_make_series.from_to_step.to_str.empty()) --- uncovered block 174-175 --- 172 | start_str = getExprFromToken(kql_make_series.from_to_step.from_str, parent_pos); 173 | >> 174 | if (!kql_make_series.from_to_step.to_str.empty()) >> 175 | end_str = getExprFromToken(from_to_step.to_str, parent_pos); 176 | 177 | auto date_type_cast = [&](String & src) --- uncovered block 177-177 --- 175 | end_str = getExprFromToken(from_to_step.to_str, parent_pos); 176 | >> 177 | auto date_type_cast = [&](String & src) 178 | { 179 | Tokens tokens(src.data(), src.data() + src.size(), 0, true); --- uncovered block 179-182 --- 177 | auto date_type_cast = [&](String & src) 178 | { >> 179 | Tokens tokens(src.data(), src.data() + src.size(), 0, true); >> 180 | IParser::Pos pos(tokens, parent_pos); >> 181 | String res; >> 182 | while (isValidKQLPos(pos)) 183 | { 184 | String tmp = String(pos->begin, pos->end); --- uncovered block 207-210 --- 205 | auto get_group_expression_alias = [&] 206 | { >> 207 | std::vector group_expression_tokens; >> 208 | Tokens tokens(group_expression.data(), group_expression.data() + group_expression.size(), 0, true); >> 209 | IParser::Pos pos(tokens, parent_pos); >> 210 | while (isValidKQLPos(pos)) 211 | { 212 | if (String(pos->begin, pos->end) == "AS") --- uncovered block 212-212 --- 210 | while (isValidKQLPos(pos)) 211 | { >> 212 | if (String(pos->begin, pos->end) == "AS") 213 | { 214 | if (!group_expression_tokens.empty()) --- uncovered block 303-303 --- 301 | condition); 302 | >> 303 | ASTPtr sub_query_node; 304 | 305 | if (!ParserSimpleCHSubquery(select_node).parseByString(sub_sub_query, sub_query_node, parent_pos)) --- uncovered block 305-307 --- 303 | ASTPtr sub_query_node; 304 | >> 305 | if (!ParserSimpleCHSubquery(select_node).parseByString(sub_sub_query, sub_query_node, parent_pos)) >> 306 | return false; >> 307 | select_node->as()->setExpression(ASTSelectQuery::Expression::TABLES, std::move(sub_query_node)); 308 | 309 | if (!group_expression.empty()) --- uncovered block 358-358 --- 356 | main_query = fmt::format("{}", final_axis_agg_alias_list); 357 | else >> 358 | main_query = fmt::format("{},{}", group_expression_alias, final_axis_agg_alias_list); 359 | 360 | if (!ParserSimpleCHSubquery(select_node).parseByString(sub_query, sub_query_node, parent_pos)) --- uncovered block 360-362 --- 358 | main_query = fmt::format("{},{}", group_expression_alias, final_axis_agg_alias_list); 359 | >> 360 | if (!ParserSimpleCHSubquery(select_node).parseByString(sub_query, sub_query_node, parent_pos)) >> 361 | return false; >> 362 | select_node->as()->setExpression(ASTSelectQuery::Expression::TABLES, std::move(sub_query_node)); 363 | 364 | kql_make_series.sub_query = std::move(sub_query); --- uncovered block 417-417 --- 415 | subquery_columns = column_str; 416 | else >> 417 | subquery_columns += ", " + column_str; 418 | } 419 | --- uncovered block 420-420 --- 418 | } 419 | >> 420 | makeSeries(kql_make_series, node, pos); 421 | 422 | Tokens token_main_query(kql_make_series.main_query.data(), kql_make_series.main_query.data() + kql_make_series.main_query.size(), 0, true); --- uncovered block 422-423 --- 420 | makeSeries(kql_make_series, node, pos); 421 | >> 422 | Tokens token_main_query(kql_make_series.main_query.data(), kql_make_series.main_query.data() + kql_make_series.main_query.size(), 0, true); >> 423 | IParser::Pos pos_main_query(token_main_query, pos); 424 | 425 | if (!ParserNotEmptyExpressionList(true).parse(pos_main_query, select_expression_list, expected)) --- uncovered block 425-426 --- 423 | IParser::Pos pos_main_query(token_main_query, pos); 424 | >> 425 | if (!ParserNotEmptyExpressionList(true).parse(pos_main_query, select_expression_list, expected)) >> 426 | return false; 427 | node->as()->setExpression(ASTSelectQuery::Expression::SELECT, std::move(select_expression_list)); 428 | ================================================================================ src/Parsers/Kusto/ParserKQLProject.cpp ================================================================================ --- uncovered block 18-18 --- 16 | 17 | if (!ParserNotEmptyExpressionList(false).parse(new_pos, select_expression_list, expected)) >> 18 | return false; 19 | 20 | node->as()->setExpression(ASTSelectQuery::Expression::SELECT, std::move(select_expression_list)); ================================================================================ src/Parsers/Kusto/ParserKQLQuery.cpp ================================================================================ --- uncovered block 39-39 --- 37 | bool ParserKQLBase::parseByString(String expr, ASTPtr & node, const Pos & parent_pos) 38 | { >> 39 | Expected expected; 40 | 41 | Tokens tokens(expr.data(), expr.data() + expr.size(), 0, true); --- uncovered block 41-43 --- 39 | Expected expected; 40 | >> 41 | Tokens tokens(expr.data(), expr.data() + expr.size(), 0, true); >> 42 | IParser::Pos pos(tokens, parent_pos); >> 43 | return parse(pos, node, expected); 44 | } 45 | --- uncovered block 52-52 --- 50 | IParser::Pos pos_subquery(token_subquery, parent_pos); 51 | if (!parser->parse(pos_subquery, select_node, expected)) >> 52 | return false; 53 | return true; 54 | }; --- uncovered block 552-552 --- 550 | IParser::Pos pos_clause(token_clause, pos); 551 | if (!oprator->parse(pos_clause, node, expected)) >> 552 | return false; 553 | } 554 | return true; --- uncovered block 587-587 --- 585 | IParser::Pos new_pos(tokens, pos); 586 | if (!std::make_unique()->parse(new_pos, node, expected)) >> 587 | return false; 588 | } 589 | ================================================================================ src/Parsers/Kusto/ParserKQLSummarize.cpp ================================================================================ --- uncovered block 185-185 --- 183 | 184 | if (!ParserNotEmptyExpressionList(true).parse(pos_converted_columns, select_expression_list, expected)) >> 185 | return false; 186 | 187 | node->as()->setExpression(ASTSelectQuery::Expression::SELECT, std::move(select_expression_list)); --- uncovered block 197-197 --- 195 | 196 | if (!ParserNotEmptyExpressionList(false).parse(postoken_converted_groupby, group_expression_list, expected)) >> 197 | return false; 198 | node->as()->setExpression(ASTSelectQuery::Expression::GROUP_BY, std::move(group_expression_list)); 199 | } No lost baseline coverage found. WARNING: Failed to get start time for [Print Uncovered Code] - start time and duration won't be set --- Coverage counts --- Lines : baseline 750,897/896,241 -> current 751,053/896,248 (delta +156 / +7) Functions : baseline 830,049/911,117 -> current 829,944/911,118 (delta -105 / +1) Branches : baseline 243,508/319,434 -> current 243,560/319,434 (delta +52 / +0)