github.com/RevenueMonster/sqlike@v1.0.6/examples/example_test.go (about) 1 package examples 2 3 import ( 4 "context" 5 "log" 6 "testing" 7 8 semver "github.com/Masterminds/semver/v3" 9 10 _ "github.com/go-sql-driver/mysql" 11 mysql "github.com/go-sql-driver/mysql" 12 13 "github.com/RevenueMonster/sqlike/plugin/opentracing" 14 "github.com/RevenueMonster/sqlike/sql/instrumented" 15 sqlstmt "github.com/RevenueMonster/sqlike/sql/stmt" 16 "github.com/RevenueMonster/sqlike/sqlike/options" 17 18 "github.com/RevenueMonster/sqlike/sqlike" 19 "github.com/stretchr/testify/require" 20 ) 21 22 type Logger struct { 23 } 24 25 func (l Logger) Debug(stmt *sqlstmt.Statement) { 26 // log.Printf("%v", stmt) 27 log.Printf("%+v", stmt) 28 } 29 30 // TestExamples : 31 func TestExamples(t *testing.T) { 32 var ( 33 ctx = context.Background() 34 ) 35 36 // normal connect 37 { 38 client := sqlike.MustConnect( 39 ctx, 40 "mysql", 41 options.Connect(). 42 ApplyURI(`root:abcd1234@tcp()/sqlike?parseTime=true&loc=UTC&charset=utf8mb4&collation=utf8mb4_general_ci`), 43 ) 44 45 // set timezone for UTC 46 if _, err := client.ExecContext(ctx, `SET GLOBAL time_zone = '+00:00';`); err != nil { 47 panic(err) 48 } 49 50 testCase(ctx, t, client) 51 } 52 53 // with tracing (OpenTracing) 54 { 55 driver := "mysql" 56 username := "root" 57 58 cfg := mysql.NewConfig() 59 cfg.User = username 60 cfg.Params = map[string]string{ 61 "charset": "utf8mb4", 62 // "collation": "utf8mb4_general_ci", 63 } 64 cfg.Collation = "utf8mb4_general_ci" 65 cfg.Passwd = "abcd1234" 66 cfg.ParseTime = true 67 conn, err := mysql.NewConnector(cfg) 68 if err != nil { 69 panic(err) 70 } 71 72 itpr := opentracing.NewInterceptor( 73 opentracing.WithDBInstance("sqlike"), 74 opentracing.WithDBUser(username), 75 opentracing.WithDBType(driver), 76 opentracing.WithExec(true), 77 opentracing.WithQuery(true), 78 ) 79 client := sqlike.MustConnectDB(ctx, driver, instrumented.WrapConnector(conn, itpr)) 80 defer client.Close() 81 testCase(ctx, t, client) 82 } 83 84 testRace(ctx, t) 85 86 } 87 88 func testCase(ctx context.Context, t *testing.T, client *sqlike.Client) { 89 v := client.Version() 90 require.Equal(t, "mysql", client.DriverName()) 91 require.True(t, v.GreaterThan(semver.MustParse("5.7"))) 92 client.SetLogger(Logger{}) 93 DatabaseExamples(t, client) 94 db := client.Database("sqlike") 95 mg := connectMongoDB(ctx) 96 97 { 98 SQLDumpExamples(ctx, t, client) 99 MigrateExamples(ctx, t, db) 100 IndexExamples(ctx, t, db) 101 ExtraExamples(ctx, t, db, mg) 102 103 InsertExamples(ctx, t, db) 104 FindExamples(ctx, t, db) 105 QueryExamples(ctx, t, db) 106 TransactionExamples(ctx, t, db) 107 PaginationExamples(ctx, t, client) 108 UpdateExamples(ctx, t, db) 109 DeleteExamples(ctx, t, db) 110 JSONExamples(ctx, t, db) 111 CasbinExamples(ctx, t, db) 112 SpatialExamples(ctx, t, db) 113 } 114 115 // Errors 116 { 117 MigrateErrorExamples(ctx, t, db) 118 InsertErrorExamples(ctx, t, db) 119 FindErrorExamples(ctx, t, db) 120 UpdateErrorExamples(ctx, t, db) 121 } 122 }