Skip to content

Commit f2ea8e7

Browse files
authored
Merge pull request #126 from codecrafters-io/andy/tweak
Improve error handling for testIndexScan
2 parents 2290776 + 6fa0a42 commit f2ea8e7

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

internal/stage_index_scan.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ func testIndexScan(stageHarness *test_case_harness.TestCaseHarness) error {
5959

6060
expectedValues, err := getExpectedValuesForQuery(db, testQuery)
6161
if err != nil {
62-
logger.Errorf("Failed to create test database, this is a CodeCrafters error.")
6362
return err
6463
}
6564

internal/stage_table_scan.go

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
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

8484
func 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

Comments
 (0)