Skip to content

Commit 9dd1ae8

Browse files
Clean up data type getters
1 parent 49df130 commit 9dd1ae8

File tree

10 files changed

+343
-0
lines changed

10 files changed

+343
-0
lines changed

Diff for: internal/getters/constant.go

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package getters
2+
3+
import "fmt"
4+
5+
// Constant Getter. Used for debugging
6+
type Constant struct {
7+
value interface{}
8+
}
9+
10+
func (r *Constant) Value() interface{} {
11+
return r.value
12+
}
13+
14+
func (r *Constant) String() string {
15+
return fmt.Sprintf("%q", r.Value())
16+
}
17+
18+
func NewConstant(value interface{}) Getter {
19+
return &Constant{value}
20+
}

Diff for: internal/getters/date.go

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package getters
2+
3+
import (
4+
"fmt"
5+
"math/rand"
6+
"time"
7+
)
8+
9+
type RandomDate struct {
10+
name string
11+
allowNull bool
12+
}
13+
14+
func (r *RandomDate) Value() interface{} {
15+
var randomSeconds time.Duration
16+
for i := 0; i < 10 && randomSeconds != 0; i++ {
17+
randomSeconds = time.Duration(rand.Int63n(int64(oneYear)) + rand.Int63n(100))
18+
}
19+
d := time.Now().Add(-1 * randomSeconds)
20+
return d
21+
}
22+
23+
func (r *RandomDate) String() string {
24+
d := r.Value().(time.Time)
25+
return fmt.Sprintf("'%s'", d.Format("2006-01-02 15:03:04"))
26+
}
27+
28+
func NewRandomDate(name string, allowNull bool) Getter {
29+
return &RandomDate{name, allowNull}
30+
}
31+
32+
type RandomDateInRange struct {
33+
name string
34+
min string
35+
max string
36+
allowNull bool
37+
}
38+
39+
func (r *RandomDateInRange) Value() interface{} {
40+
rand.Seed(time.Now().UnixNano())
41+
var randomSeconds int64
42+
randomSeconds = rand.Int63n(oneYear) + rand.Int63n(100)
43+
d := time.Now().Add(-1 * time.Duration(randomSeconds) * time.Second)
44+
return d
45+
}
46+
47+
func (r *RandomDateInRange) String() string {
48+
d := r.Value().(time.Time)
49+
return fmt.Sprintf("'%s'", d.Format("2006-01-02 15:03:04"))
50+
}
51+
52+
func NewRandomDateInRange(name string, min, max string, allowNull bool) Getter {
53+
if min == "" {
54+
t := time.Now().Add(-1 * time.Duration(oneYear) * time.Second)
55+
min = t.Format("2006-01-02")
56+
}
57+
return &RandomDateInRange{name, min, max, allowNull}
58+
}

Diff for: internal/getters/datetime.go

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package getters
2+
3+
import (
4+
"fmt"
5+
"math/rand"
6+
"time"
7+
)
8+
9+
type RandomDateTimeInRange struct {
10+
min string
11+
max string
12+
allowNull bool
13+
}
14+
15+
func (r *RandomDateTimeInRange) Value() interface{} {
16+
rand.Seed(time.Now().UnixNano())
17+
randomSeconds := rand.Int63n(oneYear)
18+
d := time.Now().Add(-1 * time.Duration(randomSeconds) * time.Second)
19+
return d
20+
}
21+
22+
func (r *RandomDateTimeInRange) String() string {
23+
d := r.Value().(time.Time)
24+
return fmt.Sprintf("'%s'", d.Format("2006-01-02 15:03:04"))
25+
}
26+
27+
func NewRandomDateTimeInRange(name string, min, max string, allowNull bool) Getter {
28+
if min == "" {
29+
t := time.Now().Add(-1 * time.Duration(oneYear) * time.Second)
30+
min = t.Format("2006-01-02")
31+
}
32+
return &RandomDateInRange{name, min, max, allowNull}
33+
}
34+
35+
func NewRandomDateTime(name string, allowNull bool) Getter {
36+
return &RandomDateInRange{name, "", "", allowNull}
37+
}

Diff for: internal/getters/decimal.go

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package getters
2+
3+
import (
4+
"fmt"
5+
"math"
6+
"math/rand"
7+
)
8+
9+
type RandomDecimal struct {
10+
name string
11+
size int64
12+
allowNull bool
13+
}
14+
15+
func (r *RandomDecimal) Value() interface{} {
16+
f := rand.Float64() * float64(rand.Int63n(int64(math.Pow10(int(r.size)))))
17+
return f
18+
}
19+
20+
func (r *RandomDecimal) String() string {
21+
return fmt.Sprintf("%0f", r.Value())
22+
}
23+
24+
func NewRandomDecimal(name string, size int64, allowNull bool) Getter {
25+
return &RandomDecimal{name, size, allowNull}
26+
}

Diff for: internal/getters/enum.go

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package getters
2+
3+
import (
4+
"fmt"
5+
"math/rand"
6+
)
7+
8+
// RandomEnum Getter
9+
type RandomEnum struct {
10+
allowedValues []string
11+
allowNull bool
12+
}
13+
14+
func (r *RandomEnum) Value() interface{} {
15+
//rand.Seed(time.Now().UnixNano())
16+
if r.allowNull && rand.Int63n(100) < nilFrequency {
17+
return nil
18+
}
19+
i := rand.Int63n(int64(len(r.allowedValues)))
20+
return r.allowedValues[i]
21+
}
22+
23+
func (r *RandomEnum) String() string {
24+
if v := r.Value(); v != nil {
25+
return fmt.Sprintf("%q", v)
26+
}
27+
return "NULL"
28+
}
29+
30+
func NewRandomEnum(allowedValues []string, allowNull bool) Getter {
31+
return &RandomEnum{allowedValues, allowNull}
32+
}

