STDDataDB.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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. return m_tableInfo;
  60. }
  61. BOOL CSTDDataDB::Init(const BOOL a_bClean /*= FALSE*/)
  62. {
  63. return myDB->Init(a_bClean);
  64. }
  65. BOOL CSTDDataDB::CreateTable(const BOOL a_bForce /*= FALSE*/)
  66. {
  67. return myDB->CreateTable(a_bForce);
  68. }
  69. BOOL CSTDDataDB::DeleteTable()
  70. {
  71. return myDB->DeleteTable();
  72. }
  73. BOOL CSTDDataDB::RemoveAllRows()
  74. {
  75. return myDB->RemoveAllRows();
  76. }
  77. BOOL CSTDDataDB::IsDBExist()
  78. {
  79. return myDB->IsDBExist();
  80. }
  81. OTSSQLITE::CDBStoreBasePtr CSTDDataDB::GetDatastore()
  82. {
  83. return myDB->GetDatastore();
  84. }
  85. OTSSQLITE::CDBQueryBasePtr CSTDDataDB::GetTableQuery(LPCTSTR a_sOrderColumnName /*= nullptr*/)
  86. {
  87. return myDB->GetTableQuery(a_sOrderColumnName);
  88. }
  89. BOOL CSTDDataDB::ReadSTDItemList()
  90. {
  91. auto tableInfoPtr = GetTableInfo();
  92. ASSERT(tableInfoPtr);
  93. if (!tableInfoPtr)
  94. {
  95. return FALSE;
  96. }
  97. auto query = GetTableQuery();
  98. ASSERT(query);
  99. if (!query)
  100. {
  101. return FALSE;
  102. }
  103. m_listSTDItem = ReadSTDItemList(query);
  104. return TRUE;
  105. }
  106. CSTDItemsList CSTDDataDB::ReadSTDItemList(CDBQueryBasePtr a_query)
  107. {
  108. CSTDItemsList listSTDItem;
  109. int nRowId = 0;
  110. int nWrongItems = 0;
  111. while (!a_query->IsEOF())
  112. {
  113. if (!ReadSTDItem(a_query)) //current x-ray point
  114. {
  115. LogErrorTrace(__FILE__, __LINE__, _T("Read xray point failed"));
  116. nWrongItems++;
  117. break;
  118. }
  119. listSTDItem.push_back(m_pSTDItem);
  120. a_query->NextRow();
  121. nRowId++;
  122. }
  123. return listSTDItem;
  124. }
  125. BOOL CSTDDataDB::ReadSTDItem(CDBQueryBasePtr a_query)
  126. {
  127. int nCol;
  128. m_pSTDItem = CSTDItemPtr(new CSTDItem());
  129. CString sIncAName;
  130. nCol = (int)CSTDDataTable::ColumnID::S_NAME - (int)CSTDDataTable::ColumnID::MIN;
  131. sIncAName = a_query->GetColStringValue(nCol, _T(""));
  132. m_pSTDItem->SetName(sIncAName);
  133. int nIncAIdNow;
  134. nCol = (int)CSTDDataTable::ColumnID::N_INCA_ID - (int)CSTDDataTable::ColumnID::MIN;
  135. nIncAIdNow = a_query->GetColIntValue(nCol, -1);
  136. m_pSTDItem->SetSTDId(nIncAIdNow);
  137. CString sColor;
  138. nCol = (int)CSTDDataTable::ColumnID::S_COLOR - (int)CSTDDataTable::ColumnID::MIN;
  139. sColor = a_query->GetColStringValue(nCol, _T(""));
  140. if (sColor.Left(1) != "#") sColor = "#" + sColor;
  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. }