Skip to content
This repository was archived by the owner on Jun 14, 2019. It is now read-only.

Commit b8b383d

Browse files
committed
add sql fiddler & test data sql scripts
1 parent ac6ae0b commit b8b383d

File tree

11 files changed

+869
-82
lines changed

11 files changed

+869
-82
lines changed

builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,12 +244,12 @@ func (b *Builder) ToSQL() (string, []interface{}, error) {
244244
return w.writer.String(), w.args, nil
245245
}
246246

247-
// ToBindedSQL
247+
// ToBoundSQL
248248
func (b *Builder) ToBindedSQL() (string, error) {
249249
w := NewWriter()
250250
if err := b.WriteTo(w); err != nil {
251251
return "", err
252252
}
253253

254-
return ConvertToBindedSQL(w.writer.String(), w.args)
254+
return ConvertToBoundSQL(w.writer.String(), w.args)
255255
}

builder_b_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ func randQuery(dialect string, rgc *randGenConf) *Builder {
149149
}
150150

151151
if isUnionized && rgc.allowLimit && rand.Intn(1000) >= 500 {
152-
b = randLimit(b)
152+
b = randLimit(Dialect(dialect).Select().From("t", b))
153153
}
154154

155155
return b

builder_limit_test.go

Lines changed: 89 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -10,95 +10,120 @@ import (
1010
"github.com/stretchr/testify/assert"
1111
)
1212

13-
func TestBuilder_Limit(t *testing.T) {
14-
// simple -- OracleSQL style
15-
sql, args, err := Dialect(ORACLE).Select("a", "b", "c").From("table1").OrderBy("a ASC").
16-
Limit(5, 10).ToSQL()
13+
func TestBuilder_Limit4Mssql(t *testing.T) {
14+
sqlFromFile, err := readPreparationSQLFromFile("testdata/mssql_fiddle_data.sql")
15+
assert.NoError(t, err)
16+
f, err := newFiddler("", MSSQL, sqlFromFile)
1717
assert.NoError(t, err)
18-
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 ORDER BY a ASC) at WHERE at.RN<=?) att WHERE att.RN>?", sql)
19-
assert.EqualValues(t, []interface{}{15, 10}, args)
18+
assert.NotEmpty(t, f.sessionCode)
2019

21-
// simple with join -- OracleSQL style
22-
sql, args, err = Dialect(ORACLE).Select("a", "b", "c", "d").From("table1 t1").
23-
InnerJoin("table2 t2", "t1.id = t2.ref_id").OrderBy("a ASC").Limit(5, 10).ToSQL()
20+
// simple -- MsSQL style
21+
sql, err := Dialect(MSSQL).Select("a", "b", "c").From("table1").
22+
OrderBy("a ASC").Limit(5).ToBindedSQL()
2423
assert.NoError(t, err)
25-
assert.EqualValues(t, "SELECT a,b,c,d FROM (SELECT * FROM (SELECT a,b,c,d,ROWNUM RN FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.ref_id ORDER BY a ASC) at WHERE at.RN<=?) att WHERE att.RN>?", sql)
26-
assert.EqualValues(t, []interface{}{15, 10}, args)
24+
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT TOP 5 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM table1 ORDER BY a ASC) at", sql)
25+
assert.NoError(t, f.executableCheck(sql))
2726

28-
// simple -- OracleSQL style
29-
sql, args, err = Dialect(ORACLE).Select("a", "b", "c").From("table1").
30-
OrderBy("a ASC").Limit(5).ToSQL()
27+
// simple with where -- MsSQL style
28+
sql, err = Dialect(MSSQL).Select("a", "b", "c").From("table1").
29+
Where(Neq{"a": "3"}).OrderBy("a ASC").Limit(5, 10).ToBindedSQL()
3130
assert.NoError(t, err)
32-
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT a,b,c,ROWNUM RN FROM table1 ORDER BY a ASC) at WHERE at.RN<=?", sql)
33-
assert.EqualValues(t, []interface{}{5}, args)
31+
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT TOP 15 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM table1 WHERE a<>'3' ORDER BY a ASC) at WHERE at.RN>10", sql)
32+
assert.NoError(t, f.executableCheck(sql))
3433

