Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
random_data_load*
vendor/
bin/*
build/*
48 changes: 48 additions & 0 deletions internal/getters/binary.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package getters

import (
"fmt"
"math/rand"
)

// RandomString getter
type RandomBinary struct {
name string
maxSize int64
allowNull bool
}

func (r *RandomBinary) Value() interface{} {
if r.allowNull && rand.Int63n(100) < nilFrequency {
return nil
}
maxSize := uint64(r.maxSize)
if maxSize == 0 {
maxSize = uint64(rand.Int63n(100))
}

data := make([]byte, maxSize)
rand.Read(data)

return data
}

func (r *RandomBinary) String() string {
v := r.Value()
if v == nil {
return NULL
}
return v.(string)
}

func (r *RandomBinary) Quote() string {
v := r.Value()
if v == nil {
return NULL
}
return fmt.Sprintf("%q", v)
}

func NewRandomBinary(name string, maxSize int64, allowNull bool) *RandomBinary {
return &RandomBinary{name, maxSize, allowNull}
}
4 changes: 2 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ func makeValueFuncs(conn *sql.DB, fields []tableparser.Field) insertValues {
values = append(values, getters.NewRandomDate(field.ColumnName, field.IsNullable))
case "datetime", "timestamp":
values = append(values, getters.NewRandomDateTime(field.ColumnName, field.IsNullable))
case "tinyblob", "tinytext", "blob", "text", "mediumtext", "mediumblob", "longblob", "longtext":
case "tinytext", "text", "mediumtext", "longtext":
values = append(values, getters.NewRandomString(field.ColumnName,
field.CharacterMaximumLength.Int64, field.IsNullable))
case "time":
Expand All @@ -423,7 +423,7 @@ func makeValueFuncs(conn *sql.DB, fields []tableparser.Field) insertValues {
int64(time.Now().Year()), field.IsNullable))
case "enum", "set":
values = append(values, getters.NewRandomEnum(field.SetEnumVals, field.IsNullable))
case "binary", "varbinary":
case "binary", "varbinary", "tinyblob", "blob", "mediumblob", "longblob":
values = append(values, getters.NewRandomBinary(field.ColumnName, field.CharacterMaximumLength.Int64, field.IsNullable))
default:
log.Printf("cannot get field type: %s: %s\n", field.ColumnName, field.DataType)
Expand Down