github.com/gogf/gf@v1.16.9/database/gdb/gdb_z_mysql_union_test.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/gogf/gf.
     6  
     7  package gdb_test
     8  
     9  import (
    10  	"github.com/gogf/gf/frame/g"
    11  	"testing"
    12  
    13  	"github.com/gogf/gf/test/gtest"
    14  )
    15  
    16  func Test_Union(t *testing.T) {
    17  	table := createInitTable()
    18  	defer dropTable(table)
    19  
    20  	gtest.C(t, func(t *gtest.T) {
    21  		r, err := db.Union(
    22  			db.Model(table).Where("id", 1),
    23  			db.Model(table).Where("id", 2),
    24  			db.Model(table).WhereIn("id", g.Slice{1, 2, 3}).OrderDesc("id"),
    25  		).OrderDesc("id").All()
    26  
    27  		t.AssertNil(err)
    28  
    29  		t.Assert(len(r), 3)
    30  		t.Assert(r[0]["id"], 3)
    31  		t.Assert(r[1]["id"], 2)
    32  		t.Assert(r[2]["id"], 1)
    33  	})
    34  
    35  	gtest.C(t, func(t *gtest.T) {
    36  		r, err := db.Union(
    37  			db.Model(table).Where("id", 1),
    38  			db.Model(table).Where("id", 2),
    39  			db.Model(table).WhereIn("id", g.Slice{1, 2, 3}).OrderDesc("id"),
    40  		).OrderDesc("id").One()
    41  
    42  		t.AssertNil(err)
    43  
    44  		t.Assert(r["id"], 3)
    45  	})
    46  }
    47  
    48  func Test_UnionAll(t *testing.T) {
    49  	table := createInitTable()
    50  	defer dropTable(table)
    51  
    52  	gtest.C(t, func(t *gtest.T) {
    53  		r, err := db.UnionAll(
    54  			db.Model(table).Where("id", 1),
    55  			db.Model(table).Where("id", 2),
    56  			db.Model(table).WhereIn("id", g.Slice{1, 2, 3}).OrderDesc("id"),
    57  		).OrderDesc("id").All()
    58  
    59  		t.AssertNil(err)
    60  
    61  		t.Assert(len(r), 5)
    62  		t.Assert(r[0]["id"], 3)
    63  		t.Assert(r[1]["id"], 2)
    64  		t.Assert(r[2]["id"], 2)
    65  		t.Assert(r[3]["id"], 1)
    66  		t.Assert(r[4]["id"], 1)
    67  	})
    68  
    69  	gtest.C(t, func(t *gtest.T) {
    70  		r, err := db.UnionAll(
    71  			db.Model(table).Where("id", 1),
    72  			db.Model(table).Where("id", 2),
    73  			db.Model(table).WhereIn("id", g.Slice{1, 2, 3}).OrderDesc("id"),
    74  		).OrderDesc("id").One()
    75  
    76  		t.AssertNil(err)
    77  
    78  		t.Assert(r["id"], 3)
    79  	})
    80  }
    81  
    82  func Test_Model_Union(t *testing.T) {
    83  	table := createInitTable()
    84  	defer dropTable(table)
    85  
    86  	gtest.C(t, func(t *gtest.T) {
    87  		r, err := db.Model(table).Union(
    88  			db.Model(table).Where("id", 1),
    89  			db.Model(table).Where("id", 2),
    90  			db.Model(table).WhereIn("id", g.Slice{1, 2, 3}).OrderDesc("id"),
    91  		).OrderDesc("id").All()
    92  
    93  		t.AssertNil(err)
    94  
    95  		t.Assert(len(r), 3)
    96  		t.Assert(r[0]["id"], 3)
    97  		t.Assert(r[1]["id"], 2)
    98  		t.Assert(r[2]["id"], 1)
    99  	})
   100  
   101  	gtest.C(t, func(t *gtest.T) {
   102  		r, err := db.Model(table).Union(
   103  			db.Model(table).Where("id", 1),
   104  			db.Model(table).Where("id", 2),
   105  			db.Model(table).WhereIn("id", g.Slice{1, 2, 3}).OrderDesc("id"),
   106  		).OrderDesc("id").One()
   107  
   108  		t.AssertNil(err)
   109  
   110  		t.Assert(r["id"], 3)
   111  	})
   112  }
   113  
   114  func Test_Model_UnionAll(t *testing.T) {
   115  	table := createInitTable()
   116  	defer dropTable(table)
   117  
   118  	gtest.C(t, func(t *gtest.T) {
   119  		r, err := db.Model(table).UnionAll(
   120  			db.Model(table).Where("id", 1),
   121  			db.Model(table).Where("id", 2),
   122  			db.Model(table).WhereIn("id", g.Slice{1, 2, 3}).OrderDesc("id"),
   123  		).OrderDesc("id").All()
   124  
   125  		t.AssertNil(err)
   126  
   127  		t.Assert(len(r), 5)
   128  		t.Assert(r[0]["id"], 3)
   129  		t.Assert(r[1]["id"], 2)
   130  		t.Assert(r[2]["id"], 2)
   131  		t.Assert(r[3]["id"], 1)
   132  		t.Assert(r[4]["id"], 1)
   133  	})
   134  
   135  	gtest.C(t, func(t *gtest.T) {
   136  		r, err := db.Model(table).UnionAll(
   137  			db.Model(table).Where("id", 1),
   138  			db.Model(table).Where("id", 2),
   139  			db.Model(table).WhereIn("id", g.Slice{1, 2, 3}).OrderDesc("id"),
   140  		).OrderDesc("id").One()
   141  
   142  		t.AssertNil(err)
   143  
   144  		t.Assert(r["id"], 3)
   145  	})
   146  }