- SQRO_DONT_RESOLVE_DATETIME (0x00000001)
Unless this flag is set, this method will replace any relative date/time expression in pConditionTree with an absolute date/time range that has been resolved against the reference date/time pointed to by pstReferenceTime. For example, if an AQS query contained "date:this month" and the reference date/time was 9/19/2006 10:28:33, the resolved condition tree would contain a date/time range beginning at 9/1/2006 00:00:00 and ending at 10/1/2006 00:00:00 (in the UTC time zone).
Unless this flag is set, resolving a relative date/time expression may result in an OR of several intervals. For example, if an AQS query contained "date:Monday" and the reference date/time was 9/19/2006 10:28:33 (a Tuesday), the resolved condition tree would contain an OR of three 24 hour ranges corresponding to the Mondays of 9/11/2006, 9/18/2006 and 9/25/2006, since it is not clear which Monday was referenced. If this flag is set, the result will always be a single date/time range (for this example, it would be a date/time range beginning at 9/18/2006 00:00:00 and ending at 9/19/2006 00:00:00).
Unless this flag is set, the resulting condition tree will have any possible simplifications applied to it.
Unless this flag is true, a leaf node with a virtual property that maps to several properties will be replaced by an OR of leaf nodes containing the actual properties. For example, the AQS query "to:Bill" may result in a leaf node where the property named
System.StructuredQuery.Virtual.Toactually maps to the two properties
System.Message.ToName, so the resolved condition tree would have an OR that looks for "Bill" in those two properties.
A range resulting from a date/time expression, an expression such as "20..40", is first resolved to a leaf node that has a VT_UNKNOWN value where the punkVal member implements the IInterval interface. Unless this flag is set, the returned condition tree will have been further resolved to an AND of simple comparisons such as COP_GREATERTHANOREQUAL and COP_LESSTHAN. For example, for an AQS query "date:this month" resolved against 9/19/2006 10:28:33, if this flag is not set, the resulting condition tree is an AND of System.ItemDate COP_GREATERTHANOREQUAL 9/1/2006 00:00:00 and System.ItemDate COP_LESSTHAN 10/1/2006 00:00:00. If this flag is set, the resulting condition tree will relate System.ItemDate to an IInterval such that its IInterval::GetLimits method returns ILK_EXPLICIT_INCLUDED, 9/1/2006 00:00:00, ILK_EXPLICIT_EXCLUDED and 10/1/2006 00:00:00.
An unrestricted keyword is a keyword that is not associated with a value that completes the condition. For example, in the following AQS query, the property denoted by From is considered an unrestricted keyword: "Kind:email Subject:"My Resume" From:". If this flag is set, such a property will be present in the resulting condition tree as a leaf node having a COP_IMPLICIT operation, an empty string value, and a semantic type of System.StructuredQueryType.Value. Otherwise, it will be removed entirely.
If this flag is set, a group of words not separated by white space will be kept together in a single leaf node. Otherwise it will be broken up in separate leaf nodes. An application may want to set this flag when resolving a condition tree if the resulting tree will be further processed by code that should do any additional word breaking.
SQRO_IGNORE_PHRASE ORDER (0x00000080)
If a phrase in an AQS query is enclosed in double quotes, the words in that phrase go into a single leaf node (regardless of whether SQRO_DONT_SPLIT_WORDS is set) unless this flag is set, in which case they end up in separate leaf nodes and their order no longer matters. An application may set this flag if it is not able to handle leaf nodes with multiple words correctly.
The STRUCTURED_QUERY_RESOLVE_OPTION type is defined in StructuredQuery.h as shown here.
typedef int STRUCTURED_QUERY_RESOLVE_OPTION;