diff options
Diffstat (limited to 'src/libs/wcautil/WixToolset.WcaUtil/inc/wcawrapquery.h')
-rw-r--r-- | src/libs/wcautil/WixToolset.WcaUtil/inc/wcawrapquery.h | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/libs/wcautil/WixToolset.WcaUtil/inc/wcawrapquery.h b/src/libs/wcautil/WixToolset.WcaUtil/inc/wcawrapquery.h new file mode 100644 index 00000000..e08f1c3f --- /dev/null +++ b/src/libs/wcautil/WixToolset.WcaUtil/inc/wcawrapquery.h | |||
@@ -0,0 +1,130 @@ | |||
1 | #pragma once | ||
2 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
3 | |||
4 | |||
5 | #include "wcautil.h" | ||
6 | |||
7 | // Enumerations | ||
8 | typedef enum eWrapQueryAction | ||
9 | { | ||
10 | wqaTableBegin = 1, | ||
11 | wqaTableFinish, | ||
12 | wqaRowBegin, | ||
13 | wqaRowFinish | ||
14 | } eWrapQueryAction; | ||
15 | |||
16 | typedef enum eColumnDataType | ||
17 | { | ||
18 | cdtString = 1, | ||
19 | cdtInt, | ||
20 | cdtStream, | ||
21 | cdtUnknown | ||
22 | } eColumnDataType; | ||
23 | |||
24 | typedef enum eFormatMaskColumn | ||
25 | { | ||
26 | efmcColumn1 = 1, | ||
27 | efmcColumn2 = 1 << 1, | ||
28 | efmcColumn3 = 1 << 2, | ||
29 | efmcColumn4 = 1 << 3, | ||
30 | efmcColumn5 = 1 << 4, | ||
31 | efmcColumn6 = 1 << 5, | ||
32 | efmcColumn7 = 1 << 6, | ||
33 | efmcColumn8 = 1 << 7, | ||
34 | efmcColumn9 = 1 << 8, | ||
35 | efmcColumn10 = 1 << 9, | ||
36 | efmcColumn11 = 1 << 10, | ||
37 | efmcColumn12 = 1 << 11, | ||
38 | efmcColumn13 = 1 << 12, | ||
39 | efmcColumn14 = 1 << 13, | ||
40 | efmcColumn15 = 1 << 14, | ||
41 | efmcColumn16 = 1 << 15, | ||
42 | efmcColumn17 = 1 << 16, | ||
43 | efmcColumn18 = 1 << 17, | ||
44 | efmcColumn19 = 1 << 18, | ||
45 | efmcColumn20 = 1 << 19, | ||
46 | efmcColumn21 = 1 << 20, | ||
47 | efmcColumn22 = 1 << 21, | ||
48 | efmcColumn23 = 1 << 22, | ||
49 | efmcColumn24 = 1 << 23, | ||
50 | efmcColumn25 = 1 << 24, | ||
51 | efmcColumn26 = 1 << 25, | ||
52 | efmcColumn27 = 1 << 26, | ||
53 | efmcColumn28 = 1 << 27, | ||
54 | efmcColumn29 = 1 << 28, | ||
55 | efmcColumn30 = 1 << 29, | ||
56 | efmcColumn31 = 1 << 30, | ||
57 | efmcColumn32 = 1 << 31, | ||
58 | } eFormatMaskColumn; | ||
59 | |||
60 | // Keeps track of the query instance for the reading CA (deferred CA) | ||
61 | typedef struct WCA_WRAPQUERY_STRUCT | ||
62 | { | ||
63 | // These are used to size our dynamic arrays below | ||
64 | DWORD dwColumns, dwRows, dwNextIndex; | ||
65 | |||
66 | // Dynamic arrays of column schema information | ||
67 | eColumnDataType *pcdtColumnType; | ||
68 | LPWSTR *ppwzColumnNames; | ||
69 | |||
70 | // Dynamic array of raw record data | ||
71 | MSIHANDLE *phRecords; | ||
72 | } *WCA_WRAPQUERY_HANDLE; | ||
73 | |||
74 | // Wrap a query | ||
75 | // Setting the pfFormatMask enables control over which fields will be formatted, and which will be left unchanged | ||
76 | // Setting dwComponentColumn to something other than 0xFFFFFFFF tells WcaWrapQuery to add two additional columns to the right side of the table | ||
77 | // - ISInstalled and ISAction - which map to the ComponentState of the component (the component is found in the column specified) | ||
78 | // Note that if a component is NULL, the component state columns will also be left null, and it will be up to the deferred CA to fail or ignore the case appropriately | ||
79 | // Setting dwDirectoryColumn to something other than 0xFFFFFFFF tells WcaWrapQuery to add two more additional columns to the right side of the table | ||
80 | // - SourcePath and TargetPath - which map to the Directory's Source and Target Path (the directory is found in the column specified) | ||
81 | // Note that if a directory is NULL, the directory source/target path columns will also be left null, and it will be up to the deferred CA to fail or ignore the case appropriately | ||
82 | HRESULT WIXAPI WcaWrapQuery( | ||
83 | __in_z LPCWSTR pwzQuery, | ||
84 | __inout LPWSTR * ppwzCustomActionData, | ||
85 | __in_opt DWORD dwFormatMask, | ||
86 | __in_opt DWORD dwComponentColumn, | ||
87 | __in_opt DWORD dwDirectoryColumn | ||
88 | ); | ||
89 | // This wraps an empty table query into the custom action data - this is a way to indicate to the deferred custom action that a necessary table doesn't exist, or its query returned no results | ||
90 | HRESULT WIXAPI WcaWrapEmptyQuery( | ||
91 | __inout LPWSTR * ppwzCustomActionData | ||
92 | ); | ||
93 | |||
94 | // Open a new unwrap query operation, with data from the ppwzCustomActionData string | ||
95 | HRESULT WIXAPI WcaBeginUnwrapQuery( | ||
96 | __out WCA_WRAPQUERY_HANDLE * phWrapQuery, | ||
97 | __inout LPWSTR * ppwzCustomActionData | ||
98 | ); | ||
99 | |||
100 | // Get the number of records in a query being unwrapped | ||
101 | DWORD WIXAPI WcaGetQueryRecords( | ||
102 | __in const WCA_WRAPQUERY_HANDLE hWrapQuery | ||
103 | ); | ||
104 | |||
105 | // This function resets a query back to its first row, so that the next fetch returns the first record | ||
106 | void WIXAPI WcaFetchWrappedReset( | ||
107 | __in WCA_WRAPQUERY_HANDLE hWrapQuery | ||
108 | ); | ||
109 | // Fetch the next record in this query | ||
110 | // NOTE: the MSIHANDLE returned by this function should not be released, as it is the same handle used by the query object to maintain the item. | ||
111 | // so, don't use this function with PMSIHANDLE objects! | ||
112 | HRESULT WIXAPI WcaFetchWrappedRecord( | ||
113 | __in WCA_WRAPQUERY_HANDLE hWrapQuery, | ||
114 | __out MSIHANDLE* phRec | ||
115 | ); | ||
116 | |||
117 | // Fetch the next record in the query where the string value in column dwComparisonColumn equals the value pwzExpectedValue | ||
118 | // NOTE: the MSIHANDLE returned by this function should not be released, as it is the same handle used by the query object to maintain the item. | ||
119 | // so, don't use this function with PMSIHANDLE objects! | ||
120 | HRESULT WIXAPI WcaFetchWrappedRecordWhereString( | ||
121 | __in WCA_WRAPQUERY_HANDLE hWrapQuery, | ||
122 | __in DWORD dwComparisonColumn, | ||
123 | __in_z LPCWSTR pwzExpectedValue, | ||
124 | __out MSIHANDLE* phRec | ||
125 | ); | ||
126 | |||
127 | // Release a query ID (frees memory, and frees the ID for a new query) | ||
128 | void WIXAPI WcaFinishUnwrapQuery( | ||
129 | __in_opt WCA_WRAPQUERY_HANDLE hWrapQuery | ||
130 | ); | ||