STDDataDB.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. #pragma once
  2. #include "stdafx.h"
  3. #include "STDDataDB.h"
  4. #include "STDDataTable.h"
  5. namespace OTSSQLITE
  6. {
  7. using namespace OTSSQLITE;
  8. CSTDDataDB::CSTDDataDB(CDBStoreBasePtr a_datastore)
  9. {
  10. m_tableInfo.reset(new CSTDDataTable());
  11. myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo);
  12. }
  13. CSTDDataDB::~CSTDDataDB()
  14. {
  15. }
  16. CSTDItemPtr CSTDDataDB::GetSTDItemById(const long a_nIncAId)
  17. {
  18. CSTDItemPtr pSTDItem;
  19. if (!m_listSTDItem.empty())
  20. {
  21. for (auto pItem : m_listSTDItem)
  22. {
  23. if (pItem->GetSTDId() == (DWORD)a_nIncAId)
  24. {
  25. pSTDItem = pItem;
  26. }
  27. }
  28. }
  29. else
  30. {
  31. auto tableQuery = GetQueryById(a_nIncAId);
  32. ASSERT(tableQuery);
  33. if (!tableQuery)
  34. {
  35. return pSTDItem;
  36. }
  37. if (!ReadSTDItem(tableQuery))
  38. {
  39. LogErrorTrace(__FILE__, __LINE__, _T("read x-ray failed."));
  40. return pSTDItem;
  41. }
  42. pSTDItem = CSTDItemPtr(new CSTDItem(*m_pSTDItem.get()));
  43. }
  44. return pSTDItem;
  45. }
  46. CSTDItemsList& CSTDDataDB::GetSTDItemList(const BOOL a_bForce/* = FALSE*/)
  47. {
  48. if (a_bForce)
  49. {
  50. m_listSTDItem.clear();
  51. }
  52. if (m_listSTDItem.size() == 0)
  53. {
  54. ReadSTDItemList();
  55. }
  56. return m_listSTDItem;
  57. }
  58. CDBTableBasePtr CSTDDataDB::GetTableInfo()
  59. {
  60. return m_tableInfo;
  61. }
  62. BOOL CSTDDataDB::Init(const BOOL a_bClean /*= FALSE*/)
  63. {
  64. return myDB->Init(a_bClean);
  65. }
  66. BOOL CSTDDataDB::CreateTable(const BOOL a_bForce /*= FALSE*/)
  67. {
  68. return myDB->CreateTable(a_bForce);
  69. }
  70. BOOL CSTDDataDB::DeleteTable()
  71. {
  72. return myDB->DeleteTable();
  73. }
  74. BOOL CSTDDataDB::RemoveAllRows()
  75. {
  76. return myDB->RemoveAllRows();
  77. }
  78. BOOL CSTDDataDB::IsDBExist()
  79. {
  80. return myDB->IsDBExist();
  81. }
  82. OTSSQLITE::CDBStoreBasePtr CSTDDataDB::GetDatastore()
  83. {
  84. return myDB->GetDatastore();
  85. }
  86. OTSSQLITE::CDBQueryBasePtr CSTDDataDB::GetTableQuery(LPCTSTR a_sOrderColumnName /*= nullptr*/)
  87. {
  88. return myDB->GetTableQuery(a_sOrderColumnName);
  89. }
  90. BOOL CSTDDataDB::ReadSTDItemList()
  91. {
  92. auto tableInfoPtr = GetTableInfo();
  93. ASSERT(tableInfoPtr);
  94. if (!tableInfoPtr)
  95. {
  96. return FALSE;
  97. }
  98. auto query = GetTableQuery();
  99. ASSERT(query);
  100. if (!query)
  101. {
  102. return FALSE;
  103. }
  104. m_listSTDItem = ReadSTDItemList(query);
  105. return TRUE;
  106. }
  107. CSTDItemsList CSTDDataDB::ReadSTDItemList(CDBQueryBasePtr a_query)
  108. {
  109. CSTDItemsList listSTDItem;
  110. int nRowId = 0;
  111. int nWrongItems = 0;
  112. while (!a_query->IsEOF())
  113. {
  114. if (!ReadSTDItem(a_query)) //current x-ray point
  115. {
  116. LogErrorTrace(__FILE__, __LINE__, _T("Read xray point failed"));
  117. nWrongItems++;
  118. break;
  119. }
  120. listSTDItem.push_back(m_pSTDItem);
  121. a_query->NextRow();
  122. nRowId++;
  123. }
  124. return listSTDItem;
  125. }
  126. BOOL CSTDDataDB::ReadSTDItem(CDBQueryBasePtr a_query)
  127. {
  128. int nCol;
  129. m_pSTDItem = CSTDItemPtr(new CSTDItem());
  130. CString sIncAName;
  131. nCol = (int)CSTDDataTable::ColumnID::S_NAME - (int)CSTDDataTable::ColumnID::MIN;
  132. sIncAName = a_query->GetColStringValue(nCol, _T(""));
  133. m_pSTDItem->SetName(sIncAName);
  134. int nIncAIdNow;
  135. nCol = (int)CSTDDataTable::ColumnID::N_INCA_ID - (int)CSTDDataTable::ColumnID::MIN;
  136. nIncAIdNow = a_query->GetColIntValue(nCol, -1);
  137. m_pSTDItem->SetSTDId(nIncAIdNow);
  138. CString sColor;
  139. nCol = (int)CSTDDataTable::ColumnID::S_COLOR - (int)CSTDDataTable::ColumnID::MIN;
  140. sColor = a_query->GetColStringValue(nCol, _T(""));
  141. m_pSTDItem->SetColor(sColor);
  142. double dHeightWidthRatio;
  143. nCol = (int)CSTDDataTable::ColumnID::F_HEIGHT_WIDTH_RATIO - (int)CSTDDataTable::ColumnID::MIN;
  144. dHeightWidthRatio = a_query->GetColFloatValue(nCol, -1);
  145. m_pSTDItem->SetWidth_HeightRadio(dHeightWidthRatio);
  146. int nGrayStart;
  147. nCol = (int)CSTDDataTable::ColumnID::N_GRAY_START - (int)CSTDDataTable::ColumnID::MIN;
  148. nGrayStart = a_query->GetColIntValue(nCol, -1);
  149. int nGrayEnd;
  150. nCol = (int)CSTDDataTable::ColumnID::N_GRAY_START - (int)CSTDDataTable::ColumnID::MIN;
  151. nGrayEnd = a_query->GetColIntValue(nCol, -1);
  152. CIntRangePtr pGrayRange = CIntRangePtr(new CIntRange());
  153. pGrayRange->SetStart(nGrayStart);
  154. pGrayRange->SetEnd(nGrayEnd);
  155. m_pSTDItem->SetGrayLevelRange(pGrayRange);
  156. int nElementRangeNum;
  157. nCol = (int)CSTDDataTable::ColumnID::N_ELEMENT_RANGE_NUM - (int)CSTDDataTable::ColumnID::MIN;
  158. nElementRangeNum = a_query->GetColIntValue(nCol, -1);
  159. m_pSTDItem->SetElementRange(nElementRangeNum);
  160. return TRUE;
  161. }
  162. CDBQueryBasePtr CSTDDataDB::GetQueryById(const long a_nIncAId)
  163. {
  164. CDBQueryBasePtr query;
  165. auto datastorePtr = GetDatastore();
  166. ASSERT(datastorePtr);
  167. if (!datastorePtr)
  168. {
  169. return query;
  170. }
  171. auto tableInfoPtr = GetTableInfo();
  172. ASSERT(tableInfoPtr);
  173. if (!tableInfoPtr)
  174. {
  175. return query;
  176. }
  177. CString sIncAIdColumnName = tableInfoPtr->GetColumnName((int)CSTDDataTable::ColumnID::N_INCA_ID - (int)CSTDDataTable::ColumnID::MIN);
  178. CString sSQLCommand;
  179. sSQLCommand.Format(_T("SELECT * FROM \'%s\' WHERE %s = %d AND %s = %d;"),
  180. (LPCTSTR)tableInfoPtr->GetTableName(),
  181. (LPCTSTR)sIncAIdColumnName,
  182. a_nIncAId);
  183. query = datastorePtr->QueryByCommand(sSQLCommand);
  184. ASSERT(query);
  185. if (!query || !query->IsValid())
  186. {
  187. LogErrorTrace(__FILE__, __LINE__, _T("Invalid quary command (%s)."), (LPCTSTR)sSQLCommand);
  188. ASSERT(FALSE);
  189. return (CDBQueryBasePtr());
  190. }
  191. // do the table related valid checking
  192. if (query->GetColCount() != GetTableInfo()->GetColumnCount())
  193. {
  194. LogErrorTrace(__FILE__, __LINE__, _T("query col num value is %d, but not %d"), query->GetColCount(), GetTableInfo()->GetColumnCount());
  195. ASSERT(FALSE);
  196. return (CDBQueryBasePtr());
  197. }
  198. return query;
  199. }
  200. }