in internal/database/sqlserver/sqlserver.go [178:218]
func (h sqlServerHandler) GetColumnMetadata(db *database.DB, tableName string, columnName string) (map[string]interface{}, error) {
quotedTable := h.QuoteIdentifier(tableName)
quotedColumn := h.QuoteIdentifier(columnName)
distinctQuery := fmt.Sprintf("SELECT COUNT(DISTINCT %s) FROM %s", quotedColumn, quotedTable)
var distinctCount int
err := db.QueryRow(distinctQuery).Scan(&distinctCount)
if err != nil {
return nil, fmt.Errorf("failed to get distinct count: %w", err)
}
nullQuery := fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE %s IS NULL", quotedTable, quotedColumn)
var nullCount int
err = db.QueryRow(nullQuery).Scan(&nullCount)
if err != nil {
return nil, fmt.Errorf("failed to get null count: %w", err)
}
exampleQuery := fmt.Sprintf("SELECT TOP 3 %s FROM %s WHERE %s IS NOT NULL",
quotedColumn, quotedTable, quotedColumn)
rows, err := db.Query(exampleQuery)
if err != nil {
return nil, fmt.Errorf("failed to get example values: %w", err)
}
defer rows.Close()
var examples []string
for rows.Next() {
var value string
if err := rows.Scan(&value); err != nil {
return nil, fmt.Errorf("error scanning example value: %w", err)
}
examples = append(examples, value)
}
return map[string]interface{}{
"DistinctCount": distinctCount,
"NullCount": nullCount,
"ExampleValues": examples,
}, nil
}