void QTreeValidator::validatePTClause(QueryData & queryData, PTClauseEntry * ptClausePtr, const std::vector<std::string>& synList) { QEvalPTClause *evalPtClause = new QEvalPTClause(); evalPtClause->ptType = ptClausePtr->getPatternType(); idx_t tmpIdx = getVarArgIdx(synList, ptClausePtr->getSynonym()); assert(ARG_IDX_NOT_FOUND != tmpIdx); assert(isDecArgStmtType(queryData.getVarDecType(tmpIdx))); evalPtClause->stmt = tmpIdx; determineVar(evalPtClause->var, evalPtClause->varArgType, ptClausePtr->getFirstParameter(), synList, true); if (evalPtClause->ptType == PTClauseType::PT_Assign) { std::string patternStr = ptClausePtr->getSecondParameter(); if (isImplicit(patternStr)) { evalPtClause->pattern = ""; evalPtClause->completeMatch = false; } else if (isDoubleQuoted(patternStr)) { evalPtClause->pattern = dropDoubleQuote(patternStr); evalPtClause->completeMatch = true; } else if (isUnderlineDoubleQuoted(patternStr)) { evalPtClause->pattern = dropUnderlineDoubleQuote(patternStr); evalPtClause->completeMatch = false; } else { assert(false); } } evalPtClause->inVarArgIdxSet.insert(evalPtClause->stmt); if (ArgType::DECVAR == evalPtClause->varArgType) { evalPtClause->inVarArgIdxSet.insert(evalPtClause->var); } queryData.appendQEvalClause(evalPtClause); }