converters

package
v2.8.17 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 8, 2024 License: MIT Imports: 12 Imported by: 4

Documentation

Index

Constants

View Source
const (
	Infinity              = "Infinity"
	InvalidInputNumberMsg = "Invalid Input Number %s "
)

Variables

View Source
var (
	//	MAX_LEN_VARCHAR2  int = 0x7FFF
	//	MAX_LEN_NVARCHAR2     = 0x7FFF
	//	MAX_LEN_RAW           = 0x7FFF
	MAX_LEN_BOOL      = 0x2
	MAX_LEN_NUMBER    = 0x16
	MAX_LEN_DATE      = 0xB
	MAX_LEN_TIMESTAMP = 0xD
)
View Source
var (
	Int64MaxByte  = []byte{202, 10, 23, 34, 73, 4, 69, 55, 78, 59, 8}
	Int64MinByte  = []byte{53, 92, 79, 68, 29, 98, 33, 47, 24, 43, 93, 102}
	Uint64MinByte = []byte{128}
	Uint64MaxByte = []byte{202, 19, 45, 68, 45, 8, 38, 10, 56, 17, 16}
)
View Source
var TestFloatValue = []struct {
	SelectText string
	OracleText string
	Float      float64
	Integer    int64
	IsInteger  bool
	Binary     []byte
}{
	{"0", "0", 0, 0, true, []byte{128}},
	{"1", "1", 1, 1, true, []byte{193, 2}},
	{"10", "10", 10, 10, true, []byte{193, 11}},
	{"100", "100", 100, 100, true, []byte{194, 2}},
	{"1000", "1000", 1000, 1000, true, []byte{194, 11}},
	{"10000000", "10000000", 1e+07, 10000000, true, []byte{196, 11}},
	{"1E+30", "1000000000000000000000000000000", 1e+30, 0, false, []byte{208, 2}},
	{"1E+125", "1.000000000000000000000000000000000E+125", 1e+125, 0, false, []byte{255, 11}},
	{"0.1", ".1", 0.1, 0, false, []byte{192, 11}},
	{"0.01", ".01", 0.01, 0, false, []byte{192, 2}},
	{"0.001", ".001", 0.001, 0, false, []byte{191, 11}},
	{"0.0001", ".0001", 0.0001, 0, false, []byte{191, 2}},
	{"0.00001", ".00001", 1e-05, 0, false, []byte{190, 11}},
	{"0.000001", ".000001", 1e-06, 0, false, []byte{190, 2}},
	{"1E+125", "1.000000000000000000000000000000000E+125", 1e+125, 0, false, []byte{255, 11}},
	{"1E-125", "1.000000000000000000000000000000000E-125", 1e-125, 0, false, []byte{130, 11}},
	{"-1E+125", "-1.00000000000000000000000000000000E+125", -1e+125, 0, false, []byte{0, 91, 102}},
	{"-1E-125", "-1.00000000000000000000000000000000E-125", -1e-125, 0, false, []byte{125, 91, 102}},
	{"1.23456789e15", "1234567890000000", 1.23456789e+15, 1234567890000000, true, []byte{200, 13, 35, 57, 79, 91}},
	{"1.23456789e-15", ".00000000000000123456789", 1.23456789e-15, 0, false, []byte{185, 13, 35, 57, 79, 91}},
	{"1.234", "1.234", 1.234, 0, false, []byte{193, 2, 24, 41}},
	{"12.34", "12.34", 12.34, 0, false, []byte{193, 13, 35}},
	{"123.4", "123.4", 123.4, 0, false, []byte{194, 2, 24, 41}},
	{"1234", "1234", 1234, 1234, true, []byte{194, 13, 35}},
	{"12340", "12340", 12340, 12340, true, []byte{195, 2, 24, 41}},
	{"123400", "123400", 123400, 123400, true, []byte{195, 13, 35}},
	{"1234000", "1234000", 1.234e+06, 1234000, true, []byte{196, 2, 24, 41}},
	{"12340000", "12340000", 1.234e+07, 12340000, true, []byte{196, 13, 35}},
	{"0.1234", ".1234", 0.1234, 0, false, []byte{192, 13, 35}},
	{"0.01234", ".01234", 0.01234, 0, false, []byte{192, 2, 24, 41}},
	{"0.001234", ".001234", 0.001234, 0, false, []byte{191, 13, 35}},
	{"0.0001234", ".0001234", 0.0001234, 0, false, []byte{191, 2, 24, 41}},
	{"0.00001234", ".00001234", 1.234e-05, 0, false, []byte{190, 13, 35}},
	{"0.000001234", ".000001234", 1.234e-06, 0, false, []byte{190, 2, 24, 41}},
	{"-1.234", "-1.234", -1.234, 0, false, []byte{62, 100, 78, 61, 102}},
	{"-12.34", "-12.34", -12.34, 0, false, []byte{62, 89, 67, 102}},
	{"-123.4", "-123.4", -123.4, 0, false, []byte{61, 100, 78, 61, 102}},
	{"-1234", "-1234", -1234, -1234, true, []byte{61, 89, 67, 102}},
	{"-12340", "-12340", -12340, -12340, true, []byte{60, 100, 78, 61, 102}},
	{"-123400", "-123400", -123400, -123400, true, []byte{60, 89, 67, 102}},
	{"-1234000", "-1234000", -1.234e+06, -1234000, true, []byte{59, 100, 78, 61, 102}},
	{"-12340000", "-12340000", -1.234e+07, -12340000, true, []byte{59, 89, 67, 102}},
	{"-0.1234", "-.1234", -0.1234, 0, false, []byte{63, 89, 67, 102}},
	{"-1.234", "-1.234", -1.234, 0, false, []byte{62, 100, 78, 61, 102}},
	{"-12.34", "-12.34", -12.34, 0, false, []byte{62, 89, 67, 102}},
	{"-123.4", "-123.4", -123.4, 0, false, []byte{61, 100, 78, 61, 102}},
	{"-1234", "-1234", -1234, -1234, true, []byte{61, 89, 67, 102}},
	{"-12340", "-12340", -12340, -12340, true, []byte{60, 100, 78, 61, 102}},
	{"-123400", "-123400", -123400, -123400, true, []byte{60, 89, 67, 102}},
	{"-1234000", "-1234000", -1.234e+06, -1234000, true, []byte{59, 100, 78, 61, 102}},
	{"9.8765", "9.8765", 9.8765, 0, false, []byte{193, 10, 88, 66}},
	{"98.765", "98.765", 98.765, 0, false, []byte{193, 99, 77, 51}},
	{"987.65", "987.65", 987.65, 0, false, []byte{194, 10, 88, 66}},
	{"9876.5", "9876.5", 9876.5, 0, false, []byte{194, 99, 77, 51}},
	{"98765", "98765", 98765, 98765, true, []byte{195, 10, 88, 66}},
	{"987650", "987650", 987650, 987650, true, []byte{195, 99, 77, 51}},
	{"9876500", "9876500", 9.8765e+06, 9876500, true, []byte{196, 10, 88, 66}},
	{"0.98765", ".98765", 0.98765, 0, false, []byte{192, 99, 77, 51}},
	{"0.098765", ".098765", 0.098765, 0, false, []byte{192, 10, 88, 66}},
	{"0.0098765", ".0098765", 0.0098765, 0, false, []byte{191, 99, 77, 51}},
	{"0.00098765", ".00098765", 0.00098765, 0, false, []byte{191, 10, 88, 66}},
	{"0.000098765", ".000098765", 9.8765e-05, 0, false, []byte{190, 99, 77, 51}},
	{"0.0000098765", ".0000098765", 9.8765e-06, 0, false, []byte{190, 10, 88, 66}},
	{"0.00000098765", ".00000098765", 9.8765e-07, 0, false, []byte{189, 99, 77, 51}},
	{"-9.8765", "-9.8765", -9.8765, 0, false, []byte{62, 92, 14, 36, 102}},
	{"-98.765", "-98.765", -98.765, 0, false, []byte{62, 3, 25, 51, 102}},
	{"-987.65", "-987.65", -987.65, 0, false, []byte{61, 92, 14, 36, 102}},
	{"-9876.5", "-9876.5", -9876.5, 0, false, []byte{61, 3, 25, 51, 102}},
	{"-98765", "-98765", -98765, -98765, true, []byte{60, 92, 14, 36, 102}},
	{"-987650", "-987650", -987650, -987650, true, []byte{60, 3, 25, 51, 102}},
	{"-9876500", "-9876500", -9.8765e+06, -9876500, true, []byte{59, 92, 14, 36, 102}},
	{"-98765000", "-98765000", -9.8765e+07, -98765000, true, []byte{59, 3, 25, 51, 102}},
	{"-0.98765", "-.98765", -0.98765, 0, false, []byte{63, 3, 25, 51, 102}},
	{"-0.098765", "-.098765", -0.098765, 0, false, []byte{63, 92, 14, 36, 102}},
	{"-0.0098765", "-.0098765", -0.0098765, 0, false, []byte{64, 3, 25, 51, 102}},
	{"-0.00098765", "-.00098765", -0.00098765, 0, false, []byte{64, 92, 14, 36, 102}},
	{"-0.000098765", "-.000098765", -9.8765e-05, 0, false, []byte{65, 3, 25, 51, 102}},
	{"-0.0000098765", "-.0000098765", -9.8765e-06, 0, false, []byte{65, 92, 14, 36, 102}},
	{"-0.00000098765", "-.00000098765", -9.8765e-07, 0, false, []byte{66, 3, 25, 51, 102}},
	{"2*asin(1)", "3.1415926535897932384626433832795028842", 3.141592653589793, 0, false, []byte{193, 4, 15, 16, 93, 66, 36, 90, 80, 33, 39, 47, 27, 44, 39, 33, 80, 51, 29, 85, 21}},
	{"1/3", ".333333333333333333333333333333333333333", 0.3333333333333333, 0, false, []byte{192, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34}},
	{"-1/3", "-.33333333333333333333333333333333333333", -0.3333333333333333, 0, false, []byte{63, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}},
	{"9000000000000000000", "9000000000000000000", 9e+18, 9000000000000000000, true, []byte{202, 10}},
	{"-9000000000000000000", "-9000000000000000000", -9e+18, -9000000000000000000, true, []byte{53, 92, 102}},

	{"9223372036854775807", "9223372036854775807", 9.223372036854776e+18, 9223372036854775807, true, []byte{202, 10, 23, 34, 73, 4, 69, 55, 78, 59, 8}},
	{"-9223372036854775808", "-9223372036854775808", -9.223372036854776e+18, -9223372036854775808, true, []byte{53, 92, 79, 68, 29, 98, 33, 47, 24, 43, 93, 102}},
}

