sijms / go-ora

Pure go oracle client
MIT License
771 stars 169 forks source link

Wrong result when querying large integer values #504

Closed nenadnoveljic closed 6 months ago

nenadnoveljic commented 6 months ago

Test case:

package main

import (
    "database/sql"
    "fmt"
    "log"

    go_ora "github.com/sijms/go-ora/v2"
)

const HOST = "localhost"
const PORT = 1521
const SERVICE_NAME = "XE"
const USER = "user"
const PASSWORD = "password"

func main() {
    connStr := go_ora.BuildUrl(HOST, PORT, SERVICE_NAME, USER, PASSWORD, map[string]string{})
    db, err := sql.Open("oracle", connStr)
    if err != nil {
        log.Fatalf("failed to connect %s", err)
    }
    err = db.Ping()
    if err != nil {
        log.Fatalf("failed to ping %s", err)
    }

    largeUint64 := uint64(18446744073709551615)
    var result uint64
    query := fmt.Sprintf("SELECT %d from DUAL", largeUint64)
    row := db.QueryRow(query)
    err = row.Scan(&result)
    if err != nil {
        log.Fatalf("failed to scan result %s", err)
    }

    if result != largeUint64 {
        fmt.Printf("Wrong result: %d \n", result)
    } else {
        fmt.Printf("OK \n")
    }
}

Output:

Wrong result: 9223372036854775807

The test case works well with godror.

sijms commented 6 months ago

fixed in v2.8.7