#pragma once #ifndef __SOLAR_DATABAES_H__ #define __SOLAR_DATABAES_H__ /*======================================================================================================================= // »ç¿ë¹ý ¿¹Á¦) !!!!! Caution !!!!! // ¼ÂÁßÀÇ ÇϳªÀÇ DefineÇØ¾ß ÇÔ // Database ¸ðµâÀ» »ç¿ëÇϰíÀÚ ÇÏ´Â ÇÁ·ÎÁ§Æ®ÀÇ stdafx.h°ú °°Àº °øÅë includeÆÄÀÏ¿¡ ³Ö¾îÁÖ´Â °ÍÀ» ±ÇÀåÇÑ´Ù. // ȤÀº ÇÁ·ÎÁ§Æ® ¼Ó¼ºÀÇ precompile define¿¡ ³Ö¾î µÎ´Â °ÍÀÌ ÁÁ´Ù. #define _USING_ODBC // ODBC»ç¿ë //#define _USING_OLEDB // OLEDB»ç¿ë //#define _USING_SQLLIB // SQLLIB»ç¿ë // ÃʱâÈ­ ÄÚµå SolarDatabaseDesc db_desc; db_desc.database_module_type = DBCInterfaceType_ODBC; //db_desc.database_module_type = DBCInterfaceType_OLEDB; //db_desc.database_module_type = DBCInterfaceType_SQLLIB; db_desc.query_pool_size = 50000; db_desc.query_processor_num = 1; db_desc.database_ip = "IPÁÖ¼Ò"; db_desc.database_name = "µ¥ÀÌÅͺ£À̽º"; db_desc.user_name = "°èÁ¤¾Æµð"; db_desc.user_password = "ºñ¹Ð¹øÈ£"; db_desc.fnptr_error_message = CallBackMessage1; db_desc.fnptr_query_result = CallBackQueryResult1; m_pDB = new SolarDatabase; m_pDB->Initialize(db_desc); // °è¼Ó È£ÃâµÇ¾î¾ß ÇÏ´Â ºÎºÐ m_pDB->Update(); // DB¸ðµâ Á¾·á m_pDB->Release(); delete m_pDB; // Äõ¸® ÄÚµå // ¸Þ¸ð¸® Ç®¿¡¼­ Äõ¸®object ÇÒ´ç AccountTestQuery* query = QUERYALLOC(AccountTestQuery); query->SetIndex(1234); // Äõ¸® ±¸ºÐÀ» À§ÇØ query->SetVoidObject(this); // Ä¿½ºÅÒ Æ÷ÀÎÅÍ Àü´Þ query->SetQuery("select* from AccountTest where UserGuid =123"); // Äõ¸® ±¸¹® m_pDB->DBQuery(query); // Äõ¸® °á°ú Äݹé ÄÚµå void CallBackQueryResult1(DWORD dwIndex, QueryResult* pData) { switch (dwIndex) { case 1234: { // Äõ¸® ó¸® } break; } // Äõ¸®»ç¿ëÈÄ ¸Þ¸ð¸® ¹Ýȯ QUERYFREE(AccountTestQuery, (AccountTestQuery *)pData); } // ¿¡·¯ ¸Þ½ÃÁö Äݹé ÄÚµå void CallBackMessage1(char* szMessage) { printf(szMessage); printf("\n"); } =======================================================================================================================*/ //======================================================================================================================= /// Database¿¡ ¿¬°áÇÏ¿© Query+ResultÇÏ´Â µ¥ÀÌÅͺ£À̽º Ŭ·¡½º /** @author Kim Min Wook < taiyo@webzen.co.kr > @since 2004. 10. 20 @remarks - SolarDatabase´Â ODBC, OLEDB, MSSQLLIB ¸ðµâÀ» Á¦°øÇÑ´Ù. - SolarDatabase´Â µ¥ÀÌÅÍ º¹»ç memcpy¸¦ ÁÙ¿´´Ù.¹ÙÀεù½Ã µ¥ÀÌÅÍ º¹»ç ÀϾ < Usage > - DB¿¡ ¿¬°áÇϰíÀÚÇÏ´Â ÇÁ·ÎÁ§Æ®(ex:DBProxy)¿¡¼­ SolarDatabase ÀνºÅϽº¸¦ °¡Áø´Ù. - SolarDatabaseDescÀÇ °ü·ÃÁ¤º¸¸¦ ³Ö°í Initialize()¸¦ È£ÃâÇÑ´Ù. - ¸Å ÇÁ·¹ÀÓ Àû´çÇÑ ½Ã°£ °£°ÝÀ¸·Î Update()¸¦ È£ÃâÇÑ´Ù. - Äõ¸®ÇÒ µ¥ÀÌÅ͸¦ Query classÀÇ ±¸Á¶¿¡ ¸Â°Ô Á¤ÀÇ(Binding)ÇÑ ÈÄ DBQuery()¸¦ È£ÃâÇÑ´Ù. (Non-blocking function) - Äõ¸®ÇÑ °á°ú´Â SolarDatabaseDesc¿¡ Á¤ÀÇÇÑ ÄݹéÇÔ¼ö·Î Å뺸µÈ´Ù. - DB¿¬°áÀ» Á¾·áÇÏ·Á¸é SolarDatabaseÀÇ Relese()¸¦ È£ÃâÇÑ´Ù. @note - MSSQLLIB´Â MSSQLDatabaseÀ̿ܿ¡´Â »ç¿ëÇÒ ¼ö ¾ø´Ù. - SolarDatabaseÀÇ Relese()ÇÔ¼ö È£ÃâÈÄ DBQuery()´Â FALSE¸¦ ¸®ÅÏÇÑ´Ù. - SolarDatabaseÀÇ DBQuery()ÇÔ¼ö°¡ TRUE¸¦ ¸®ÅÏÇÑ Query´Â Á¾·áµÇ´õ¶óµµ ¾ÈÀüÇÏ°Ô Äõ¸®µÈ´Ù. - SolarDatabaseDescÀÇ query_processor_numÀÇ °ªÀÌ 2ÀÌ»óÀ϶§´Â DBQuery()ÇÑ Äõ¸®°á°úÀÇ ¼ø¼­¸¦ º¸ÀåÇÒ ¼ö ¾ø´Ù. (´Ü, 5¹è ÀÌ»óÀÇ ¼ÓµµÇâ»óÀ» º¼ ¼ö ÀÖ´Ù.) - DBQuery()¿¡ ÀÎÀÚ·Î ³Ñ±â´Â Query ÀνºÅϽº´Â User Side¿¡¼­ ¸Þ¸ð¸® Ç®·Î °ü¸®ÇÏ´Â °ÍÀ» ±ÇÀåÇÑ´Ù. - Module»ç¿ë¿¡ ÇÊ¿äÇÑ °ü·Ã ÆÄÀϵé : SolarDatabase.dll SolarDatabase.lib SolarDatabase.h SolarDatabaseDefine.h QueryResult.h @todo - 2005.3.6 : ODBCÀÇ ¿¡·¯ ¸Þ½ÃÁö Ãâ·Â! @history - ~10/08/06|custom module| - 10/08/06|waverix|code arrangement related to change types and making const member */ //======================================================================================================================= #include "SolarDatabaseDefine.h" #include #include class QueryResult; class IDBCInterface; //================================================================================================== class SOLARDATABASE_API SolarDatabase { friend class QueryExecuteProcessor; public: SolarDatabase(); ~SolarDatabase(); bool Initialize(const SolarDatabaseDesc& desc); void Update(); void Release(); bool DBQuery(Query* query); bool IsRemainsQueries() const; int GetBufferedQueryNum() const; bool ReConnect(WORD db_index); private: // inline void SwitchQueryResultList(); // struct SolarDBData { IDBCInterface** dbc_instance_array_; util::ThreadPool* thread_pool_; fnCallBackMessage fnptr_error_message_; fnCallBackQueryResult fnptr_query_result_; WORD query_processor_num_; bool is_end_process_; HANDLE qep_wakeup_event_; util::WxRingBuffer* query_list_; util::WxRingBuffer* query_result_list_; }; SolarDBData inter_data_; }; //================================================================================================== // implements //================================================================================================== #endif // __SOLAR_DATABAES_H__