35-
// simple with where -- OracleSQL style
36-
sql, args, err = Dialect(ORACLE).Select("a", "b", "c").From("table1").Where(Neq{"a": "10", "b": "20"}).
37-
OrderBy("a ASC").Limit(5, 1).ToSQL()
34+
// union with limit -- MsSQL style
35+
sql, err = Dialect(MSSQL).Select("a", "b", "c").From("at",
36+
Dialect(MSSQL).Select("a", "b", "c").From("table1").Where(Neq{"a": "1"}).
37+
OrderBy("a ASC").Limit(5, 6).Union("ALL",
38+
Select("a", "b", "c").From("table1").Where(Neq{"b": "2"}).OrderBy("a DESC").Limit(10))).
39+
OrderBy("b DESC").Limit(7, 9).ToBindedSQL()
40+
assert.NoError(t, err)
41+
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT TOP 16 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM ((SELECT a,b,c FROM (SELECT TOP 11 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM table1 WHERE a<>'1' ORDER BY a ASC) at WHERE at.RN>6) UNION ALL (SELECT a,b,c FROM (SELECT TOP 10 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM table1 WHERE b<>'2' ORDER BY a DESC) at)) at ORDER BY b DESC) at WHERE at.RN>9", sql)
42+
assert.NoError(t, f.executableCheck(sql))
43+
}
44+
45+
func TestBuilder_Limit4MysqlLike(t *testing.T) {
46+
sqlFromFile, err := readPreparationSQLFromFile("testdata/mysql_fiddle_data.sql")
47+
assert.NoError(t, err)
48+
f, err := newFiddler("", MYSQL, sqlFromFile)
3849
assert.NoError(t, err)
39-
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE a<>? AND b<>? ORDER BY a ASC) at WHERE at.RN<=?) att WHERE att.RN>?", sql)
40-
assert.EqualValues(t, []interface{}{"10", "20", 6, 1}, args)
50+
assert.NotEmpty(t, f.sessionCode)
4151

4252
// simple -- MySQL/SQLite/PostgreSQL style
43-
sql, args, err = Dialect(MYSQL).Select("a", "b", "c").From("table1").OrderBy("a ASC").
44-
Limit(5, 10).ToSQL()
53+
sql, err := Dialect(MYSQL).Select("a", "b", "c").From("table1").OrderBy("a ASC").
54+
Limit(5, 10).ToBindedSQL()
4555
assert.NoError(t, err)
4656
assert.EqualValues(t, "SELECT a,b,c FROM table1 ORDER BY a ASC LIMIT 5 OFFSET 10", sql)
47-
assert.EqualValues(t, 0, len(args))
57+
assert.NoError(t, f.executableCheck(sql))
4858

4959
// simple -- MySQL/SQLite/PostgreSQL style
50-
sql, args, err = Dialect(MYSQL).Select("a", "b", "c").From("table1").
51-
OrderBy("a ASC").Limit(5).ToSQL()
60+
sql, err = Dialect(MYSQL).Select("a", "b", "c").From("table1").
61+
OrderBy("a ASC").Limit(5).ToBindedSQL()
5262
assert.NoError(t, err)
5363
assert.EqualValues(t, "SELECT a,b,c FROM table1 ORDER BY a ASC LIMIT 5", sql)
54-
assert.EqualValues(t, 0, len(args))
64+
assert.NoError(t, f.executableCheck(sql))
5565

