| 1135 | static size_t getNumberOfIndexArguments(const ColumnsWithTypeAndName & arguments) { return arguments.size() - 1; } |
| 1136 | |
| 1137 | static bool insertResultToColumn(IColumn & dest, Iterator & iterator, ASTPtr & query_ptr, DialectType dialect_type) requires IsElementIterator<Iterator> |
| 1138 | { |
| 1139 | using Element = typename Iterator::Element; |
| 1140 | using JSONParser = typename Iterator::JSONParserType; |
| 1141 | GeneratorJSONPath<JSONParser> generator_json_path(query_ptr); |
| 1142 | Element current_element = iterator.getElement(); |
| 1143 | VisitorStatus status; |
| 1144 | |
| 1145 | ColumnNullable & col = assert_cast<ColumnNullable &>(dest); |
| 1146 | while ((status = generator_json_path.getNextItem(current_element)) != VisitorStatus::Exhausted) |
| 1147 | { |
| 1148 | if (status == VisitorStatus::Ok) |
| 1149 | { |
| 1150 | break; |
| 1151 | } |
| 1152 | current_element = iterator.getElement(); |
| 1153 | } |
| 1154 | |
| 1155 | if (status == VisitorStatus::Exhausted) |
| 1156 | { |
| 1157 | col.insertData(nullptr, 0); |
| 1158 | return false; |
| 1159 | } |
| 1160 | |
| 1161 | size_t size; |
| 1162 | if (current_element.isArray()) |
| 1163 | size = current_element.getArray().size(); |
| 1164 | else if (current_element.isObject()) |
| 1165 | size = current_element.getObject().size(); |
| 1166 | else |
| 1167 | { |
| 1168 | if (dialect_type == DialectType::MYSQL) |
| 1169 | size = 0; |
| 1170 | else |
| 1171 | size = 1; |
| 1172 | } |
| 1173 | |
| 1174 | col.insert(size); |
| 1175 | return true; |
| 1176 | } |
| 1177 | |
| 1178 | static bool insertResultToColumn(IColumn & dest, ObjectIterator & iterator, ASTPtr & query_ptr, DialectType dialect_type) requires IsObjectIterator<Iterator> |
| 1179 | { |
nothing calls this directly
no test coverage detected