MCPcopy Index your code
hub / github.com/sqlc-dev/sqlc / startMySQLServer

Function startMySQLServer

internal/sqltest/docker/mysql.go:41–104  ·  view source on GitHub ↗
(c context.Context)

Source from the content-addressed store, hash-verified

39}
40
41func startMySQLServer(c context.Context) (string, error) {
42 {
43 _, err := exec.Command("docker", "pull", "mysql:9").CombinedOutput()
44 if err != nil {
45 return "", fmt.Errorf("docker pull: mysql:9 %w", err)
46 }
47 }
48
49 var exists bool
50 {
51 cmd := exec.Command("docker", "container", "inspect", "sqlc_sqltest_docker_mysql")
52 // This means we've already started the container
53 exists = cmd.Run() == nil
54 }
55
56 if !exists {
57 cmd := exec.Command("docker", "run",
58 "--name", "sqlc_sqltest_docker_mysql",
59 "-e", "MYSQL_ROOT_PASSWORD=mysecretpassword",
60 "-e", "MYSQL_DATABASE=dinotest",
61 "-p", "3306:3306",
62 "-d",
63 "mysql:9",
64 )
65
66 output, err := cmd.CombinedOutput()
67 fmt.Println(string(output))
68
69 msg := `Conflict. The container name "/sqlc_sqltest_docker_mysql" is already in use by container`
70 if !strings.Contains(string(output), msg) && err != nil {
71 return "", err
72 }
73 }
74
75 ctx, cancel := context.WithTimeout(c, 10*time.Second)
76 defer cancel()
77
78 // Create a ticker that fires every 10ms
79 ticker := time.NewTicker(10 * time.Millisecond)
80 defer ticker.Stop()
81
82 uri := "root:mysecretpassword@/dinotest?multiStatements=true&parseTime=true"
83
84 db, err := sql.Open("mysql", uri)
85 if err != nil {
86 return "", fmt.Errorf("sql.Open: %w", err)
87 }
88
89 defer db.Close()
90
91 for {
92 select {
93 case <-ctx.Done():
94 return "", fmt.Errorf("timeout reached: %w", ctx.Err())
95
96 case <-ticker.C:
97 // Run your function here
98 if err := db.PingContext(ctx); err != nil {

Callers 1

StartMySQLServerFunction · 0.70

Calls 3

OpenMethod · 0.80
CloseMethod · 0.65
ErrMethod · 0.45

Tested by

no test coverage detected