5666
// simple with where -- MySQL/SQLite/PostgreSQL style
57-
sql, args, err = Dialect(MYSQL).Select("a", "b", "c").From("table1").
58-
Where(Eq{"f1": "v1", "f2": "v2"}).OrderBy("a ASC").Limit(5, 10).ToSQL()
67+
sql, err = Dialect(MYSQL).Select("a", "b", "c").From("table1").
68+
Where(Eq{"a": "1", "b": "1"}).OrderBy("a ASC").Limit(5, 10).ToBindedSQL()
5969
assert.NoError(t, err)
60-
assert.EqualValues(t, "SELECT a,b,c FROM table1 WHERE f1=? AND f2=? ORDER BY a ASC LIMIT 5 OFFSET 10", sql)
61-
assert.EqualValues(t, []interface{}{"v1", "v2"}, args)
70+
assert.EqualValues(t, "SELECT a,b,c FROM table1 WHERE a='1' AND b='1' ORDER BY a ASC LIMIT 5 OFFSET 10", sql)
71+
assert.NoError(t, f.executableCheck(sql))
6272

63-
// simple -- MsSQL style
64-
sql, args, err = Dialect(MSSQL).Select("a", "b", "c").From("table1").
65-
OrderBy("a ASC").Limit(5).ToSQL()
73+
// union -- MySQL/SQLite/PostgreSQL style
74+
sql, err = Dialect(MYSQL).Select("a", "b", "c").From("at",
75+
Dialect(MYSQL).Select("a", "b", "c").From("table1").Where(Eq{"a": "1"}).OrderBy("a ASC").
76+
Limit(5, 9).Union("ALL",
77+
Select("a", "b", "c").From("table1").Where(Eq{"a": "2"}).OrderBy("a DESC").Limit(10))).
78+
Limit(5, 10).ToBindedSQL()
6679
assert.NoError(t, err)
67-
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT TOP 5 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM table1 ORDER BY a ASC) at", sql)
68-
assert.EqualValues(t, []interface{}([]interface{}(nil)), args)
80+
assert.EqualValues(t, "SELECT a,b,c FROM ((SELECT a,b,c FROM table1 WHERE a='1' ORDER BY a ASC LIMIT 5 OFFSET 9) UNION ALL (SELECT a,b,c FROM table1 WHERE a='2' ORDER BY a DESC LIMIT 10)) at LIMIT 5 OFFSET 10", sql)
81+
assert.NoError(t, f.executableCheck(sql))
82+
}
6983

70-
// simple with where -- MsSQL style
71-
sql, args, err = Dialect(MSSQL).Select("a", "b", "c").From("table1").
72-
Where(Neq{"a": "3"}).OrderBy("a ASC").Limit(5, 10).ToSQL()
84+
func TestBuilder_Limit4Oracle(t *testing.T) {
85+
sqlFromFile, err := readPreparationSQLFromFile("testdata/oracle_fiddle_data.sql")
7386
assert.NoError(t, err)
74-
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT TOP 15 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM table1 WHERE a<>? ORDER BY a ASC) at WHERE at.RN>?", sql)
75-
assert.EqualValues(t, []interface{}{"3", 10}, args)
76-
// union with limit -- OracleSQL style
77-
sql, args, err = Dialect(ORACLE).Select("a", "b", "c").From("at",
78-
Dialect(ORACLE).Select("a", "b", "c").From("table1").
79-
Where(Neq{"a": "0"}).OrderBy("a ASC").Limit(5, 10).Union("ALL",
80-
Select("a", "b", "c").From("table1").Where(Neq{"b": "48"}).OrderBy("a DESC").Limit(10))).Limit(3).ToSQL()
87+
f, err := newFiddler("", ORACLE, sqlFromFile)
8188
assert.NoError(t, err)
82-
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT a,b,c,ROWNUM RN FROM ((SELECT a,b,c FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE a<>? ORDER BY a ASC) at WHERE at.RN<=?) att WHERE att.RN>?) UNION ALL (SELECT a,b,c FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE b<>? ORDER BY a DESC) at WHERE at.RN<=?)) at) at WHERE at.RN<=?", sql)
83-
assert.EqualValues(t, []interface{}{"0", 15, 10, "48", 10, 3}, args)
89+
assert.NotEmpty(t, f.sessionCode)
8490

