github.com/RevenueMonster/sqlike@v1.0.6/examples/delete.go (about) 1 package examples 2 3 import ( 4 "context" 5 "database/sql" 6 "testing" 7 8 "github.com/RevenueMonster/sqlike/sql/expr" 9 "github.com/RevenueMonster/sqlike/sqlike" 10 "github.com/RevenueMonster/sqlike/sqlike/actions" 11 "github.com/RevenueMonster/sqlike/sqlike/options" 12 uuid "github.com/google/uuid" 13 "github.com/stretchr/testify/require" 14 ) 15 16 // DeleteExamples : 17 func DeleteExamples(ctx context.Context, t *testing.T, db *sqlike.Database) { 18 var ( 19 affected int64 20 result sql.Result 21 ns normalStruct 22 err error 23 ) 24 25 table := db.Table("NormalStruct") 26 27 // Delete record with primary key 28 { 29 err = table.FindOne( 30 ctx, 31 actions.FindOne(). 32 OrderBy(expr.Desc("$Key")), 33 ).Decode(&ns) 34 require.NoError(t, err) 35 err = table.DestroyOne(ctx, &ns) 36 require.NoError(t, err) 37 } 38 39 // Delete record with primary key tag (DestroyOne) 40 { 41 type dummy struct { 42 UUID uuid.UUID `sqlike:",primary_key"` 43 } 44 45 table := db.Table("testDB") 46 err = table.DropIfExists(ctx) 47 require.NoError(t, err) 48 49 table.MustUnsafeMigrate(ctx, dummy{}) 50 records := []dummy{ 51 {UUID: uuid.New()}, 52 {UUID: uuid.New()}, 53 } 54 55 _, err = table.Insert(ctx, &records) 56 require.NoError(t, err) 57 58 // destroy with empty value should error 59 { 60 var nilDummy *dummy 61 err = table.DestroyOne(ctx, nilDummy) 62 require.Error(t, err) 63 64 err = table.DestroyOne(ctx, nil) 65 require.Error(t, err) 66 } 67 68 err = table.DestroyOne( 69 ctx, 70 records[0], 71 options.DestroyOne().SetDebug(true), 72 ) 73 require.NoError(t, err) 74 75 err = table.DestroyOne( 76 ctx, 77 &records[1], 78 options.DestroyOne().SetDebug(true), 79 ) 80 require.NoError(t, err) 81 82 var count uint 83 if err := table.FindOne( 84 ctx, 85 actions.FindOne().Select(expr.Count("UUID")), 86 options.FindOne().SetDebug(true), 87 ).Scan(&count); err != nil { 88 require.NoError(t, err) 89 } 90 require.Equal(t, uint(0), count) 91 } 92 93 // Single delete 94 { 95 ns := newNormalStruct() 96 result, err = table.InsertOne( 97 ctx, 98 &ns, 99 options.InsertOne().SetDebug(true), 100 ) 101 require.NoError(t, err) 102 affected, err = result.RowsAffected() 103 require.NoError(t, err) 104 require.Equal(t, int64(1), affected) 105 affected, err = table.DeleteOne( 106 ctx, 107 actions.DeleteOne(). 108 Where( 109 expr.Equal("$Key", ns.ID), 110 ), 111 options.DeleteOne().SetDebug(true), 112 ) 113 require.NoError(t, err) 114 require.Equal(t, int64(1), affected) 115 } 116 117 // Multiple delete 118 { 119 nss := [...]normalStruct{ 120 newNormalStruct(), 121 newNormalStruct(), 122 newNormalStruct(), 123 } 124 result, err = table.Insert( 125 ctx, 126 &nss, 127 options.Insert(). 128 SetDebug(true), 129 ) 130 require.NoError(t, err) 131 affected, err = result.RowsAffected() 132 require.NoError(t, err) 133 require.Equal(t, int64(3), affected) 134 affected, err = table.Delete( 135 ctx, 136 actions.Delete(). 137 Where( 138 expr.In("$Key", []uuid.UUID{ 139 nss[0].ID, 140 nss[1].ID, 141 nss[2].ID, 142 }), 143 ), options.Delete(). 144 SetDebug(true), 145 ) 146 require.NoError(t, err) 147 require.Equal(t, int64(3), affected) 148 } 149 }