| 251 | } |
| 252 | |
| 253 | func (s *SqlTestSuite) TestQuery() { |
| 254 | t := s.T() |
| 255 | |
| 256 | // Create and start the server |
| 257 | server, addr, err := s.createServer() |
| 258 | require.NoError(t, err) |
| 259 | |
| 260 | var wg sync.WaitGroup |
| 261 | wg.Add(1) |
| 262 | go func() { |
| 263 | defer wg.Done() |
| 264 | require.NoError(s.T(), s.startServer(server)) |
| 265 | }() |
| 266 | defer s.stopServer(server) |
| 267 | time.Sleep(100 * time.Millisecond) |
| 268 | |
| 269 | // Configure client |
| 270 | cfg := s.Config |
| 271 | cfg.Address = addr |
| 272 | db, err := sql.Open("flightsql", cfg.DSN()) |
| 273 | require.NoError(t, err) |
| 274 | defer db.Close() |
| 275 | |
| 276 | _, err = db.Exec(fmt.Sprintf("DROP TABLE IF EXISTS %s", s.TableName)) |
| 277 | require.NoError(t, err) |
| 278 | |
| 279 | // Create the table |
| 280 | _, err = db.Exec(fmt.Sprintf(s.Statements["create table"], s.TableName)) |
| 281 | require.NoError(t, err) |
| 282 | |
| 283 | // Insert data |
| 284 | expected := map[string]int{ |
| 285 | "zero": 0, |
| 286 | "one": 1, |
| 287 | "minus one": -1, |
| 288 | "twelve": 12, |
| 289 | } |
| 290 | var stmts []string |
| 291 | id := 0 |
| 292 | for k, v := range expected { |
| 293 | stmts = append(stmts, fmt.Sprintf(s.Statements["insert"], s.TableName, id, k, v)) |
| 294 | id++ |
| 295 | } |
| 296 | _, err = db.Exec(strings.Join(stmts, "\n")) |
| 297 | require.NoError(t, err) |
| 298 | |
| 299 | rows, err := db.Query(fmt.Sprintf(s.Statements["query"], s.TableName)) |
| 300 | require.NoError(t, err) |
| 301 | |
| 302 | // Check result |
| 303 | actual := make(map[string]int, len(expected)) |
| 304 | for rows.Next() { |
| 305 | var name string |
| 306 | var id, value int |
| 307 | require.NoError(t, rows.Scan(&id, &name, &value)) |
| 308 | actual[name] = value |
| 309 | } |
| 310 | require.NoError(t, db.Close()) |