85-
// union -- MySQL/SQLite/PostgreSQL style
86-
sql, args, err = Dialect(MYSQL).Select("a", "b", "c").From("at",
87-
Dialect(MYSQL).Select("a", "b", "c").From("table1").Where(Eq{"a": 1}).OrderBy("a ASC").
88-
Limit(5, 9).Union("ALL",
89-
Select("a", "b", "c").From("table1").Where(Eq{"a": 2}).OrderBy("a DESC").Limit(10))).
90-
Limit(5, 10).ToSQL()
91+
// simple -- OracleSQL style
92+
sql, err := Dialect(ORACLE).Select("a", "b", "c").From("table1").OrderBy("a ASC").
93+
Limit(5, 10).ToBindedSQL()
9194
assert.NoError(t, err)
92-
assert.EqualValues(t, "SELECT a,b,c FROM ((SELECT a,b,c FROM table1 WHERE a=? ORDER BY a ASC LIMIT 5 OFFSET 9) UNION ALL (SELECT a,b,c FROM table1 WHERE a=? ORDER BY a DESC LIMIT 10)) at LIMIT 5 OFFSET 10", sql)
93-
assert.EqualValues(t, []interface{}{1, 2}, args)
95+
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 ORDER BY a ASC) at WHERE at.RN<=15) att WHERE att.RN>10", sql)
96+
assert.NoError(t, f.executableCheck(sql))
9497

95-
// union with limit -- MsSQL style
96-
sql, args, err = Dialect(MSSQL).Select("a", "b", "c").From("at",
97-
Dialect(MSSQL).Select("a", "b", "c").From("table1").Where(Neq{"a": "1"}).
98-
OrderBy("a ASC").Limit(5, 6).Union("ALL",
99-
Select("a", "b", "c").From("table1").Where(Neq{"b": "2"}).OrderBy("a DESC").Limit(10))).
100-
OrderBy("b DESC").Limit(7, 9).ToSQL()
98+
// simple with join -- OracleSQL style
99+
sql, err = Dialect(ORACLE).Select("a", "b", "c", "d").From("table1 t1").
100+
InnerJoin("table2 t2", "t1.id = t2.ref_id").OrderBy("a ASC").Limit(5, 10).ToBindedSQL()
101+
assert.NoError(t, err)
102+
assert.EqualValues(t, "SELECT a,b,c,d FROM (SELECT * FROM (SELECT a,b,c,d,ROWNUM RN FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.ref_id ORDER BY a ASC) at WHERE at.RN<=15) att WHERE att.RN>10", sql)
103+
assert.NoError(t, f.executableCheck(sql))
104+
105+
// simple -- OracleSQL style
106+
sql, err = Dialect(ORACLE).Select("a", "b", "c").From("table1").
107+
OrderBy("a ASC").Limit(5).ToBindedSQL()
108+
assert.NoError(t, err)
109+
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT a,b,c,ROWNUM RN FROM table1 ORDER BY a ASC) at WHERE at.RN<=5", sql)
110+
assert.NoError(t, f.executableCheck(sql))
111+
112+
// simple with where -- OracleSQL style
113+
sql, err = Dialect(ORACLE).Select("a", "b", "c").From("table1").Where(Neq{"a": "10", "b": "20"}).
114+
OrderBy("a ASC").Limit(5, 1).ToBindedSQL()
115+
assert.NoError(t, err)
116+
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE a<>'10' AND b<>'20' ORDER BY a ASC) at WHERE at.RN<=6) att WHERE att.RN>1", sql)
117+
assert.NoError(t, f.executableCheck(sql))
118+
119+
// union with limit -- OracleSQL style
120+
sql, err = Dialect(ORACLE).Select("a", "b", "c").From("at",
121+
Dialect(ORACLE).Select("a", "b", "c").From("table1").
122+
Where(Neq{"a": "0"}).OrderBy("a ASC").Limit(5, 10).Union("ALL",
123+
Select("a", "b", "c").From("table1").Where(Neq{"b": "48"}).
124+
OrderBy("a DESC").Limit(10))).
125+
Limit(3).ToBindedSQL()
101126
assert.NoError(t, err)
102-
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT TOP 16 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM ((SELECT a,b,c FROM (SELECT TOP 11 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM table1 WHERE a<>? ORDER BY a ASC) at WHERE at.RN>?) UNION ALL (SELECT a,b,c FROM (SELECT TOP 10 a,b,c,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM table1 WHERE b<>? ORDER BY a DESC) at)) at ORDER BY b DESC) at WHERE at.RN>?", sql)
103-
assert.EqualValues(t, []interface{}{"1", 6, "2", 9}, args)
127+
assert.EqualValues(t, "SELECT a,b,c FROM (SELECT a,b,c,ROWNUM RN FROM ((SELECT a,b,c FROM (SELECT * FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE a<>'0' ORDER BY a ASC) at WHERE at.RN<=15) att WHERE att.RN>10) UNION ALL (SELECT a,b,c FROM (SELECT a,b,c,ROWNUM RN FROM table1 WHERE b<>'48' ORDER BY a DESC) at WHERE at.RN<=10)) at) at WHERE at.RN<=3", sql)
128+
assert.NoError(t, f.executableCheck(sql))
104129
}

