|
- package mssql
-
- // Transaction Manager requests
- // http://msdn.microsoft.com/en-us/library/dd339887.aspx
-
- import (
- "encoding/binary"
- )
-
- const (
- tmGetDtcAddr = 0
- tmPropagateXact = 1
- tmBeginXact = 5
- tmPromoteXact = 6
- tmCommitXact = 7
- tmRollbackXact = 8
- tmSaveXact = 9
- )
-
- type isoLevel uint8
-
- const (
- isolationUseCurrent isoLevel = 0
- isolationReadUncommited = 1
- isolationReadCommited = 2
- isolationRepeatableRead = 3
- isolationSerializable = 4
- isolationSnapshot = 5
- )
-
- func sendBeginXact(buf *tdsBuffer, headers []headerStruct, isolation isoLevel, name string, resetSession bool) (err error) {
- buf.BeginPacket(packTransMgrReq, resetSession)
- 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, resetSession bool) error {
- buf.BeginPacket(packTransMgrReq, resetSession)
- 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, resetSession bool) error {
- buf.BeginPacket(packTransMgrReq, resetSession)
- 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()
- }
|