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 }