|
|
//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1993. // // File: QueryS.idl // // Contents: Pickle-able structures used in IQuery, et. al. // // History: 29-Mar-93 KyleP Created // //--------------------------------------------------------------------------
[ uuid(E3971E54-4D6E-101A-971D-08002B2ECDA9), pointer_default(unique) ] interface IQueryStructures { // // Property set for dynamic query properties // // NOTE: PSGUID_QUERY is now defined in oledb.h as const GUID
cpp_quote("#define DBQUERYGUID { 0x49691C90, \\") cpp_quote(" 0x7E17, 0x101A, \\") cpp_quote(" 0xA9, 0x1C, 0x08, 0x00, 0x2B, \\") cpp_quote(" 0x2E, 0xCD, 0xA9 } ")
const DISPID DISPID_QUERY_RANKVECTOR = 2; const DISPID DISPID_QUERY_RANK = 3; const DISPID DISPID_QUERY_HITCOUNT = 4; const DISPID DISPID_QUERY_WORKID = 5; const DISPID DISPID_QUERY_ALL = 6; const DISPID DISPID_QUERY_UNFILTERED = 7; const DISPID DISPID_QUERY_REVNAME = 8; const DISPID DISPID_QUERY_VIRTUALPATH = 9; const DISPID DISPID_QUERY_LASTSEENTIME = 10;
// // NOTE: The number of query properties includes the seven above, // plus 28 OLE-DB column IDs for pseudo-columns, plus eight // OLE-DB bookmark columns (41 total). In addition, dispids // always start at 2, a fact which is not taken into account in // the mapping macros. Reserve a few more to // allow for growth in the set of special columns. //
const ULONG CQUERYDISPIDS = 11;
cpp_quote("#define PSGUID_QUERY_METADATA { 0x624C9360, \\") cpp_quote(" 0x93D0, 0x11CF, \\") cpp_quote(" 0xA7, 0x87, 0x00, 0x00, 0x4C, \\") cpp_quote(" 0x75, 0x27, 0x52 } ")
const DISPID DISPID_QUERY_METADATA_VROOTUSED = 2; const DISPID DISPID_QUERY_METADATA_VROOTAUTOMATIC = 3; const DISPID DISPID_QUERY_METADATA_VROOTMANUAL = 4; const DISPID DISPID_QUERY_METADATA_PROPGUID = 5; const DISPID DISPID_QUERY_METADATA_PROPDISPID = 6; const DISPID DISPID_QUERY_METADATA_PROPNAME = 7; const DISPID DISPID_QUERY_METADATA_STORELEVEL = 8; const DISPID DISPID_QUERY_METADATA_PROPMODIFIABLE = 9;
const ULONG CQUERYMETADISPIDS = 10;
// // Property set for OLE-DB bookmark properties //
// BUGBUG - this may someday be defined in oledb.h. see ole-db spec bug #1271 cpp_quote("#define DBBMKGUID { 0xC8B52232L, \\") cpp_quote(" 0x5CF3, 0x11CE, \\") cpp_quote(" {0xAD, 0xE5, 0x00, 0xAA, 0x00, \\") cpp_quote(" 0x44, 0x77, 0x3D } }")
const DISPID PROPID_DBBMK_BOOKMARK = 2; const DISPID PROPID_DBBMK_CHAPTER = 3;
const ULONG CDBBMKDISPIDS = 8;
// BUGBUG - this may someday be defined in oledb.h. see ole-db spec bug #1271 cpp_quote("#define DBSELFGUID {0xc8b52231,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}}") const DISPID PROPID_DBSELF_SELF = 2; const ULONG CDBSELFDISPIDS = 8;
const ULONG CDBCOLDISPIDS = 28;
// NOTE: CQUERYPROPERTY must be < sum of: // CQUERYDISPIDS + CBQUERYMETADISPIDS + CDBBMKDISPIDS + CDBCOLDISPIDS + CDBSELFDISPIDS // Warning: Changing this number can change the ondisk format of OFS and CI const ULONG CQUERYPROPERTY = 64;
cpp_quote("#define PSGUID_CHARACTERIZATION { 0x560c36c0, \\") cpp_quote(" 0x503a, 0x11cf, \\") cpp_quote(" 0xba, 0xa1, 0x00, 0x00, \\") cpp_quote(" 0x4c, 0x75, 0x2a, 0x9a } ")
// // Query flags //
const ULONG QUERY_VALIDBITS = 3;
// // Restriction structures // const ULONG RTNone = 0; const ULONG RTAnd = 1; const ULONG RTOr = 2; const ULONG RTNot = 3; const ULONG RTContent = 4; const ULONG RTProperty = 5; const ULONG RTProximity = 6; const ULONG RTVector = 7; const ULONG RTNatLanguage = 8;
typedef struct tagRESTRICTION RESTRICTION;
// // Negation (NOT) Restriction //
typedef struct tagNOTRESTRICTION { RESTRICTION * pRes; } NOTRESTRICTION;
// // Node (AND/OR/PROXIMITY) Restriction //
typedef struct tagNODERESTRICTION { ULONG cRes; [ size_is(cRes) ] RESTRICTION ** paRes; ULONG reserved; } NODERESTRICTION;
// // Vector Restriction // // The vector restriction is similar to the OR restriction except // that each branch of the vector can be individually weighted and // a vector of ranks can be returned (the .RankVector property) // where each element of the vector is the rank of the corresponding // child restriction in the rank vector. // // Vector weights can have values between 0 and MAX_QUERY_RANK (currently // 1000). They are effectively the numerator of a fraction. MAX_QUERY_RANK // is the denominator. // // Note that no query optimization/reorganization is performed below // this level. // // The rank of a vector restriction may be computed in one of // several ways. These are: // // // MAX[ wi * ( MaxRank - ri ) ] // VECTOR_RANK_MIN MaxRank - --------------------------------- // MAX[wi] // // MAX[ wi * ri ] // VECTOR_RANK_MAX ----------------- // MAX[wi] // // n // SUM ri * wi // i=1 // VECTOR_RANK_INNER ------------- // n // SUM wi // i=1 // // n // 2 * SUM ri * wi // i=1 // VECTOR_RANK_DICE -------------------- // n 2 n 2 // SUM ri + SUM wi // i=1 i=1 // // n // SUM ri * wi // i=1 // VECTOR_RANK_JACCARD --------------------------------- // n 2 n 2 n // SUM ri + SUM wi - SUM ri * wi // i=1 i=1 i=1 // // // * wi = Weight of term i, ri = rank of term i in a given document //
const ULONG VECTOR_RANK_MIN = 0; const ULONG VECTOR_RANK_MAX = 1; const ULONG VECTOR_RANK_INNER = 2; const ULONG VECTOR_RANK_DICE = 3; const ULONG VECTOR_RANK_JACCARD = 4;
typedef struct tagVECTORRESTRICTION { NODERESTRICTION Node; ULONG RankMethod; } VECTORRESTRICTION;
// // Content Restriction //
const ULONG GENERATE_METHOD_EXACT = 0; const ULONG GENERATE_METHOD_PREFIXMATCH = 1; const ULONG GENERATE_METHOD_STEMMED = 2;
typedef struct tagCONTENTRESTRICTION { FULLPROPSPEC prop; // Property [string] WCHAR * pwcsPhrase; // Content to search for LCID lcid; // locale ULONG ulGenerateMethod; // Generate method. } CONTENTRESTRICTION;
// // Natural Language Restriction //
typedef struct tagNATLANGUAGERESTRICTION { FULLPROPSPEC prop; // Property [string] WCHAR * pwcsPhrase; // Content to search for LCID lcid; // locale } NATLANGUAGERESTRICTION;
// // Property Restriction //
const ULONG PRLT = 0; // < const ULONG PRLE = 1; // <= const ULONG PRGT = 2; // > const ULONG PRGE = 3; // >= const ULONG PREQ = 4; // == const ULONG PRNE = 5; // != const ULONG PRRE = 6; // LIKE (Regular expression) const ULONG PRAllBits = 7; // (VAL & MASK) == MASK const ULONG PRSomeBits = 8; // (VAL & MASK) != 0 const ULONG PRAll = 0x100; // all elements of vector const ULONG PRAny = 0x200; // any elements of vector
typedef struct tagPROPERTYRESTRICTION { ULONG rel; // Relation FULLPROPSPEC prop; // Property PROPVARIANT prval; // Constant value } PROPERTYRESTRICTION;
// // Base Restriction //
union _URes;
struct tagRESTRICTION { ULONG rt; // Restriction Type ULONG weight; // Query Weight
[ switch_type(ULONG), switch_is(rt) ] union _URes { [ case(RTAnd) ] NODERESTRICTION ar; [ case(RTOr) ] NODERESTRICTION or; [ case(RTProximity) ] NODERESTRICTION pxr; [ case(RTVector) ] VECTORRESTRICTION vr; [ case(RTNot) ] NOTRESTRICTION nr; [ case(RTContent) ] CONTENTRESTRICTION cr; [ case(RTNatLanguage) ] NATLANGUAGERESTRICTION nlr; [ case(RTProperty) ] PROPERTYRESTRICTION pr; [ default ] ; } res; };
// // Column descriptors. // // Each column represents a single property. A property is defined by // a UUID for the property set and either a index (DISPID) or name // to locate the property within the property set. // //
typedef struct tagCOLUMNSET { ULONG cCol; [size_is(cCol)] FULLPROPSPEC * aCol;
} COLUMNSET;
// // Sort descriptors // // A sort is over a [sub] set of columns specified as return columns in // the query. // // BUGBUG - this should go away and be replaced by DBSORTKEY. //
const ULONG QUERY_SORTASCEND = 0; const ULONG QUERY_SORTDESCEND = 1; const ULONG QUERY_SORTXASCEND = 2; const ULONG QUERY_SORTXDESCEND = 3; const ULONG QUERY_SORTDEFAULT = 4;
typedef struct tagSORTKEY { FULLPROPSPEC propColumn; ULONG dwOrder; // Ascending/Descending LCID locale; // } SORTKEY;
typedef struct tagSORTSET { ULONG cCol; // Number of sort columns [size_is(cCol)] SORTKEY * aCol;
} SORTSET;
// // Categorization descriptor // // Defines categorization of table. In IQuery this is just used as a // hint, indicating this categorization is likely to be used. The // column used for categorization is always the first uncategorized // sort column, except when clustering is used. //
// // Unique categorization. Each unique value forms a category. //
const ULONG CATEGORIZE_UNIQUE = 0;
// // Cluster categorization. Use Inference clustering. Number of // clusters specified on entry. //
const ULONG CATEGORIZE_CLUSTER = 1;
// // Bucket categorization. Number of buckets and distribution of values // into buckets is defined. //
const ULONG CATEGORIZE_BUCKETS = 2;
const ULONG BUCKET_LINEAR = 0; const ULONG BUCKET_EXPONENTIAL = 1;
typedef struct tagBUCKETCATEGORIZE { ULONG cBuckets; ULONG Distribution; } BUCKETCATEGORIZE;
// // Range categorization. Ranges are explicitly specified. // The first range is from <minimum_value> to aRangeBegin[0] - <1 unit>. // Next from aRangeBegin[0] to aRangeBegin[1] - <1 unit>, etc. // The last range is from aRangeBegin[cRange-1] to <maximum_value>. // There will be a total of cRange + 1 ranges. //
const ULONG CATEGORIZE_RANGE = 3;
typedef struct tagRANGECATEGORIZE { ULONG cRange; [size_is(cRange)] PROPVARIANT * aRangeBegin; } RANGECATEGORIZE;
typedef struct tagCATEGORIZATION { ULONG ulCatType;
[ switch_type(ULONG), switch_is( ulCatType ) ] union { [ case(CATEGORIZE_CLUSTER) ] ULONG cClusters; [ case(CATEGORIZE_BUCKETS) ] BUCKETCATEGORIZE bucket; [ case(CATEGORIZE_RANGE) ] RANGECATEGORIZE range; [ case(CATEGORIZE_UNIQUE) ] ; };
COLUMNSET csColumns; // columns that can be bound to for categorization } CATEGORIZATION;
typedef struct tagCATEGORIZATIONSET { ULONG cCat; // Number of categorizations [size_is(cCat)] CATEGORIZATION * aCat;
} CATEGORIZATIONSET;
// Some other stuff, moved here from winnot.h [mikese]
typedef unsigned long OCCURRENCE;
const OCCURRENCE OCC_INVALID = 0xFFFFFFFF; // Invalid Occurrence const LONG MAX_QUERY_RANK = 1000; // Maximum Rank / Weight
}
|