github.com/RevenueMonster/sqlike@v1.0.6/examples/index.go (about) 1 package examples 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/RevenueMonster/sqlike/sqlike" 8 "github.com/RevenueMonster/sqlike/sqlike/indexes" 9 "github.com/stretchr/testify/require" 10 ) 11 12 // IndexExamples : 13 func IndexExamples(ctx context.Context, t *testing.T, db *sqlike.Database) { 14 var ( 15 err error 16 idxs []sqlike.Index 17 ok bool 18 ) 19 20 table := db.Table("Index") 21 22 { 23 24 err = table.DropIfExists(ctx) 25 require.NoError(t, err) 26 } 27 28 // Migrate and create unique index with `unique_index` tag 29 { 30 err = table.Migrate(ctx, indexStruct{}) 31 require.NoError(t, err) 32 } 33 34 // Create one index 35 { 36 idx := table.Indexes() 37 err = idx.CreateOne( 38 ctx, 39 indexes.Index{ 40 Columns: indexes.Columns("ID"), 41 }) 42 require.NoError(t, err) 43 idxs, err = idx.List(ctx) 44 require.NoError(t, err) 45 require.True(t, len(idxs) > 1) 46 } 47 48 // Auto build indexes using yaml file 49 { 50 table := db.Table("NormalStruct") 51 err = table.DropIfExists(ctx) 52 require.NoError(t, err) 53 54 table.MustMigrate(ctx, normalStruct{}) 55 56 err = db.BuildIndexes(ctx) 57 require.NoError(t, err) 58 idxs, err = table.Indexes().List(ctx) 59 require.NoError(t, err) 60 require.Contains(t, idxs, sqlike.Index{ 61 // Name: "IX-SID@ASC;Emoji@ASC;Bool@DESC", 62 Name: "eb8bc4a93ee6af77e2ec575e12935e6d", 63 Type: "BTREE", 64 IsUnique: false, 65 }) 66 require.Contains(t, idxs, sqlike.Index{ 67 Name: "test_idx", 68 Type: "BTREE", 69 IsUnique: false, 70 }) 71 } 72 73 // Auto build indexes using folder 74 { 75 table1 := db.Table("SimpleStruct") 76 table2 := db.Table("TempGeneratedStruct") 77 78 err = table1.DropIfExists(ctx) 79 require.NoError(t, err) 80 err = table2.DropIfExists(ctx) 81 require.NoError(t, err) 82 83 table1.MustMigrate(ctx, simpleStruct{}) 84 table2.MustMigrate(ctx, generatedStruct{}) 85 86 err = table1.Indexes().DropAll(ctx) 87 require.NoError(t, err) 88 89 err = table2.Indexes().DropAll(ctx) 90 require.NoError(t, err) 91 92 err = db.BuildIndexes(ctx, "./indexes") 93 require.NoError(t, err) 94 idxs, err = table1.Indexes().List(ctx) 95 require.NoError(t, err) 96 require.True(t, len(idxs) == 6) 97 98 idxs, err = table2.Indexes().List(ctx) 99 require.NoError(t, err) 100 require.True(t, len(idxs) == 1) 101 } 102 103 table = db.Table("NormalStruct") 104 105 // Create multiple indexes 106 { 107 idxs := []indexes.Index{ 108 { 109 Name: "Bool_Int", 110 Type: indexes.BTree, 111 Columns: indexes.Columns("Bool", "Int"), 112 }, 113 { 114 Name: "DateTime_Timestamp", 115 Type: indexes.BTree, 116 Columns: indexes.Columns("DateTime", "Timestamp"), 117 }, 118 } 119 120 iv := table.Indexes() 121 err = iv.Create(ctx, idxs) 122 require.NoError(t, err) 123 ok, _ = table.HasIndexByName(ctx, "Bool_Int") 124 require.True(t, ok) 125 ok, _ = table.HasIndexByName(ctx, "DateTime_Timestamp") 126 require.True(t, ok) 127 err = iv.CreateIfNotExists(ctx, idxs) 128 require.NoError(t, err) 129 } 130 131 }