Skip to content

Commit

Permalink
Merge pull request #382 from MichaelS11/ociBreak
Browse files Browse the repository at this point in the history
Fixed unwanted ociBreak call when cancel called before rows close
  • Loading branch information
mattn authored Mar 24, 2020
2 parents 8b842f2 + e7d5303 commit d01a807
Show file tree
Hide file tree
Showing 9 changed files with 171 additions and 43 deletions.
52 changes: 32 additions & 20 deletions example_sql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func Example_sqlSelect() {
return
}

oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Llongfile)
oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)

var openString string
// [username/[password]@]host[:port][/service_name][?param1=value1&...&paramN=valueN]
Expand Down Expand Up @@ -70,6 +70,15 @@ func Example_sqlSelect() {
fmt.Println("QueryContext error is not nil:", err)
return
}

// defer close rows
defer func() {
err = rows.Close()
if err != nil {
fmt.Println("Close error is not nil:", err)
}
}()

if !rows.Next() {
fmt.Println("no Next rows")
return
Expand Down Expand Up @@ -108,11 +117,6 @@ func Example_sqlSelect() {
fmt.Println("Err error is not nil:", err)
return
}
err = rows.Close()
if err != nil {
fmt.Println("Close error is not nil:", err)
return
}

fmt.Println(data)

Expand All @@ -128,7 +132,7 @@ func Example_sqlFunction() {
return
}

oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Llongfile)
oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)

var openString string
// [username/[password]@]host[:port][/service_name][?param1=value1&...&paramN=valueN]
Expand Down Expand Up @@ -200,7 +204,7 @@ func Example_sqlInsert() {
return
}

oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Llongfile)
oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)

var openString string
// [username/[password]@]host[:port][/service_name][?param1=value1&...&paramN=valueN]
Expand Down Expand Up @@ -288,7 +292,7 @@ func Example_sqlManyInserts() {
return
}

oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Llongfile)
oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)

var openString string
// [username/[password]@]host[:port][/service_name][?param1=value1&...&paramN=valueN]
Expand Down Expand Up @@ -373,6 +377,15 @@ func Example_sqlManyInserts() {
fmt.Println("QueryContext error is not nil:", err)
return
}

// defer close rows
defer func() {
err = rows.Close()
if err != nil {
fmt.Println("Close error is not nil:", err)
}
}()

if !rows.Next() {
fmt.Println("no Next rows")
return
Expand Down Expand Up @@ -400,11 +413,6 @@ func Example_sqlManyInserts() {
fmt.Println("Err error is not nil:", err)
return
}
err = rows.Close()
if err != nil {
fmt.Println("Close error is not nil:", err)
return
}

// drop table
query = "drop table " + tableName
Expand All @@ -430,7 +438,7 @@ func Example_sqlRowid() {
return
}

oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Llongfile)
oci8.OCI8Driver.Logger = log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)

var openString string
// [username/[password]@]host[:port][/service_name][?param1=value1&...&paramN=valueN]
Expand Down Expand Up @@ -508,6 +516,15 @@ func Example_sqlRowid() {
fmt.Println("QueryContext error is not nil:", err)
return
}

// defer close rows
defer func() {
err = rows.Close()
if err != nil {
fmt.Println("Close error is not nil:", err)
}
}()

