Files
MyGoNavi/third_party/go-irisnative/src/connection/message_header.go
Syngnat 992d2dee45 feat(iris): 新增 InterSystems IRIS 数据源支持
- 后端新增 IRIS 连接、查询、DDL、索引元数据和 DataGrid 编辑能力
- 接入 optional driver-agent、构建标签、revision 生成和变更检测流程
- 前端新增 IRIS 连接入口、方言映射、能力配置和图标展示
- 修复 IRIS 主键识别、事务开启错误处理和驱动连接关闭问题
- 补充后端、前端和构建脚本相关回归测试
Refs #408
2026-05-17 10:32:08 +08:00

85 lines
2.1 KiB
Go

package connection
type MessageType string
func setUint32(buffer []byte, value uint32) {
buffer[0] = byte(value & 0xff)
buffer[1] = byte(value >> 8 & 0xff)
buffer[2] = byte(value >> 16 & 0xff)
buffer[3] = byte(value >> 24 & 0xff)
}
func getUint32(buffer []byte) uint32 {
return uint32(buffer[0]) |
uint32(buffer[1])<<8 |
uint32(buffer[2])<<16 |
uint32(buffer[3])<<24
}
const (
CONNECT MessageType = "\x43\x4e"
HANDSHAKE MessageType = "\x48\x53"
DISCONNECT MessageType = "\x44\x43"
GLOBAL_GET MessageType = "\x41\xc2"
GLOBAL_SET MessageType = "\x42\xc2"
GLOBAL_KILL MessageType = "\x43\xc2"
GLOBAL_ORDER MessageType = "\x45\xc2"
GLOBAL_DATA MessageType = "\x49\xc2"
CLASSMETHOD_VALUE MessageType = "\x4b\xc2"
CLASSMETHOD_VOID MessageType = "\x4c\xc2"
METHOD_VALUE MessageType = "\x5b\xc2"
METHOD_VOID MessageType = "\x5c\xc2"
PROPERTY_GET MessageType = "\x5d\xc2"
PROPERTY_SET MessageType = "\x5e\xc2"
DIRECT_QUERY MessageType = "DQ"
PREPARED_QUERY MessageType = "PQ"
DIRECT_UPDATE MessageType = "DU"
PREPARED_UPDATE MessageType = "PU"
PREPARE MessageType = "PP"
GET_AUTO_GENERATED_KEYS MessageType = "GG"
COMMIT MessageType = "TC"
ROLLBACK MessageType = "TR"
MULTIPLE_RESULT_SETS_FETCH_DATA MessageType = "MD"
GET_MORE_RESULTS MessageType = "MR"
FETCH_DATA MessageType = "FD"
GET_SERVER_ERROR MessageType = "OE"
)
type MessageHeader struct {
header [14]byte
}
func NewMessageHeader(messageType MessageType) MessageHeader {
header := [14]byte{}
header[12] = messageType[0]
header[13] = messageType[1]
return MessageHeader{header}
}
func (mh *MessageHeader) GetStatus() uint16 {
return uint16(mh.header[12]) | (uint16(mh.header[13]) << 8)
}
func (mh *MessageHeader) SetLength(length uint32) {
setUint32(mh.header[0:], length)
}
func (mh MessageHeader) GetLength() uint32 {
return getUint32(mh.header[0:])
}
func (mh *MessageHeader) SetCount(cnt uint32) {
setUint32(mh.header[4:], cnt)
}
func (mh *MessageHeader) SetStatementId(statementId uint32) {
setUint32(mh.header[8:], statementId)
}