github.com/RevenueMonster/sqlike@v1.0.6/examples/query.go (about)

     1  package examples
     2  
     3  import (
     4  	"context"
     5  	"regexp"
     6  	"testing"
     7  
     8  	"github.com/RevenueMonster/sqlike/sql"
     9  	"github.com/RevenueMonster/sqlike/sql/expr"
    10  	"github.com/RevenueMonster/sqlike/sqlike"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  // QueryExamples :
    15  func QueryExamples(ctx context.Context, t *testing.T, db *sqlike.Database) {
    16  
    17  	stmt := expr.Union(
    18  		sql.Select().
    19  			From("sqlike", "GeneratedStruct").
    20  			Where(
    21  				expr.Equal("State", ""),
    22  				expr.GreaterThan("Date.CreatedAt", "2006-01-02 16:00:00"),
    23  				expr.GreaterOrEqual("No", 0),
    24  				expr.Or(
    25  					expr.Equal("State", ""),
    26  					expr.NotEqual("State", ""),
    27  					expr.GreaterOrEqual("State", ""),
    28  				),
    29  			).
    30  			OrderBy(
    31  				expr.Desc("NestedID"),
    32  				expr.Asc("Amount"),
    33  			).
    34  			Limit(1).
    35  			Offset(1),
    36  		sql.Select().
    37  			From("sqlike", "GeneratedStruct").
    38  			Limit(1),
    39  	)
    40  
    41  	{
    42  		// table := db.Table("GeneratedStruct")
    43  		// err = table.Truncate()
    44  		// require.NoError(t, err)
    45  
    46  		result, err := db.QueryStmt(ctx, stmt)
    47  		require.NoError(t, err)
    48  		defer result.Close()
    49  
    50  		gss := make([]*generatedStruct, 0)
    51  		for result.Next() {
    52  			gs := new(generatedStruct)
    53  			if err := result.Decode(gs); err != nil {
    54  				panic(err)
    55  			}
    56  			gss = append(gss, gs)
    57  		}
    58  
    59  		// TODO: add test
    60  	}
    61  
    62  	{
    63  		if err := db.RunInTransaction(
    64  			ctx,
    65  			func(sess sqlike.SessionContext) error {
    66  				if _, err := sess.Exec("USE `sqlike`;"); err != nil {
    67  					return err
    68  				}
    69  
    70  				var version string
    71  				if err := sess.QueryRow(`SELECT VERSION();`).Scan(&version); err != nil {
    72  					return err
    73  				}
    74  				require.Regexp(t, regexp.MustCompile(`\d+\.\d+\d+`), version)
    75  
    76  				rows, err := sess.Query("SELECT COUNT(*) FROM `GeneratedStruct`;")
    77  				if err != nil {
    78  					return err
    79  				}
    80  
    81  				var count uint
    82  				for rows.Next() {
    83  					if err := rows.Scan(&count); err != nil {
    84  						return err
    85  					}
    86  				}
    87  				require.NotEmpty(t, count)
    88  
    89  				if err := rows.Close(); err != nil {
    90  					return err
    91  				}
    92  
    93  				result, err := sess.QueryStmt(stmt)
    94  				if err != nil {
    95  					return err
    96  				}
    97  				defer result.Close()
    98  
    99  				return nil
   100  			}); err != nil {
   101  			panic(err)
   102  		}
   103  	}
   104  }