序列化成BSON,实现与MongoDB交互
INM消息处理
消息处理 总流程图
statement_list
namespace inm
{
enum StatementType
{
S_UNKNOWN, /**< 非法类型 */
S_INSTANCE, /**< 实例增删改 */
S_SCHEMA, /**< 模式增删改 */
S_UDT, /**< 自定义类型增删改 */
S_QUERY, /**< 查询 */
S_UPDATE, /**< 更新 */
S_SUPDATE,
S_LOGIN, /**< 登录类型提示消息,与客户端对应,值=7 位置不可变>*/
S_FUPDATE,
S_FUNCTION,
S_INVOKE,
S_VIEW,
S_REFRESH /**物化视图更新 xj**/
};
}
scheduler::schedule
将语句根据类型放到对应的vector中,分别执行对应的exec函数。
例:
input:query1、query2、query3、insert1、insert2、create1、create2。
经过语法分析后:
vector<scheclasspre*> :create1、create2。->execschmlist
vector<query*>:query1、query2、query3。->execquerylist
vector<instance*>:insert1、insert2。->execinstancelist
vector<statement_list>::iterator iter = yy_extra.smt_lists.begin();
for(; iter != yy_extra.smt_lists.end(); ++iter) {
switch(iter->type) {
case S_SCHEMA:
execSchmList((vector<SchmClassPre *> *)iter->list);
break;
case S_VIEW:
execViewList((vector<ViewClass *> *)iter->list);
break;
case S_REFRESH:
execRefreshList((vector<UpdateViewClass *> *)iter->list);
break;
case S_INSTANCE:
execInstList((InstanceList *)iter->list);
break;
case S_QUERY:
request->getInstOperator()->syncDirty