Example #1
0
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);
}