Index: installer/src/installer-lib/database.h |
=================================================================== |
--- a/installer/src/installer-lib/database.h |
+++ b/installer/src/installer-lib/database.h |
@@ -2,187 +2,187 @@ |
* \file database.h MSI database |
*/ |
-#ifndef DATABASE_H |
-#define DATABASE_H |
- |
-#include <string> |
-#include <memory> |
- |
-#include <Windows.h> |
-#include <Msi.h> |
-#include <MsiQuery.h> |
- |
-#include "installer-lib.h" |
-#include "handle.h" |
-#include "session.h" |
- |
-// Forward declarations |
-class View ; |
- |
+#ifndef DATABASE_H |
+#define DATABASE_H |
+ |
+#include <string> |
+#include <memory> |
+ |
+#include <Windows.h> |
+#include <Msi.h> |
+#include <MsiQuery.h> |
+ |
+#include "installer-lib.h" |
+#include "handle.h" |
+#include "session.h" |
+ |
+// Forward declarations |
+class View ; |
+ |
//------------------------------------------------------- |
// Database |
//------------------------------------------------------- |
-/** |
-* A Windows Installer database as contained in an MSI file. |
-* |
-* The API for MSI databases is shared between installation and non-installation contexts. |
-* Roughly speaking, outside an installation the database supports both read and write, |
-* but inside an installation the database is read-only. |
-* The life cycle functions are not shared, in addition. |
-* Outside of these restrictions, however, the API is mostly common. |
-* This class is the base class for the common API. |
-* Subclasses provide public constructors and provide access to API calls not in common. |
-*/ |
-class Database |
-{ |
-protected: |
- typedef handle< MSIHANDLE, Disallow_Null, MSI_Generic_Destruction > handle_type ; |
- |
- /** |
- * Protected constructor. |
- * |
- * An MSI database handle is an overloaded type, used both for installation databases and one opened outside an installation. |
- * These database handles, while both databases, have different capabilities and are thus defined in subclasses. |
- * Each subclass has the responsibility for obtaining a database handle appropriate to its circumstance. |
- * |
- * \sa MSDN "Obtaining a Database Handle" |
- * http://msdn.microsoft.com/en-us/library/windows/desktop/aa370541(v=vs.85).aspx |
- */ |
- Database( MSIHANDLE handle ) |
- : handle( handle ) |
- {} |
- |
- /** |
- */ |
- handle_type handle ; |
- |
-private: |
- /** |
- * Private copy constructor is declared but not defined. |
- */ |
- Database( const Database & ) ; |
- |
- /** |
- * Private assignment operator is declared but not defined. |
- */ |
- Database & operator=( const Database & ) ; |
- |
- /** |
- * Open a new view for this database. |
- * |
- * \param query |
- * An SQL query using the restricted MSI syntax |
- * |
- * \sa |
- * - MSDN [MsiDatabaseOpenView function](http://msdn.microsoft.com/en-us/library/aa370082%28v=vs.85%29.aspx) |
- */ |
- msi_handle open_view( const wchar_t * query ) ; |
- |
- friend class View ; |
-} ; |
- |
-/** |
-* A Windows Installer database in an installation context. |
-*/ |
-class InstallationDatabase : public Database |
-{ |
-public: |
- /** |
- * The constructor of a database in an installation context has no arguments because the database is a part of that context. |
- */ |
- InstallationDatabase( ImmediateSession & session ) ; |
-} ; |
- |
+/** |
+* A Windows Installer database as contained in an MSI file. |
+* |
+* The API for MSI databases is shared between installation and non-installation contexts. |
+* Roughly speaking, outside an installation the database supports both read and write, |
+* but inside an installation the database is read-only. |
+* The life cycle functions are not shared, in addition. |
+* Outside of these restrictions, however, the API is mostly common. |
+* This class is the base class for the common API. |
+* Subclasses provide public constructors and provide access to API calls not in common. |
+*/ |
+class Database |
+{ |
+protected: |
+ typedef Handle< MSIHANDLE, DisallowNull, GenericMsiDestruction > HandleType ; |
+ |
+ /** |
+ * Protected constructor. |
+ * |
+ * An MSI database handle is an overloaded type, used both for installation databases and one opened outside an installation. |
+ * These database handles, while both databases, have different capabilities and are thus defined in subclasses. |
+ * Each subclass has the responsibility for obtaining a database handle appropriate to its circumstance. |
+ * |
+ * \sa MSDN "Obtaining a Database Handle" |
+ * http://msdn.microsoft.com/en-us/library/windows/desktop/aa370541(v=vs.85).aspx |
+ */ |
+ Database( MSIHANDLE handle ) |
+ : handle( handle ) |
+ {} |
+ |
+ /** |
+ */ |
+ HandleType handle ; |
+ |
+private: |
+ /** |
+ * Private copy constructor is declared but not defined. |
+ */ |
+ Database( const Database & ) ; |
+ |
+ /** |
+ * Private assignment operator is declared but not defined. |
+ */ |
+ Database & operator=( const Database & ) ; |
+ |
+ /** |
+ * Open a new view for this database. |
+ * |
+ * \param query |
+ * An SQL query using the restricted MSI syntax |
+ * |
+ * \sa |
+ * - MSDN [MsiDatabaseOpenView function](http://msdn.microsoft.com/en-us/library/aa370082%28v=vs.85%29.aspx) |
+ */ |
+ MsiHandle OpenView( const wchar_t * query ) ; |
+ |
+ friend class View ; |
+} ; |
+ |
+/** |
+* A Windows Installer database in an installation context. |
+*/ |
+class InstallationDatabase : public Database |
+{ |
+public: |
+ /** |
+ * The constructor of a database in an installation context has no arguments because the database is a part of that context. |
+ */ |
+ InstallationDatabase( ImmediateSession & session ) ; |
+} ; |
+ |
//------------------------------------------------------- |
// |
//------------------------------------------------------- |
-/** |
-* A Windows Installer database outside of an installation context, opened as a file from the file system. |
-* |
-* This is a read-only version of a file-system database. |
-* Refactor the class to obtain other open-modes. |
-* |
-*/ |
-class File_System_Database : public Database |
-{ |
- /** |
- * Open function is separate to enable initializing base class before constructor body. |
- * |
- * \sa |
- * - MSDN [MsiOpenDatabase function](http://msdn.microsoft.com/en-us/library/aa370338%28v=vs.85%29.aspx) |
- */ |
- msi_handle handle_from_pathname( const wchar_t * pathname ) |
- { |
+/** |
+* A Windows Installer database outside of an installation context, opened as a file from the file system. |
+* |
+* This is a read-only version of a file-system database. |
+* Refactor the class to obtain other open-modes. |
+* |
+*/ |
+class FileSystemDatabase : public Database |
+{ |
+ /** |
+ * Open function is separate to enable initializing base class before constructor body. |
+ * |
+ * \sa |
+ * - MSDN [MsiOpenDatabase function](http://msdn.microsoft.com/en-us/library/aa370338%28v=vs.85%29.aspx) |
+ */ |
+ MsiHandle HandleFromPathname( const wchar_t * pathname ) |
+ { |
MSIHANDLE handle ; |
- UINT x = MsiOpenDatabaseW( pathname, MSIDBOPEN_READONLY, & handle ) ; |
- if ( x != ERROR_SUCCESS ) |
- { |
- throw windows_api_error( "MsiOpenDatabaseW", x, "MSI database on file system" ) ; |
- } |
- return msi_handle( handle ) ; |
- } |
- |
-public: |
- File_System_Database( const wchar_t * pathname ) |
- : Database( handle_from_pathname( pathname ) ) |
- {} |
-} ; |
- |
+ UINT x = MsiOpenDatabaseW( pathname, MSIDBOPEN_READONLY, & handle ) ; |
+ if ( x != ERROR_SUCCESS ) |
+ { |
+ throw WindowsApiError( "MsiOpenDatabaseW", x, "MSI database on file system" ) ; |
+ } |
+ return MsiHandle( handle ) ; |
+ } |
+ |
+public: |
+ FileSystemDatabase( const wchar_t * pathname ) |
+ : Database( HandleFromPathname( pathname ) ) |
+ {} |
+} ; |
+ |
//------------------------------------------------------- |
// View |
//------------------------------------------------------- |
-/* |
-* The MSI database is accessible through a cut-down version of SQL. |
-* There's no distinction between view and query in this dialect. |
-* |
-* \sa |
-* - MSDN [Working with Queries](http://msdn.microsoft.com/en-us/library/aa372879%28v=vs.85%29.aspx) |
-*/ |
-class View |
-{ |
- typedef handle< MSIHANDLE, Disallow_Null, MSI_Generic_Destruction > handle_type ; |
- |
- /** |
- * Handle for the MSI view object |
- */ |
- handle_type _handle; |
- |
-public: |
- /** |
- * Ordinary constructor |
- */ |
- View( Database & db, wchar_t * query ) |
- : _handle( db.open_view( query ) ) |
- {} |
- |
- /** |
- * Execute the query and return the first record in its results. |
- * |
- * \param arguments |
- * List of parameters to supply as the query arguments (question marks). |
- */ |
- Record first( Record & arguments ) ; |
- |
- /** |
- * Execute the query and return the first record in its results. |
- * |
- * With no arguments, this version of the function may only be used with a query that takes no arguments. |
- */ |
- Record first() ; |
- |
- /** |
- * Retrieve the next record. |
- */ |
- Record next() ; |
- |
- /** |
- * End marker |
- */ |
- inline Record end() |
- { |
- return Record( Record::null_t() ) ; |
- } |
-} ; |
+/* |
+* The MSI database is accessible through a cut-down version of SQL. |
+* There's no distinction between view and query in this dialect. |
+* |
+* \sa |
+* - MSDN [Working with Queries](http://msdn.microsoft.com/en-us/library/aa372879%28v=vs.85%29.aspx) |
+*/ |
+class View |
+{ |
+ typedef Handle< MSIHANDLE, DisallowNull, GenericMsiDestruction > HandleType ; |
- |
-#endif |
+ /** |
+ * Handle for the MSI view object |
+ */ |
+ HandleType handle; |
+ |
+public: |
+ /** |
+ * Ordinary constructor |
+ */ |
+ View( Database & db, wchar_t * query ) |
+ : handle( db.OpenView( query ) ) |
+ {} |
+ |
+ /** |
+ * Execute the query and return the first record in its results. |
+ * |
+ * \param arguments |
+ * List of parameters to supply as the query arguments (question marks). |
+ */ |
+ Record First( Record & arguments ) ; |
+ |
+ /** |
+ * Execute the query and return the first record in its results. |
+ * |
+ * With no arguments, this version of the function may only be used with a query that takes no arguments. |
+ */ |
+ Record First() ; |
+ |
+ /** |
+ * Retrieve the next record. |
+ */ |
+ Record Next() ; |
+ |
+ /** |
+ * End marker |
+ */ |
+ inline Record End() |
+ { |
+ return Record( Record::NullType() ) ; |
+ } |
+} ; |
+ |
+ |
+#endif |