| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 | #pragma once#include "stdafx.h"#include "STDDataDB.h"#include "STDDataTable.h"namespace OTSSQLITE{	using namespace OTSSQLITE;	CSTDDataDB::CSTDDataDB(CDBStoreBasePtr a_datastore)	{		m_tableInfo.reset(new CSTDDataTable());		myDB = CreateNewSQLiteDB(a_datastore,m_tableInfo);	}	CSTDDataDB::~CSTDDataDB()	{	}	CSTDItemPtr CSTDDataDB::GetSTDItemById(const long a_nIncAId)	{		CSTDItemPtr pSTDItem;		if (!m_listSTDItem.empty())		{			for (auto pItem : m_listSTDItem)			{				if (pItem->GetSTDId() == (DWORD)a_nIncAId)				{					pSTDItem = pItem;				}			}		}		else		{			auto tableQuery = GetQueryById(a_nIncAId);			ASSERT(tableQuery);			if (!tableQuery)			{				return pSTDItem;			}			if (!ReadSTDItem(tableQuery))			{				LogErrorTrace(__FILE__, __LINE__, _T("read x-ray failed."));				return pSTDItem;			}			pSTDItem = CSTDItemPtr(new CSTDItem(*m_pSTDItem.get()));		}		return pSTDItem;	}	CSTDItemsList& CSTDDataDB::GetSTDItemList(const BOOL a_bForce/* = FALSE*/)	{		if (a_bForce)		{			m_listSTDItem.clear();		}		if (m_listSTDItem.size() == 0)		{			ReadSTDItemList();		}		return m_listSTDItem;	}		CDBTableBasePtr CSTDDataDB::GetTableInfo()	{		return m_tableInfo;	}	BOOL CSTDDataDB::Init(const BOOL a_bClean /*= FALSE*/)	{		return myDB->Init(a_bClean);	}	BOOL CSTDDataDB::CreateTable(const BOOL a_bForce /*= FALSE*/)	{		return myDB->CreateTable(a_bForce);	}	BOOL CSTDDataDB::DeleteTable()	{		return myDB->DeleteTable();	}	BOOL CSTDDataDB::RemoveAllRows()	{		return myDB->RemoveAllRows();	}	BOOL CSTDDataDB::IsDBExist()	{		return myDB->IsDBExist();	}	OTSSQLITE::CDBStoreBasePtr CSTDDataDB::GetDatastore()	{		return myDB->GetDatastore();	}	OTSSQLITE::CDBQueryBasePtr CSTDDataDB::GetTableQuery(LPCTSTR a_sOrderColumnName /*= nullptr*/)	{		return myDB->GetTableQuery(a_sOrderColumnName);	}	BOOL CSTDDataDB::ReadSTDItemList()	{		auto tableInfoPtr = GetTableInfo();		ASSERT(tableInfoPtr);		if (!tableInfoPtr)		{			return FALSE;		}		auto query = GetTableQuery();		ASSERT(query);		if (!query)		{			return FALSE;		}		m_listSTDItem = ReadSTDItemList(query);		return TRUE;	}	CSTDItemsList CSTDDataDB::ReadSTDItemList(CDBQueryBasePtr a_query)	{		CSTDItemsList listSTDItem;		int nRowId = 0;		int nWrongItems = 0;		while (!a_query->IsEOF())		{			if (!ReadSTDItem(a_query))	//current x-ray point					{				LogErrorTrace(__FILE__, __LINE__, _T("Read xray point failed"));				nWrongItems++;				break;			}			listSTDItem.push_back(m_pSTDItem);			a_query->NextRow();			nRowId++;		}		return listSTDItem;	}	BOOL CSTDDataDB::ReadSTDItem(CDBQueryBasePtr a_query)	{		int nCol;		m_pSTDItem = CSTDItemPtr(new CSTDItem());		CString sIncAName;		nCol = (int)CSTDDataTable::ColumnID::S_NAME - (int)CSTDDataTable::ColumnID::MIN;		sIncAName = a_query->GetColStringValue(nCol, _T(""));		m_pSTDItem->SetName(sIncAName);		int nIncAIdNow;		nCol = (int)CSTDDataTable::ColumnID::N_INCA_ID - (int)CSTDDataTable::ColumnID::MIN;		nIncAIdNow = a_query->GetColIntValue(nCol, -1);		m_pSTDItem->SetSTDId(nIncAIdNow);		CString sColor;		nCol = (int)CSTDDataTable::ColumnID::S_COLOR - (int)CSTDDataTable::ColumnID::MIN;		sColor = a_query->GetColStringValue(nCol, _T(""));		m_pSTDItem->SetColor(sColor);		double dHeightWidthRatio;		nCol = (int)CSTDDataTable::ColumnID::F_HEIGHT_WIDTH_RATIO - (int)CSTDDataTable::ColumnID::MIN;		dHeightWidthRatio = a_query->GetColFloatValue(nCol, -1);		m_pSTDItem->SetWidth_HeightRadio(dHeightWidthRatio);		int nGrayStart;		nCol = (int)CSTDDataTable::ColumnID::N_GRAY_START - (int)CSTDDataTable::ColumnID::MIN;		nGrayStart = a_query->GetColIntValue(nCol, -1);				int nGrayEnd;		nCol = (int)CSTDDataTable::ColumnID::N_GRAY_START - (int)CSTDDataTable::ColumnID::MIN;		nGrayEnd = a_query->GetColIntValue(nCol, -1);		CIntRangePtr pGrayRange = CIntRangePtr(new CIntRange());		pGrayRange->SetStart(nGrayStart);		pGrayRange->SetEnd(nGrayEnd);		m_pSTDItem->SetGrayLevelRange(pGrayRange);		int nElementRangeNum;		nCol = (int)CSTDDataTable::ColumnID::N_ELEMENT_RANGE_NUM - (int)CSTDDataTable::ColumnID::MIN;		nElementRangeNum = a_query->GetColIntValue(nCol, -1);		m_pSTDItem->SetElementRange(nElementRangeNum);		return TRUE;	}	CDBQueryBasePtr CSTDDataDB::GetQueryById(const long a_nIncAId)	{		CDBQueryBasePtr query;		auto datastorePtr = GetDatastore();		ASSERT(datastorePtr);		if (!datastorePtr)		{			return query;		}		auto tableInfoPtr = GetTableInfo();		ASSERT(tableInfoPtr);		if (!tableInfoPtr)		{			return query;		}		CString sIncAIdColumnName = tableInfoPtr->GetColumnName((int)CSTDDataTable::ColumnID::N_INCA_ID - (int)CSTDDataTable::ColumnID::MIN);		CString sSQLCommand;		sSQLCommand.Format(_T("SELECT * FROM \'%s\' WHERE %s = %d AND %s = %d;"),			(LPCTSTR)tableInfoPtr->GetTableName(),			(LPCTSTR)sIncAIdColumnName,			a_nIncAId);		query = datastorePtr->QueryByCommand(sSQLCommand);		ASSERT(query);		if (!query || !query->IsValid())		{			LogErrorTrace(__FILE__, __LINE__, _T("Invalid quary command (%s)."), (LPCTSTR)sSQLCommand);			ASSERT(FALSE);			return (CDBQueryBasePtr());		}		// do the table related valid checking		if (query->GetColCount() != GetTableInfo()->GetColumnCount())		{			LogErrorTrace(__FILE__, __LINE__, _T("query col num value is %d, but not %d"), query->GetColCount(), GetTableInfo()->GetColumnCount());			ASSERT(FALSE);			return (CDBQueryBasePtr());		}		return query;	}}
 |