(v any)
| 978 | return c.exactDatabaseTypeName, c.hasExactDatabaseType |
| 979 | } |
| 980 | |
| 981 | // arrowTypeToDuckDB maps an Arrow DataType back to a DuckDB type name string. |
| 982 | func arrowTypeToDuckDB(dt arrow.DataType) string { |
| 983 | switch dt.ID() { |
| 984 | case arrow.BOOL: |
| 985 | return "BOOLEAN" |
| 986 | case arrow.INT8: |
| 987 | return "TINYINT" |
| 988 | case arrow.INT16: |
| 989 | return "SMALLINT" |
| 990 | case arrow.INT32: |
| 991 | return "INTEGER" |
| 992 | case arrow.INT64: |
| 993 | return "BIGINT" |
| 994 | case arrow.UINT8: |
| 995 | return "UTINYINT" |
| 996 | case arrow.UINT16: |
| 997 | return "USMALLINT" |
| 998 | case arrow.UINT32: |
| 999 | return "UINTEGER" |
| 1000 | case arrow.UINT64: |
| 1001 | return "UBIGINT" |
| 1002 | case arrow.FLOAT32: |
| 1003 | return "FLOAT" |
| 1004 | case arrow.FLOAT64: |
| 1005 | return "DOUBLE" |
| 1006 | case arrow.STRING, arrow.LARGE_STRING: |
| 1007 | return "VARCHAR" |
| 1008 | case arrow.BINARY, arrow.LARGE_BINARY: |
| 1009 | return "BLOB" |
| 1010 | case arrow.DATE32: |
| 1011 | return "DATE" |
| 1012 | case arrow.TIME64: |
| 1013 | return "TIME" |
| 1014 | case arrow.TIMESTAMP: |
| 1015 | ts := dt.(*arrow.TimestampType) |
| 1016 | if ts.TimeZone != "" { |
| 1017 | return "TIMESTAMPTZ" |
| 1018 | } |
| 1019 | return "TIMESTAMP" |
| 1020 | case arrow.DECIMAL128: |
| 1021 | dec := dt.(*arrow.Decimal128Type) |
| 1022 | return fmt.Sprintf("DECIMAL(%d,%d)", dec.Precision, dec.Scale) |
| 1023 | case arrow.INTERVAL_MONTH_DAY_NANO: |
| 1024 | return "INTERVAL" |
| 1025 | case arrow.LIST: |
| 1026 | elem := dt.(*arrow.ListType).Elem() |
| 1027 | return arrowTypeToDuckDB(elem) + "[]" |
no test coverage detected