You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
2.8 KiB
127 lines
2.8 KiB
// QueryHelp.cpp
|
|
#include "precomp.h"
|
|
|
|
// Becase someone is using _ASSERT in WMI!
|
|
|
|
#ifdef _ASSERT
|
|
#undef _ASSERT
|
|
#endif
|
|
|
|
//#include <analyser.h>
|
|
|
|
#include <ql.h>
|
|
#include "QueryHelp.h"
|
|
|
|
CQueryParser::CQueryParser() :
|
|
m_pLexSource(NULL),
|
|
m_pParser(NULL),
|
|
m_pExpr(NULL)
|
|
{
|
|
}
|
|
|
|
CQueryParser::~CQueryParser()
|
|
{
|
|
if (m_pLexSource)
|
|
delete m_pLexSource;
|
|
|
|
if (m_pParser)
|
|
delete m_pParser;
|
|
|
|
if (m_pExpr)
|
|
delete m_pExpr;
|
|
}
|
|
|
|
HRESULT CQueryParser::Init(LPCWSTR szQuery)
|
|
{
|
|
HRESULT hr = WBEM_E_OUT_OF_MEMORY;
|
|
|
|
m_pLexSource = new CTextLexSource(szQuery);
|
|
|
|
if (m_pLexSource)
|
|
{
|
|
m_pParser = new QL1_Parser(m_pLexSource);
|
|
|
|
if (m_pParser)
|
|
{
|
|
if (m_pParser->Parse(&m_pExpr) == 0)
|
|
hr = S_OK;
|
|
else
|
|
hr = WBEM_E_INVALID_QUERY;
|
|
}
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CQueryParser::GetClassName(_bstr_t &strClass)
|
|
{
|
|
HRESULT hr;
|
|
|
|
if (m_pExpr)
|
|
{
|
|
strClass = m_pExpr->bsClassName;
|
|
hr = S_OK;
|
|
}
|
|
else
|
|
hr = WBEM_E_FAILED;
|
|
|
|
return hr;
|
|
}
|
|
|
|
/*
|
|
HRESULT CQueryParser::GetValuesForProp(LPCWSTR szProperty, CBstrList &listValues)
|
|
{
|
|
CPropertyName prop;
|
|
|
|
prop.AddElement(szProperty);
|
|
|
|
// Get the necessary query
|
|
QL_LEVEL_1_RPN_EXPRESSION *pPropExpr;
|
|
HRESULT hres =
|
|
CQueryAnalyser::GetNecessaryQueryForProperty(
|
|
m_pExpr,
|
|
prop,
|
|
pPropExpr);
|
|
|
|
if (FAILED(hres))
|
|
return hres;
|
|
|
|
// See if there are any tokens
|
|
if (pPropExpr->nNumTokens > 0)
|
|
{
|
|
// Combine them all
|
|
for (int i = 0; i < pPropExpr->nNumTokens && SUCCEEDED(hres); i++)
|
|
{
|
|
QL_LEVEL_1_TOKEN &token = pPropExpr->pArrayOfTokens[i];
|
|
|
|
if (token.nTokenType == QL1_NOT)
|
|
hres = WBEMESS_E_REGISTRATION_TOO_BROAD;
|
|
else if (token.nTokenType == QL1_AND || token.nTokenType == QL1_OR)
|
|
{
|
|
// We treat them all as ORs
|
|
// ========================
|
|
}
|
|
else
|
|
{
|
|
// This is a token
|
|
if (token.nOperator != QL1_OPERATOR_EQUALS)
|
|
hres = WBEMESS_E_REGISTRATION_TOO_BROAD;
|
|
else if (V_VT(&token.vConstValue) != VT_BSTR)
|
|
hres = WBEM_E_INVALID_QUERY;
|
|
else
|
|
{
|
|
// This token is a string equality.
|
|
listValues.push_back(V_BSTR(&token.vConstValue));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
hres = WBEMESS_E_REGISTRATION_TOO_BROAD;
|
|
|
|
delete pPropExpr;
|
|
|
|
return hres;
|
|
|
|
}
|
|
*/
|