github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/params/variant_tuple.go (about)

     1  package params
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/google/uuid"
     7  
     8  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/types"
     9  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/value"
    10  )
    11  
    12  type (
    13  	variantTuple struct {
    14  		parent *variant
    15  
    16  		types []types.Type
    17  		index uint32
    18  		value value.Value
    19  	}
    20  
    21  	variantTupleTypes struct {
    22  		tuple *variantTuple
    23  	}
    24  
    25  	variantTupleItem struct {
    26  		tuple *variantTuple
    27  	}
    28  
    29  	variantTupleBuilder struct {
    30  		tuple *variantTuple
    31  	}
    32  )
    33  
    34  func (vt *variantTuple) Types() *variantTupleTypes {
    35  	return &variantTupleTypes{
    36  		tuple: vt,
    37  	}
    38  }
    39  
    40  func (vtt *variantTupleTypes) AddTypes(args ...types.Type) *variantTupleTypes {
    41  	vtt.tuple.types = append(vtt.tuple.types, args...)
    42  
    43  	return vtt
    44  }
    45  
    46  func (vtt *variantTupleTypes) Text() *variantTupleTypes {
    47  	vtt.tuple.types = append(vtt.tuple.types, types.Text)
    48  
    49  	return vtt
    50  }
    51  
    52  func (vtt *variantTupleTypes) Bytes() *variantTupleTypes {
    53  	vtt.tuple.types = append(vtt.tuple.types, types.Bytes)
    54  
    55  	return vtt
    56  }
    57  
    58  func (vtt *variantTupleTypes) Bool() *variantTupleTypes {
    59  	vtt.tuple.types = append(vtt.tuple.types, types.Bool)
    60  
    61  	return vtt
    62  }
    63  
    64  func (vtt *variantTupleTypes) Uint64() *variantTupleTypes {
    65  	vtt.tuple.types = append(vtt.tuple.types, types.Uint64)
    66  
    67  	return vtt
    68  }
    69  
    70  func (vtt *variantTupleTypes) Int64() *variantTupleTypes {
    71  	vtt.tuple.types = append(vtt.tuple.types, types.Int64)
    72  
    73  	return vtt
    74  }
    75  
    76  func (vtt *variantTupleTypes) Uint32() *variantTupleTypes {
    77  	vtt.tuple.types = append(vtt.tuple.types, types.Uint32)
    78  
    79  	return vtt
    80  }
    81  
    82  func (vtt *variantTupleTypes) Int32() *variantTupleTypes {
    83  	vtt.tuple.types = append(vtt.tuple.types, types.Int32)
    84  
    85  	return vtt
    86  }
    87  
    88  func (vtt *variantTupleTypes) Uint16() *variantTupleTypes {
    89  	vtt.tuple.types = append(vtt.tuple.types, types.Uint16)
    90  
    91  	return vtt
    92  }
    93  
    94  func (vtt *variantTupleTypes) Int16() *variantTupleTypes {
    95  	vtt.tuple.types = append(vtt.tuple.types, types.Int16)
    96  
    97  	return vtt
    98  }
    99  
   100  func (vtt *variantTupleTypes) Uint8() *variantTupleTypes {
   101  	vtt.tuple.types = append(vtt.tuple.types, types.Uint8)
   102  
   103  	return vtt
   104  }
   105  
   106  func (vtt *variantTupleTypes) Int8() *variantTupleTypes {
   107  	vtt.tuple.types = append(vtt.tuple.types, types.Int8)
   108  
   109  	return vtt
   110  }
   111  
   112  func (vtt *variantTupleTypes) Float() *variantTupleTypes {
   113  	vtt.tuple.types = append(vtt.tuple.types, types.Float)
   114  
   115  	return vtt
   116  }
   117  
   118  func (vtt *variantTupleTypes) Double() *variantTupleTypes {
   119  	vtt.tuple.types = append(vtt.tuple.types, types.Double)
   120  
   121  	return vtt
   122  }
   123  
   124  func (vtt *variantTupleTypes) Decimal(precision, scale uint32) *variantTupleTypes {
   125  	vtt.tuple.types = append(vtt.tuple.types, types.NewDecimal(precision, scale))
   126  
   127  	return vtt
   128  }
   129  
   130  func (vtt *variantTupleTypes) Timestamp() *variantTupleTypes {
   131  	vtt.tuple.types = append(vtt.tuple.types, types.Timestamp)
   132  
   133  	return vtt
   134  }
   135  
   136  func (vtt *variantTupleTypes) Date() *variantTupleTypes {
   137  	vtt.tuple.types = append(vtt.tuple.types, types.Date)
   138  
   139  	return vtt
   140  }
   141  
   142  func (vtt *variantTupleTypes) Datetime() *variantTupleTypes {
   143  	vtt.tuple.types = append(vtt.tuple.types, types.Datetime)
   144  
   145  	return vtt
   146  }
   147  
   148  func (vtt *variantTupleTypes) Interval() *variantTupleTypes {
   149  	vtt.tuple.types = append(vtt.tuple.types, types.Interval)
   150  
   151  	return vtt
   152  }
   153  
   154  func (vtt *variantTupleTypes) JSON() *variantTupleTypes {
   155  	vtt.tuple.types = append(vtt.tuple.types, types.JSON)
   156  
   157  	return vtt
   158  }
   159  
   160  func (vtt *variantTupleTypes) JSONDocument() *variantTupleTypes {
   161  	vtt.tuple.types = append(vtt.tuple.types, types.JSONDocument)
   162  
   163  	return vtt
   164  }
   165  
   166  func (vtt *variantTupleTypes) YSON() *variantTupleTypes {
   167  	vtt.tuple.types = append(vtt.tuple.types, types.YSON)
   168  
   169  	return vtt
   170  }
   171  
   172  //// UUID has data corruption bug and will be removed in next version.
   173  ////
   174  //// Deprecated: Use Uuid (prefer) or UUIDWithIssue1501Value (for save old behavior) instead.
   175  //// https://github.com/ydb-platform/ydb-go-sdk/issues/1501
   176  //func (vtt *variantTupleTypes) UUID() *variantTupleTypes {
   177  //	vtt.tuple.types = append(vtt.tuple.types, types.UUID)
   178  //
   179  //	return vtt
   180  //}
   181  
   182  func (vtt *variantTupleTypes) Uuid() *variantTupleTypes { //nolint:revive,stylecheck
   183  	vtt.tuple.types = append(vtt.tuple.types, types.UUID)
   184  
   185  	return vtt
   186  }
   187  
   188  func (vtt *variantTupleTypes) UUIDWithIssue1501Value() *variantTupleTypes {
   189  	vtt.tuple.types = append(vtt.tuple.types, types.UUID)
   190  
   191  	return vtt
   192  }
   193  
   194  func (vtt *variantTupleTypes) TzDate() *variantTupleTypes {
   195  	vtt.tuple.types = append(vtt.tuple.types, types.TzDate)
   196  
   197  	return vtt
   198  }
   199  
   200  func (vtt *variantTupleTypes) TzTimestamp() *variantTupleTypes {
   201  	vtt.tuple.types = append(vtt.tuple.types, types.TzTimestamp)
   202  
   203  	return vtt
   204  }
   205  
   206  func (vtt *variantTupleTypes) TzDatetime() *variantTupleTypes {
   207  	vtt.tuple.types = append(vtt.tuple.types, types.TzDatetime)
   208  
   209  	return vtt
   210  }
   211  
   212  func (vtt *variantTupleTypes) Index(i uint32) *variantTupleItem {
   213  	vtt.tuple.index = i
   214  
   215  	return &variantTupleItem{
   216  		tuple: vtt.tuple,
   217  	}
   218  }
   219  
   220  func (vti *variantTupleItem) Text(v string) *variantTupleBuilder {
   221  	vti.tuple.value = value.TextValue(v)
   222  
   223  	return &variantTupleBuilder{
   224  		tuple: vti.tuple,
   225  	}
   226  }
   227  
   228  func (vti *variantTupleItem) Bytes(v []byte) *variantTupleBuilder {
   229  	vti.tuple.value = value.BytesValue(v)
   230  
   231  	return &variantTupleBuilder{
   232  		tuple: vti.tuple,
   233  	}
   234  }
   235  
   236  func (vti *variantTupleItem) Bool(v bool) *variantTupleBuilder {
   237  	vti.tuple.value = value.BoolValue(v)
   238  
   239  	return &variantTupleBuilder{
   240  		tuple: vti.tuple,
   241  	}
   242  }
   243  
   244  func (vti *variantTupleItem) Uint64(v uint64) *variantTupleBuilder {
   245  	vti.tuple.value = value.Uint64Value(v)
   246  
   247  	return &variantTupleBuilder{
   248  		tuple: vti.tuple,
   249  	}
   250  }
   251  
   252  func (vti *variantTupleItem) Int64(v int64) *variantTupleBuilder {
   253  	vti.tuple.value = value.Int64Value(v)
   254  
   255  	return &variantTupleBuilder{
   256  		tuple: vti.tuple,
   257  	}
   258  }
   259  
   260  func (vti *variantTupleItem) Uint32(v uint32) *variantTupleBuilder {
   261  	vti.tuple.value = value.Uint32Value(v)
   262  
   263  	return &variantTupleBuilder{
   264  		tuple: vti.tuple,
   265  	}
   266  }
   267  
   268  func (vti *variantTupleItem) Int32(v int32) *variantTupleBuilder {
   269  	vti.tuple.value = value.Int32Value(v)
   270  
   271  	return &variantTupleBuilder{
   272  		tuple: vti.tuple,
   273  	}
   274  }
   275  
   276  func (vti *variantTupleItem) Uint16(v uint16) *variantTupleBuilder {
   277  	vti.tuple.value = value.Uint16Value(v)
   278  
   279  	return &variantTupleBuilder{
   280  		tuple: vti.tuple,
   281  	}
   282  }
   283  
   284  func (vti *variantTupleItem) Int16(v int16) *variantTupleBuilder {
   285  	vti.tuple.value = value.Int16Value(v)
   286  
   287  	return &variantTupleBuilder{
   288  		tuple: vti.tuple,
   289  	}
   290  }
   291  
   292  func (vti *variantTupleItem) Uint8(v uint8) *variantTupleBuilder {
   293  	vti.tuple.value = value.Uint8Value(v)
   294  
   295  	return &variantTupleBuilder{
   296  		tuple: vti.tuple,
   297  	}
   298  }
   299  
   300  func (vti *variantTupleItem) Int8(v int8) *variantTupleBuilder {
   301  	vti.tuple.value = value.Int8Value(v)
   302  
   303  	return &variantTupleBuilder{
   304  		tuple: vti.tuple,
   305  	}
   306  }
   307  
   308  func (vti *variantTupleItem) Float(v float32) *variantTupleBuilder {
   309  	vti.tuple.value = value.FloatValue(v)
   310  
   311  	return &variantTupleBuilder{
   312  		tuple: vti.tuple,
   313  	}
   314  }
   315  
   316  func (vti *variantTupleItem) Double(v float64) *variantTupleBuilder {
   317  	vti.tuple.value = value.DoubleValue(v)
   318  
   319  	return &variantTupleBuilder{
   320  		tuple: vti.tuple,
   321  	}
   322  }
   323  
   324  func (vti *variantTupleItem) Decimal(v [16]byte, precision, scale uint32) *variantTupleBuilder {
   325  	vti.tuple.value = value.DecimalValue(v, precision, scale)
   326  
   327  	return &variantTupleBuilder{
   328  		tuple: vti.tuple,
   329  	}
   330  }
   331  
   332  func (vti *variantTupleItem) Timestamp(v time.Time) *variantTupleBuilder {
   333  	vti.tuple.value = value.TimestampValueFromTime(v)
   334  
   335  	return &variantTupleBuilder{
   336  		tuple: vti.tuple,
   337  	}
   338  }
   339  
   340  func (vti *variantTupleItem) Date(v time.Time) *variantTupleBuilder {
   341  	vti.tuple.value = value.DateValueFromTime(v)
   342  
   343  	return &variantTupleBuilder{
   344  		tuple: vti.tuple,
   345  	}
   346  }
   347  
   348  func (vti *variantTupleItem) Datetime(v time.Time) *variantTupleBuilder {
   349  	vti.tuple.value = value.DatetimeValueFromTime(v)
   350  
   351  	return &variantTupleBuilder{
   352  		tuple: vti.tuple,
   353  	}
   354  }
   355  
   356  func (vti *variantTupleItem) Interval(v time.Duration) *variantTupleBuilder {
   357  	vti.tuple.value = value.IntervalValueFromDuration(v)
   358  
   359  	return &variantTupleBuilder{
   360  		tuple: vti.tuple,
   361  	}
   362  }
   363  
   364  func (vti *variantTupleItem) JSON(v string) *variantTupleBuilder {
   365  	vti.tuple.value = value.JSONValue(v)
   366  
   367  	return &variantTupleBuilder{
   368  		tuple: vti.tuple,
   369  	}
   370  }
   371  
   372  func (vti *variantTupleItem) JSONDocument(v string) *variantTupleBuilder {
   373  	vti.tuple.value = value.JSONDocumentValue(v)
   374  
   375  	return &variantTupleBuilder{
   376  		tuple: vti.tuple,
   377  	}
   378  }
   379  
   380  func (vti *variantTupleItem) YSON(v []byte) *variantTupleBuilder {
   381  	vti.tuple.value = value.YSONValue(v)
   382  
   383  	return &variantTupleBuilder{
   384  		tuple: vti.tuple,
   385  	}
   386  }
   387  
   388  //// UUID has data corruption bug and will be removed in next version.
   389  ////
   390  //// Deprecated: Use Uuid (prefer) or UUIDWithIssue1501Value (for save old behavior) instead.
   391  //// https://github.com/ydb-platform/ydb-go-sdk/issues/1501
   392  //func (vti *variantTupleItem) UUID(v [16]byte) *variantTupleBuilder {
   393  //	vti.tuple.value = value.UUIDWithIssue1501Value(v)
   394  //
   395  //	return &variantTupleBuilder{
   396  //		tuple: vti.tuple,
   397  //	}
   398  //}
   399  
   400  func (vti *variantTupleItem) Uuid(v uuid.UUID) *variantTupleBuilder { //nolint:revive,stylecheck
   401  	vti.tuple.value = value.Uuid(v)
   402  
   403  	return &variantTupleBuilder{
   404  		tuple: vti.tuple,
   405  	}
   406  }
   407  
   408  func (vti *variantTupleItem) UUIDWithIssue1501Value(v [16]byte) *variantTupleBuilder {
   409  	vti.tuple.value = value.UUIDWithIssue1501Value(v)
   410  
   411  	return &variantTupleBuilder{
   412  		tuple: vti.tuple,
   413  	}
   414  }
   415  
   416  func (vti *variantTupleItem) TzDate(v time.Time) *variantTupleBuilder {
   417  	vti.tuple.value = value.TzDateValueFromTime(v)
   418  
   419  	return &variantTupleBuilder{
   420  		tuple: vti.tuple,
   421  	}
   422  }
   423  
   424  func (vti *variantTupleItem) TzTimestamp(v time.Time) *variantTupleBuilder {
   425  	vti.tuple.value = value.TzTimestampValueFromTime(v)
   426  
   427  	return &variantTupleBuilder{
   428  		tuple: vti.tuple,
   429  	}
   430  }
   431  
   432  func (vti *variantTupleItem) TzDatetime(v time.Time) *variantTupleBuilder {
   433  	vti.tuple.value = value.TzDatetimeValueFromTime(v)
   434  
   435  	return &variantTupleBuilder{
   436  		tuple: vti.tuple,
   437  	}
   438  }
   439  
   440  func (vtb *variantTupleBuilder) EndTuple() *variantBuilder {
   441  	vtb.tuple.parent.value = value.VariantValueTuple(
   442  		vtb.tuple.value,
   443  		vtb.tuple.index,
   444  		types.NewVariantTuple(vtb.tuple.types...),
   445  	)
   446  
   447  	return &variantBuilder{
   448  		variant: vtb.tuple.parent,
   449  	}
   450  }