(spec string)
| 131 | } |
| 132 | |
| 133 | func duckDBStructToArrow(spec string) *arrow.StructType { |
| 134 | params := strings.TrimPrefix(spec, "struct") |
| 135 | params = strings.TrimSpace(params) |
| 136 | params = strings.TrimSuffix(strings.TrimPrefix(params, "("), ")") |
| 137 | |
| 138 | fieldsSpec := splitParams(params) |
| 139 | if len(fieldsSpec) == 0 { |
| 140 | panic("unsupported struct spec: " + spec) |
| 141 | } |
| 142 | |
| 143 | fields := make([]arrow.Field, len(fieldsSpec)) |
| 144 | for i, fieldSpec := range fieldsSpec { |
| 145 | parts := strings.SplitN(fieldSpec, " ", 2) |
| 146 | if len(parts) != 2 { |
| 147 | panic("unsupported field spec: " + fieldSpec) |
| 148 | } |
| 149 | |
| 150 | fields[i] = arrow.Field{ |
| 151 | Name: strings.Trim(parts[0], `"`), |
| 152 | Type: duckDBToArrow(strings.TrimSpace(parts[1])), |
| 153 | Nullable: true, // all duckdb columns are nullable |
| 154 | } |
| 155 | } |
| 156 | |
| 157 | return arrow.StructOf(fields...) |
| 158 | } |
| 159 | |
| 160 | func duckDBMapToArrow(spec string) *arrow.MapType { |
| 161 | params := strings.TrimPrefix(spec, "map") |
no test coverage detected