///////////////////////////////////////////////////////////////////////////// // // 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 > { 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 > { 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 > { 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 > { 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 > { 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