@@ -205,10 +205,32 @@ func TestBuilder_Limit(t *testing.T) {
205205fmt .Println (sql , args )
206206}
207207
208- func BenchmarkBuilder_Limit (b * testing.B ) {
208+ func BenchmarkBuilder_LimitForOracle (b * testing.B ) {
209209for i := 0 ; i < b .N ; i ++ {
210210b .StopTimer ()
211- builder := randQuery (rand .Intn (1000 ) >= 500 , true )
211+ builder := randQuery (ORACLE , rand .Intn (1000 ) >= 500 , true )
212+ b .StartTimer ()
213+
214+ _ , _ , err := builder .ToSQL ()
215+ assert .NoError (b , err )
216+ }
217+ }
218+
219+ func BenchmarkBuilder_LimitForMssql (b * testing.B ) {
220+ for i := 0 ; i < b .N ; i ++ {
221+ b .StopTimer ()
222+ builder := randQuery (ORACLE , rand .Intn (1000 ) >= 500 , true )
223+ b .StartTimer ()
224+
225+ _ , _ , err := builder .ToSQL ()
226+ assert .NoError (b , err )
227+ }
228+ }
229+
230+ func BenchmarkBuilder_LimitForMysqlLike (b * testing.B ) {
231+ for i := 0 ; i < b .N ; i ++ {
232+ b .StopTimer ()
233+ builder := randQuery (MYSQL , rand .Intn (1000 ) >= 500 , true )
212234b .StartTimer ()
213235
214236_ , _ , err := builder .ToSQL ()
@@ -217,30 +239,31 @@ func BenchmarkBuilder_Limit(b *testing.B) {
217239}
218240
219241func TestRandQuery (t * testing.T ) {
220- sql , args , err := randQuery (false , true ).ToSQL ()
242+ dialect := randDialect ()
243+ sql , args , err := randQuery (dialect , false , true ).ToSQL ()
221244assert .NoError (t , err )
222245fmt .Println (sql , args )
223246
224- sql , args , err = randQuery (false , false ).ToSQL ()
247+ sql , args , err = randQuery (dialect , false , false ).ToSQL ()
225248assert .NoError (t , err )
226249fmt .Println (sql , args )
227250
228- sql , args , err = randQuery (true , false ).ToSQL ()
251+ sql , args , err = randQuery (dialect , true , false ).ToSQL ()
229252assert .NoError (t , err )
230253fmt .Println (sql , args )
231254
232- sql , args , err = randQuery (true , true ).ToSQL ()
255+ sql , args , err = randQuery (dialect , true , true ).ToSQL ()
233256assert .NoError (t , err )
234257fmt .Println (sql , args )
235258}
236259
237260// randQuery Generate a basic query for benchmark test. But be careful it's not a executable SQL in real db.
238- func randQuery (allowUnion , allowLimit bool ) * Builder {
239- b := randSimpleQuery (allowLimit )
261+ func randQuery (dialect string , allowUnion , allowLimit bool ) * Builder {
262+ b := randSimpleQuery (dialect , allowLimit )
240263if allowUnion {
241264r := rand .Intn (3 ) + 1
242265for i := r ; i < r ; i ++ {
243- b = b .Union ("all" , randSimpleQuery (allowLimit ))
266+ b = b .Union ("all" , randSimpleQuery (dialect , allowLimit ))
244267}
245268}
246269
@@ -251,8 +274,8 @@ func randQuery(allowUnion, allowLimit bool) *Builder {
251274return b
252275}
253276
254- func randSimpleQuery (allowLimit bool ) * Builder {
255- b := Dialect (randDialect () ).Select (randSelects ()... ).From (randTableName (0 )).PK ("id" )
277+ func randSimpleQuery (dialect string , allowLimit bool ) * Builder {
278+ b := Dialect (dialect ).Select (randSelects ()... ).From (randTableName (0 )).PK ("id" )
256279b = randJoin (b , 3 )
257280b = b .Where (randCond (b .selects , 3 ))
258281if allowLimit {
0 commit comments