S3PTableDAO.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:5k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /**************************************************/
  2. /*                                                */
  3. /*  文件名:    S3PTableDAO.cpp                    */
  4. /*  描述    :  一个表维护基类, 它分析每个        */
  5. /*             字段的类型,然后根据不同的功能     */
  6. /*             组织成相应的sql语句                */
  7. /*                                                */
  8. /* 作者  : Liu Wansong                        */
  9. /* 创建日期 : 8/22/2002                          */
  10. /*  修改日期 : 8/26/2002                          */
  11. /**************************************************/
  12. //////////////////////////////////////////////////////////////////////
  13. #include "S3PTableDAO.h"
  14. #include "S3PDBConnection.h"
  15. #include "regexpr2.h"
  16. using namespace std;
  17. using namespace regex;
  18. //////////////////////////////////////////////////////////////////////
  19. // Construction/Destruction
  20. //////////////////////////////////////////////////////////////////////
  21. S3PTableDAO::S3PTableDAO()
  22. {
  23. }
  24. S3PTableDAO::~S3PTableDAO()
  25. {
  26. }
  27. int S3PTableDAO::Add(S3PRow * row)
  28. {
  29. std::string strQuery;
  30. std::string tableName = GetTableName();
  31. std::string strInsert;
  32. if ( row->GetExpLikeInsert(strInsert) > 0 )
  33. {
  34. strQuery = "insert into " + tableName + strInsert;
  35. S3PDBConnection * pConn = GetConnection();
  36. if(pConn)
  37. {
  38. if ( pConn->Do(strQuery.c_str()) )
  39. {
  40. // Success
  41. m_resAdd = *((ResNSel *)pConn->GetRes());
  42. }
  43. else
  44. {
  45. return -3;
  46. }
  47. }
  48. else
  49. {
  50. return -1;
  51. }
  52. }
  53. else
  54. {
  55. return -2;
  56. }
  57. return 1;
  58. }
  59. int S3PTableDAO::Update(S3PRow * row, S3PRow * where)
  60. {
  61. std::string strQuery;
  62. std::string tableName = GetTableName();
  63. std::string strWhere;
  64. std::string strUpdate;
  65. if ( row->GetExpLikeUpdate(strUpdate) > 0 )
  66. {
  67. strQuery = "update " + tableName + " set " + strUpdate;
  68. if (where && where->GetExpLikeWhereAnd(strWhere) >0 )
  69. {
  70. strQuery += " where " + strWhere;
  71. S3PDBConnection * pConn = GetConnection();
  72. if(pConn)
  73. {
  74. if(pConn->Do(strQuery.c_str()))
  75. {
  76. //Success
  77. }
  78. else
  79. {
  80. return -3;
  81. }
  82. }
  83. else
  84. {
  85. return -1;
  86. }
  87. }
  88. }
  89. else
  90. {
  91. return -2;
  92. }
  93. return 1;
  94. }
  95. int S3PTableDAO::Delete(S3PRow * where)
  96. {
  97. std::string strQuery;
  98. std::string tableName = GetTableName();
  99. strQuery = "delete from " + tableName;
  100. std::string strWhere;
  101. if (where && where->GetExpLikeWhereAnd(strWhere) > 0 )
  102. {
  103. strQuery += " where " + strWhere;
  104. }
  105. S3PDBConnection * pConn = GetConnection();
  106. if(pConn)
  107. {
  108. if(pConn->Do(strQuery.c_str()))
  109. {
  110. //Success
  111. }
  112. else
  113. {
  114. return -3;
  115. }
  116. }
  117. else
  118. {
  119. return -1;
  120. }
  121. return 1;
  122. }
  123. bool S3PTableDAO::HasItem( S3PRow* where )
  124. {
  125. bool bRet = false;
  126. std::string strQuery;
  127. std::string tableName = GetTableName();
  128. strQuery = "select * from " + tableName;
  129. std::string strWhere;
  130. if ( where && where->GetExpLikeWhereAnd(strWhere) > 0 )
  131. {
  132. strQuery += " where " + strWhere;
  133. }
  134. S3PDBConnection * pConn = GetConnection();
  135. if( pConn )
  136. {
  137. S3PResult result;
  138. if ( Query( strQuery, result ) > 0 )
  139. {
  140. if ( result.size() > 0 )
  141. {
  142. bRet = true;
  143. }
  144. }
  145. }
  146. return bRet;
  147. }
  148. int S3PTableDAO::Query(std::string q, S3PResult & result)
  149. {
  150. S3PDBConnection * pConn = GetConnection();
  151. if(pConn)
  152. {
  153. if(pConn->QueryBySql(q.c_str()))
  154. {
  155. //Success
  156. Result * pResult = (Result*)(pConn->GetRes());
  157. if (pResult)
  158. {
  159. result.SetResult(pResult);
  160. }
  161. else
  162. {
  163. return -4;
  164. }
  165. }
  166. else
  167. {
  168. return -3;
  169. }
  170. }
  171. else
  172. {
  173. return -1;
  174. }
  175. return 1;
  176. }
  177. int S3PTableDAO::AddGroup(const std::list<ColumnAndValue*> & group)
  178. {
  179. BOOL bFirst = TRUE;
  180. std::string strQuery;
  181. std::list<ColumnAndValue*>::const_iterator i;
  182. int errCode = 0;
  183. try
  184. {
  185. for(i=group.begin();i!=group.end();i++)
  186. {
  187. S3PRow row(GetTableName(), (*i), GetConnection());
  188. if(bFirst)
  189. {
  190. std::string keys;
  191. if (row.GetExpLikeInsertKey(keys)>0)
  192. {
  193. strQuery = "insert into " + GetTableName() + keys + " values";
  194. }
  195. else
  196. {
  197. errCode = -1;
  198. throw(errCode);
  199. }
  200. bFirst = FALSE;
  201. }
  202. std::string values;
  203. if (row.GetExpLikeInsertValue(values)>0)
  204. {
  205. strQuery += values + ",";
  206. }
  207. else
  208. {
  209. errCode = -2;
  210. throw(errCode);
  211. }
  212. }
  213. subst_results results;
  214. rpattern pat(",$", "");
  215. pat.substitute(strQuery, results );
  216. S3PDBConnection * pConn = GetConnection();
  217. if(pConn)
  218. {
  219. if ( pConn->Do(strQuery.c_str()) )
  220. {
  221. // Success
  222. }
  223. else
  224. {
  225. errCode = -3;
  226. throw(errCode);
  227. }
  228. }
  229. else
  230. {
  231. errCode = -4;
  232. throw(errCode);
  233. }
  234. }
  235. catch(...)
  236. {
  237. return errCode;
  238. }
  239. return 1;
  240. }
  241. int S3PTableDAO::GetInsertID()
  242. {
  243. return m_resAdd.insert_id;
  244. }
  245. int S3PTableDAO::Query(S3PDBConnection *pConn, string q, S3PResult &result)
  246. {
  247. if(pConn)
  248. {
  249. if(pConn->QueryBySql(q.c_str()))
  250. {
  251. //Success
  252. Result * pResult = (Result*)(pConn->GetRes());
  253. if (pResult)
  254. {
  255. result.SetResult(pResult);
  256. }
  257. else
  258. {
  259. return -4;
  260. }
  261. }
  262. else
  263. {
  264. return -3;
  265. }
  266. }
  267. else
  268. {
  269. return -1;
  270. }
  271. return 1;
  272. }