error.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ var (
1919
ErrNoTableName = errors.New("No table indicated")
2020
// ErrNoColumnToUpdate no column to update
2121
ErrNoColumnToUpdate = errors.New("No column to be update")
22+
// ErrNotSupportDialectType not supported dialect type error
23+
ErrNotSupportDialectType = errors.New("Not supported dialect type")
2224
)

sql.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func condToSQL(cond Cond) (string, []interface{}, error) {
2222
return w.writer.String(), w.args, nil
2323
}
2424

25-
func condToBindedSQL(cond Cond) (string, error) {
25+
func condToBoundSQL(cond Cond) (string, error) {
2626
if cond == nil || !cond.IsValid() {
2727
return "", nil
2828
}
@@ -31,10 +31,10 @@ func condToBindedSQL(cond Cond) (string, error) {
3131
if err := cond.WriteTo(w); err != nil {
3232
return "", err
3333
}
34-
return ConvertToBindedSQL(w.writer.String(), w.args)
34+
return ConvertToBoundSQL(w.writer.String(), w.args)
3535
}
3636

37-
// ToSQL convert a builder or condtions to SQL and args
37+
// ToSQL convert a builder or conditions to SQL and args
3838
func ToSQL(cond interface{}) (string, []interface{}, error) {
3939
switch cond.(type) {
4040
case Cond:
@@ -45,11 +45,11 @@ func ToSQL(cond interface{}) (string, []interface{}, error) {
4545
return "", nil, ErrNotSupportType
4646
}
4747

48-
// ToBindedSQL convert a builder or condtions to parameters binded SQL
49-
func ToBindedSQL(cond interface{}) (string, error) {
48+
// ToBoundSQL convert a builder or conditions to parameters bound SQL
49+
func ToBoundSQL(cond interface{}) (string, error) {
5050
switch cond.(type) {
5151
case Cond:
52-
return condToBindedSQL(cond.(Cond))
52+
return condToBoundSQL(cond.(Cond))
5353
case *Builder:
5454
return cond.(*Builder).ToBindedSQL()
5555
}
@@ -89,8 +89,8 @@ func noSQLQuoteNeeded(a interface{}) bool {
8989
return false
9090
}
9191

92-
// ConvertToBindedSQL will convert SQL and args to a binded SQL
93-
func ConvertToBindedSQL(sql string, args []interface{}) (string, error) {
92+
// ConvertToBoundSQL will convert SQL and args to a bound SQL
93+
func ConvertToBoundSQL(sql string, args []interface{}) (string, error) {
9494
buf := StringBuilder{}
9595
var i, j, start int
9696
for ; i < len(sql); i++ {

sql_fiddler.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// Copyright 2018 The Xorm Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
package builder
6+
7+
import (
8+
"io/ioutil"
9+
"os"
10+
11+
"github.com/go-xorm/sqlfiddle"
12+
)
13+
14+
type fiddler struct {
15+
sessionCode string
16+
dbType int
17+
f *sqlfiddle.Fiddle
18+
}
19+
20+
func readPreparationSQLFromFile(path string) (string, error) {
21+
file, err := os.Open(path)
22+
defer file.Close()
23+
if err != nil {
24+
return "", err
25+
}
26+
27+
data, err := ioutil.ReadAll(file)
28+
if err != nil {
29+
return "", err
30+
}
31+
32+
return string(data), nil
33+
}
34+
35+
func newFiddler(fiddleServerAddr, dbDialect, preparationSQL string) (*fiddler, error) {
36+
var dbType int
37+
switch dbDialect {
38+
case MYSQL:
39+
dbType = sqlfiddle.Mysql5_6
40+
case MSSQL:
41+
dbType = sqlfiddle.MSSQL2017
42+
case POSTGRES:
43+
dbType = sqlfiddle.PostgreSQL96
44+
case ORACLE:
45+
dbType = sqlfiddle.Oracle11gR2
46+
case SQLITE:
47+
dbType = sqlfiddle.SQLite_WebSQL
48+
default:
49+
return nil, ErrNotSupportDialectType
50+
}
51+
52+
f := sqlfiddle.NewFiddle(fiddleServerAddr)
53+
response, err := f.CreateSchema(dbType, preparationSQL)
54+
if err != nil {
55+
return nil, err
56+
}
57+
58+
return &fiddler{sessionCode: response.Code, f: f, dbType: dbType}, nil
59+
}
60+
61+
func (f *fiddler) executableCheck(obj interface{}) error {
62+
var sql string
63+
var err error
64+
switch obj.(type) {
65+
case *Builder:
66+
sql, err = obj.(*Builder).ToBindedSQL()
67+
if err != nil {
68+
return err
69+
}
70+
case string:
71+
sql = obj.(string)
72+
}
73+
74+
_, err = f.f.RunSQL(f.dbType, f.sessionCode, sql)
75+
if err != nil {
76+
return err
77+
}
78+
79+
return nil
80+
}

sql_fiddler_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2018 The Xorm Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
package builder
6+
7+
import (
8+
"fmt"
9+
"testing"
10+
11+
"github.com/stretchr/testify/assert"
12+
)
13+
14+
func TestReadPreparationSQLFromFile(t *testing.T) {
15+
sqlFromFile, err := readPreparationSQLFromFile("testdata/mysql_fiddle_data.sql")
16+
assert.NoError(t, err)
17+
fmt.Println(sqlFromFile)
18+
}
19+
20+
func TestNewFiddler(t *testing.T) {
21+
sqlFromFile, err := readPreparationSQLFromFile("testdata/mysql_fiddle_data.sql")
22+
assert.NoError(t, err)
23+
f, err := newFiddler("", MYSQL, sqlFromFile)
24+
assert.NoError(t, err)
25+
assert.NotEmpty(t, f.sessionCode)
26+
}
27+
28+
func TestExecutableCheck(t *testing.T) {
29+
sqlFromFile, err := readPreparationSQLFromFile("testdata/mysql_fiddle_data.sql")
30+
assert.NoError(t, err)
31+
f, err := newFiddler("", MYSQL, sqlFromFile)
32+
assert.NoError(t, err)
33+
assert.NotEmpty(t, f.sessionCode)
34+
35+
assert.NoError(t, f.executableCheck("SELECT * FROM table1"))
36+
37+
err = f.executableCheck("SELECT * FROM table3")
38+
assert.Error(t, err)
39+
fmt.Println(err)
40+
}

0 commit comments

Comments
 (0)