375 lines
12 KiB
C++
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
|