| Index: installer/src/installer-lib/database.cpp | 
| =================================================================== | 
| --- a/installer/src/installer-lib/database.cpp | 
| +++ b/installer/src/installer-lib/database.cpp | 
| @@ -5,93 +5,93 @@ | 
| #include "database.h" | 
| #include "msiquery.h" | 
|  | 
| -//----------------------------------------------------------------------------------------- | 
| -// Database | 
| -//----------------------------------------------------------------------------------------- | 
| -msi_handle Database::open_view( const wchar_t * query ) | 
| -{ | 
| -  MSIHANDLE view_handle ; | 
| -  UINT x = MsiDatabaseOpenView( handle, query, & view_handle ) ; | 
| -  if ( x == ERROR_BAD_QUERY_SYNTAX ) | 
| -  { | 
| -    throw windows_api_error( "MsiDatabaseOpenView", "ERROR_BAD_QUERY_SYNTAX" ) ; | 
| -  } | 
| -  else if ( x == ERROR_INVALID_HANDLE ) | 
| -  { | 
| -    throw windows_api_error( "MsiDatabaseOpenView", "ERROR_INVALID_HANDLE" ) ; | 
| -  } | 
| -  return msi_handle( view_handle ) ; | 
| -} | 
| - | 
| -//----------------------------------------------------------------------------------------- | 
| -// InstallationDatabase | 
| -//----------------------------------------------------------------------------------------- | 
| - | 
| -/** | 
| -* Helper function for InstallationDatabase constructor. | 
| -* | 
| -* \par Resource Allocator | 
| -*    Return value of this function, a handle, must be released in order to avoid a resource leak. | 
| -*    Passing it as an argument to the Database constructor is adequate. | 
| -*/ | 
| -msi_handle get_active_database( ImmediateSession & session ) | 
| -{ | 
| -  MSIHANDLE h( MsiGetActiveDatabase( session.handle ) ) ; | 
| -  if ( h == 0 ) | 
| -  { | 
| -    throw windows_api_error( "MsiGetActiveDatabase", 0 ) ; | 
| -  } | 
| -  return msi_handle( h ) ; | 
| -} | 
| - | 
| -/** | 
| -* \par Implementation Notes | 
| -*    The only thing this constructor needs to do is to initialize the base class. | 
| -*/ | 
| -InstallationDatabase::InstallationDatabase( ImmediateSession & session ) | 
| -  : Database( get_active_database( session ) ) | 
| -{ | 
| -  // empty body | 
| -} ; | 
| - | 
| -//----------------------------------------------------------------------------------------- | 
| -// View | 
| -//----------------------------------------------------------------------------------------- | 
| -/** | 
| -* Implementation function for View::first(). | 
| -*/ | 
| -void view_first_body( UINT x ) | 
| -{ | 
| -  if ( x != ERROR_SUCCESS ) | 
| -  { | 
| -    throw windows_api_error( "MsiViewExecute", x ) ; | 
| -  } | 
| -} | 
| - | 
| -Record View::first() | 
| -{ | 
| -  view_first_body( MsiViewExecute( _handle, 0 ) ) ; | 
| -  return next() ; | 
| -} | 
| - | 
| -Record View::first( Record & arguments ) | 
| -{ | 
| -  view_first_body( MsiViewExecute( _handle, arguments._handle ) ) ; | 
| -  return next() ; | 
| -} | 
| - | 
| -Record View::next() | 
| -{ | 
| -  MSIHANDLE h ; | 
| -  UINT x = MsiViewFetch( _handle, & h ) ; | 
| -  if ( x == ERROR_NO_MORE_ITEMS ) | 
| -  { | 
| -    return Record( Record::null_t() ) ; | 
| -  } | 
| -  else if ( x == ERROR_SUCCESS ) | 
| -  { | 
| -    return Record( msi_handle( h ) ) ; | 
| -  } | 
| -  throw windows_api_error( "MsiViewFetch", x ) ; | 
| -} | 
| - | 
| +//----------------------------------------------------------------------------------------- | 
| +// Database | 
| +//----------------------------------------------------------------------------------------- | 
| +MsiHandle Database::OpenView( const wchar_t * query ) | 
| +{ | 
| +  MSIHANDLE viewHandle ; | 
| +  UINT x = MsiDatabaseOpenView( handle, query, & viewHandle ) ; | 
| +  if ( x == ERROR_BAD_QUERY_SYNTAX ) | 
| +  { | 
| +    throw WindowsApiError( "MsiDatabaseOpenView", "ERROR_BAD_QUERY_SYNTAX" ) ; | 
| +  } | 
| +  else if ( x == ERROR_INVALID_HANDLE ) | 
| +  { | 
| +    throw WindowsApiError( "MsiDatabaseOpenView", "ERROR_INVALID_HANDLE" ) ; | 
| +  } | 
| +  return MsiHandle( viewHandle ) ; | 
| +} | 
| + | 
| +//----------------------------------------------------------------------------------------- | 
| +// InstallationDatabase | 
| +//----------------------------------------------------------------------------------------- | 
| + | 
| +/** | 
| +* Helper function for InstallationDatabase constructor. | 
| +* | 
| +* \par Resource Allocator | 
| +*    Return value of this function, a handle, must be released in order to avoid a resource leak. | 
| +*    Passing it as an argument to the Database constructor is adequate. | 
| +*/ | 
| +MsiHandle GetActiveDatabase( ImmediateSession & session ) | 
| +{ | 
| +  MSIHANDLE h( MsiGetActiveDatabase( session.handle ) ) ; | 
| +  if ( h == 0 ) | 
| +  { | 
| +    throw WindowsApiError( "MsiGetActiveDatabase", 0 ) ; | 
| +  } | 
| +  return MsiHandle( h ) ; | 
| +} | 
| + | 
| +/** | 
| +* \par Implementation Notes | 
| +*    The only thing this constructor needs to do is to initialize the base class. | 
| +*/ | 
| +InstallationDatabase::InstallationDatabase( ImmediateSession & session ) | 
| +  : Database( GetActiveDatabase( session ) ) | 
| +{ | 
| +  // empty body | 
| +} ; | 
| + | 
| +//----------------------------------------------------------------------------------------- | 
| +// View | 
| +//----------------------------------------------------------------------------------------- | 
| +/** | 
| +* Implementation function for View::First(). | 
| +*/ | 
| +void ViewFirstBody( UINT x ) | 
| +{ | 
| +  if ( x != ERROR_SUCCESS ) | 
| +  { | 
| +    throw WindowsApiError( "MsiViewExecute", x ) ; | 
| +  } | 
| +} | 
| + | 
| +Record View::First() | 
| +{ | 
| +  ViewFirstBody( MsiViewExecute( handle, 0 ) ) ; | 
| +  return Next() ; | 
| +} | 
| + | 
| +Record View::First( Record & arguments ) | 
| +{ | 
| +  ViewFirstBody( MsiViewExecute( handle, arguments.handle ) ) ; | 
| +  return Next() ; | 
| +} | 
| + | 
| +Record View::Next() | 
| +{ | 
| +  MSIHANDLE h ; | 
| +  UINT x = MsiViewFetch( handle, & h ) ; | 
| +  if ( x == ERROR_NO_MORE_ITEMS ) | 
| +  { | 
| +    return Record( Record::NullType() ) ; | 
| +  } | 
| +  else if ( x == ERROR_SUCCESS ) | 
| +  { | 
| +    return Record( MsiHandle( h ) ) ; | 
| +  } | 
| +  throw WindowsApiError( "MsiViewFetch", x ) ; | 
| +} | 
| + | 
|  |