github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/params/variant_struct.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  	variantStruct struct {
    14  		parent *variant
    15  
    16  		fields []types.StructField
    17  		name   string
    18  		value  value.Value
    19  	}
    20  
    21  	variantStructField struct {
    22  		name   string
    23  		parent *variantStruct
    24  	}
    25  
    26  	variantStructItem struct {
    27  		parent *variantStruct
    28  	}
    29  
    30  	variantStructBuilder struct {
    31  		parent *variantStruct
    32  	}
    33  )
    34  
    35  func (vs *variantStruct) Field(name string) *variantStructField {
    36  	return &variantStructField{
    37  		name:   name,
    38  		parent: vs,
    39  	}
    40  }
    41  
    42  func (vs *variantStruct) AddFields(args ...types.StructField) *variantStruct {
    43  	vs.fields = append(vs.fields, args...)
    44  
    45  	return vs
    46  }
    47  
    48  func (vsf *variantStructField) Text() *variantStruct {
    49  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
    50  		Name: vsf.name,
    51  		T:    types.Text,
    52  	})
    53  
    54  	return vsf.parent
    55  }
    56  
    57  func (vsf *variantStructField) Bytes() *variantStruct {
    58  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
    59  		Name: vsf.name,
    60  		T:    types.Bytes,
    61  	})
    62  
    63  	return vsf.parent
    64  }
    65  
    66  func (vsf *variantStructField) Bool() *variantStruct {
    67  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
    68  		Name: vsf.name,
    69  		T:    types.Bool,
    70  	})
    71  
    72  	return vsf.parent
    73  }
    74  
    75  func (vsf *variantStructField) Uint64() *variantStruct {
    76  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
    77  		Name: vsf.name,
    78  		T:    types.Uint64,
    79  	})
    80  
    81  	return vsf.parent
    82  }
    83  
    84  func (vsf *variantStructField) Int64() *variantStruct {
    85  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
    86  		Name: vsf.name,
    87  		T:    types.Int64,
    88  	})
    89  
    90  	return vsf.parent
    91  }
    92  
    93  func (vsf *variantStructField) Uint32() *variantStruct {
    94  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
    95  		Name: vsf.name,
    96  		T:    types.Uint32,
    97  	})
    98  
    99  	return vsf.parent
   100  }
   101  
   102  func (vsf *variantStructField) Int32() *variantStruct {
   103  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   104  		Name: vsf.name,
   105  		T:    types.Int32,
   106  	})
   107  
   108  	return vsf.parent
   109  }
   110  
   111  func (vsf *variantStructField) Uint16() *variantStruct {
   112  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   113  		Name: vsf.name,
   114  		T:    types.Uint16,
   115  	})
   116  
   117  	return vsf.parent
   118  }
   119  
   120  func (vsf *variantStructField) Int16() *variantStruct {
   121  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   122  		Name: vsf.name,
   123  		T:    types.Int16,
   124  	})
   125  
   126  	return vsf.parent
   127  }
   128  
   129  func (vsf *variantStructField) Uint8() *variantStruct {
   130  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   131  		Name: vsf.name,
   132  		T:    types.Uint8,
   133  	})
   134  
   135  	return vsf.parent
   136  }
   137  
   138  func (vsf *variantStructField) Int8() *variantStruct {
   139  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   140  		Name: vsf.name,
   141  		T:    types.Int8,
   142  	})
   143  
   144  	return vsf.parent
   145  }
   146  
   147  func (vsf *variantStructField) Float() *variantStruct {
   148  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   149  		Name: vsf.name,
   150  		T:    types.Float,
   151  	})
   152  
   153  	return vsf.parent
   154  }
   155  
   156  func (vsf *variantStructField) Double() *variantStruct {
   157  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   158  		Name: vsf.name,
   159  		T:    types.Double,
   160  	})
   161  
   162  	return vsf.parent
   163  }
   164  
   165  func (vsf *variantStructField) Decimal(precision, scale uint32) *variantStruct {
   166  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   167  		Name: vsf.name,
   168  		T:    types.NewDecimal(precision, scale),
   169  	})
   170  
   171  	return vsf.parent
   172  }
   173  
   174  func (vsf *variantStructField) Timestamp() *variantStruct {
   175  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   176  		Name: vsf.name,
   177  		T:    types.Timestamp,
   178  	})
   179  
   180  	return vsf.parent
   181  }
   182  
   183  func (vsf *variantStructField) Date() *variantStruct {
   184  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   185  		Name: vsf.name,
   186  		T:    types.Date,
   187  	})
   188  
   189  	return vsf.parent
   190  }
   191  
   192  func (vsf *variantStructField) Datetime() *variantStruct {
   193  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   194  		Name: vsf.name,
   195  		T:    types.Datetime,
   196  	})
   197  
   198  	return vsf.parent
   199  }
   200  
   201  func (vsf *variantStructField) Interval() *variantStruct {
   202  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   203  		Name: vsf.name,
   204  		T:    types.Interval,
   205  	})
   206  
   207  	return vsf.parent
   208  }
   209  
   210  func (vsf *variantStructField) JSON() *variantStruct {
   211  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   212  		Name: vsf.name,
   213  		T:    types.JSON,
   214  	})
   215  
   216  	return vsf.parent
   217  }
   218  
   219  func (vsf *variantStructField) JSONDocument() *variantStruct {
   220  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   221  		Name: vsf.name,
   222  		T:    types.JSONDocument,
   223  	})
   224  
   225  	return vsf.parent
   226  }
   227  
   228  func (vsf *variantStructField) YSON() *variantStruct {
   229  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   230  		Name: vsf.name,
   231  		T:    types.YSON,
   232  	})
   233  
   234  	return vsf.parent
   235  }
   236  
   237  //// UUID has data corruption bug and will be removed in next version.
   238  ////
   239  //// Deprecated: Use Uuid (prefer) or UUIDWithIssue1501Value (for save old behavior) instead.
   240  //// https://github.com/ydb-platform/ydb-go-sdk/issues/1501
   241  //func (vsf *variantStructField) UUID() *variantStruct {
   242  //	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   243  //		Name: vsf.name,
   244  //		T:    types.UUID,
   245  //	})
   246  //
   247  //	return vsf.parent
   248  //}
   249  
   250  func (vsf *variantStructField) Uuid() *variantStruct { //nolint:revive,stylecheck
   251  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   252  		Name: vsf.name,
   253  		T:    types.UUID,
   254  	})
   255  
   256  	return vsf.parent
   257  }
   258  
   259  func (vsf *variantStructField) UUIDWithIssue1501Value() *variantStruct {
   260  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   261  		Name: vsf.name,
   262  		T:    types.UUID,
   263  	})
   264  
   265  	return vsf.parent
   266  }
   267  
   268  func (vsf *variantStructField) TzDate() *variantStruct {
   269  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   270  		Name: vsf.name,
   271  		T:    types.TzDate,
   272  	})
   273  
   274  	return vsf.parent
   275  }
   276  
   277  func (vsf *variantStructField) TzTimestamp() *variantStruct {
   278  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   279  		Name: vsf.name,
   280  		T:    types.TzTimestamp,
   281  	})
   282  
   283  	return vsf.parent
   284  }
   285  
   286  func (vsf *variantStructField) TzDatetime() *variantStruct {
   287  	vsf.parent.fields = append(vsf.parent.fields, types.StructField{
   288  		Name: vsf.name,
   289  		T:    types.TzDatetime,
   290  	})
   291  
   292  	return vsf.parent
   293  }
   294  
   295  func (vs *variantStruct) Name(name string) *variantStructItem {
   296  	vs.name = name
   297  
   298  	return &variantStructItem{
   299  		parent: vs,
   300  	}
   301  }
   302  
   303  func (vsi *variantStructItem) Text(v string) *variantStructBuilder {
   304  	vsi.parent.value = value.TextValue(v)
   305  
   306  	return &variantStructBuilder{
   307  		parent: vsi.parent,
   308  	}
   309  }
   310  
   311  func (vsi *variantStructItem) Bytes(v []byte) *variantStructBuilder {
   312  	vsi.parent.value = value.BytesValue(v)
   313  
   314  	return &variantStructBuilder{
   315  		parent: vsi.parent,
   316  	}
   317  }
   318  
   319  func (vsi *variantStructItem) Bool(v bool) *variantStructBuilder {
   320  	vsi.parent.value = value.BoolValue(v)
   321  
   322  	return &variantStructBuilder{
   323  		parent: vsi.parent,
   324  	}
   325  }
   326  
   327  func (vsi *variantStructItem) Uint64(v uint64) *variantStructBuilder {
   328  	vsi.parent.value = value.Uint64Value(v)
   329  
   330  	return &variantStructBuilder{
   331  		parent: vsi.parent,
   332  	}
   333  }
   334  
   335  func (vsi *variantStructItem) Int64(v int64) *variantStructBuilder {
   336  	vsi.parent.value = value.Int64Value(v)
   337  
   338  	return &variantStructBuilder{
   339  		parent: vsi.parent,
   340  	}
   341  }
   342  
   343  func (vsi *variantStructItem) Uint32(v uint32) *variantStructBuilder {
   344  	vsi.parent.value = value.Uint32Value(v)
   345  
   346  	return &variantStructBuilder{
   347  		parent: vsi.parent,
   348  	}
   349  }
   350  
   351  func (vsi *variantStructItem) Int32(v int32) *variantStructBuilder {
   352  	vsi.parent.value = value.Int32Value(v)
   353  
   354  	return &variantStructBuilder{
   355  		parent: vsi.parent,
   356  	}
   357  }
   358  
   359  func (vsi *variantStructItem) Uint16(v uint16) *variantStructBuilder {
   360  	vsi.parent.value = value.Uint16Value(v)
   361  
   362  	return &variantStructBuilder{
   363  		parent: vsi.parent,
   364  	}
   365  }
   366  
   367  func (vsi *variantStructItem) Int16(v int16) *variantStructBuilder {
   368  	vsi.parent.value = value.Int16Value(v)
   369  
   370  	return &variantStructBuilder{
   371  		parent: vsi.parent,
   372  	}
   373  }
   374  
   375  func (vsi *variantStructItem) Uint8(v uint8) *variantStructBuilder {
   376  	vsi.parent.value = value.Uint8Value(v)
   377  
   378  	return &variantStructBuilder{
   379  		parent: vsi.parent,
   380  	}
   381  }
   382  
   383  func (vsi *variantStructItem) Int8(v int8) *variantStructBuilder {
   384  	vsi.parent.value = value.Int8Value(v)
   385  
   386  	return &variantStructBuilder{
   387  		parent: vsi.parent,
   388  	}
   389  }
   390  
   391  func (vsi *variantStructItem) Float(v float32) *variantStructBuilder {
   392  	vsi.parent.value = value.FloatValue(v)
   393  
   394  	return &variantStructBuilder{
   395  		parent: vsi.parent,
   396  	}
   397  }
   398  
   399  func (vsi *variantStructItem) Double(v float64) *variantStructBuilder {
   400  	vsi.parent.value = value.DoubleValue(v)
   401  
   402  	return &variantStructBuilder{
   403  		parent: vsi.parent,
   404  	}
   405  }
   406  
   407  func (vsi *variantStructItem) Decimal(v [16]byte, precision, scale uint32) *variantStructBuilder {
   408  	vsi.parent.value = value.DecimalValue(v, precision, scale)
   409  
   410  	return &variantStructBuilder{
   411  		parent: vsi.parent,
   412  	}
   413  }
   414  
   415  func (vsi *variantStructItem) Timestamp(v time.Time) *variantStructBuilder {
   416  	vsi.parent.value = value.TimestampValueFromTime(v)
   417  
   418  	return &variantStructBuilder{
   419  		parent: vsi.parent,
   420  	}
   421  }
   422  
   423  func (vsi *variantStructItem) Date(v time.Time) *variantStructBuilder {
   424  	vsi.parent.value = value.DateValueFromTime(v)
   425  
   426  	return &variantStructBuilder{
   427  		parent: vsi.parent,
   428  	}
   429  }
   430  
   431  func (vsi *variantStructItem) Datetime(v time.Time) *variantStructBuilder {
   432  	vsi.parent.value = value.DatetimeValueFromTime(v)
   433  
   434  	return &variantStructBuilder{
   435  		parent: vsi.parent,
   436  	}
   437  }
   438  
   439  func (vsi *variantStructItem) Interval(v time.Duration) *variantStructBuilder {
   440  	vsi.parent.value = value.IntervalValueFromDuration(v)
   441  
   442  	return &variantStructBuilder{
   443  		parent: vsi.parent,
   444  	}
   445  }
   446  
   447  func (vsi *variantStructItem) JSON(v string) *variantStructBuilder {
   448  	vsi.parent.value = value.JSONValue(v)
   449  
   450  	return &variantStructBuilder{
   451  		parent: vsi.parent,
   452  	}
   453  }
   454  
   455  func (vsi *variantStructItem) JSONDocument(v string) *variantStructBuilder {
   456  	vsi.parent.value = value.JSONDocumentValue(v)
   457  
   458  	return &variantStructBuilder{
   459  		parent: vsi.parent,
   460  	}
   461  }
   462  
   463  func (vsi *variantStructItem) YSON(v []byte) *variantStructBuilder {
   464  	vsi.parent.value = value.YSONValue(v)
   465  
   466  	return &variantStructBuilder{
   467  		parent: vsi.parent,
   468  	}
   469  }
   470  
   471  //// UUID has data corruption bug and will be removed in next version.
   472  ////
   473  //// Deprecated: Use Uuid (prefer) or UUIDWithIssue1501Value (for save old behavior) instead.
   474  //// https://github.com/ydb-platform/ydb-go-sdk/issues/1501
   475  //func (vsi *variantStructItem) UUID(v [16]byte) *variantStructBuilder {
   476  //	vsi.parent.value = value.UUIDWithIssue1501Value(v)
   477  //
   478  //	return &variantStructBuilder{
   479  //		parent: vsi.parent,
   480  //	}
   481  //}
   482  
   483  func (vsi *variantStructItem) Uuid(v uuid.UUID) *variantStructBuilder { //nolint:revive,stylecheck
   484  	vsi.parent.value = value.Uuid(v)
   485  
   486  	return &variantStructBuilder{
   487  		parent: vsi.parent,
   488  	}
   489  }
   490  
   491  func (vsi *variantStructItem) UUIDWithIssue1501Value(v [16]byte) *variantStructBuilder {
   492  	vsi.parent.value = value.UUIDWithIssue1501Value(v)
   493  
   494  	return &variantStructBuilder{
   495  		parent: vsi.parent,
   496  	}
   497  }
   498  
   499  func (vsi *variantStructItem) TzDate(v time.Time) *variantStructBuilder {
   500  	vsi.parent.value = value.TzDateValueFromTime(v)
   501  
   502  	return &variantStructBuilder{
   503  		parent: vsi.parent,
   504  	}
   505  }
   506  
   507  func (vsi *variantStructItem) TzTimestamp(v time.Time) *variantStructBuilder {
   508  	vsi.parent.value = value.TzTimestampValueFromTime(v)
   509  
   510  	return &variantStructBuilder{
   511  		parent: vsi.parent,
   512  	}
   513  }
   514  
   515  func (vsi *variantStructItem) TzDatetime(v time.Time) *variantStructBuilder {
   516  	vsi.parent.value = value.TzDatetimeValueFromTime(v)
   517  
   518  	return &variantStructBuilder{
   519  		parent: vsi.parent,
   520  	}
   521  }
   522  
   523  func (vsb *variantStructBuilder) EndStruct() *variantBuilder {
   524  	vsb.parent.parent.value = value.VariantValueStruct(
   525  		vsb.parent.value,
   526  		vsb.parent.name,
   527  		types.NewVariantStruct(vsb.parent.fields...),
   528  	)
   529  
   530  	return &variantBuilder{
   531  		variant: vsb.parent.parent,
   532  	}
   533  }