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