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 }