//======================================================================================== // @file DbSaveMessage.proto // @brief 关系库存库服务(db_save)使用的消息结构 // @author xuyang yikenan //======================================================================================== syntax="proto2"; package iot_idl; // 用到了SVariable import "Public.proto"; // 缩写说明: // DSS : Database Save Server 关系库存库服务程序 // APP : Application 应用程序,比如告警服务 // SRV : Server 服务端程序(存库服务) // CLT : Client 客户端程序(暂无) //======================================================================================== // 消息类型枚举 //======================================================================================== enum enDssMsgType { // CMbMessage,Para1是消息序号,Para2是DomainID MT_DSS_APP2SRV_INSERT = 10; // 应用程序插入 MT_DSS_APP2SRV_REMOVE = 20; // 应用程序删除 MT_DSS_APP2SRV_REMOVEMULTI = 21; // 应用程序批量删除 MT_DSS_APP2SRV_UPDATE = 30; // 应用程序更新 MT_DSS_APP2SRV_UPDATEMULTI = 31; // 应用程序批量更新 MT_DSS_SRV2APP_ACK = 100; // 服务回复确认收到消息 } //======================================================================================== // save_action 类型枚举 //======================================================================================== enum enDssSaveAction { SA_DSS_DO_NOTHING = 0; // 无 SA_DSS_LOCAL_ONLY = 1; // 仅保存到本域时序库 SA_DSS_REMOTE_ONLY = 2; // 仅保存到远程域时序库 SA_DSS_LOCAL_REMOTE = 3; // 保存到本域以及远程域时序库 } //======================================================================================== // 数据库查询条件,等效于SQL: // 括号开始(如果有) strColumnName enRelation msgValue 括号结束(如果有) enLogic // 举例: // {enumCondAnd,enumCondEqual,enumBracketStart,"Col_AAA",111} 等效SQL片段 : // ( Col_AAA = 111 and //======================================================================================== message DbCondition { optional ENConditionLogic enLogic = 1; required ENConditionRelation enRelation = 2; // 括号,暂无需求,未实现。用于改变优先级,枚举值有:无,括号开始,括号结束 // ENConditionBracket 的定义在 Public.proto // optional ENConditionBracket enBracket = xxx; required string strColumnName = 3; required SVariable msgValue = 4; } //< 查询条件头,不包含值,用于批量操作,避免重复传入列名 message DbConditionHead { optional ENConditionLogic enLogic = 1; required ENConditionRelation enRelation = 2; // 括号,暂无需求,未实现。用于改变优先级,枚举值有:无,括号开始,括号结束 // ENConditionBracket 的定义在 Public.proto // optional ENConditionBracket enBracket = xxx; required string strColumnName = 3; } //======================================================================================== // 值的序列,用于表示一条记录,或一个条件 //======================================================================================== message DbValueArray { repeated SVariable msgValue = 1; //< 列的值,顺序与列名对应 } //======================================================================================== // 更新的数据 //======================================================================================== message DbUpdateValue { required string strColumnName = 1; required SVariable msgValue = 2; } //======================================================================================== // 插入 //======================================================================================== message DbInsert { required enDssSaveAction enSaveAction = 1; required string strTableName = 2; repeated string strColumnName = 3; repeated DbValueArray msgRecord = 4; } //======================================================================================== // 删除,等效于SQL: // delete from strTableName where msgCondition[i]子语句(见DbCondition注释) ... // 条件子语句举例: // msgCondtionArray = [{enumCondOr,enumCondEqual,enumBracketStart,"Col_AAA","A1"}, // {enumCondAnd,enumCondEqual,enumBracketEnd,"Col_BBB","B1"}, // {enumCondAnd,enumCondEqual,enumBracketNone,"Col_CCC","C1"}] // 等效SQL条件语句: // where ( Col_AAA = 'A1' or Col_BBB = 'B1' ) and Col_CCC = 'C1' //======================================================================================== message DbRemove { required enDssSaveAction enSaveAction = 1; required string strTableName = 2; repeated DbCondition msgCondtionArray = 3; } //======================================================================================== // 批量删除,避免频繁传入列名。每个msgConditionValue[i]与msgConditionHead组合,等效于一个DbCondition // delete from strTableName where msgConditionValue[i]子语句(见DbCondition注释) ... // 条件子语句举例: // msgConditionHead = [{enumCondOr,enumCondEqual,enumBracketStart,"Col_AAA"}, // {enumCondAnd,enumCondEqual,enumBracketEnd,"Col_BBB"}] // msgConditionValue = [{"A1","B1"},{"A2","B2"}] // 等效SQL条件语句: // where ( Col_AAA = 'A1' or Col_BBB = 'B1' ) and ( Col_AAA = 'A2' or Col_BBB = 'B2' ) //======================================================================================== message DbRemoveMulti { required enDssSaveAction enSaveAction = 1; required string strTableName = 2; repeated DbConditionHead msgConditionHead = 3; repeated DbValueArray msgConditionValue = 4; //< Value中的值的顺序与Head中对应 } //======================================================================================== // 更新,等效于SQL: // update strTableName set msgUpdateValue[i].strColumnName = msgUpdateValue[i].msgValue ... // where msgCondition[i]子语句(见DbCondition注释) ... // 条件子语句举例: // msgCondtionArray = [{enumCondOr,enumCondEqual,enumBracketStart,"Col_AAA","A1"}, // {enumCondAnd,enumCondEqual,enumBracketEnd,"Col_BBB","B1"}, // {enumCondAnd,enumCondEqual,enumBracketNone,"Col_CCC","C1"}] // 等效SQL条件语句: // where ( Col_AAA = 'A1' or Col_BBB = 'B1' ) and Col_CCC = 'C1' //======================================================================================== message DbUpdate { required enDssSaveAction enSaveAction = 1; required string strTableName = 2; repeated DbUpdateValue msgUpdateValue = 3; repeated DbCondition msgCondition = 4; } //======================================================================================== // 批量更新,避免频繁传入列名。每个msgConditionValue[i]与msgConditionHead组合,等效于一个DbCondition // update strTableName set msgUpdateValue[i].strColumnName = msgUpdateValue[i].msgValue ... // where msgConditionValue[i]子语句(见DbCondition注释) ... // 条件子语句举例: // msgConditionHead = [{enumCondOr,enumCondEqual,enumBracketStart,"Col_AAA"}, // {enumCondAnd,enumCondEqual,enumBracketEnd,"Col_BBB"}] // msgConditionValue = [{"A1","B1"},{"A2","B2"}] // 等效SQL条件语句: // where ( Col_AAA = 'A1' or Col_BBB = 'B1' ) and ( Col_AAA = 'A2' or Col_BBB = 'B2' ) //======================================================================================== message DbUpdateMulti { required enDssSaveAction enSaveAction = 1; required string strTableName = 2; repeated DbUpdateValue msgUpdateValue = 3; repeated DbConditionHead msgConditionHead = 4; repeated DbValueArray msgConditionValue = 5; //< Value中的值的顺序与Head中对应 } //======================================================================================== // DbSave服务内部使用 //======================================================================================== message DbRequest { //< 注意:以下只允许一个有值 optional DbInsert msgInsert = 1; optional DbRemove msgRemove = 2; optional DbRemoveMulti msgRemoveMulti = 3; optional DbUpdate msgUpdate = 4; optional DbUpdateMulti msgUpdateMulti = 5; }