#include "stdafx.h" #include "OTSSTDLibDB.h" #include "OTSSTDLibTable.h" using namespace OTSSQLITE; namespace OTSClassifyEngine { CSTDLibDB::CSTDLibDB(CDBStoreBasePtr a_datastore) { m_tableInfo.reset(new CSTDLibTable()); myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo); m_strFileName = _T(""); m_pSTDLib = CSTDLibPtr(new CSTDLib()); //m_elementDB = nullptr; m_STDGroupDB = nullptr; } CSTDLibDB::CSTDLibDB(CDBStoreBasePtr a_datastore, CString strFileName) { m_tableInfo.reset(new CSTDLibTable()); myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo); m_strFileName = strFileName; m_pSTDLib = CSTDLibPtr(new CSTDLib()); //m_elementDB = nullptr; m_STDGroupDB = nullptr; } CSTDLibDB::~CSTDLibDB() { } CDBTableBasePtr CSTDLibDB::GetTableInfo() { return m_tableInfo; } CSTDGroupDBPtr CSTDLibDB::GetSTDGroupDB() { if (!m_STDGroupDB) { auto datastorePtr = GetDatastore(); if (datastorePtr) { m_STDGroupDB = std::make_shared(CSTDGroupDB(datastorePtr)); } } return m_STDGroupDB; } BOOL CSTDLibDB::Init(const BOOL a_bClean /*= FALSE*/) { return myDB->Init(a_bClean); } BOOL CSTDLibDB::CreateTable(const BOOL a_bForce /*= FALSE*/) { return myDB->CreateTable(a_bForce); } BOOL CSTDLibDB::DeleteTable() { return myDB->DeleteTable(); } BOOL CSTDLibDB::RemoveAllRows() { return myDB->RemoveAllRows(); } BOOL CSTDLibDB::IsDBExist() { return myDB->IsDBExist(); } OTSSQLITE::CDBStoreBasePtr CSTDLibDB::GetDatastore() { return myDB->GetDatastore(); } OTSSQLITE::CDBQueryBasePtr CSTDLibDB::GetTableQuery(LPCTSTR a_sOrderColumnName /*= nullptr*/) { return myDB->GetTableQuery(a_sOrderColumnName); } CSTDLibPtr CSTDLibDB::GetSTDLib(BOOL bForce/* = FALSE*/) { if (bForce) { m_pSTDLib->Clear(); } if (0 == m_pSTDLib->GetSTDItemCount()) { ReadSTDLib(); } if (0 == m_pSTDLib->GetClassifyCount()) { GetSTDGroup(m_pSTDLib); } //m_pOretype->SetName(_T("")); return m_pSTDLib; } BOOL CSTDLibDB::ReadSTDLib() { auto tableInfoPtr = GetTableInfo(); ASSERT(tableInfoPtr); if (!tableInfoPtr) { return FALSE; } auto query = GetTableQuery("id"); ASSERT(query); if (!query) { return FALSE; } return ReadSTDLib(query); } BOOL CSTDLibDB::ReadSTDLib(CDBQueryBasePtr a_query) { while (!a_query->IsEOF()) { CStandardItemPtr pSTDItem = ReadSTDItem(a_query); m_pSTDLib->AddItem(pSTDItem.get()); a_query->NextRow(); } return true; } BOOL CSTDLibDB::ReadPartSTDLib() { auto tableInfoPtr = GetTableInfo(); ASSERT(tableInfoPtr); if (!tableInfoPtr) { return FALSE; } auto query = GetTableQuery("STDId"); ASSERT(query); if (!query) { return FALSE; } return ReadPartSTDLib(query); } BOOL CSTDLibDB::ReadPartSTDLib(CDBQueryBasePtr a_query) { while (!a_query->IsEOF()) { CStandardItemPtr pSTDItem = ReadSTDItem(a_query); m_pSTDLib->AddItem(pSTDItem.get()); a_query->NextRow(); } return true; } CStandardItemPtr CSTDLibDB::ReadSTDItem(CDBQueryBasePtr a_query) { int iCol = 0; int iValue = 0; float fValue = 0; CString strValue = ""; CStandardItemPtr pSTDMineral = CStandardItemPtr(new CStandardItem()); // ¸øpSTDMineral¸³Öµ iCol = (int)CSTDLibTable::ColumnID::N_ID - (int)CSTDLibTable::ColumnID::MIN; iValue = a_query->GetColIntValue(iCol, 0); pSTDMineral->SetID(iValue); iValue = 0; iCol = (int)CSTDLibTable::ColumnID::B_SPEC - (int)CSTDLibTable::ColumnID::MIN; auto pSpec = a_query->GetColBlobValue(iCol, iValue); if (iValue == sizeof(DWORD) * pSTDMineral->GetChannelsNo()) { pSTDMineral->SetXrayData((DWORD*)pSpec); } //the elements ratio is usfull only when we make the report so we don't read them here. /*GetElements(pSTDMineral);*/ return pSTDMineral; } /*BOOL CSTDLibDB::GetElements(CStandardItemPtr& pSTDMineral) { auto elementdb = GetElementDB(); return elementdb->GetElements(pSTDMineral); }*/ BOOL CSTDLibDB::GetSTDGroup(CSTDLibPtr& pOretype) { auto mineralgroupdb = GetSTDGroupDB(); return mineralgroupdb->GetSTDGroups(pOretype); } }