github.com/RevenueMonster/sqlike@v1.0.6/sql/expr/json_test.go (about)

     1  package expr
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  
     7  	"github.com/RevenueMonster/sqlike/sqlike/primitive"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestJSON(t *testing.T) {
    12  	var (
    13  		it interface{}
    14  	)
    15  
    16  	t.Run("JSON_QUOTE", func(tst *testing.T) {
    17  		it = JSON_QUOTE("a")
    18  		require.Equal(tst, primitive.JSONFunc{
    19  			Type: primitive.JSON_QUOTE,
    20  			Args: []interface{}{
    21  				primitive.Value{Raw: "a"},
    22  			},
    23  		}, it)
    24  	})
    25  
    26  	t.Run("JSON_CONTAINS", func(tst *testing.T) {
    27  		it = JSON_CONTAINS(Column("a"), Column("b"))
    28  		require.Equal(tst, primitive.JSONFunc{
    29  			Type: primitive.JSON_CONTAINS,
    30  			Args: []interface{}{
    31  				primitive.Column{Name: "a"},
    32  				primitive.Column{Name: "b"},
    33  			},
    34  		}, it)
    35  
    36  		it = JSON_CONTAINS(`["a", "b"]`, Column("b"))
    37  		require.Equal(tst, primitive.JSONFunc{
    38  			Type: primitive.JSON_CONTAINS,
    39  			Args: []interface{}{
    40  				primitive.Value{Raw: `["a", "b"]`},
    41  				primitive.Column{Name: "b"},
    42  			},
    43  		}, it)
    44  
    45  		raw := json.RawMessage(`["A","B","C"]`)
    46  		it = JSON_CONTAINS(raw, Column("b"))
    47  		require.Equal(tst, primitive.JSONFunc{
    48  			Type: primitive.JSON_CONTAINS,
    49  			Args: []interface{}{
    50  				primitive.Value{Raw: raw},
    51  				primitive.Column{Name: "b"},
    52  			},
    53  		}, it)
    54  	})
    55  }