| 188 | } |
| 189 | |
| 190 | void Array::create( |
| 191 | ContextResources& resources, |
| 192 | const URI& array_uri, |
| 193 | const shared_ptr<ArraySchema>& array_schema, |
| 194 | const EncryptionKey& encryption_key) { |
| 195 | // Check array schema |
| 196 | if (array_schema == nullptr) { |
| 197 | throw ArrayException("Cannot create array; Empty array schema"); |
| 198 | } |
| 199 | |
| 200 | // Check if array exists |
| 201 | if (is_array(resources, array_uri)) { |
| 202 | throw ArrayException( |
| 203 | "Cannot create array; Array '" + array_uri.to_string() + |
| 204 | "' already exists"); |
| 205 | } |
| 206 | |
| 207 | std::lock_guard<std::mutex> lock{object_mtx}; |
| 208 | array_schema->set_array_uri(array_uri); |
| 209 | array_schema->generate_uri(array_schema->timestamp_range()); |
| 210 | array_schema->check(resources.config()); |
| 211 | |
| 212 | // Check current domain is specified correctly if set |
| 213 | if (!array_schema->get_current_domain()->empty()) { |
| 214 | array_schema->get_current_domain()->check_schema_sanity( |
| 215 | array_schema->shared_domain()); |
| 216 | } |
| 217 | |
| 218 | // Create array directory |
| 219 | resources.vfs().create_dir(array_uri); |
| 220 | |
| 221 | // Create array schema directory |
| 222 | URI array_schema_dir_uri = |
| 223 | array_uri.join_path(constants::array_schema_dir_name); |
| 224 | resources.vfs().create_dir(array_schema_dir_uri); |
| 225 | |
| 226 | // Create the enumerations directory inside the array schema directory |
| 227 | URI array_enumerations_uri = |
| 228 | array_schema_dir_uri.join_path(constants::array_enumerations_dir_name); |
| 229 | resources.vfs().create_dir(array_enumerations_uri); |
| 230 | |
| 231 | // Create commit directory |
| 232 | URI array_commit_uri = array_uri.join_path(constants::array_commits_dir_name); |
| 233 | resources.vfs().create_dir(array_commit_uri); |
| 234 | |
| 235 | // Create fragments directory |
| 236 | URI array_fragments_uri = |
| 237 | array_uri.join_path(constants::array_fragments_dir_name); |
| 238 | resources.vfs().create_dir(array_fragments_uri); |
| 239 | |
| 240 | // Create array metadata directory |
| 241 | URI array_metadata_uri = |
| 242 | array_uri.join_path(constants::array_metadata_dir_name); |
| 243 | resources.vfs().create_dir(array_metadata_uri); |
| 244 | |
| 245 | // Create fragment metadata directory |
| 246 | URI array_fragment_metadata_uri = |
| 247 | array_uri.join_path(constants::array_fragment_meta_dir_name); |
nothing calls this directly
no test coverage detected