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  }