| 994 | static size_t getNumberOfIndexArguments(const ColumnsWithTypeAndName & arguments) { return arguments.size() - 1; } |
| 995 | |
| 996 | static bool insertResultToColumn(IColumn & dest, Iterator & iterator, ASTPtr & query_ptr, DialectType /*dialect_type*/) requires IsElementIterator<Iterator> |
| 997 | { |
| 998 | using Element = typename Iterator::Element; |
| 999 | using JSONParser = typename Iterator::JSONParserType; |
| 1000 | GeneratorJSONPath<JSONParser> generator_json_path(query_ptr); |
| 1001 | Element current_element = iterator.getElement(); |
| 1002 | VisitorStatus status; |
| 1003 | Element res; |
| 1004 | while ((status = generator_json_path.getNextItem(current_element)) != VisitorStatus::Exhausted) |
| 1005 | { |
| 1006 | if (status == VisitorStatus::Ok) |
| 1007 | { |
| 1008 | if (!(current_element.isArray() || current_element.isObject())) |
| 1009 | { |
| 1010 | break; |
| 1011 | } |
| 1012 | } |
| 1013 | else if (status == VisitorStatus::Error) |
| 1014 | { |
| 1015 | /// ON ERROR |
| 1016 | /// Here it is possible to handle errors with ON ERROR (as described in ISO/IEC TR 19075-6), |
| 1017 | /// however this functionality is not implemented yet |
| 1018 | } |
| 1019 | current_element = iterator.getElement(); |
| 1020 | } |
| 1021 | |
| 1022 | if (status == VisitorStatus::Exhausted) |
| 1023 | { |
| 1024 | return false; |
| 1025 | } |
| 1026 | |
| 1027 | std::stringstream out; // STYLE_CHECK_ALLOW_STD_STRING_STREAM |
| 1028 | out << current_element.getElement(); |
| 1029 | auto output_str = out.str(); |
| 1030 | ColumnString & col_str = assert_cast<ColumnString &>(dest); |
| 1031 | col_str.insertData(output_str.data(), output_str.size()); |
| 1032 | return true; |
| 1033 | } |
| 1034 | |
| 1035 | static bool insertResultToColumn(IColumn & dest, ObjectIterator & iterator, ASTPtr & query_ptr, DialectType /*dialect_type*/) requires IsObjectIterator<Iterator> |
| 1036 | { |
nothing calls this directly
no test coverage detected