if !rows.Next() {
fmt.Println("no Next rows")
return
Expand All @@ -529,11 +546,6 @@ func Example_sqlRowid() {
fmt.Println("Err error is not nil:", err)
return
}
err = rows.Close()
if err != nil {
fmt.Println("Close error is not nil:", err)
return
}

// drop table
query = "drop table " + tableName
Expand Down
3 changes: 1 addition & 2 deletions globals.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ type (
// OCI8DriverStruct is Oracle driver struct
OCI8DriverStruct struct {
// Logger is used to log connection ping errors, defaults to discard
// To log set it to something like: log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Llongfile)
// To log set it to something like: log.New(os.Stderr, "oci8 ", log.Ldate|log.Ltime|log.LUTC|log.Lshortfile)
Logger *log.Logger
}

Expand Down Expand Up @@ -121,7 +121,6 @@ type (
e bool
closed bool
ctx context.Context
done chan struct{}
}
)

Expand Down
62 changes: 62 additions & 0 deletions oci8_sql_number_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ func TestSelectDualNullNumber(t *testing.T) {
t.SkipNow()
}

t.Parallel()

// null
queryResults := testQueryResults{
query: "select null from dual",
Expand Down Expand Up @@ -106,6 +108,8 @@ func TestSelectDualNumber(t *testing.T) {
t.SkipNow()
}

t.Parallel()

queryResults := testQueryResults{}

// bool
Expand Down Expand Up @@ -2153,6 +2157,8 @@ func TestFunctionCallNumber(t *testing.T) {
t.SkipNow()
}

t.Parallel()

// https://ss64.com/ora/syntax-datatypes.html

var execResults testExecResults
Expand Down Expand Up @@ -3147,19 +3153,35 @@ func TestDestructiveNumberRowsAffected(t *testing.T) {

if !rows.Next() {
cancel()
rows.Close()
stmt.Close()
t.Fatal("expected row")
}

err = rows.Scan(&count)
if err != nil {
cancel()
rows.Close()
stmt.Close()
t.Fatal("scan error:", err)
}

err = rows.Err()
if err != nil {
cancel()
rows.Close()
stmt.Close()
t.Fatal("rows error:", err)
}

cancel()

err = rows.Close()
if err != nil {
stmt.Close()
t.Fatal("rows close error", err)
}

err = stmt.Close()
if err != nil {
t.Fatal("stmt close error:", err)
Expand All @@ -3178,6 +3200,8 @@ func TestNullNumber(t *testing.T) {
t.SkipNow()
}

t.Parallel()

query := `
declare
function GET_NUMBER(p_number1 NUMERIC) return NUMERIC as
Expand Down Expand Up @@ -3379,6 +3403,8 @@ func TestSelectDualNumberScan(t *testing.T) {
t.SkipNow()
}

t.Parallel()

// float64 to float64
ctx, cancel := context.WithTimeout(context.Background(), TestContextTimeout)
stmt, err := TestDB.PrepareContext(ctx, "select :1 from dual")
Expand All @@ -3401,19 +3427,27 @@ func TestSelectDualNumberScan(t *testing.T) {

if !rows.Next() {
cancel()
rows.Close()
stmt.Close()
t.Fatal("expected row")
}

err = rows.Scan(&float)
if err != nil {
cancel()
rows.Close()
stmt.Close()
t.Fatal("scan error:", err)
}

cancel()

err = rows.Close()
if err != nil {
stmt.Close()
t.Fatal("rows close error:", err)
}

if float != data {
stmt.Close()
t.Fatalf("float64 to float64 - received: %v - wanted: %v", float, data)
Expand All @@ -3436,19 +3470,27 @@ func TestSelectDualNumberScan(t *testing.T) {

if !rows.Next() {
cancel()
rows.Close()
stmt.Close()
t.Fatal("expected row")
}

err = rows.Scan(&aint64)
if err != nil {
cancel()
rows.Close()
stmt.Close()
t.Fatal("scan error:", err)
}

cancel()

err = rows.Close()
if err != nil {
stmt.Close()
t.Fatal("rows close error:", err)
}

if aint64 != int64(data) {
stmt.Close()
t.Fatalf("int64 to float64 - received: %v - wanted: %v", aint64, int64(data))
Expand Down Expand Up @@ -3478,17 +3520,27 @@ func TestSelectDualNumberScan(t *testing.T) {

if !rows.Next() {
cancel()
rows.Close()
stmt.Close()
t.Fatal("expected row")
}

err = rows.Scan(&aint64)
if err != nil {
cancel()
rows.Close()
stmt.Close()
t.Fatal("scan error:", err)
}

cancel()

err = rows.Close()
if err != nil {
stmt.Close()
t.Fatal("rows close error:", err)
}

err = stmt.Close()
if err != nil {
t.Fatal("stmt close error:", err)
Expand Down Expand Up @@ -3609,18 +3661,28 @@ union all select :20 from dual`

if !rows.Next() {
cancel()
rows.Close()
stmt.Close()
t.Fatal("expected row")
}

var float float64
err = rows.Scan(&float)
if err != nil {
cancel()
rows.Close()
stmt.Close()
t.Fatal("scan error:", err)
}

cancel()

err = rows.Close()
if err != nil {
stmt.Close()
t.Fatal("rows close error:", err)
}

err = stmt.Close()
if err != nil {
t.Fatal("stmt close error:", err)
Expand Down
8 changes: 8 additions & 0 deletions oci8_sql_string_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ func TestSelectDualNullString(t *testing.T) {
t.SkipNow()
}

t.Parallel()

// VARCHAR2(1)
queryResults := testQueryResults{
query: "select cast (null as VARCHAR2(1)) from dual",
Expand Down Expand Up @@ -111,6 +113,8 @@ func TestSelectDualString(t *testing.T) {
t.SkipNow()
}

t.Parallel()

queryResults := testQueryResults{}

// test strings no change
Expand Down Expand Up @@ -1958,6 +1962,8 @@ func TestFunctionCallString(t *testing.T) {
t.SkipNow()
}

t.Parallel()

var execResults testExecResults

// test strings no change
Expand Down Expand Up @@ -3144,6 +3150,8 @@ func TestNullString(t *testing.T) {
t.SkipNow()
}

t.Parallel()

query := `
declare
function GET_STRING(p_string1 VARCHAR2) return VARCHAR2 as
Expand Down
Loading

0 comments on commit d01a807

Please sign in to comment.