Leaked source code of windows server 2003
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

// 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;
}
*/