| 1317 | } |
| 1318 | |
| 1319 | std::vector<std::string> parseStructFields(const std::string& structTypeStr) { |
| 1320 | std::vector<std::string> structFieldsStr; |
| 1321 | auto startPos = 0u; |
| 1322 | auto curPos = 0u; |
| 1323 | auto numOpenBrackets = 0u; |
| 1324 | while (curPos < structTypeStr.length()) { |
| 1325 | switch (structTypeStr[curPos]) { |
| 1326 | case '(': { |
| 1327 | numOpenBrackets++; |
| 1328 | } break; |
| 1329 | case ')': { |
| 1330 | numOpenBrackets--; |
| 1331 | } break; |
| 1332 | case ',': { |
| 1333 | if (numOpenBrackets == 0) { |
| 1334 | structFieldsStr.push_back( |
| 1335 | StringUtils::ltrim(structTypeStr.substr(startPos, curPos - startPos))); |
| 1336 | startPos = curPos + 1; |
| 1337 | } |
| 1338 | } break; |
| 1339 | default: { |
| 1340 | // Normal character, continue. |
| 1341 | } |
| 1342 | } |
| 1343 | curPos++; |
| 1344 | } |
| 1345 | structFieldsStr.push_back( |
| 1346 | StringUtils::ltrim(structTypeStr.substr(startPos, curPos - startPos))); |
| 1347 | return structFieldsStr; |
| 1348 | } |
| 1349 | |
| 1350 | LogicalType parseListType(const std::string& trimmedStr, main::ClientContext* context) { |
| 1351 | return LogicalType::LIST( |
no test coverage detected