(b *strings.Builder, dst sql.Table, schema sql.Schema, colNames []string)
| 238 | } |
| 239 | |
| 240 | func columnTypeHints(b *strings.Builder, dst sql.Table, schema sql.Schema, colNames []string) error { |
| 241 | b.WriteString("{") |
| 242 | |
| 243 | if len(colNames) == 0 { |
| 244 | for i, col := range schema { |
| 245 | if i > 0 { |
| 246 | b.WriteString(", ") |
| 247 | } |
| 248 | if err := columnTypeHint(b, col); err != nil { |
| 249 | return err |
| 250 | } |
| 251 | } |
| 252 | b.WriteString("}") |
| 253 | return nil |
| 254 | } |
| 255 | |
| 256 | for i, col := range colNames { |
| 257 | if i > 0 { |
| 258 | b.WriteString(", ") |
| 259 | } |
| 260 | idx := schema.IndexOf(col, dst.Name()) // O(n^2) but n := # of columns is usually small |
| 261 | if idx < 0 { |
| 262 | return sql.ErrTableColumnNotFound.New(dst.Name(), col) |
| 263 | } |
| 264 | if err := columnTypeHint(b, schema[idx]); err != nil { |
| 265 | return err |
| 266 | } |
| 267 | } |
| 268 | |
| 269 | b.WriteString("}") |
| 270 | return nil |
| 271 | } |
| 272 | |
| 273 | func columnTypeHint(b *strings.Builder, col *sql.Column) error { |
| 274 | b.WriteString(catalog.QuoteIdentifierANSI(col.Name)) |
no test coverage detected