121 lines
4 KiB
C
121 lines
4 KiB
C
|
//***************************************************************************
|
||
|
|
||
|
//
|
||
|
|
||
|
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
|
||
|
//
|
||
|
// FRQuery.h
|
||
|
//
|
||
|
// Purpose: query support classes
|
||
|
//
|
||
|
//***************************************************************************
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#ifndef _FRAMEWORK_QUERY_H_
|
||
|
#define _FRAMEWORK_QUERY_H_
|
||
|
#include <stdio.h>
|
||
|
#include <sql_1.h>
|
||
|
#include <comdef.h>
|
||
|
#include <vector>
|
||
|
|
||
|
class POLARITY CFrameworkQuery
|
||
|
{
|
||
|
public:
|
||
|
CFrameworkQuery();
|
||
|
~CFrameworkQuery();
|
||
|
|
||
|
// Finds out if a particular field was requested by the query in either
|
||
|
// the Select statement, or the Where statement. Only meaningful if we
|
||
|
// are in ExecQueryAsync and the query has been sucessfully parsed.
|
||
|
bool IsPropertyRequired(LPCWSTR propName);
|
||
|
|
||
|
// Gets the class name from the query. Only meaningful if we are
|
||
|
// in ExecQueryAsync and the query has been sucessfully parsed. It
|
||
|
// is the responsibility of the caller to SysFreeString the returned
|
||
|
// string.
|
||
|
BSTR GetQueryClassName(void) { return SysAllocString(m_bstrtClassName); }
|
||
|
|
||
|
// Given a property name, it will return all the values
|
||
|
// that the query requests in a CHStringArray.
|
||
|
// Select * from win32_directory where drive = "C:" GetValuesForProp(L"Drive") -> C:
|
||
|
// Where Drive = "C:" or Drive = "D:" GetValuesForProp(L"Drive") -> C:, D:
|
||
|
// Where Path = "\DOS" GetValuesForProp(L"Drive") -> (empty)
|
||
|
// Where Drive <> "C:" GetValuesForProp(L"Drive") -> (empty)
|
||
|
// Where Drive = "C:" or (Drive = "D:" and Mounted = true) GetValuesForProp(L"Drive") -> C:, D:
|
||
|
HRESULT GetValuesForProp(LPCWSTR wszPropName, CHStringArray& achNames);
|
||
|
|
||
|
// Here's an overloaded version in case client wants to pass in a vector of _bstr_t's
|
||
|
HRESULT GetValuesForProp(LPCWSTR wszPropName, std::vector<_bstr_t>& vectorNames);
|
||
|
|
||
|
// Returns a list of all the properties specified in the Select clause, plus.
|
||
|
// all the the properties from the Where clauses. If the returned array is empty, all
|
||
|
// properties are required.
|
||
|
void GetRequiredProperties(CHStringArray &saProperties);
|
||
|
|
||
|
// Boolean indicating if all properties are being requested.
|
||
|
bool AllPropertiesAreRequired(void) { return (m_csaPropertiesRequired.GetSize() == 0); }
|
||
|
|
||
|
// Boolean indicating if only the key properties are required.
|
||
|
bool KeysOnly(void) { return m_bKeysOnly; }
|
||
|
|
||
|
// Accessor function to retrieve wql query
|
||
|
const CHString &GetQuery() ;
|
||
|
|
||
|
// Moves the values into the member variables. Should never be called by users.
|
||
|
HRESULT Init(
|
||
|
|
||
|
const BSTR bstrQueryFormat,
|
||
|
const BSTR bstrQuery,
|
||
|
long lFlags,
|
||
|
CHString &sNamespace
|
||
|
);
|
||
|
|
||
|
// Moves the values into the member variables. Should never be called by users.
|
||
|
HRESULT Init(
|
||
|
|
||
|
ParsedObjectPath *pParsedObjectPath,
|
||
|
IWbemContext *pCtx,
|
||
|
LPCWSTR lpwszClassName,
|
||
|
CHString &sNamespace
|
||
|
);
|
||
|
|
||
|
// Initializes the KeysOnly data member. Should never be called by users.
|
||
|
void Init2(IWbemClassObject *IClass);
|
||
|
|
||
|
|
||
|
protected:
|
||
|
|
||
|
/*****************************************************************************/
|
||
|
/* The rest of these data members and functions are intended for Microsoft */
|
||
|
/* internal use only. Use by third parties is unsupported and unrecommended. */
|
||
|
/*****************************************************************************/
|
||
|
|
||
|
SQL_LEVEL_1_RPN_EXPRESSION *m_pLevel1RPNExpression;
|
||
|
CHStringArray m_csaPropertiesRequired;
|
||
|
enum QueryTypes{eUnknown, eWQLCommand, eContextObject} m_QueryType;
|
||
|
|
||
|
DWORD IsInList(const CHStringArray &csaArray, LPCWSTR pwszValue);
|
||
|
|
||
|
BOOL IsReference(LPCWSTR lpwszPropertyName);
|
||
|
const CHString &GetNamespace();
|
||
|
|
||
|
private:
|
||
|
|
||
|
CHString m_sNamespace;
|
||
|
long m_lFlags;
|
||
|
IWbemClassObject *m_IClass;
|
||
|
CHString m_sQueryFormat;
|
||
|
|
||
|
void Reset(void);
|
||
|
bool m_bKeysOnly;
|
||
|
bool m_AddKeys;
|
||
|
CHString m_sQuery;
|
||
|
bstr_t m_bstrtClassName;
|
||
|
|
||
|
};
|
||
|
|
||
|
#endif
|