Functions

func BytesToString added in v2.5.14

func BytesToString(b []byte) string

func CompareBytes added in v2.5.14

func CompareBytes(byte1, byte2 []byte) int

func ConvertBinaryDouble added in v2.2.10

func ConvertBinaryDouble(bytes []byte) float64

func ConvertBinaryFloat added in v2.2.10

func ConvertBinaryFloat(bytes []byte) float64

func ConvertIntervalDS_DTY added in v2.2.10

func ConvertIntervalDS_DTY(val []byte) string

func ConvertIntervalYM_DTY added in v2.2.10

func ConvertIntervalYM_DTY(val []byte) string

func DecodeBool added in v2.7.12

func DecodeBool(data []byte) bool

func DecodeDate

func DecodeDate(data []byte) (time.Time, error)

DecodeDate convert oracle time representation into time.Time

func DecodeDouble

func DecodeDouble(inputData []byte) float64

DecodeDouble decode NUMBER as a float64 Please note limitations Oracle NUMBER can have 38 significant digits while Float64 have 51 bits. Convertion can't be perfect.

func DecodeInt

func DecodeInt(inputData []byte) int64

DecodeInt convert NUMBER to int64 Preserve all the possible bits of the mantissa when Int is between MinInt64 and MaxInt64 range

func DecodeNumber

