github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/table/types/value.go (about) 1 package types 2 3 import ( 4 "math/big" 5 "time" 6 7 "github.com/google/uuid" 8 9 "github.com/ydb-platform/ydb-go-sdk/v3/internal/decimal" 10 "github.com/ydb-platform/ydb-go-sdk/v3/internal/value" 11 "github.com/ydb-platform/ydb-go-sdk/v3/internal/xstring" 12 ) 13 14 type Value = value.Value 15 16 func BoolValue(v bool) Value { return value.BoolValue(v) } 17 18 func Int8Value(v int8) Value { return value.Int8Value(v) } 19 20 func Uint8Value(v uint8) Value { return value.Uint8Value(v) } 21 22 func Int16Value(v int16) Value { return value.Int16Value(v) } 23 24 func Uint16Value(v uint16) Value { return value.Uint16Value(v) } 25 26 func Int32Value(v int32) Value { return value.Int32Value(v) } 27 28 func Uint32Value(v uint32) Value { return value.Uint32Value(v) } 29 30 func Int64Value(v int64) Value { return value.Int64Value(v) } 31 32 func Uint64Value(v uint64) Value { return value.Uint64Value(v) } 33 34 func FloatValue(v float32) Value { return value.FloatValue(v) } 35 36 func DoubleValue(v float64) Value { return value.DoubleValue(v) } 37 38 // DateValue returns ydb date value by given days since Epoch 39 func DateValue(v uint32) Value { return value.DateValue(v) } 40 41 // DatetimeValue makes ydb datetime value from seconds since Epoch 42 func DatetimeValue(v uint32) Value { return value.DatetimeValue(v) } 43 44 // TimestampValue makes ydb timestamp value from microseconds since Epoch 45 func TimestampValue(v uint64) Value { return value.TimestampValue(v) } 46 47 // IntervalValueFromMicroseconds makes Value from given microseconds value 48 func IntervalValueFromMicroseconds(v int64) Value { return value.IntervalValue(v) } 49 50 // IntervalValue makes Value from given microseconds value 51 // 52 // Deprecated: use IntervalValueFromMicroseconds instead. 53 // Will be removed after Oct 2024. 54 // Read about versioning policy: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#deprecated 55 func IntervalValue(v int64) Value { return value.IntervalValue(v) } 56 57 // TzDateValue makes TzDate value from string 58 func TzDateValue(v string) Value { return value.TzDateValue(v) } 59 60 // TzDatetimeValue makes TzDatetime value from string 61 func TzDatetimeValue(v string) Value { return value.TzDatetimeValue(v) } 62 63 // TzTimestampValue makes TzTimestamp value from string 64 func TzTimestampValue(v string) Value { return value.TzTimestampValue(v) } 65 66 // DateValueFromTime makes Date value from time.Time 67 // 68 // Warning: all *From* helpers will be removed at next major release 69 // (functional will be implements with go1.18 type lists) 70 func DateValueFromTime(t time.Time) Value { 71 return value.DateValueFromTime(t) 72 } 73 74 // DatetimeValueFromTime makes Datetime value from time.Time 75 // 76 // Warning: all *From* helpers will be removed at next major release 77 // (functional will be implements with go1.18 type lists) 78 func DatetimeValueFromTime(t time.Time) Value { 79 return value.DatetimeValueFromTime(t) 80 } 81 82 // TimestampValueFromTime makes Timestamp value from time.Time 83 // 84 // Warning: all *From* helpers will be removed at next major release 85 // (functional will be implements with go1.18 type lists) 86 func TimestampValueFromTime(t time.Time) Value { 87 return value.TimestampValueFromTime(t) 88 } 89 90 // IntervalValueFromDuration makes Interval value from time.Duration 91 // 92 // Warning: all *From* helpers will be removed at next major release 93 // (functional will be implements with go1.18 type lists) 94 func IntervalValueFromDuration(v time.Duration) Value { 95 return value.IntervalValueFromDuration(v) 96 } 97 98 // TzDateValueFromTime makes TzDate value from time.Time 99 // 100 // Warning: all *From* helpers will be removed at next major release 101 // (functional will be implements with go1.18 type lists) 102 func TzDateValueFromTime(t time.Time) Value { 103 return value.TzDateValueFromTime(t) 104 } 105 106 // TzDatetimeValueFromTime makes TzDatetime value from time.Time 107 // 108 // Warning: all *From* helpers will be removed at next major release 109 // (functional will be implements with go1.18 type lists) 110 func TzDatetimeValueFromTime(t time.Time) Value { 111 return value.TzDatetimeValueFromTime(t) 112 } 113 114 // TzTimestampValueFromTime makes TzTimestamp value from time.Time 115 // 116 // Warning: all *From* helpers will be removed at next major release 117 // (functional will be implements with go1.18 type lists) 118 func TzTimestampValueFromTime(t time.Time) Value { 119 return value.TzTimestampValueFromTime(t) 120 } 121 122 // StringValue returns bytes value 123 // 124 // Deprecated: use BytesValue instead. 125 // Will be removed after Oct 2024. 126 // Read about versioning policy: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#deprecated 127 func StringValue(v []byte) Value { return value.BytesValue(v) } 128 129 func BytesValue(v []byte) Value { return value.BytesValue(v) } 130 131 func BytesValueFromString(v string) Value { return value.BytesValue(xstring.ToBytes(v)) } 132 133 // StringValueFromString makes String value from string 134 // 135 // Warning: all *From* helpers will be removed at next major release 136 // (functional will be implements with go1.18 type lists) 137 func StringValueFromString(v string) Value { return value.BytesValue(xstring.ToBytes(v)) } 138 139 func UTF8Value(v string) Value { return value.TextValue(v) } 140 141 func TextValue(v string) Value { return value.TextValue(v) } 142 143 func YSONValue(v string) Value { return value.YSONValue(xstring.ToBytes(v)) } 144 145 // YSONValueFromBytes makes YSON value from bytes 146 // 147 // Warning: all *From* helpers will be removed at next major release 148 // (functional will be implements with go1.18 type lists) 149 func YSONValueFromBytes(v []byte) Value { return value.YSONValue(v) } 150 151 func JSONValue(v string) Value { return value.JSONValue(v) } 152 153 // JSONValueFromBytes makes JSON value from bytes 154 // 155 // Warning: all *From* helpers will be removed at next major release 156 // (functional will be implements with go1.18 type lists) 157 func JSONValueFromBytes(v []byte) Value { return value.JSONValue(xstring.FromBytes(v)) } 158 159 // removed for https://github.com/ydb-platform/ydb-go-sdk/issues/1501 160 // func UUIDValue(v [16]byte) Value { return UUIDWithIssue1501Value(v) } 161 162 // UUIDBytesWithIssue1501Type is type wrapper for scan expected values for values stored with bug 163 // https://github.com/ydb-platform/ydb-go-sdk/issues/1501 164 type UUIDBytesWithIssue1501Type = value.UUIDIssue1501FixedBytesWrapper 165 166 func NewUUIDBytesWithIssue1501(val [16]byte) UUIDBytesWithIssue1501Type { 167 return value.NewUUIDIssue1501FixedBytesWrapper(val) 168 } 169 170 // UUIDWithIssue1501Value is function for save uuid with old corrupted data format for save old behavior 171 // https://github.com/ydb-platform/ydb-go-sdk/issues/1501 172 // 173 // Use UuidValue for all new code 174 func UUIDWithIssue1501Value(v [16]byte) Value { 175 return value.UUIDWithIssue1501Value(v) 176 } 177 178 func UuidValue(v uuid.UUID) Value { //nolint:revive,stylecheck 179 return value.Uuid(v) 180 } 181 182 func JSONDocumentValue(v string) Value { return value.JSONDocumentValue(v) } 183 184 // JSONDocumentValueFromBytes makes JSONDocument value from bytes 185 // 186 // Warning: all *From* helpers will be removed at next major release 187 // (functional will be implements with go1.18 type lists) 188 func JSONDocumentValueFromBytes(v []byte) Value { 189 return value.JSONDocumentValue(xstring.FromBytes(v)) 190 } 191 192 func DyNumberValue(v string) Value { return value.DyNumberValue(v) } 193 194 func VoidValue() Value { return value.VoidValue() } 195 196 func NullValue(t Type) Value { return value.NullValue(t) } 197 198 func ZeroValue(t Type) Value { return value.ZeroValue(t) } 199 200 func OptionalValue(v Value) Value { return value.OptionalValue(v) } 201 202 // Decimal supported in scanner API 203 type Decimal = decimal.Decimal 204 205 // DecimalValue creates decimal value of given types t and value v. 206 // Note that Decimal.Bytes interpreted as big-endian int128. 207 func DecimalValue(v *Decimal) Value { 208 return value.DecimalValue(v.Bytes, v.Precision, v.Scale) 209 } 210 211 func DecimalValueFromBigInt(v *big.Int, precision, scale uint32) Value { 212 return value.DecimalValueFromBigInt(v, precision, scale) 213 } 214 215 func DecimalValueFromString(str string, precision, scale uint32) (Value, error) { 216 return value.DecimalValueFromString(str, precision, scale) 217 } 218 219 func TupleValue(vs ...Value) Value { 220 return value.TupleValue(vs...) 221 } 222 223 func ListValue(vs ...Value) Value { 224 return value.ListValue(vs...) 225 } 226 227 func SetValue(vs ...Value) Value { 228 return value.SetValue(vs...) 229 } 230 231 type structValueFields struct { 232 fields []value.StructValueField 233 } 234 235 type StructValueOption func(*structValueFields) 236 237 func StructFieldValue(name string, v Value) StructValueOption { 238 return func(t *structValueFields) { 239 t.fields = append(t.fields, value.StructValueField{Name: name, V: v}) 240 } 241 } 242 243 func StructValue(opts ...StructValueOption) Value { 244 var p structValueFields 245 for _, opt := range opts { 246 if opt != nil { 247 opt(&p) 248 } 249 } 250 251 return value.StructValue(p.fields...) 252 } 253 254 type dictValueFields struct { 255 fields []value.DictValueField 256 } 257 258 type DictValueOption func(*dictValueFields) 259 260 func DictFieldValue(k, v Value) DictValueOption { 261 return func(t *dictValueFields) { 262 t.fields = append(t.fields, value.DictValueField{K: k, V: v}) 263 } 264 } 265 266 func DictValue(opts ...DictValueOption) Value { 267 var p dictValueFields 268 for _, opt := range opts { 269 if opt != nil { 270 opt(&p) 271 } 272 } 273 274 return value.DictValue(p.fields...) 275 } 276 277 func VariantValueStruct(v Value, name string, variantT Type) Value { 278 return value.VariantValueStruct(v, name, variantT) 279 } 280 281 func VariantValueTuple(v Value, i uint32, variantT Type) Value { 282 return value.VariantValueTuple(v, i, variantT) 283 } 284 285 func NullableBoolValue(v *bool) Value { 286 return value.NullableBoolValue(v) 287 } 288 289 func NullableInt8Value(v *int8) Value { 290 return value.NullableInt8Value(v) 291 } 292 293 func NullableInt16Value(v *int16) Value { 294 return value.NullableInt16Value(v) 295 } 296 297 func NullableInt32Value(v *int32) Value { 298 return value.NullableInt32Value(v) 299 } 300 301 func NullableInt64Value(v *int64) Value { 302 return value.NullableInt64Value(v) 303 } 304 305 func NullableUint8Value(v *uint8) Value { 306 return value.NullableUint8Value(v) 307 } 308 309 func NullableUint16Value(v *uint16) Value { 310 return value.NullableUint16Value(v) 311 } 312 313 func NullableUint32Value(v *uint32) Value { 314 return value.NullableUint32Value(v) 315 } 316 317 func NullableUint64Value(v *uint64) Value { 318 return value.NullableUint64Value(v) 319 } 320 321 func NullableFloatValue(v *float32) Value { 322 return value.NullableFloatValue(v) 323 } 324 325 func NullableDoubleValue(v *float64) Value { 326 return value.NullableDoubleValue(v) 327 } 328 329 func NullableDateValue(v *uint32) Value { 330 return value.NullableDateValue(v) 331 } 332 333 func NullableDateValueFromTime(v *time.Time) Value { 334 return value.NullableDateValueFromTime(v) 335 } 336 337 func NullableDecimalValue(v *[16]byte, precision, scale uint32) Value { 338 return value.NullableDecimalValue(v, precision, scale) 339 } 340 341 func NullableDecimalValueFromBigInt(v *big.Int, precision, scale uint32) Value { 342 return value.NullableDecimalValueFromBigInt(v, precision, scale) 343 } 344 345 func NullableDatetimeValue(v *uint32) Value { 346 return value.NullableDatetimeValue(v) 347 } 348 349 func NullableDatetimeValueFromTime(v *time.Time) Value { 350 return value.NullableDatetimeValueFromTime(v) 351 } 352 353 func NullableTzDateValue(v *string) Value { 354 return value.NullableTzDateValue(v) 355 } 356 357 func NullableTzDateValueFromTime(v *time.Time) Value { 358 return value.NullableTzDateValueFromTime(v) 359 } 360 361 func NullableTzDatetimeValue(v *string) Value { 362 return value.NullableTzDatetimeValue(v) 363 } 364 365 func NullableTzDatetimeValueFromTime(v *time.Time) Value { 366 return value.NullableTzDatetimeValueFromTime(v) 367 } 368 369 func NullableTimestampValue(v *uint64) Value { 370 return value.NullableTimestampValue(v) 371 } 372 373 func NullableTimestampValueFromTime(v *time.Time) Value { 374 return value.NullableTimestampValueFromTime(v) 375 } 376 377 func NullableTzTimestampValue(v *string) Value { 378 return value.NullableTzTimestampValue(v) 379 } 380 381 func NullableTzTimestampValueFromTime(v *time.Time) Value { 382 return value.NullableTzTimestampValueFromTime(v) 383 } 384 385 // NullableIntervalValue makes Value which maybe nil or valued 386 // 387 // Deprecated: use NullableIntervalValueFromMicroseconds instead. 388 // Will be removed after Oct 2024. 389 // Read about versioning policy: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#deprecated 390 func NullableIntervalValue(v *int64) Value { 391 return value.NullableIntervalValueFromMicroseconds(v) 392 } 393 394 func NullableIntervalValueFromMicroseconds(v *int64) Value { 395 return value.NullableIntervalValueFromMicroseconds(v) 396 } 397 398 func NullableIntervalValueFromDuration(v *time.Duration) Value { 399 return value.NullableIntervalValueFromDuration(v) 400 } 401 402 // NullableStringValue 403 // 404 // Deprecated: use NullableBytesValue instead. 405 // Will be removed after Oct 2024. 406 // Read about versioning policy: https://github.com/ydb-platform/ydb-go-sdk/blob/master/VERSIONING.md#deprecated 407 func NullableStringValue(v *[]byte) Value { 408 return value.NullableBytesValue(v) 409 } 410 411 func NullableBytesValue(v *[]byte) Value { 412 return value.NullableBytesValue(v) 413 } 414 415 func NullableStringValueFromString(v *string) Value { 416 return value.NullableBytesValueFromString(v) 417 } 418 419 func NullableBytesValueFromString(v *string) Value { 420 return value.NullableBytesValueFromString(v) 421 } 422 423 func NullableUTF8Value(v *string) Value { 424 return value.NullableTextValue(v) 425 } 426 427 func NullableTextValue(v *string) Value { 428 return value.NullableTextValue(v) 429 } 430 431 func NullableYSONValue(v *string) Value { 432 return value.NullableYSONValue(v) 433 } 434 435 func NullableYSONValueFromBytes(v *[]byte) Value { 436 return value.NullableYSONValueFromBytes(v) 437 } 438 439 func NullableJSONValue(v *string) Value { 440 return value.NullableJSONValue(v) 441 } 442 443 func NullableJSONValueFromBytes(v *[]byte) Value { 444 return value.NullableJSONValueFromBytes(v) 445 } 446 447 func NullableUUIDValue(v *[16]byte) Value { 448 return value.NullableUUIDValue(v) 449 } 450 451 func NullableUUIDValueWithIssue1501(v *[16]byte) Value { 452 return value.NullableUUIDValueWithIssue1501(v) 453 } 454 455 func NullableUUIDTypedValue(v *uuid.UUID) Value { 456 return value.NullableUuidValue(v) 457 } 458 459 func NullableJSONDocumentValue(v *string) Value { 460 return value.NullableJSONDocumentValue(v) 461 } 462 463 func NullableJSONDocumentValueFromBytes(v *[]byte) Value { 464 return value.NullableJSONDocumentValueFromBytes(v) 465 } 466 467 func NullableDyNumberValue(v *string) Value { 468 return value.NullableDyNumberValue(v) 469 } 470 471 func Nullable(t Type, v interface{}) Value { 472 return value.Nullable(t, v) 473 }