diff options
author | Rob Mensching <rob@firegiant.com> | 2022-03-30 10:35:02 -0700 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2022-03-30 14:12:12 -0700 |
commit | 5d08e0a4bbf4e4ba28300b8bace1089b64b198d7 (patch) | |
tree | 1cf7d1f79d45cc3acc32f19cabb1efedd7a4a3dc /src/api | |
parent | c86a2148f6dd7bfcd6637b6e1c9e7b5a9b53a996 (diff) | |
download | wix-5d08e0a4bbf4e4ba28300b8bace1089b64b198d7.tar.gz wix-5d08e0a4bbf4e4ba28300b8bace1089b64b198d7.tar.bz2 wix-5d08e0a4bbf4e4ba28300b8bace1089b64b198d7.zip |
Implement IWindowsInstallerDecompileExtensions
Update Util extension to validate extension model and fix some small
issues in MSI decompiling.
Fixes 6367
Diffstat (limited to 'src/api')
7 files changed, 313 insertions, 70 deletions
diff --git a/src/api/wix/WixToolset.Extensibility/BaseWindowsInstallerBackendBinderExtension.cs b/src/api/wix/WixToolset.Extensibility/BaseWindowsInstallerBackendBinderExtension.cs index e48579d7..a54f05fc 100644 --- a/src/api/wix/WixToolset.Extensibility/BaseWindowsInstallerBackendBinderExtension.cs +++ b/src/api/wix/WixToolset.Extensibility/BaseWindowsInstallerBackendBinderExtension.cs | |||
@@ -4,7 +4,6 @@ namespace WixToolset.Extensibility | |||
4 | { | 4 | { |
5 | using System; | 5 | using System; |
6 | using System.Collections.Generic; | 6 | using System.Collections.Generic; |
7 | using System.Linq; | ||
8 | using WixToolset.Data; | 7 | using WixToolset.Data; |
9 | using WixToolset.Data.Symbols; | 8 | using WixToolset.Data.Symbols; |
10 | using WixToolset.Data.WindowsInstaller; | 9 | using WixToolset.Data.WindowsInstaller; |
@@ -12,7 +11,7 @@ namespace WixToolset.Extensibility | |||
12 | using WixToolset.Extensibility.Services; | 11 | using WixToolset.Extensibility.Services; |
13 | 12 | ||
14 | /// <summary> | 13 | /// <summary> |
15 | /// Base class for creating a preprocessor extension. | 14 | /// Base class for creating a windows installer backend extension. |
16 | /// </summary> | 15 | /// </summary> |
17 | public abstract class BaseWindowsInstallerBackendBinderExtension : IWindowsInstallerBackendBinderExtension | 16 | public abstract class BaseWindowsInstallerBackendBinderExtension : IWindowsInstallerBackendBinderExtension |
18 | { | 17 | { |
@@ -39,7 +38,10 @@ namespace WixToolset.Extensibility | |||
39 | /// <summary> | 38 | /// <summary> |
40 | /// Creates a resolved cabinet result. | 39 | /// Creates a resolved cabinet result. |
41 | /// </summary> | 40 | /// </summary> |
42 | protected IResolvedCabinet CreateResolvedCabinet() => this.Context.ServiceProvider.GetService<IResolvedCabinet>(); | 41 | protected IResolvedCabinet CreateResolvedCabinet() |
42 | { | ||
43 | return this.Context.ServiceProvider.GetService<IResolvedCabinet>(); | ||
44 | } | ||
43 | 45 | ||
44 | /// <summary> | 46 | /// <summary> |
45 | /// See <see cref="IWindowsInstallerBackendBinderExtension.PreBackendBind(IBindContext)"/> | 47 | /// See <see cref="IWindowsInstallerBackendBinderExtension.PreBackendBind(IBindContext)"/> |
diff --git a/src/api/wix/WixToolset.Extensibility/BaseWindowsInstallerDecompilerExtension.cs b/src/api/wix/WixToolset.Extensibility/BaseWindowsInstallerDecompilerExtension.cs new file mode 100644 index 00000000..8072cd88 --- /dev/null +++ b/src/api/wix/WixToolset.Extensibility/BaseWindowsInstallerDecompilerExtension.cs | |||
@@ -0,0 +1,77 @@ | |||
1 | // 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. | ||
2 | |||
3 | namespace WixToolset.Extensibility | ||
4 | { | ||
5 | using System.Collections.Generic; | ||
6 | using WixToolset.Data; | ||
7 | using WixToolset.Data.WindowsInstaller; | ||
8 | using WixToolset.Extensibility.Data; | ||
9 | using WixToolset.Extensibility.Services; | ||
10 | |||
11 | /// <summary> | ||
12 | /// Base class for creating a windows installer decompiler extensions. | ||
13 | /// </summary> | ||
14 | public abstract class BaseWindowsInstallerDecompilerExtension : IWindowsInstallerDecompilerExtension | ||
15 | { | ||
16 | /// <summary> | ||
17 | /// Context for use by the extension. | ||
18 | /// </summary> | ||
19 | protected IWindowsInstallerDecompileContext Context { get; private set; } | ||
20 | |||
21 | /// <summary> | ||
22 | /// Messaging for use by the extension. | ||
23 | /// </summary> | ||
24 | protected IMessaging Messaging { get; private set; } | ||
25 | |||
26 | /// <summary> | ||
27 | /// Decompiler helper for use by the extension. | ||
28 | /// </summary> | ||
29 | protected IWindowsInstallerDecompilerHelper DecompilerHelper { get; private set; } | ||
30 | |||
31 | /// <summary> | ||
32 | /// See <see cref="IWindowsInstallerDecompilerExtension.TableDefinitions"/> | ||
33 | /// </summary> | ||
34 | public virtual IReadOnlyCollection<TableDefinition> TableDefinitions { get; } | ||
35 | |||
36 | /// <summary> | ||
37 | /// See <see cref="IWindowsInstallerDecompilerExtension.PostDecompile(IWindowsInstallerDecompileResult)"/> | ||
38 | /// </summary> | ||
39 | public virtual void PreDecompile(IWindowsInstallerDecompileContext context) | ||
40 | { | ||
41 | this.Context = context; | ||
42 | |||
43 | this.Messaging = context.ServiceProvider.GetService<IMessaging>(); | ||
44 | |||
45 | this.DecompilerHelper = context.ServiceProvider.GetService<IWindowsInstallerDecompilerHelper>(); | ||
46 | } | ||
47 | |||
48 | /// <summary> | ||
49 | /// See <see cref="IWindowsInstallerDecompilerExtension.PreDecompileTables(TableIndexedCollection)"/> | ||
50 | /// </summary> | ||
51 | public virtual void PreDecompileTables(TableIndexedCollection tables) | ||
52 | { | ||
53 | } | ||
54 | |||
55 | /// <summary> | ||
56 | /// See <see cref="IWindowsInstallerDecompilerExtension.TryDecompileTable(Table)"/> | ||
57 | /// </summary> | ||
58 | public virtual bool TryDecompileTable(Table table) | ||
59 | { | ||
60 | return false; | ||
61 | } | ||
62 | |||
63 | /// <summary> | ||
64 | /// See <see cref="IWindowsInstallerDecompilerExtension.PostDecompileTables(TableIndexedCollection)"/> | ||
65 | /// </summary> | ||
66 | public virtual void PostDecompileTables(TableIndexedCollection tables) | ||
67 | { | ||
68 | } | ||
69 | |||
70 | /// <summary> | ||
71 | /// See <see cref="IWindowsInstallerDecompilerExtension.PostDecompile(IWindowsInstallerDecompileResult)"/> | ||
72 | /// </summary> | ||
73 | public virtual void PostDecompile(IWindowsInstallerDecompileResult result) | ||
74 | { | ||
75 | } | ||
76 | } | ||
77 | } | ||
diff --git a/src/api/wix/WixToolset.Extensibility/Data/IWindowsInstallerDecompileContext.cs b/src/api/wix/WixToolset.Extensibility/Data/IWindowsInstallerDecompileContext.cs index f744121a..27d30a5a 100644 --- a/src/api/wix/WixToolset.Extensibility/Data/IWindowsInstallerDecompileContext.cs +++ b/src/api/wix/WixToolset.Extensibility/Data/IWindowsInstallerDecompileContext.cs | |||
@@ -7,7 +7,7 @@ namespace WixToolset.Extensibility.Data | |||
7 | using WixToolset.Data; | 7 | using WixToolset.Data; |
8 | 8 | ||
9 | /// <summary> | 9 | /// <summary> |
10 | /// The context used to decompile Windows Installer packages. | 10 | /// The context used to decompile a Windows Installer database. |
11 | /// </summary> | 11 | /// </summary> |
12 | public interface IWindowsInstallerDecompileContext | 12 | public interface IWindowsInstallerDecompileContext |
13 | { | 13 | { |
@@ -32,6 +32,16 @@ namespace WixToolset.Extensibility.Data | |||
32 | IReadOnlyCollection<IWindowsInstallerDecompilerExtension> Extensions { get; set; } | 32 | IReadOnlyCollection<IWindowsInstallerDecompilerExtension> Extensions { get; set; } |
33 | 33 | ||
34 | /// <summary> | 34 | /// <summary> |
35 | /// Collection of extension data to use during decompiling. | ||
36 | /// </summary> | ||
37 | IReadOnlyCollection<IExtensionData> ExtensionData { get; set; } | ||
38 | |||
39 | /// <summary> | ||
40 | /// Symbol definition creator used to load extension data. | ||
41 | /// </summary> | ||
42 | ISymbolDefinitionCreator SymbolDefinitionCreator { get; set; } | ||
43 | |||
44 | /// <summary> | ||
35 | /// Gets or sets the folder where content is extracted. | 45 | /// Gets or sets the folder where content is extracted. |
36 | /// </summary> | 46 | /// </summary> |
37 | string ExtractFolder { get; set; } | 47 | string ExtractFolder { get; set; } |
diff --git a/src/api/wix/WixToolset.Extensibility/Data/IWindowsInstallerDecompileResult.cs b/src/api/wix/WixToolset.Extensibility/Data/IWindowsInstallerDecompileResult.cs index 3b1dd815..724dd7fc 100644 --- a/src/api/wix/WixToolset.Extensibility/Data/IWindowsInstallerDecompileResult.cs +++ b/src/api/wix/WixToolset.Extensibility/Data/IWindowsInstallerDecompileResult.cs | |||
@@ -6,13 +6,24 @@ namespace WixToolset.Extensibility.Data | |||
6 | using System.Xml.Linq; | 6 | using System.Xml.Linq; |
7 | using WixToolset.Data; | 7 | using WixToolset.Data; |
8 | 8 | ||
9 | #pragma warning disable 1591 // TODO: add documentation | 9 | /// <summary> |
10 | /// The result from decompiling a Windows Installer database. | ||
11 | /// </summary> | ||
10 | public interface IWindowsInstallerDecompileResult | 12 | public interface IWindowsInstallerDecompileResult |
11 | { | 13 | { |
14 | /// <summary> | ||
15 | /// Decompiled document. | ||
16 | /// </summary> | ||
12 | XDocument Document { get; set; } | 17 | XDocument Document { get; set; } |
13 | 18 | ||
14 | IReadOnlyCollection<string> ExtractedFilePaths { get; set; } | 19 | /// <summary> |
20 | /// Extracted paths. | ||
21 | /// </summary> | ||
22 | IList<string> ExtractedFilePaths { get; set; } | ||
15 | 23 | ||
24 | /// <summary> | ||
25 | /// Decompiled platform. | ||
26 | /// </summary> | ||
16 | Platform? Platform { get; set; } | 27 | Platform? Platform { get; set; } |
17 | } | 28 | } |
18 | } | 29 | } |
diff --git a/src/api/wix/WixToolset.Extensibility/DecompilerExtension.cs b/src/api/wix/WixToolset.Extensibility/DecompilerExtension.cs deleted file mode 100644 index b492cf3a..00000000 --- a/src/api/wix/WixToolset.Extensibility/DecompilerExtension.cs +++ /dev/null | |||
@@ -1,61 +0,0 @@ | |||
1 | // 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. | ||
2 | |||
3 | namespace WixToolset.Extensibility | ||
4 | { | ||
5 | using WixToolset.Data; | ||
6 | |||
7 | #if BRING_BACK_LATER | ||
8 | /// <summary> | ||
9 | /// Base class for creating a decompiler extension. | ||
10 | /// </summary> | ||
11 | public abstract class DecompilerExtension : IDecompilerExtension | ||
12 | { | ||
13 | /// <summary> | ||
14 | /// Gets or sets the decompiler core for the extension. | ||
15 | /// </summary> | ||
16 | /// <value>The decompiler core for the extension.</value> | ||
17 | public IDecompilerCore Core { get; set; } | ||
18 | |||
19 | /// <summary> | ||
20 | /// Gets the table definitions this extension decompiles. | ||
21 | /// </summary> | ||
22 | /// <value>Table definitions this extension decompiles.</value> | ||
23 | public virtual TableDefinitionCollection TableDefinitions { get; protected set; } | ||
24 | |||
25 | /// <summary> | ||
26 | /// Gets the library that this decompiler wants removed from the decomipiled output. | ||
27 | /// </summary> | ||
28 | /// <param name="tableDefinitions">The table definitions to use while loading the library.</param> | ||
29 | /// <returns>The library for this extension or null if there is no library to be removed.</returns> | ||
30 | public virtual Library GetLibraryToRemove(TableDefinitionCollection tableDefinitions) | ||
31 | { | ||
32 | return null; | ||
33 | } | ||
34 | |||
35 | /// <summary> | ||
36 | /// Called at the beginning of the decompilation of a database. | ||
37 | /// </summary> | ||
38 | /// <param name="tables">The collection of all tables.</param> | ||
39 | public virtual void Initialize(TableIndexedCollection tables) | ||
40 | { | ||
41 | } | ||
42 | |||
43 | /// <summary> | ||
44 | /// Decompiles an extension table. | ||
45 | /// </summary> | ||
46 | /// <param name="table">The table to decompile.</param> | ||
47 | public virtual void DecompileTable(Table table) | ||
48 | { | ||
49 | this.Core.UnexpectedTable(table); | ||
50 | } | ||
51 | |||
52 | /// <summary> | ||
53 | /// Finalize decompilation. | ||
54 | /// </summary> | ||
55 | /// <param name="tables">The collection of all tables.</param> | ||
56 | public virtual void Finish(TableIndexedCollection tables) | ||
57 | { | ||
58 | } | ||
59 | } | ||
60 | #endif | ||
61 | } | ||
diff --git a/src/api/wix/WixToolset.Extensibility/IWindowsInstallerDecompilerExtension.cs b/src/api/wix/WixToolset.Extensibility/IWindowsInstallerDecompilerExtension.cs index add5f886..f7d54799 100644 --- a/src/api/wix/WixToolset.Extensibility/IWindowsInstallerDecompilerExtension.cs +++ b/src/api/wix/WixToolset.Extensibility/IWindowsInstallerDecompilerExtension.cs | |||
@@ -2,21 +2,45 @@ | |||
2 | 2 | ||
3 | namespace WixToolset.Extensibility | 3 | namespace WixToolset.Extensibility |
4 | { | 4 | { |
5 | using WixToolset.Data; | 5 | using System.Collections.Generic; |
6 | using WixToolset.Data.WindowsInstaller; | 6 | using WixToolset.Data.WindowsInstaller; |
7 | using WixToolset.Extensibility.Data; | 7 | using WixToolset.Extensibility.Data; |
8 | 8 | ||
9 | /// <summary> | 9 | /// <summary> |
10 | /// Interface all binder extensions implement. | 10 | /// Interface all windows installer decompiler extensions implement. |
11 | /// </summary> | 11 | /// </summary> |
12 | public interface IWindowsInstallerDecompilerExtension | 12 | public interface IWindowsInstallerDecompilerExtension |
13 | { | 13 | { |
14 | /// <summary> | 14 | /// <summary> |
15 | /// Gets the table definitions this extension decompiles. | ||
16 | /// </summary> | ||
17 | /// <value>Table definitions this extension decompiles.</value> | ||
18 | IReadOnlyCollection<TableDefinition> TableDefinitions { get; } | ||
19 | |||
20 | /// <summary> | ||
15 | /// Called before decompiling occurs. | 21 | /// Called before decompiling occurs. |
16 | /// </summary> | 22 | /// </summary> |
23 | /// <param name="context">Decompile context.</param> | ||
17 | void PreDecompile(IWindowsInstallerDecompileContext context); | 24 | void PreDecompile(IWindowsInstallerDecompileContext context); |
18 | 25 | ||
19 | // TODO: Redesign this interface to be useful. | 26 | /// <summary> |
27 | /// Called before decompiling occurs. | ||
28 | /// </summary> | ||
29 | /// <param name="tables">The collection of all tables.</param> | ||
30 | void PreDecompileTables(TableIndexedCollection tables); | ||
31 | |||
32 | /// <summary> | ||
33 | /// Try to decompile an extension table. | ||
34 | /// </summary> | ||
35 | /// <param name="table">The table to decompile.</param> | ||
36 | /// <returns>True if the table was decompiled, false otherwise.</returns> | ||
37 | bool TryDecompileTable(Table table); | ||
38 | |||
39 | /// <summary> | ||
40 | /// After decompilation tables. | ||
41 | /// </summary> | ||
42 | /// <param name="tables">The collection of all tables.</param> | ||
43 | void PostDecompileTables(TableIndexedCollection tables); | ||
20 | 44 | ||
21 | /// <summary> | 45 | /// <summary> |
22 | /// Called after all output changes occur and right before the output is bound into its final format. | 46 | /// Called after all output changes occur and right before the output is bound into its final format. |
diff --git a/src/api/wix/WixToolset.Extensibility/Services/IWindowsInstallerDecompilerHelper.cs b/src/api/wix/WixToolset.Extensibility/Services/IWindowsInstallerDecompilerHelper.cs new file mode 100644 index 00000000..1f5ac47a --- /dev/null +++ b/src/api/wix/WixToolset.Extensibility/Services/IWindowsInstallerDecompilerHelper.cs | |||
@@ -0,0 +1,180 @@ | |||
1 | // 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. | ||
2 | |||
3 | namespace WixToolset.Extensibility.Services | ||
4 | { | ||
5 | using System.Xml.Linq; | ||
6 | using WixToolset.Data.WindowsInstaller; | ||
7 | |||
8 | /// <summary> | ||
9 | /// Interface provided to help Windows Installer decompiler extensions. | ||
10 | /// </summary> | ||
11 | public interface IWindowsInstallerDecompilerHelper | ||
12 | { | ||
13 | /// <summary> | ||
14 | /// Gets or sets the root element of the decompiled output. | ||
15 | /// </summary> | ||
16 | XElement RootElement { get; set; } | ||
17 | |||
18 | /// <summary> | ||
19 | /// Creates an element from the standard WiX Toolset namespace and adds it to the root document. | ||
20 | /// </summary> | ||
21 | /// <param name="name">Name of the element to create and add.</param> | ||
22 | /// <param name="content">Optional content to add to the new element.</param> | ||
23 | /// <returns>Element in the standard namespace.</returns> | ||
24 | XElement AddElementToRoot(string name, params object[] content); | ||
25 | |||
26 | /// <summary> | ||
27 | /// Creates an element with the specified name and adds it to the root document. | ||
28 | /// </summary> | ||
29 | /// <param name="name">Name of the element to create and add.</param> | ||
30 | /// <param name="content">Optional content to add to the new element.</param> | ||
31 | /// <returns>Element in the standard namespace.</returns> | ||
32 | XElement AddElementToRoot(XName name, params object[] content); | ||
33 | |||
34 | /// <summary> | ||
35 | /// Adds an existing element to the root document. | ||
36 | /// </summary> | ||
37 | /// <param name="element">Element to add.</param> | ||
38 | /// <returns>Same element provided.</returns> | ||
39 | XElement AddElementToRoot(XElement element); | ||
40 | |||
41 | /// <summary> | ||
42 | /// Creates an element from the standard WiX Toolset namespace. | ||
43 | /// </summary> | ||
44 | /// <param name="name">Name of the element to create.</param> | ||
45 | /// <param name="content">Optional content to add to the new element.</param> | ||
46 | /// <returns>Element in the standard namespace.</returns> | ||
47 | XElement CreateElement(string name, params object[] content); | ||
48 | |||
49 | /// <summary> | ||
50 | /// Get an element index by a row's table and primary keys. | ||
51 | /// </summary> | ||
52 | /// <param name="row">Row to get element.</param> | ||
53 | /// <returns>Element indexed for the row or null if not found.</returns> | ||
54 | XElement GetIndexedElement(Row row); | ||
55 | |||
56 | /// <summary> | ||
57 | /// Get an element index by table and primary key. | ||
58 | /// </summary> | ||
59 | /// <param name="table">Table name for indexed element.</param> | ||
60 | /// <param name="primaryKey">Primary key for indexed element.</param> | ||
61 | /// <returns>Element indexed for the table and primary key or null if not found.</returns> | ||
62 | XElement GetIndexedElement(string table, string primaryKey); | ||
63 | |||
64 | /// <summary> | ||
65 | /// Get an element index by table and primary keys. | ||
66 | /// </summary> | ||
67 | /// <param name="table">Table name for indexed element.</param> | ||
68 | /// <param name="primaryKey1">Primary key for first column indexed element.</param> | ||
69 | /// <param name="primaryKey2">Primary key for second column indexed element.</param> | ||
70 | /// <returns>Element indexed for the table and primary keys or null if not found.</returns> | ||
71 | XElement GetIndexedElement(string table, string primaryKey1, string primaryKey2); | ||
72 | |||
73 | /// <summary> | ||
74 | /// Get an element index by table and primary keys. | ||
75 | /// </summary> | ||
76 | /// <param name="table">Table name for indexed element.</param> | ||
77 | /// <param name="primaryKey1">Primary key for first column indexed element.</param> | ||
78 | /// <param name="primaryKey2">Primary key for second column indexed element.</param> | ||
79 | /// <param name="primaryKey3">Primary key for third column indexed element.</param> | ||
80 | /// <returns>Element indexed for the table and primary keys or null if not found.</returns> | ||
81 | XElement GetIndexedElement(string table, string primaryKey1, string primaryKey2, string primaryKey3); | ||
82 | |||
83 | /// <summary> | ||
84 | /// Get an element index by table and primary keys. | ||
85 | /// </summary> | ||
86 | /// <param name="table">Table name for indexed element.</param> | ||
87 | /// <param name="primaryKeys">Primary keys for indexed element.</param> | ||
88 | /// <returns>Element indexed for the table and primary keys or null if not found.</returns> | ||
89 | XElement GetIndexedElement(string table, string[] primaryKeys); | ||
90 | |||
91 | /// <summary> | ||
92 | /// Try to get an element index by a row's table and primary keys. | ||
93 | /// </summary> | ||
94 | /// <param name="row">Row to get element.</param> | ||
95 | /// <param name="element">Element indexed for the row.</param> | ||
96 | /// <returns>True if the element was index otherwise false.</returns> | ||
97 | bool TryGetIndexedElement(Row row, out XElement element); | ||
98 | |||
99 | /// <summary> | ||
100 | /// Try to get an element index by table name and primary key. | ||
101 | /// </summary> | ||
102 | /// <param name="table">Table name for indexed element.</param> | ||
103 | /// <param name="primaryKey">Primary key for indexed element.</param> | ||
104 | /// <param name="element">Element indexed for the table and primary key.</param> | ||
105 | /// <returns>True if the element was index otherwise false.</returns> | ||
106 | bool TryGetIndexedElement(string table, string primaryKey, out XElement element); | ||
107 | |||
108 | /// <summary> | ||
109 | /// Try to get an element index by table name and primary keys. | ||
110 | /// </summary> | ||
111 | /// <param name="table">Table name for indexed element.</param> | ||
112 | /// <param name="primaryKey1">First column's primary key for indexed element.</param> | ||
113 | /// <param name="primaryKey2">Second column's primary key for indexed element.</param> | ||
114 | /// <param name="element">Element indexed for the table and primary key.</param> | ||
115 | /// <returns>True if the element was index otherwise false.</returns> | ||
116 | bool TryGetIndexedElement(string table, string primaryKey1, string primaryKey2, out XElement element); | ||
117 | |||
118 | /// <summary> | ||
119 | /// Try to get an element index by table name and primary keys. | ||
120 | /// </summary> | ||
121 | /// <param name="table">Table name for indexed element.</param> | ||
122 | /// <param name="primaryKey1">First column's primary key for indexed element.</param> | ||
123 | /// <param name="primaryKey2">Second column's primary key for indexed element.</param> | ||
124 | /// <param name="primaryKey3">Third column's primary key for indexed element.</param> | ||
125 | /// <param name="element">Element indexed for the table and primary key.</param> | ||
126 | /// <returns>True if the element was index otherwise false.</returns> | ||
127 | bool TryGetIndexedElement(string table, string primaryKey1, string primaryKey2, string primaryKey3, out XElement element); | ||
128 | |||
129 | /// <summary> | ||
130 | /// Try to get an element index by table name and primary keys. | ||
131 | /// </summary> | ||
132 | /// <param name="table">Table name for indexed element.</param> | ||
133 | /// <param name="primaryKeys">Primary keys for indexed element.</param> | ||
134 | /// <param name="element">Element indexed for the table and primary key.</param> | ||
135 | /// <returns>True if the element was index otherwise false.</returns> | ||
136 | bool TryGetIndexedElement(string table, string[] primaryKeys, out XElement element); | ||
137 | |||
138 | /// <summary> | ||
139 | /// Index an element by a row's table and primary keys. | ||
140 | /// </summary> | ||
141 | /// <param name="row">Row to index element.</param> | ||
142 | /// <param name="element">Element to index.</param> | ||
143 | void IndexElement(Row row, XElement element); | ||
144 | |||
145 | /// <summary> | ||
146 | /// Index an element by table and primary key. | ||
147 | /// </summary> | ||
148 | /// <param name="table">Table name to index element.</param> | ||
149 | /// <param name="primaryKey">Primary key to index element.</param> | ||
150 | /// <param name="element">Element to index.</param> | ||
151 | void IndexElement(string table, string primaryKey, XElement element); | ||
152 | |||
153 | /// <summary> | ||
154 | /// Index an element by table and primary keys. | ||
155 | /// </summary> | ||
156 | /// <param name="table">Table name to index element.</param> | ||
157 | /// <param name="primaryKey1">First column's primary key to index element.</param> | ||
158 | /// <param name="primaryKey2">Second column's primary key to index element.</param> | ||
159 | /// <param name="element">Element to index.</param> | ||
160 | void IndexElement(string table, string primaryKey1, string primaryKey2, XElement element); | ||
161 | |||
162 | /// <summary> | ||
163 | /// Index an element by table and primary keys. | ||
164 | /// </summary> | ||
165 | /// <param name="table">Table name to index element.</param> | ||
166 | /// <param name="primaryKey1">First column's primary key to index element.</param> | ||
167 | /// <param name="primaryKey2">Second column's primary key to index element.</param> | ||
168 | /// <param name="primaryKey3">Third column's primary key to index element.</param> | ||
169 | /// <param name="element">Element to index.</param> | ||
170 | void IndexElement(string table, string primaryKey1, string primaryKey2, string primaryKey3, XElement element); | ||
171 | |||
172 | /// <summary> | ||
173 | /// Index an element by table and primary keys. | ||
174 | /// </summary> | ||
175 | /// <param name="table">Table name to index element.</param> | ||
176 | /// <param name="primaryKeys">Column's primary key to index element.</param> | ||
177 | /// <param name="element">Element to index.</param> | ||
178 | void IndexElement(string table, string[] primaryKeys, XElement element); | ||
179 | } | ||
180 | } | ||