* doc: v1.0.2-RC1 release file (#338) --------- Co-authored-by: Shaozhou Hu <1094091844@qq.com>tags/v1.1.0
@@ -22,6 +22,7 @@ require ( | |||||
github.com/pkg/errors v0.9.1 | github.com/pkg/errors v0.9.1 | ||||
github.com/prometheus/client_golang v1.12.2 | github.com/prometheus/client_golang v1.12.2 | ||||
github.com/prometheus/common v0.32.1 | github.com/prometheus/common v0.32.1 | ||||
github.com/sijms/go-ora/v2 v2.5.17 | |||||
github.com/stretchr/testify v1.8.0 | github.com/stretchr/testify v1.8.0 | ||||
go.uber.org/atomic v1.9.0 | go.uber.org/atomic v1.9.0 | ||||
go.uber.org/zap v1.21.0 | go.uber.org/zap v1.21.0 | ||||
@@ -773,6 +773,8 @@ github.com/shirou/gopsutil/v3 v3.21.6/go.mod h1:JfVbDpIBLVzT8oKbvMg9P3wEIMDDpVn+ | |||||
github.com/shirou/gopsutil/v3 v3.22.2 h1:wCrArWFkHYIdDxx/FSfF5RB4dpJYW6t7rcp3+zL8uks= | github.com/shirou/gopsutil/v3 v3.22.2 h1:wCrArWFkHYIdDxx/FSfF5RB4dpJYW6t7rcp3+zL8uks= | ||||
github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY= | github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY= | ||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= | ||||
github.com/sijms/go-ora/v2 v2.5.17 h1:7FS8vswmAHint/r/fmgpKEczBnLZH64PNSkTiVradhY= | |||||
github.com/sijms/go-ora/v2 v2.5.17/go.mod h1:EHxlY6x7y9HAsdfumurRfTd+v8NrEOTR3Xl4FWlH6xk= | |||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= | github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= | ||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= | github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= | ||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= | github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= | ||||
@@ -0,0 +1,111 @@ | |||||
/* | |||||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||||
* contributor license agreements. See the NOTICE file distributed with | |||||
* this work for additional information regarding copyright ownership. | |||||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||||
* (the "License"); you may not use this file except in compliance with | |||||
* the License. You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package conn | |||||
import ( | |||||
"context" | |||||
"database/sql/driver" | |||||
"strings" | |||||
"time" | |||||
_ "github.com/sijms/go-ora/v2" | |||||
) | |||||
type OracleXAConn struct { | |||||
driver.Conn | |||||
} | |||||
func (c *OracleXAConn) Commit(xid string, onePhase bool) error { | |||||
var sb strings.Builder | |||||
sb.WriteString("XA COMMIT ") | |||||
sb.WriteString(xid) | |||||
if onePhase { | |||||
sb.WriteString(" ONE PHASE") | |||||
} | |||||
conn, _ := c.Conn.(driver.ExecerContext) | |||||
_, err := conn.ExecContext(context.TODO(), sb.String(), nil) | |||||
return err | |||||
} | |||||
func (c *OracleXAConn) End(xid string, flags int) error { | |||||
var sb strings.Builder | |||||
sb.WriteString("XA END ") | |||||
sb.WriteString(xid) | |||||
conn, _ := c.Conn.(driver.ExecerContext) | |||||
_, err := conn.ExecContext(context.TODO(), sb.String(), nil) | |||||
return err | |||||
} | |||||
func (c *OracleXAConn) Forget(xid string) error { | |||||
// TODO implement me | |||||
panic("implement me") | |||||
} | |||||
func (c *OracleXAConn) GetTransactionTimeout() time.Duration { | |||||
// TODO implement me | |||||
panic("implement me") | |||||
} | |||||
func (c *OracleXAConn) IsSameRM(resource XAResource) bool { | |||||
// TODO implement me | |||||
panic("implement me") | |||||
} | |||||
func (c *OracleXAConn) XAPrepare(xid string) (int, error) { | |||||
var sb strings.Builder | |||||
sb.WriteString("XA PREPARE ") | |||||
sb.WriteString(xid) | |||||
conn, _ := c.Conn.(driver.ExecerContext) | |||||
if _, err := conn.ExecContext(context.TODO(), sb.String(), nil); err != nil { | |||||
return -1, err | |||||
} | |||||
return 0, nil | |||||
} | |||||
func (c *OracleXAConn) Recover(flag int) []string { | |||||
// TODO implement me | |||||
panic("implement me") | |||||
} | |||||
func (c *OracleXAConn) Rollback(xid string) error { | |||||
var sb strings.Builder | |||||
sb.WriteString("XA ROLLBACK ") | |||||
sb.WriteString(xid) | |||||
conn, _ := c.Conn.(driver.ExecerContext) | |||||
_, err := conn.ExecContext(context.TODO(), sb.String(), nil) | |||||
return err | |||||
} | |||||
func (c *OracleXAConn) SetTransactionTimeout(duration time.Duration) bool { | |||||
// TODO implement me | |||||
panic("implement me") | |||||
} | |||||
func (c *OracleXAConn) Start(xid string, flags int) error { | |||||
var sb strings.Builder | |||||
sb.WriteString("XA START") | |||||
sb.WriteString(xid) | |||||
conn, _ := c.Conn.(driver.ExecerContext) | |||||
_, err := conn.ExecContext(context.TODO(), sb.String(), nil) | |||||
return err | |||||
} |
@@ -0,0 +1,105 @@ | |||||
package conn | |||||
import ( | |||||
"database/sql/driver" | |||||
"testing" | |||||
"time" | |||||
) | |||||
func TestOracleXAConn_Commit(t *testing.T) { | |||||
type fields struct { | |||||
Conn driver.Conn | |||||
} | |||||
type args struct { | |||||
xid string | |||||
onePhase bool | |||||
} | |||||
var tests []struct { | |||||
name string | |||||
fields fields | |||||
args args | |||||
wantErr bool | |||||
} | |||||
for _, tt := range tests { | |||||
t.Run(tt.name, func(t *testing.T) { | |||||
c := &OracleXAConn{ | |||||
Conn: tt.fields.Conn, | |||||
} | |||||
if err := c.Commit(tt.args.xid, tt.args.onePhase); (err != nil) != tt.wantErr { | |||||
t.Errorf("Commit() error = %v, wantErr %v", err, tt.wantErr) | |||||
} | |||||
}) | |||||
} | |||||
} | |||||
func TestOracleXAConn_End(t *testing.T) { | |||||
type fields struct { | |||||
Conn driver.Conn | |||||
} | |||||
type args struct { | |||||
xid string | |||||
flags int | |||||
} | |||||
var tests []struct { | |||||
name string | |||||
fields fields | |||||
args args | |||||
wantErr bool | |||||
} | |||||
for _, tt := range tests { | |||||
t.Run(tt.name, func(t *testing.T) { | |||||
c := &OracleXAConn{ | |||||
Conn: tt.fields.Conn, | |||||
} | |||||
if err := c.End(tt.args.xid, tt.args.flags); (err != nil) != tt.wantErr { | |||||
t.Errorf("End() error = %v, wantErr %v", err, tt.wantErr) | |||||
} | |||||
}) | |||||
} | |||||
} | |||||
func TestOracleXAConn_Forget(t *testing.T) { | |||||
type fields struct { | |||||
Conn driver.Conn | |||||
} | |||||
type args struct { | |||||
xid string | |||||
} | |||||
var tests []struct { | |||||
name string | |||||
fields fields | |||||
args args | |||||
wantErr bool | |||||
} | |||||
for _, tt := range tests { | |||||
t.Run(tt.name, func(t *testing.T) { | |||||
c := &OracleXAConn{ | |||||
Conn: tt.fields.Conn, | |||||
} | |||||
if err := c.Forget(tt.args.xid); (err != nil) != tt.wantErr { | |||||
t.Errorf("Forget() error = %v, wantErr %v", err, tt.wantErr) | |||||
} | |||||
}) | |||||
} | |||||
} | |||||
func TestOracleXAConn_GetTransactionTimeout(t *testing.T) { | |||||
type fields struct { | |||||
Conn driver.Conn | |||||
} | |||||
var tests []struct { | |||||
name string | |||||
fields fields | |||||
want time.Duration | |||||
} | |||||
for _, tt := range tests { | |||||
t.Run(tt.name, func(t *testing.T) { | |||||
c := &OracleXAConn{ | |||||
Conn: tt.fields.Conn, | |||||
} | |||||
if got := c.GetTransactionTimeout(); got != tt.want { | |||||
t.Errorf("GetTransactionTimeout() = %v, want %v", got, tt.want) | |||||
} | |||||
}) | |||||
} | |||||
} |
@@ -0,0 +1,91 @@ | |||||
/* | |||||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||||
* contributor license agreements. See the NOTICE file distributed with | |||||
* this work for additional information regarding copyright ownership. | |||||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||||
* (the "License"); you may not use this file except in compliance with | |||||
* the License. You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package conn | |||||
import "time" | |||||
const ( | |||||
// TMENDICANT Ends a recovery scan. | |||||
TMENDRSCAN = 0x00800000 | |||||
/** | |||||
* Disassociates the caller and marks the transaction branch | |||||
* rollback-only. | |||||
*/ | |||||
TMFAIL = 0x20000000 | |||||
/** | |||||
* Caller is joining existing transaction branch. | |||||
*/ | |||||
TMJOIN = 0x00200000 | |||||
/** | |||||
* Use TMNOFLAGS to indicate no flags value is selected. | |||||
*/ | |||||
TMNOFLAGS = 0x00000000 | |||||
/** | |||||
* Caller is using one-phase optimization. | |||||
*/ | |||||
TMONEPHASE = 0x40000000 | |||||
/** | |||||
* Caller is resuming association with a suspended | |||||
* transaction branch. | |||||
*/ | |||||
TMRESUME = 0x08000000 | |||||
/** | |||||
* Starts a recovery scan. | |||||
*/ | |||||
TMSTARTRSCAN = 0x01000000 | |||||
/** | |||||
* Disassociates caller from a transaction branch. | |||||
*/ | |||||
TMSUCCESS = 0x04000000 | |||||
/** | |||||
* Caller is suspending (not ending) its association with | |||||
* a transaction branch. | |||||
*/ | |||||
TMSUSPEND = 0x02000000 | |||||
/** | |||||
* The transaction branch has been read-only and has been committed. | |||||
*/ | |||||
XA_RDONLY = 0x00000003 | |||||
/** | |||||
* The transaction work has been prepared normally. | |||||
*/ | |||||
XA_OK = 0 | |||||
) | |||||
type XAResource interface { | |||||
Commit(xid string, onePhase bool) error | |||||
End(xid string, flags int) error | |||||
Forget(xid string) error | |||||
GetTransactionTimeout() time.Duration | |||||
IsSameRM(resource XAResource) bool | |||||
XAPrepare(xid string) (int, error) | |||||
Recover(flag int) []string | |||||
Rollback(xid string) error | |||||
SetTransactionTimeout(duration time.Duration) bool | |||||
Start(xid string, flags int) error | |||||
} |