Diff for: internal/getters/int.go

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package getters
2+
3+
import (
4+
"fmt"
5+
"math/rand"
6+
)
7+
8+
type RandomInt struct {
9+
name string
10+
mask int64
11+
allowNull bool
12+
}
13+
14+
func (r *RandomInt) Value() interface{} {
15+
return rand.Int63n(r.mask)
16+
}
17+
18+
func (r *RandomInt) String() string {
19+
return fmt.Sprintf("%d", r.Value())
20+
}
21+
22+
func NewRandomInt(name string, mask int64, allowNull bool) Getter {
23+
return &RandomInt{name, mask, allowNull}
24+
}
25+
26+
type RandomIntRange struct {
27+
name string
28+
min int64
29+
max int64
30+
allowNull bool
31+
}
32+
33+
func (r *RandomIntRange) Value() interface{} {
34+
limit := r.max - r.min + 1
35+
return r.min + rand.Int63n(limit)
36+
}
37+
38+
func (r *RandomIntRange) String() string {
39+
return fmt.Sprintf("%d", r.Value())
40+
}
41+
42+
func NewRandomIntRange(name string, min, max int64, allowNull bool) Getter {
43+
return &RandomIntRange{name, min, max, allowNull}
44+
}

Diff for: internal/getters/samples.go

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package getters
2+
3+
import (
4+
"fmt"
5+
"math/rand"
6+
)
7+
8+
type RandomSample struct {
9+
name string
10+
samples []interface{}
11+
allowNull bool
12+
}
13+
14+
func (r *RandomSample) Value() interface{} {
15+
if r.allowNull && rand.Int63n(100) < nilFrequency {
16+
return nil
17+
}
18+
pos := rand.Int63n(int64(len(r.samples)))
19+
return r.samples[pos]
20+
}
21+
22+
func (r *RandomSample) String() string {
23+
v := r.Value()
24+
if v == nil {
25+
return "NULL"
26+
}
27+
switch v.(type) {
28+
case string:
29+
return fmt.Sprintf("%q", v)
30+
default:
31+
return fmt.Sprintf("%v", v)
32+
}
33+
}
34+
35+
func NewRandomSample(name string, samples []interface{}, allowNull bool) *RandomSample {
36+
r := &RandomSample{name, samples, allowNull}
37+
return r
38+
}

Diff for: internal/getters/string.go

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package getters
2+
3+
import (
4+
"fmt"
5+
"math/rand"
6+
7+
"github.com/icrowley/fake"
8+
)
9+
10+
// RandomString getter
11+
type RandomString struct {
12+
name string
13+
maxSize int64
14+
allowNull bool
15+
}
16+
17+
func (r *RandomString) Value() interface{} {
18+
if r.allowNull && rand.Int63n(100) < nilFrequency {
19+
return nil
20+
}
21+
var s string
22+
maxSize := uint64(r.maxSize)
23+
if maxSize == 0 {
24+
maxSize = uint64(rand.Int63n(100))
25+
}
26+
27+
if maxSize <= 10 {
28+
s = fake.FirstName()
29+
} else if maxSize < 30 {
30+
s = fake.FullName()
31+
} else {
32+
s = fake.Sentence()
33+
}
34+
if len(s) > int(maxSize) {
35+
s = s[:int(maxSize)]
36+
}
37+
return s
38+
}
39+
40+
func (r *RandomString) String() string {
41+
v := r.Value()
42+
if v == nil {
43+
return "NULL"
44+
}
45+
return fmt.Sprintf("%q", v)
46+
}
47+
48+
func NewRandomString(name string, maxSize int64, allowNull bool) Getter {
49+
return &RandomString{name, maxSize, allowNull}
50+
}

Diff for: internal/getters/time.go

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package getters
2+
3+
import (
4+
"fmt"
5+
"math/rand"
6+
)
7+
8+
// RandomTime Getter
9+
type RandomTime struct {
10+
allowNull bool
11+
}
12+
13+
func (r *RandomTime) Value() interface{} {
14+
h := rand.Int63n(24)
15+
m := rand.Int63n(60)
16+
s := rand.Int63n(60)
17+
return fmt.Sprintf("'%02d:%02d:%02d'", h, m, s)
18+
}
19+
20+
func (r *RandomTime) String() string {
21+
return r.Value().(string)
22+
}
23+
24+
func NewRandomTime(allowNull bool) Getter {
25+
return &RandomTime{allowNull}
26+
}

Diff for: internal/getters/year.go

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package getters
2+
3+
func NewRandomYear(name string, format int, allowNull bool) Getter {
4+
if format == 2 {
5+
return &RandomIntRange{name, 01, 99, allowNull}
6+
}
7+
return &RandomIntRange{name, 1901, 2155, allowNull}
8+
}
9+
10+
func NewRandomYearRange(name string, min, max int64, allowNull bool) Getter {
11+
return &RandomIntRange{name, min, max, allowNull}
12+
}

0 commit comments

Comments
 (0)