/////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1998, Microsoft Corp. All rights reserved. // // FILE // // propcmd.h // // SYNOPSIS // // This file defines commands for manipulating the Objects table. // // MODIFICATION HISTORY // // 02/20/1998 Original version. // 04/03/1998 Increase property value length from 64 to 4096. // Bind integers as DBTYPE_I4. // Add PARAMETERS clause to all commands. // 02/15/1999 Make commands MT safe. // /////////////////////////////////////////////////////////////////////////////// #ifndef _PROPCMD_H_ #define _PROPCMD_H_ #include #include #include ////////// // Column widths including null-terminator (i.e., Jet column size + 1). ////////// const size_t PROPERTY_NAME_LENGTH = 256; const size_t PROPERTY_VALUE_LENGTH = 4096; ////////// // Command to erase the contents of a property bag. ////////// class EraseBag : public CommandBase { public: void execute(ULONG bagKey) { _serialize bag = bagKey; CommandBase::execute(); } PCWSTR getCommandText() const throw () { return L"PARAMETERS X LONG;" L"DELETE FROM Properties WHERE Bag = X;"; } protected: ULONG bag; BEGIN_BIND_MAP(EraseBag, ParamIO, DBACCESSOR_PARAMETERDATA) BIND_COLUMN(bag, 1, DBTYPE_I4), END_BIND_MAP() }; ////////// // Command to retrieve a property bag. ////////// class GetBag : public CommandBase { public: ~GetBag() { finalize(); } void execute(ULONG bagKey, PropertyBag& output); PCWSTR getCommandText() const throw () { return L"PARAMETERS X LONG;" L"SELECT Name, Type, StrVal FROM Properties WHERE Bag = X;"; } void initialize(IUnknown* session) { CommandBase::initialize(session); readAccess = createReadAccessor(command); } void finalize() throw () { releaseAccessor(readAccess); CommandBase::finalize(); } protected: ULONG bag; WCHAR name[PROPERTY_NAME_LENGTH]; ULONG type; WCHAR value[PROPERTY_VALUE_LENGTH]; HACCESSOR readAccess; BEGIN_BIND_MAP(GetBag, ParamIO, DBACCESSOR_PARAMETERDATA) BIND_COLUMN(bag, 1, DBTYPE_I4), END_BIND_MAP() BEGIN_BIND_MAP(GetBag, ReadAccessor, DBACCESSOR_ROWDATA) BIND_COLUMN(name, 1, DBTYPE_WSTR), BIND_COLUMN(type, 2, DBTYPE_I4), BIND_COLUMN(value, 3, DBTYPE_WSTR), END_BIND_MAP() }; ////////// // Command to save a property bag. ////////// class SetBag : public CommandBase { public: void execute(ULONG bagKey, PropertyBag& input); PCWSTR getCommandText() const throw () { return L"PARAMETERS W LONG, X TEXT, Y LONG, Z LONGTEXT;" L"INSERT INTO Properties (Bag, Name, Type, StrVal) VALUES (W, X, Y, Z);"; } protected: ULONG bag; WCHAR name[PROPERTY_NAME_LENGTH]; ULONG type; WCHAR value[PROPERTY_VALUE_LENGTH]; BEGIN_BIND_MAP(SetBag, ParamIO, DBACCESSOR_PARAMETERDATA) BIND_COLUMN(bag, 1, DBTYPE_I4), BIND_COLUMN(name, 2, DBTYPE_WSTR), BIND_COLUMN(type, 3, DBTYPE_I4), BIND_COLUMN(value, 4, DBTYPE_WSTR), END_BIND_MAP() }; #endif // _PROPCMD_H_