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 }