Skip to content

Instantly share code, notes, and snippets.

@andy-wm-arthur
Created May 18, 2022 20:33
Show Gist options
  • Save andy-wm-arthur/fbd485d0375c000844017a9b8f82fb6a to your computer and use it in GitHub Desktop.
Save andy-wm-arthur/fbd485d0375c000844017a9b8f82fb6a to your computer and use it in GitHub Desktop.
Generates a deep history against a dolt database
package main
import (
"context"
"database/sql"
"fmt"
"math/rand"
"os"
_ "github.com/go-sql-driver/mysql"
)
var (
database = "history_benchmark"
user = "root"
pass = ""
host = "127.0.0.1"
port = "3306"
)
func main() {
err := populateHistory(context.Background())
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
os.Exit(0)
}
const (
depth = 5000
)
func populateHistory(ctx context.Context) error {
connStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s",
user, pass, host, port, database)
db, err := sql.Open("mysql", connStr)
if err != nil {
return err
}
conn, err := db.Conn(ctx)
if err != nil {
return err
}
if err = createTable(ctx, conn); err != nil {
return err
}
for i := 1; i <= depth; i++ {
q := fmt.Sprintf("insert into test values (%d, %d, %d)", i, rand.Int31(), rand.Int31())
_, err = conn.ExecContext(ctx, q)
if err != nil {
return err
}
_, err = conn.ExecContext(ctx, "CALL dolt_commit('-am', 'new row')")
if err != nil {
return err
}
if i%100 == 0 {
fmt.Printf("made %d commits \n", i)
}
}
return nil
}
func createTable(ctx context.Context, conn *sql.Conn) (err error) {
_, err = conn.ExecContext(ctx, "create table test (pk int primary key, c0 int, c1 int)")
if err != nil {
return
}
_, err = conn.ExecContext(ctx, "CALL dolt_add('-A')")
if err != nil {
return
}
_, err = conn.ExecContext(ctx, "CALL dolt_commit('-m', 'new table')")
if err != nil {
return
}
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment