Mercurial > hg > orthanc-databases
comparison Framework/Plugins/IndexBackend.cpp @ 210:a0c095a4ba7d
all the integration tests pass on SQLite
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 22 Mar 2021 19:36:43 +0100 |
parents | 13a3863df7fa |
children | c2e4a909de0e |
comparison
equal
deleted
inserted
replaced
209:13a3863df7fa | 210:a0c095a4ba7d |
---|---|
2089 } | 2089 } |
2090 } | 2090 } |
2091 } | 2091 } |
2092 # endif | 2092 # endif |
2093 #endif | 2093 #endif |
2094 | |
2095 | |
2096 void IndexBackend::CreateInstanceGeneric(OrthancPluginCreateInstanceResult& result, | |
2097 const char* hashPatient, | |
2098 const char* hashStudy, | |
2099 const char* hashSeries, | |
2100 const char* hashInstance) | |
2101 { | |
2102 // Check out "OrthancServer/Sources/Database/Compatibility/ICreateInstance.cpp" | |
2103 | |
2104 { | |
2105 OrthancPluginResourceType type; | |
2106 int64_t tmp; | |
2107 | |
2108 if (LookupResource(tmp, type, hashInstance)) | |
2109 { | |
2110 // The instance already exists | |
2111 assert(type == OrthancPluginResourceType_Instance); | |
2112 result.instanceId = tmp; | |
2113 result.isNewInstance = false; | |
2114 return; | |
2115 } | |
2116 } | |
2117 | |
2118 result.instanceId = CreateResource(hashInstance, OrthancPluginResourceType_Instance); | |
2119 result.isNewInstance = true; | |
2120 | |
2121 result.isNewPatient = false; | |
2122 result.isNewStudy = false; | |
2123 result.isNewSeries = false; | |
2124 result.patientId = -1; | |
2125 result.studyId = -1; | |
2126 result.seriesId = -1; | |
2127 | |
2128 // Detect up to which level the patient/study/series/instance | |
2129 // hierarchy must be created | |
2130 | |
2131 { | |
2132 OrthancPluginResourceType dummy; | |
2133 | |
2134 if (LookupResource(result.seriesId, dummy, hashSeries)) | |
2135 { | |
2136 assert(dummy == OrthancPluginResourceType_Series); | |
2137 // The patient, the study and the series already exist | |
2138 | |
2139 bool ok = (LookupResource(result.patientId, dummy, hashPatient) && | |
2140 LookupResource(result.studyId, dummy, hashStudy)); | |
2141 (void) ok; // Remove warning about unused variable in release builds | |
2142 assert(ok); | |
2143 } | |
2144 else if (LookupResource(result.studyId, dummy, hashStudy)) | |
2145 { | |
2146 assert(dummy == OrthancPluginResourceType_Study); | |
2147 | |
2148 // New series: The patient and the study already exist | |
2149 result.isNewSeries = true; | |
2150 | |
2151 bool ok = LookupResource(result.patientId, dummy, hashPatient); | |
2152 (void) ok; // Remove warning about unused variable in release builds | |
2153 assert(ok); | |
2154 } | |
2155 else if (LookupResource(result.patientId, dummy, hashPatient)) | |
2156 { | |
2157 assert(dummy == OrthancPluginResourceType_Patient); | |
2158 | |
2159 // New study and series: The patient already exist | |
2160 result.isNewStudy = true; | |
2161 result.isNewSeries = true; | |
2162 } | |
2163 else | |
2164 { | |
2165 // New patient, study and series: Nothing exists | |
2166 result.isNewPatient = true; | |
2167 result.isNewStudy = true; | |
2168 result.isNewSeries = true; | |
2169 } | |
2170 } | |
2171 | |
2172 // Create the series if needed | |
2173 if (result.isNewSeries) | |
2174 { | |
2175 result.seriesId = CreateResource(hashSeries, OrthancPluginResourceType_Series); | |
2176 } | |
2177 | |
2178 // Create the study if needed | |
2179 if (result.isNewStudy) | |
2180 { | |
2181 result.studyId = CreateResource(hashStudy, OrthancPluginResourceType_Study); | |
2182 } | |
2183 | |
2184 // Create the patient if needed | |
2185 if (result.isNewPatient) | |
2186 { | |
2187 result.patientId = CreateResource(hashPatient, OrthancPluginResourceType_Patient); | |
2188 } | |
2189 | |
2190 // Create the parent-to-child links | |
2191 AttachChild(result.seriesId, result.instanceId); | |
2192 | |
2193 if (result.isNewSeries) | |
2194 { | |
2195 AttachChild(result.studyId, result.seriesId); | |
2196 } | |
2197 | |
2198 if (result.isNewStudy) | |
2199 { | |
2200 AttachChild(result.patientId, result.studyId); | |
2201 } | |
2202 | |
2203 TagMostRecentPatient(result.patientId); | |
2204 | |
2205 // Sanity checks | |
2206 assert(result.patientId != -1); | |
2207 assert(result.studyId != -1); | |
2208 assert(result.seriesId != -1); | |
2209 assert(result.instanceId != -1); | |
2210 } | |
2094 } | 2211 } |