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