Files
2022-10-26 12:25:11 +08:00

122 lines
4.3 KiB
C++

#ifndef __QUERY_POOL_FACTORY_DEFINE_H__
#define __QUERY_POOL_FACTORY_DEFINE_H__
//==================================================================================================
// NOTE: the below section is used to correctly fit a query reordering sequence binding
#define _REORDERING_PARAM(field_name, _PARAMETER_TYPE_) \
_BINDING_PARAM(_REORDERING_PARAM_NO_##field_name, field_name, _PARAMETER_TYPE_)
#define _REORDERING_PARAM_PTR(field_name, _PARAMETER_TYPE_) \
_BINDING_PARAM_PTR(_REORDERING_PARAM_NO_##field_name, field_name, _PARAMETER_TYPE_)
// temporary
#define _REORDERING_PARAM_DUMMY(field_name, _PARAMETER_TYPE_) \
_BINDING_PARAM(_REORDERING_PARAM_NO_##field_name, _dummy_field_, _PARAMETER_TYPE_)
#define _MAKE_REORDERING_PARAM_NO_START_(field_name, number) \
_REORDERING_PARAM_NO_##field_name = (number)
#define _MAKE_REORDERING_PARAM_NO_(field_name) \
_REORDERING_PARAM_NO_##field_name
#define _MAKE_REORDERING_PARAM_NO_PTR_(field_name) \
_REORDERING_PARAM_NO_##field_name
#define _MAKE_REORDERING_PARAM_NO_COUNTS_() \
_REORDERING_PARAM_NO_MAX_COUNTS
//--------------------------------------------------------------------------------------------------
#define _REORDERING_BINDING_COLUMN(field_name) \
_BINDING_COLUMN(_REORDERING_BINDING_NO_##field_name, field_name)
#define _REORDERING_BINDING_COLUMN_PTR(field_name) \
_BINDING_COLUMN_PTR(_REORDERING_BINDING_NO_##field_name, field_name)
// temporary
#define _REORDERING_BINDING_COLUMN_DUMMY(field_name) \
_BINDING_COLUMN(_REORDERING_BINDING_NO_##field_name, _dummy_field_)
#define _MAKE_REORDERING_BINDING_NO_START_(field_name, number) \
_REORDERING_BINDING_NO_##field_name = (number)
#define _MAKE_REORDERING_BINDING_NO_(field_name) \
_REORDERING_BINDING_NO_##field_name
// to compatible
#define _MAKE_REORDERING_BINDING_NO_PTR_(field_name) \
_REORDERING_BINDING_NO_##field_name
#define _MAKE_REORDERING_BINDING_NO_COUNTS_() \
_REORDERING_BINDING_NO_MAX_COUNTS
//--------------------------------------------------------------------------------------------------
/*
// samples
{
...;
private:
enum {
_MAKE_REORDERING_PARAM_NO_START_(param_name#1, [start_no]),
#ifdef _CONTENT_PRE_PROCESSOR_
_MAKE_REORDERING_PARAM_NO_(param_name#2),
#endif
...,
_MAKE_REORDERING_PARAM_NO_COUNTS_() // end of records. it equal to number of records
};
enum {
_MAKE_REORDERING_BINDING_NO_START_(field_name#1, [start_no]),
_MAKE_REORDERING_BINDING_NO_(field_name#2),
#ifdef _CONTENT_PRE_PROCESSOR_
_MAKE_REORDERING_BINDING_NO_(field_name#3),
#endif
...,
_MAKE_REORDERING_BINDING_NO_COUNTS_() // end of records. it equal to number of records
};
public:
enum {
...,
PARAM_COL_NUM = _MAKE_REORDERING_PARAM_NO_COUNTS_(),
...,
RESULT_COL_NUM = _MAKE_REORDERING_BINDING_NO_COUNTS_(),
};
_BEGIN_PARAM_DATA(...)
_REORDERING_PARAM(param_name#1, 0, SQL_PARAM_OUTPUT)
_REORDERING_PARAM(param_name#2, 0, SQL_PARAM_INPUT)
_REORDERING_PARAM(param_name#3, 0, SQL_PARAM_INPUT)
...
_END_PARAM_DATA();
_BEGIN_BINDING_DATA(...)
_REORDERING_BINDING_COLUMN(field_name#1) -or-
_REORDERING_BINDING_COLUMN_PTR(field_name#2)
...
_END_BINDING_DATA();
};
*/
//==================================================================================================
namespace nsQuery {};
#define __DECL_SAFECUSTOMPOOL_PTR(_CLASS_NAME_) \
private: \
typedef util::SafeMemoryPoolFactory<_CLASS_NAME_ >* query_pool_type; \
static query_pool_type query_pool_static; \
static bool pool_register_static; \
public: \
static _CLASS_NAME_* ALLOC(); \
static void FREE(_CLASS_NAME_* query_ptr); \
public:
#define __IMPL_SAFECUSTOMPOOL_PTR(_CLASS_NAME_) \
_CLASS_NAME_::query_pool_type _CLASS_NAME_::query_pool_static; \
bool _CLASS_NAME_::pool_register_static = ::nsQuery::QueryPoolFactory::RegisterPool(\
&_CLASS_NAME_::query_pool_static, #_CLASS_NAME_); \
_CLASS_NAME_* _CLASS_NAME_::ALLOC() { return query_pool_static->Alloc(); } \
void _CLASS_NAME_::FREE(_CLASS_NAME_* query_ptr) { query_pool_static->Free(query_ptr); }
//==================================================================================================
#endif // __QUERY_POOL_FACTORY_DEFINE_H__