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 }