|
@@ -30,87 +30,111 @@ func (row *xuguRows) Next(dest []driver.Value) error {
|
|
|
|
|
|
coluType := row.results.Fields[j].FieldType
|
|
|
//fmt.Println(" --coluType: ", coluType, row.results.Fields[j].typeDatabaseName())
|
|
|
+ if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
+ dest[j] = nil
|
|
|
+ } else {
|
|
|
+ switch coluType {
|
|
|
+
|
|
|
+ case fieldType_BINARY,
|
|
|
+ fieldType_CLOB,
|
|
|
+ fieldType_BLOB:
|
|
|
+ fmt.Println(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
+ dest[j] = row.results.Values[j][row.results.rowIdx].Col_Data
|
|
|
+
|
|
|
+ case fieldType_INTERVAL_Y, fieldType_INTERVAL_M, fieldType_INTERVAL_D,
|
|
|
+ fieldType_INTERVAL_H, fieldType_INTERVAL_S,
|
|
|
+ fieldType_INTERVAL_MI:
|
|
|
+ dest[j] = binary.BigEndian.Uint32(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
|
|
|
- switch coluType {
|
|
|
-
|
|
|
- case fieldType_BINARY,
|
|
|
- fieldType_CLOB,
|
|
|
- fieldType_BLOB:
|
|
|
- dest[j] = row.results.Values[j][row.results.rowIdx].Col_Data
|
|
|
-
|
|
|
- case fieldType_INTERVAL_Y, fieldType_INTERVAL_M, fieldType_INTERVAL_D,
|
|
|
- fieldType_INTERVAL_H, fieldType_INTERVAL_S,
|
|
|
- fieldType_INTERVAL_MI:
|
|
|
- dest[j] = binary.BigEndian.Uint32(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
-
|
|
|
- case fieldType_TIME,
|
|
|
- fieldType_TIME_TZ, fieldType_DATE:
|
|
|
- tv, _ := time.Parse("15:04:05", string(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
- dest[j] = tv
|
|
|
-
|
|
|
- case fieldType_DATETIME,
|
|
|
- fieldType_DATETIME_TZ:
|
|
|
-
|
|
|
- if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
- dest[j] = nil
|
|
|
- } else {
|
|
|
- //timeTmp := binary.LittleEndian.Uint64(reverseBytes(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
- timeTmp := binary.BigEndian.Uint64(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
+ case fieldType_TIME,
|
|
|
+ fieldType_TIME_TZ:
|
|
|
+ timeTmp := int32(binary.BigEndian.Uint32(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
+ //tv, _ := time.Parse("2006-01-02 15:04:05", string(reverseBytes(row.results.Values[j][row.results.rowIdx].Col_Data)))
|
|
|
+ tv := time.Date(0, 1, 1, 0, 0, 0, 0, time.UTC).Add((time.Millisecond * time.Duration(timeTmp)))
|
|
|
+ utcTime := tv.UTC()
|
|
|
+ dest[j] = utcTime
|
|
|
+ case fieldType_DATE:
|
|
|
|
|
|
+ timeTmp := int32(binary.BigEndian.Uint32(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
//tv, _ := time.Parse("2006-01-02 15:04:05", string(reverseBytes(row.results.Values[j][row.results.rowIdx].Col_Data)))
|
|
|
- tv := time.Unix(0, int64(timeTmp)*1000000)
|
|
|
+ tv := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC).Add((time.Hour * 24 * time.Duration(timeTmp)))
|
|
|
utcTime := tv.UTC()
|
|
|
dest[j] = utcTime
|
|
|
- }
|
|
|
+ // fmt.Println(string(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
+ // tv, _ := time.Parse("15:04:05", string(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
+ // dest[j] = tv
|
|
|
+
|
|
|
+ case fieldType_DATETIME,
|
|
|
+ fieldType_DATETIME_TZ:
|
|
|
+
|
|
|
+ if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
+ dest[j] = nil
|
|
|
+ } else {
|
|
|
+ //timeTmp := binary.LittleEndian.Uint64(reverseBytes(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
+ timeTmp := binary.BigEndian.Uint64(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
+ //tv, _ := time.Parse("2006-01-02 15:04:05", string(reverseBytes(row.results.Values[j][row.results.rowIdx].Col_Data)))
|
|
|
+ tv := time.Unix(0, int64(timeTmp)*1000000)
|
|
|
+ utcTime := tv.UTC()
|
|
|
+ dest[j] = utcTime
|
|
|
+ }
|
|
|
+
|
|
|
+ case fieldType_R4:
|
|
|
+ if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
+ dest[j] = nil
|
|
|
+ } else {
|
|
|
+ dest[j] = math.Float32frombits(binary.BigEndian.Uint32(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
+ }
|
|
|
+
|
|
|
+ case fieldType_R8:
|
|
|
+ if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
+ dest[j] = nil
|
|
|
+ } else {
|
|
|
+ dest[j] = math.Float64frombits(binary.BigEndian.Uint64(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
+ }
|
|
|
+ case fieldType_NUM:
|
|
|
+ dest[j] = row.results.Values[j][row.results.rowIdx].Col_Data
|
|
|
+ case fieldType_I1:
|
|
|
+ if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
+ dest[j] = nil
|
|
|
+ } else {
|
|
|
+ dest[j] = int8(row.results.Values[j][row.results.rowIdx].Col_Data[0])
|
|
|
+ }
|
|
|
+ case fieldType_I2:
|
|
|
+ if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
+ dest[j] = nil
|
|
|
+ } else {
|
|
|
+ dest[j] = int16(binary.BigEndian.Uint16(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
+ }
|
|
|
+ case fieldType_I4:
|
|
|
+ if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
+ dest[j] = nil
|
|
|
+ } else {
|
|
|
+ dest[j] = int32(binary.BigEndian.Uint32(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
+ }
|
|
|
+ case fieldType_I8:
|
|
|
+ if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
+ dest[j] = nil
|
|
|
+ } else {
|
|
|
+ dest[j] = int64(binary.BigEndian.Uint64(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
+ //dest[j] = row.results.Values[j][row.results.rowIdx].Col_Data
|
|
|
+ }
|
|
|
+ case fieldType_CHAR, fieldType_NCHAR:
|
|
|
+ if row.results.Values[j][row.results.rowIdx].Col_Data == nil {
|
|
|
+ dest[j] = string("")
|
|
|
+ } else if row.results.Values[j][row.results.rowIdx].Col_Data[0] == 0x00 {
|
|
|
+ dest[j] = string("")
|
|
|
+ } else {
|
|
|
+ dest[j] = string(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
+ }
|
|
|
+ default:
|
|
|
+
|
|
|
+ //填入一行的数据
|
|
|
+ //TODO这里长度改为一行长度
|
|
|
+ dest[j] = make([]byte, len(row.results.Values))
|
|
|
+ // Values[字段][0]
|
|
|
+ dest[j] = row.results.Values[j][row.results.rowIdx].Col_Data
|
|
|
|
|
|
- case fieldType_R4:
|
|
|
- dest[j] = math.Float32frombits(binary.BigEndian.Uint32(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
- case fieldType_R8:
|
|
|
-
|
|
|
- dest[j] = math.Float64frombits(binary.BigEndian.Uint64(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
- case fieldType_NUM:
|
|
|
- dest[j] = row.results.Values[j][row.results.rowIdx].Col_Data
|
|
|
- case fieldType_I1:
|
|
|
- if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
- dest[j] = nil
|
|
|
- } else {
|
|
|
- dest[j] = int8(row.results.Values[j][row.results.rowIdx].Col_Data[0])
|
|
|
- }
|
|
|
- case fieldType_I2:
|
|
|
- if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
- dest[j] = nil
|
|
|
- } else {
|
|
|
- dest[j] = int16(binary.BigEndian.Uint16(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
- }
|
|
|
- case fieldType_I4:
|
|
|
- if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
- dest[j] = nil
|
|
|
- } else {
|
|
|
- dest[j] = binary.BigEndian.Uint32(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
}
|
|
|
- case fieldType_I8:
|
|
|
- if len(row.results.Values[j][row.results.rowIdx].Col_Data) == 0 {
|
|
|
- dest[j] = nil
|
|
|
- } else {
|
|
|
- dest[j] = int64(binary.BigEndian.Uint64(row.results.Values[j][row.results.rowIdx].Col_Data))
|
|
|
- //dest[j] = row.results.Values[j][row.results.rowIdx].Col_Data
|
|
|
- }
|
|
|
- case fieldType_CHAR, fieldType_NCHAR:
|
|
|
- if row.results.Values[j][row.results.rowIdx].Col_Data == nil {
|
|
|
- dest[j] = string("")
|
|
|
- } else if row.results.Values[j][row.results.rowIdx].Col_Data[0] == 0x00 {
|
|
|
- dest[j] = string("")
|
|
|
- } else {
|
|
|
- dest[j] = string(row.results.Values[j][row.results.rowIdx].Col_Data)
|
|
|
- }
|
|
|
- default:
|
|
|
-
|
|
|
- //填入一行的数据
|
|
|
- //TODO这里长度改为一行长度
|
|
|
- dest[j] = make([]byte, len(row.results.Values))
|
|
|
- // Values[字段][0]
|
|
|
- dest[j] = row.results.Values[j][row.results.rowIdx].Col_Data
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
row.results.rowIdx++
|