an ORM-free SQL experience

add ScanAll and ScanOne APIs

Signed-off-by: oppiliappan <me@oppi.li>

oppi.li b3076bea ce31f4a0

verified
+24 -7
+23
scanner.go
··· 60 60 func (s *Scanner[T]) Close() error { 61 61 return s.rows.Close() 62 62 } 63 + 64 + func ScanAll[T any](rows *sql.Rows) []T { 65 + scanner := NewScanner[T](rows) 66 + defer scanner.Close() 67 + 68 + var elems []T 69 + for elem := range scanner.Scan() { 70 + elems = append(elems, elem) 71 + } 72 + 73 + return elems 74 + } 75 + 76 + func ScanOne[T any](rows *sql.Rows) *T { 77 + scanner := NewScanner[T](rows) 78 + defer scanner.Close() 79 + 80 + for elem := range scanner.Scan() { 81 + return &elem 82 + } 83 + 84 + return nil 85 + }
+1 -7
scanner_test.go
··· 44 44 t.Fatalf("Failed to query departments: %v", err) 45 45 } 46 46 47 - scanner := NewScanner[Department](rows) 48 - defer scanner.Close() 49 - var departments []Department 50 - 51 - for dept := range scanner.Scan() { 52 - departments = append(departments, dept) 53 - } 47 + departments := ScanAll[Department](rows) 54 48 55 49 if len(departments) != 3 { 56 50 t.Errorf("Expected 3 departments, got %d", len(departments))