STDDataDB.cpp 5.4 KB

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