summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/denisenkom/go-mssqldb/tran.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/denisenkom/go-mssqldb/tran.go')
-rw-r--r--vendor/github.com/denisenkom/go-mssqldb/tran.go99
1 files changed, 99 insertions, 0 deletions
diff --git a/vendor/github.com/denisenkom/go-mssqldb/tran.go b/vendor/github.com/denisenkom/go-mssqldb/tran.go
new file mode 100644
index 0000000000..ae38107661
--- /dev/null
+++ b/vendor/github.com/denisenkom/go-mssqldb/tran.go
@@ -0,0 +1,99 @@
+// Transaction Manager requests
+// http://msdn.microsoft.com/en-us/library/dd339887.aspx
+package mssql
+
+import (
+ "encoding/binary"
+)
+
+const (
+ tmGetDtcAddr = 0
+ tmPropagateXact = 1
+ tmBeginXact = 5
+ tmPromoteXact = 6
+ tmCommitXact = 7
+ tmRollbackXact = 8
+ tmSaveXact = 9
+)
+
+func sendBeginXact(buf *tdsBuffer, headers []headerStruct, isolation uint8,
+ name string) (err error) {
+ buf.BeginPacket(packTransMgrReq)
+ writeAllHeaders(buf, headers)
+ var rqtype uint16 = tmBeginXact
+ err = binary.Write(buf, binary.LittleEndian, &rqtype)
+ if err != nil {
+ return
+ }
+ err = binary.Write(buf, binary.LittleEndian, &isolation)
+ if err != nil {
+ return
+ }
+ err = writeBVarChar(buf, name)
+ if err != nil {
+ return
+ }
+ return buf.FinishPacket()
+}
+
+const (
+ fBeginXact = 1
+)
+
+func sendCommitXact(buf *tdsBuffer, headers []headerStruct, name string, flags uint8, isolation uint8, newname string) error {
+ buf.BeginPacket(packTransMgrReq)
+ writeAllHeaders(buf, headers)
+ var rqtype uint16 = tmCommitXact
+ err := binary.Write(buf, binary.LittleEndian, &rqtype)
+ if err != nil {
+ return err
+ }
+ err = writeBVarChar(buf, name)
+ if err != nil {
+ return err
+ }
+ err = binary.Write(buf, binary.LittleEndian, &flags)
+ if err != nil {
+ return err
+ }
+ if flags&fBeginXact != 0 {
+ err = binary.Write(buf, binary.LittleEndian, &isolation)
+ if err != nil {
+ return err
+ }
+ err = writeBVarChar(buf, name)
+ if err != nil {
+ return err
+ }
+ }
+ return buf.FinishPacket()
+}
+
+func sendRollbackXact(buf *tdsBuffer, headers []headerStruct, name string, flags uint8, isolation uint8, newname string) error {
+ buf.BeginPacket(packTransMgrReq)
+ writeAllHeaders(buf, headers)
+ var rqtype uint16 = tmRollbackXact
+ err := binary.Write(buf, binary.LittleEndian, &rqtype)
+ if err != nil {
+ return err
+ }
+ err = writeBVarChar(buf, name)
+ if err != nil {
+ return err
+ }
+ err = binary.Write(buf, binary.LittleEndian, &flags)
+ if err != nil {
+ return err
+ }
+ if flags&fBeginXact != 0 {
+ err = binary.Write(buf, binary.LittleEndian, &isolation)
+ if err != nil {
+ return err
+ }
+ err = writeBVarChar(buf, name)
+ if err != nil {
+ return err
+ }
+ }
+ return buf.FinishPacket()
+}