#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(""); } CSTDLibDB::CSTDLibDB(CDBStoreBasePtr a_datastore, CString strFileName) { m_tableInfo.reset(new CSTDLibTable()); myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo); m_strFileName = strFileName; } CSTDLibDB::~CSTDLibDB() { } CDBTableBasePtr CSTDLibDB::GetTableInfo() { return m_tableInfo; } 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); } CSpectrumSTDItemList CSTDLibDB::GetSTDItems(BOOL bForce/* = FALSE*/) { CSpectrumSTDItemList itms; if (bForce) { auto tableInfoPtr = GetTableInfo(); ASSERT(tableInfoPtr); if (!tableInfoPtr) { return itms; } auto query = GetTableQuery("id"); ASSERT(query); if (!query) { return itms; } while (!query->IsEOF()) { CSpectrumSTDItemPtr pSTDItem = ReadSTDItem(query); itms.push_back(pSTDItem); query->NextRow(); } return itms; } return itms; /*return m_pSTDLib;*/ } CSpectrumSTDItemPtr CSTDLibDB::ReadSTDItem(CDBQueryBasePtr a_query) { int iCol = 0; int iValue = 0; float fValue = 0; CString strValue = ""; CSpectrumSTDItemPtr pSTDMineral = CSpectrumSTDItemPtr(new CSpectrumSTDItem()); // ¸ø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::S_NAME - (int)CSTDLibTable::ColumnID::MIN; auto name = a_query->GetColStringValue(iCol); pSTDMineral->SetName(name); iCol = (int)CSTDLibTable::ColumnID::N_COLOR - (int)CSTDLibTable::ColumnID::MIN; auto color = a_query->GetColIntValue(iCol); pSTDMineral->SetColor(color); iValue = 0; iCol = (int)CSTDLibTable::ColumnID::B_SPEC - (int)CSTDLibTable::ColumnID::MIN; auto pSpec = a_query->GetColBlobValue(iCol, iValue); auto channelNum = pSTDMineral->GetXraySpectrum()->GetChannelsNum(); if (iValue == sizeof(DWORD) * channelNum) { pSTDMineral->GetXraySpectrum()->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; } }