77 "path"
88 "sort"
99 "strings"
10+ "time"
1011
1112 _ "modernc.org/sqlite"
1213
@@ -59,7 +60,6 @@ func testTableScan(stageHarness *test_case_harness.TestCaseHarness) error {
5960
6061 expectedValues , err := getExpectedValuesForQuery (db , testQuery )
6162 if err != nil {
62- logger .Errorf ("Failed to create test database, this is a CodeCrafters error." )
6363 return err
6464 }
6565
@@ -82,24 +82,41 @@ func testTableScan(stageHarness *test_case_harness.TestCaseHarness) error {
8282}
8383
8484func getExpectedValuesForQuery (db * sql.DB , query string ) ([]string , error ) {
85- expectedValues := []string {}
85+ resultChannel := make (chan []string , 1 )
86+ errorChannel := make (chan error , 1 )
8687
87- rows , err := db .Query (query )
88- if err != nil {
89- return []string {}, err
90- }
91- defer rows .Close ()
88+ go func () {
89+ expectedValues := []string {}
90+
91+ rows , err := db .Query (query )
92+ if err != nil {
93+ errorChannel <- err
94+ return
95+ }
9296
93- for rows .Next () {
94- var value1 string
95- var value2 string
97+ for rows .Next () {
98+ var value1 string
99+ var value2 string
96100
97- if err := rows .Scan (& value1 , & value2 ); err != nil {
98- return []string {}, err
101+ if err := rows .Scan (& value1 , & value2 ); err != nil {
102+ rows .Close ()
103+ errorChannel <- err
104+ return
105+ }
106+ expectedValues = append (expectedValues , strings .Join ([]string {value1 , value2 }, "|" ))
99107 }
108+ rows .Close ()
109+ resultChannel <- expectedValues
110+ }()
100111
101- expectedValues = append (expectedValues , strings .Join ([]string {value1 , value2 }, "|" ))
102- }
112+ select {
113+ case expectedValues := <- resultChannel :
114+ return expectedValues , nil
103115
104- return expectedValues , nil
116+ case err := <- errorChannel :
117+ panic (fmt .Sprintf ("CodeCrafters internal error: Database query failed: %v" , err ))
118+
119+ case <- time .After (1 * time .Second ):
120+ panic ("CodeCrafters internal error: Failed to open the test database within 1 second" )
121+ }
105122}
0 commit comments