sql处理之5

int CSQLMake::MakeOnFilter(std::string &strOn, CParaSet &oInPara)
{
    int iRet = 0;
    std::string::size_type stPos = strOn.find(" on ");
    if (stPos != std::string::npos)
    {
        std::string strOnCond = strOn.substr(stPos+4);
        MakeOnFilter(strOnCond, oInPara);
        strOn = strOn.substr(0, stPos);
        if (!strOnCond.empty())
        {
            std::string::size_type stP = strOnCond.find("=");
            if (stP != std::string::npos) 
            {
                strOn += (std::string)" on " + strOnCond;
            }
            else 
            {
                strOn += strOnCond;
            }
        }
    }

    // 获取真正完整的on条件
    stPos = strOn.find_last_of("#");
    if (stPos == std::string::npos)
    {
        return iRet;
    }
    std::string strTemp = strOn.substr(stPos);
    std::string strLeft;
    std::string strRight;
    std::string::size_type stPos2 = strTemp.find_first_of(" ");
    if (stPos2 == std::string::npos) 
    {
        strLeft = strOn;
    }
    else 
    {
        strLeft = strOn.substr(0, stPos+stPos2);
        strRight = strOn.substr(stPos+stPos2);
    }

    MakeFilter(strLeft, oInPara);

    strOn = strLeft + strRight;

    return iRet;
}

你可能感兴趣的:(sql)