package main import ( "fmt" "github.com/jmoiron/sqlx" _ "modernc.org/sqlite" ) type MyNullTime struct { Time interface{} Type string } func (n *MyNullTime) Scan(value interface{}) error { n.Time = value n.Type = fmt.Sprintf("%T", value) return nil } func main() { db, err := sqlx.Connect("sqlite", "/home/newkirk/Documents/projects/web_projects/gophergate/data/backups/llm_proxy.db.20260303T205057Z") if err != nil { fmt.Println("connect err:", err) return } defer db.Close() // Test 1: Direct column scan type var d MyNullTime db.Get(&d, "SELECT last_used_at FROM client_tokens WHERE client_id = ? LIMIT 1", "sk-opencode") fmt.Printf("direct SELECT: GoType=%s value=%v\n", d.Type, d.Time) // Test 2: MAX aggregate scan type var m MyNullTime db.Get(&m, "SELECT MAX(last_used_at) FROM client_tokens WHERE client_id = ?", "sk-opencode") fmt.Printf("MAX SELECT: GoType=%s value=%v\n", m.Type, m.Time) // Test 3: peek at the raw driver types row := db.QueryRow("SELECT last_used_at, MAX(last_used_at) FROM client_tokens WHERE client_id = ? LIMIT 1", "sk-opencode") var a, b interface{} row.Scan(&a, &b) fmt.Printf("\nRaw Scan:\n") fmt.Printf(" last_used_at: type=%T val=%v\n", a, a) fmt.Printf(" MAX(last_used_at): type=%T val=%v\n", b, b) }