#ifndef SDATABASE_H #define SDATABASE_H #include #include //#include "sqlite3.h" #include "acquisition_info.h" #include "common.h" namespace SUTIL { class SDatabase : public QObject { Q_OBJECT public: explicit SDatabase(const QString& connectionName, QObject *parent = nullptr); virtual ~SDatabase(); // 트랜잭션 함수 이름 명확화 bool BeginTransaction(); bool Commit(); bool Rollback(); int OpenDatabase(QString strFilename); void CloseDatabase(); static void DeleteListReponse(QList& listResponse); // ExecuteQuery와 Execute를 하나로 통합하고 파라미터 바인딩을 지원하도록 개선 bool ExecuteQuery(const QString& strQuery, QList& resultList); bool ExecuteNonQuery(const QString& strQuery); // SQL Injection 방지를 위한 파라미터 바인딩 버전 (강력 추천) bool ExecuteQuery(const QString& strQuery, const QVariantList& params, QList& resultList); bool ExecuteNonQuery(const QString& strQuery, const QVariantList& params); void MakeTableDataInfo(); void MakeViewTable(); void MakeTableUser(); void MakeTableAdvancedSetting(); void MakeTableReserved(); void MakeAcquisitionTempTable(); void AddAcquisitionTempToImage(); void ClearAcquisitionTempTable(); bool AddImageToAcquisitionTemp(int nStudyIndex); void CheckAdavancedTable(); void CheckLoginTable(); QString GetValueAdavancedTable(const QString& strColumn); //void Clear(); //bool IsExecute(); bool AutoremoveImageTable(); QList QueryWorklistTableHeader(); QList QueryWorklistTableHeaderVisible(); QList QueryWorklistTableHeaderInvisible(); QList QueryHistoryTableHeader(); QList QueryHistoryTableHeaderVisible(); QList QueryHistoryTableHeaderInvisible(); int InsertPatient(ACQUISITION_INFO* pAcquisitionInfo); int InsertStudy(ACQUISITION_INFO* pAcquisitionInfo); int InsertSeriesImage(ACQUISITION_INFO* pAcquisitionInfo); int InsertSeriesMovie(ACQUISITION_INFO* pAcquisitionInfo); int InsertImage(ACQUISITION_INFO* pAcquisitionInfo); int InsertVideo(ACQUISITION_INFO* pAcquisitionInfo); int UpdateImage(ACQUISITION_INFO* pAcquisitionInfo, const vector& listCaptureImage); int UpdateImageOnAcquistionTemp(ACQUISITION_INFO* pAcquisitionInfo, const vector& listCaptureImage); int GetHistory(SEARCH_ITEM* pSearchItem); QList GetHistoryStudy(SEARCH_ITEM* pSearchItem, bool bWithDelete=false); QList GetImageWithStudyIndex(int nIndex); QList GetImageWithStudyIndexASC(int nIndex); bool ImageDeleteFromImage(const QString& strFile, bool bDelete); bool ImageDeleteFromAcqusitionTemp(const QString& strFile, bool bDelete); bool ImageDeleteFromImageInstanceUID(const QString& strInstanceUID, bool bDelete); int GetAcquisitionNumber(const QString& strFile); int GetSeriesImageIndexWithInstanceUID(const QString& strStudyInstanceUID); int GetSeriesVideoIndexWithInstanceUID(const QString& strStudyInstanceUID); vector GetImageListWithStudy(const QString& strStudyDate, const QString& strPatientID); vector GetImageListWithStudyIndex(const QString& strStudyIndex); vector GetVideoListWithStudy(const QString& strStudyDate, const QString& strPatientID); vector GetVideoListWithStudyIndex(const QString& strStudyIndex); void SendUpdate(const QString& strFilename); void SendUpdateAcquisitionTemp(const QString& strFilename); int GetImageMaxAcquisitionNumber(const QString& strSeriesIndex); int GetVideoMaxAcquisitionNumber(const QString& strSeriesIndex); //QList* GetResult(); QList GetScheduledDeleteFileList(); QStringList GetScheduledDeleteStudyDateList(); void UpdateScheduledDeleteCompleteStudyDate(); bool SetDeleteStorageFile(const QString& strFile); QStringList GetVideoFileList(); int GetStudyIndexWithStudyInstanceUID(const QString& strStudyInstanceUID); vector GetSendList(int nStudyIndex); QList GetExitSendListInfo(int nStudyIndex); vector GetSendListAcquisitionTemp(int nStudyIndex); bool CacheWrite(); QString connectionName(); vector GetAllFilesForStudyIndex(int studyIndex); signals: public slots: public: int getOrInsertSeries(ACQUISITION_INFO *pAcquisitionInfo, int seriesNumber); int upsertImages(const QString& tableName, ACQUISITION_INFO* pAcquisitionInfo, const vector& listCaptureImage); QVariant executeScalar(const QString& query, const QVariantList& params = QVariantList()); int getSeriesIndex(const QString& studyInstanceUID, int seriesNumber); bool updateSendStatus(const QString& tableName, const QString& filename); bool IsExecute(); protected: // --- 변경된 멤버 변수 --- QString m_connectionName; // 각 인스턴스의 고유 DB 커넥션 이름 bool m_bExecute; static uint64_t m_nUsage; // QMutex m_Lock; // 불필요 // sqlite3* m_pSqliteDB; // 불필요 // QList* m_pResult; // 불필요, 함수 인자로 처리 }; } #endif // SDATABASE_H