func DecodeNumber(inputData []byte) interface{}

DecodeNumber decode the given NUMBER and return an interface{} that could be either an int64 or a float64

If the number can be represented by an integer it returns an int64 Othervise, it returns a float64

The sql.Parse will do the match with program need.

Ex When parsing a float into an int64, the driver will try to cast the float64 into the int64. If the float64 can't be represented by an int64, Parse will issue an error "invalid syntax"

func EncodeBool added in v2.7.12

func EncodeBool(val bool) []byte

BINARY_FLOAT and BINARY_DOUBLE encoding observed using SELECT dump(cast(xxx as binary_yyy) FROM dual;

func EncodeDate

func EncodeDate(ti time.Time) []byte

EncodeDate convert time.Time into oracle representation

func EncodeDouble

func EncodeDouble(num float64) ([]byte, error)

EncodeDouble convert a float64 into binary NUMBER representation

func EncodeInt

func EncodeInt(val int) []byte

EncodeInt encode a int into an oracle NUMBER internal format

func EncodeInt64

func EncodeInt64(val int64) []byte

EncodeInt64 encode an int64 into an oracle NUMBER internal format Keep all significant bits of the int64

func EncodeTimeStamp added in v2.4.1

func EncodeTimeStamp(ti time.Time, withTZ, sendAsLocalTime bool) []byte

func EncodeUint64 added in v2.7.7

func EncodeUint64(val uint64) []byte

EncodeUint64 encode an uint64 into an oracle NUMBER internal format Keep all significant bits of the uint64

func FromNumber

func FromNumber(inputData []byte) (mantissa uint64, negative bool, exponent int, mantissaDigits int, err error)

FromNumber decode Oracle binary representation of numbers and returns mantissa, negative and exponent Some documentation:

	https://gotodba.com/2015/03/24/how-are-numbers-saved-in-oracle/
 https://www.orafaq.com/wiki/Number

func MaxBytePerChar

func MaxBytePerChar(charsetID int) int

func NumberToInt64 added in v2.5.14

func NumberToInt64(data []byte) (int64, error)

func NumberToString added in v2.5.14

func NumberToString(b []byte) (string, error)

func NumberToUInt64 added in v2.5.14

func NumberToUInt64(data []byte) (uint64, error)

func ToNumber

func ToNumber(mantissa []byte, negative bool, exponent int) []byte

ToNumber encode mantissa, sign and exponent as a []byte expected by Oracle

Types

type IStringConverter

type IStringConverter interface {
	Encode(string) []byte
	Decode([]byte) string
	GetLangID() int
	Clone() IStringConverter
}

func NewStringConverter

func NewStringConverter(langID int) IStringConverter

type Number added in v2.5.14

type Number struct {
	// contains filtered or unexported fields
}

Number Convert Oracle Number Internal storage format to String Refer to oracle jdbc

func NewNumber added in v2.5.14

func NewNumber(b []byte) *Number

func (*Number) Int64 added in v2.5.14

func (num *Number) Int64() (int64, error)

func (*Number) String added in v2.5.14

func (num *Number) String() (string, error)

func (*Number) UInt64 added in v2.5.14

func (num *Number) UInt64() (uint64, error)

type StringConverter

type StringConverter struct {
	LangID    int
	CharWidth int
	// contains filtered or unexported fields
}

func (*StringConverter) Clone added in v2.7.18

func (conv *StringConverter) Clone() IStringConverter

func (*StringConverter) Decode

func (conv *StringConverter) Decode(input []byte) string

func (*StringConverter) Encode

func (conv *StringConverter) Encode(input string) []byte

func (*StringConverter) GetLangID

func (conv *StringConverter) GetLangID() int

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL