windows-nt/Source/XPSP1/NT/net/ias/iasjet/setup/dbhelper/properties.h
2020-09-26 16:20:57 +08:00

375 lines
12 KiB
C++

/////////////////////////////////////////////////////////////////////////////
//
// Copyright(C) 2000 Microsoft Corporation all rights reserved.
//
// Module: Properties.H
//
// Project: Windows 2000 IAS
//
// Description: Declaration of the CProperties class
//
// Author: tperraut
//
// Revision 02/24/2000 created
//
/////////////////////////////////////////////////////////////////////////////
#ifndef _PROPERTIES_H_8FACED96_87C8_4f68_BFFB_92669BA5E835
#define _PROPERTIES_H_8FACED96_87C8_4f68_BFFB_92669BA5E835
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "nocopy.h"
#include "basecommand.h"
class CProperties : private NonCopyable
{
public:
//////////////
//Constructor
//////////////
explicit CProperties(CSession& SessionParam);
//////////////
// Destructor
//////////////
virtual ~CProperties() throw();
///////////////
// GetProperty
///////////////
HRESULT GetProperty(
LONG Bag,
_bstr_t& Name,
LONG& Type,
_bstr_t& StrVal
);
///////////////////
// GetNextProperty
///////////////////
HRESULT GetNextProperty(
LONG Bag,
_bstr_t& Name,
LONG& Type,
_bstr_t& StrVal,
LONG Index
);
/////////////////////
// GetPropertyByName
/////////////////////
HRESULT GetPropertyByName(
LONG Bag,
const _bstr_t& Name,
LONG& Type,
_bstr_t& StrVal
);
//////////////////
// InsertProperty
//////////////////
void InsertProperty(
LONG Bag,
const _bstr_t& Name,
LONG Type,
const _bstr_t& StrVal
);
//////////////////
// DeleteProperty
//////////////////
void DeleteProperty(
LONG Bag,
const _bstr_t& Name
);
////////////////////
// DeleteProperties
////////////////////
void DeletePropertiesExcept(
LONG Bag,
const _bstr_t& Exception
);
//////////////////
// UpdateProperty
//////////////////
void UpdateProperty(
LONG Bag,
const _bstr_t& Name,
LONG Type,
const _bstr_t& StrVal
);
private:
/////////////////////////////////////////////////////////////////////////////
// START of the Properties Commands classes
/////////////////////////////////////////////////////////////////////////////
struct CBasePropertiesConst
{
static const int NAME_SIZE = 256;
// 64 KB = the size of a memo field ?
// Here even 1024 would be enough
static const int STRVAL_SIZE = 65536;
static const int SIZE_EXCEPTION_MAX = 256;
};
//////////////////////////////////////////////////////////////////////////
// class CSelectPropertiesAcc
//////////////////////////////////////////////////////////////////////////
class CSelectPropertiesAcc : public CBasePropertiesConst
{
protected:
LONG m_Bag;
WCHAR m_Name[NAME_SIZE];
WCHAR m_StrVal[STRVAL_SIZE];
LONG m_Type;
BEGIN_COLUMN_MAP(CSelectPropertiesAcc)
COLUMN_ENTRY(1, m_Bag)
COLUMN_ENTRY(2, m_Name)
COLUMN_ENTRY(3, m_Type)
COLUMN_ENTRY(4, m_StrVal)
END_COLUMN_MAP()
LONG m_BagParam;
BEGIN_PARAM_MAP(CSelectPropertiesAcc)
COLUMN_ENTRY(1, m_BagParam)
END_PARAM_MAP()
DEFINE_COMMAND(CSelectPropertiesAcc, L" \
SELECT \
Bag, \
Name, \
Type, \
StrVal \
FROM Properties \
WHERE Bag = ?");
};
//////////////////////////////////////////////////////////////////////////
// class CPropertiesCommandGet
//////////////////////////////////////////////////////////////////////////
class CPropertiesCommandGet:
public CBaseCommand<CAccessor<CSelectPropertiesAcc> >
{
public:
explicit CPropertiesCommandGet(CSession& CurrentSession);
///////////////
// GetProperty
///////////////
HRESULT GetProperty(
LONG Bag,
_bstr_t& Name,
LONG& Type,
_bstr_t& StrVal
);
//////////////////////////
// GetProperty overloaded
//////////////////////////
HRESULT GetProperty(
LONG Bag,
_bstr_t& Name,
LONG& Type,
_bstr_t& StrVal,
LONG Index
);
};
//////////////////////////////////////////////////////////////////////////
// class CSelectPropertiesAcc
//////////////////////////////////////////////////////////////////////////
class CSelectPropertiesByNameAcc : public CBasePropertiesConst
{
protected:
LONG m_Bag;
WCHAR m_Name[NAME_SIZE];
WCHAR m_StrVal[STRVAL_SIZE];
LONG m_Type;
BEGIN_COLUMN_MAP(CSelectPropertiesByNameAcc)
COLUMN_ENTRY(1, m_Bag)
COLUMN_ENTRY(2, m_Name)
COLUMN_ENTRY(3, m_Type)
COLUMN_ENTRY(4, m_StrVal)
END_COLUMN_MAP()
LONG m_BagParam;
WCHAR m_NameParam[NAME_SIZE];
BEGIN_PARAM_MAP(CSelectPropertiesByNameAcc)
COLUMN_ENTRY(1, m_BagParam)
COLUMN_ENTRY(2, m_NameParam)
END_PARAM_MAP()
DEFINE_COMMAND(CSelectPropertiesByNameAcc, L" \
SELECT \
Bag, \
Name, \
Type, \
StrVal \
FROM Properties \
WHERE ((Bag = ?) AND (Name = ?))");
};
//////////////////////////////////////////////////////////////////////////
// class CPropertiesCommandGetByName
//////////////////////////////////////////////////////////////////////////
class CPropertiesCommandGetByName:
public CBaseCommand<CAccessor<CSelectPropertiesByNameAcc> >
{
public:
explicit CPropertiesCommandGetByName(CSession& CurrentSession);
///////////////
// GetPropertyByName
///////////////
HRESULT GetPropertyByName(
LONG Bag,
const _bstr_t& Name,
LONG& Type,
_bstr_t& StrVal
);
};
//////////////////////////////////////////////////////////////////////////
// class CInsertPropertyAcc
//////////////////////////////////////////////////////////////////////////
class CInsertPropertyAcc : public CBasePropertiesConst
{
protected:
WCHAR m_NameParam[NAME_SIZE];
LONG m_TypeParam;
WCHAR m_StrValParam[STRVAL_SIZE];
LONG m_BagParam;
BEGIN_PARAM_MAP(CInsertPropertyAcc)
COLUMN_ENTRY(1, m_BagParam)
COLUMN_ENTRY(2, m_NameParam)
COLUMN_ENTRY(3, m_TypeParam)
COLUMN_ENTRY(4, m_StrValParam)
END_PARAM_MAP()
DEFINE_COMMAND(CInsertPropertyAcc, L" \
INSERT INTO Properties \
(Bag, Name, Type, StrVal) \
VALUES (?, ?, ?, ?)")
// You may wish to call this function if you are inserting a record
// and wish to initialize all the fields, if you are not going to
// explicitly set all of them.
void ClearRecord()
{
memset(this, 0, sizeof(*this));
}
};
//////////////////////////////////
// class CPropertiesCommandInsert
//////////////////////////////////
class CPropertiesCommandInsert:
public CBaseCommand<CAccessor<CInsertPropertyAcc> >
{
public:
explicit CPropertiesCommandInsert(CSession& CurrentSession);
void InsertProperty(
LONG Bag,
const _bstr_t& Name,
LONG Type,
const _bstr_t& StrVal
);
};
//////////////////////////////////////////////////////////////////////////
// class CDeletePropertyAcc
//////////////////////////////////////////////////////////////////////////
class CDeletePropertyAcc : public CBasePropertiesConst
{
protected:
WCHAR m_NameParam[NAME_SIZE];
LONG m_BagParam;
BEGIN_PARAM_MAP(CDeletePropertyAcc)
COLUMN_ENTRY(1, m_BagParam)
COLUMN_ENTRY(2, m_NameParam)
END_PARAM_MAP()
DEFINE_COMMAND(CDeletePropertyAcc, L" \
DELETE * \
FROM Properties \
WHERE ((Bag = ?) AND (Name = ?))")
};
//////////////////////////////////
// class CPropertiesCommandDelete
//////////////////////////////////
class CPropertiesCommandDelete:
public CBaseCommand<CAccessor<CDeletePropertyAcc> >
{
public:
explicit CPropertiesCommandDelete(CSession& CurrentSession);
void DeleteProperty(
LONG Bag,
const _bstr_t& Name
);
};
//////////////////////////////////////////////////////////////////////////
// class CDeletePropertiesAcc
//////////////////////////////////////////////////////////////////////////
class CDeletePropertiesAcc : public CBasePropertiesConst
{
protected:
LONG m_BagParam;
WCHAR m_ExceptionParam[SIZE_EXCEPTION_MAX];
BEGIN_PARAM_MAP(CDeletePropertiesAcc)
COLUMN_ENTRY(1, m_BagParam)
COLUMN_ENTRY(2, m_ExceptionParam)
END_PARAM_MAP()
DEFINE_COMMAND(CDeletePropertiesAcc, L" \
DELETE * \
FROM Properties \
WHERE ( (Bag = ?) AND (Name <> ?))")
};
//////////////////////////////////
// class CPropertiesCommandDelete
//////////////////////////////////
class CPropertiesCommandDeleteMultiple:
public CBaseCommand<CAccessor<CDeletePropertiesAcc> >
{
public:
explicit CPropertiesCommandDeleteMultiple(CSession& CurrentSession);
void DeletePropertiesExcept(LONG Bag, const _bstr_t& Exception);
};
CPropertiesCommandGet m_PropertiesCommandGet;
CPropertiesCommandGetByName m_PropertiesCommandGetByName;
CPropertiesCommandInsert m_PropertiesCommandInsert;
CPropertiesCommandDelete m_PropertiesCommandDelete;
CPropertiesCommandDeleteMultiple m_PropertiesCommandDeleteMultiple;
};
#endif // _PROPERTIES_H_8FACED96_87C8_4f68_BFFB_92669BA5E835