xpmgr/BuildTools/Include/structuredquerycondition.idl

138 lines
6.2 KiB
Plaintext

import "oaidl.idl";
import "ocidl.idl";
import "objidl.idl";
import "propidl.idl";
typedef [v1_enum] enum tagCONDITION_TYPE
{
CT_AND_CONDITION, // AND of subconditions
CT_OR_CONDITION, // OR of subconditions
CT_NOT_CONDITION, // NOT of a single subcondition
CT_LEAF_CONDITION, // No subcondition: property, operation, value.
} CONDITION_TYPE; // Prefix CT
typedef [v1_enum] enum tagCONDITION_OPERATION
{
COP_IMPLICIT,
COP_EQUAL,
COP_NOTEQUAL,
COP_LESSTHAN,
COP_GREATERTHAN,
COP_LESSTHANOREQUAL,
COP_GREATERTHANOREQUAL,
COP_VALUE_STARTSWITH, // LIKE FOO%
COP_VALUE_ENDSWITH, // LIKE %FOO
COP_VALUE_CONTAINS, // LIKE %FOO%
COP_VALUE_NOTCONTAINS, // NOT LIKE %FOO%
COP_DOSWILDCARDS, // "DOS wildcards" and the like
COP_WORD_EQUAL, // Contains a word/phrase somewhere.
COP_WORD_STARTSWITH, // Contains a word/phrase beginning with this
COP_APPLICATION_SPECIFIC, // Application specific, presumably uses the Value.
} CONDITION_OPERATION; // Prefix COP
[
object,
uuid(4FDEF69C-DBC9-454e-9910-B34F3C64B510),
pointer_default(unique),
]
interface IRichChunk : IUnknown
{
// The position *pFirstPos is zero-based.
// Any one of pFirstPos, pLength, ppsz and pValue may be NULL.
[local]
HRESULT GetData([out, unique, annotation("__out_opt")] ULONG* pFirstPos,
[out, unique, annotation("__out_opt")] ULONG* pLength,
[out, unique, annotation("__deref_opt_out_opt")] LPWSTR* ppsz,
[out, unique, annotation("__out_opt")] PROPVARIANT* pValue);
[call_as(GetData)]
HRESULT RemoteGetData([out] ULONG* pFirstPos,
[out] ULONG* pLength,
[out] LPWSTR* ppsz,
[out] PROPVARIANT* pValue);
}
[
object,
uuid(0FC988D4-C935-4b97-A973-46282EA175C8),
pointer_default(unique),
]
interface ICondition : IPersistStream
{
// For any node, return what kind of node it is.
HRESULT GetConditionType([out, retval] CONDITION_TYPE* pNodeType);
// riid must be IID_IEnumUnknown, IID_IEnumVARIANT or IID_IObjectArray, or in the case of a negation node IID_ICondition.
// If this is a leaf node, E_FAIL will be returned.
// If this is a negation node, then if riid is IID_ICondition, *ppv will be set to a single ICondition, otherwise an enumeration of one.
// If this is a conjunction or a disjunction, *ppv will be set to an enumeration of the subconditions.
HRESULT GetSubConditions([in] REFIID riid, [out, retval, iid_is(riid)] void** ppv);
// If this is not a leaf node, E_FAIL will be returned.
// Retrieve the property name, operation and value from the leaf node.
// Any one of ppszPropertyName, pcop and ppropvar may be NULL.
[local]
HRESULT GetComparisonInfo([out, unique, annotation("__deref_opt_out_opt")] LPWSTR *ppszPropertyName,
[out, unique, annotation("__out_opt")] CONDITION_OPERATION *pcop,
[out, unique, annotation("__out_opt")] PROPVARIANT *ppropvar);
[call_as(GetComparisonInfo)]
HRESULT RemoteGetComparisonInfo([out] LPWSTR *ppszPropertyName,
[out] CONDITION_OPERATION *pcop,
[out] PROPVARIANT *ppropvar);
// If this is not a leaf node, E_FAIL will be returned.
// *ppszValueTypeName will be set to the semantic type of the value, or to NULL if this is not meaningful.
HRESULT GetValueType([out, retval] LPWSTR* ppszValueTypeName);
// If this is not a leaf node, E_FAIL will be returned.
// If the value of the leaf node is VT_EMPTY, *ppszNormalization will be set to an empty string.
// If the value is a string (VT_LPWSTR, VT_BSTR or VT_LPSTR), then *ppszNormalization will be set to a
// character-normalized form of the value.
// Otherwise, *ppszNormalization will be set to some (character-normalized) string representation of the value.
HRESULT GetValueNormalization([out, retval] LPWSTR* ppszNormalization);
// Return information about what parts of the input produced the property, the operation and the value.
// Any one of ppPropertyTerm, ppOperationTerm and ppValueTerm may be NULL.
// For a leaf node returned by the parser, the position information of each IRichChunk identifies the tokens that
// contributed the property/operation/value, the string value is the corresponding part of the input string, and
// the PROPVARIANT is VT_EMPTY.
[local]
HRESULT GetInputTerms([out, unique, annotation("__out_opt")] IRichChunk** ppPropertyTerm,
[out, unique, annotation("__out_opt")] IRichChunk** ppOperationTerm,
[out, unique, annotation("__out_opt")] IRichChunk** ppValueTerm);
[call_as(GetInputTerms)]
HRESULT RemoteGetInputTerms([out] IRichChunk** ppPropertyTerm,
[out] IRichChunk** ppOperationTerm,
[out] IRichChunk** ppValueTerm);
// Make a deep copy of this ICondition.
HRESULT Clone([out, retval] ICondition** ppc);
};
[
uuid(0DB8851D-2E5B-47eb-9208-D28C325A01D7),
object,
pointer_default(unique),
]
interface ICondition2 : ICondition
{
// If this is not a leaf node, E_FAIL will be returned.
// *ppszLocaleName will be set to the locale name of the value,
// which may be NULL.
HRESULT GetLocale([out] LPWSTR* ppszLocaleName);
// If this is not a leaf node, E_FAIL will be returned.
// Retrieve the property key, operation and value from the leaf node.
// Any one of ppropkey, pcop and ppropvar may be NULL.
[local] HRESULT GetLeafConditionInfo([out, annotation("__out_opt")] PROPERTYKEY* ppropkey, [out, annotation("__out_opt")] CONDITION_OPERATION* pcop, [out, annotation("__out_opt")] PROPVARIANT* ppropvar);
// If this is not a leaf node, E_FAIL will be returned.
// Retrieve the property key, operation and value from the leaf node.
// Any one of ppropkey, pcop and ppropvar may be NULL.
[call_as(GetLeafConditionInfo)]
HRESULT RemoteGetLeafConditionInfo([out] PROPERTYKEY* ppropkey, [out] CONDITION_OPERATION* pcop, [out] PROPVARIANT* ppropvar);
}