aboutsummaryrefslogtreecommitdiff
path: root/src/libs/wcautil/WixToolset.WcaUtil/inc/wcawrapquery.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/wcautil/WixToolset.WcaUtil/inc/wcawrapquery.h')
-rw-r--r--src/libs/wcautil/WixToolset.WcaUtil/inc/wcawrapquery.h130
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
8typedef enum eWrapQueryAction
9{
10 wqaTableBegin = 1,
11 wqaTableFinish,
12 wqaRowBegin,
13 wqaRowFinish
14} eWrapQueryAction;
15
16typedef enum eColumnDataType
17{
18 cdtString = 1,
19 cdtInt,
20 cdtStream,
21 cdtUnknown
22} eColumnDataType;
23
24typedef 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)
61typedef 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
82HRESULT 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
90HRESULT WIXAPI WcaWrapEmptyQuery(
91 __inout LPWSTR * ppwzCustomActionData
92 );
93
94// Open a new unwrap query operation, with data from the ppwzCustomActionData string
95HRESULT 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
101DWORD 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
106void 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!
112HRESULT 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!
120HRESULT 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)
128void WIXAPI WcaFinishUnwrapQuery(
129 __in_opt WCA_WRAPQUERY_HANDLE hWrapQuery
130 );