2015-09-30 12:03:46 +02:00
|
|
|
/********************************************************************
|
|
|
|
* OBIDMS header file *
|
|
|
|
********************************************************************/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @file obidmscolumn.h
|
|
|
|
* @author Eric Coissac (eric.coissac@metabarcoding.org)
|
|
|
|
* @date 23 May 2015
|
|
|
|
* @brief Header file for the OBIDMS functions and structures.
|
2015-05-23 16:29:06 +03:00
|
|
|
*/
|
|
|
|
|
2015-09-30 12:03:46 +02:00
|
|
|
|
2015-05-23 16:29:06 +03:00
|
|
|
#ifndef OBIDMS_H_
|
|
|
|
#define OBIDMS_H_
|
|
|
|
|
2015-09-30 12:03:46 +02:00
|
|
|
|
2015-05-23 16:29:06 +03:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <errno.h>
|
|
|
|
#include <dirent.h>
|
2015-05-26 10:38:56 +02:00
|
|
|
#include <string.h>
|
|
|
|
#include <stdio.h>
|
2015-05-23 16:29:06 +03:00
|
|
|
|
2015-06-17 16:51:16 +02:00
|
|
|
#include "obierrno.h"
|
2015-05-23 16:29:06 +03:00
|
|
|
|
2015-09-30 12:03:46 +02:00
|
|
|
|
2015-11-03 14:22:00 +01:00
|
|
|
#define OBIDMS_MAX_NAME (2048) /**< The maximum length of an OBIDMS name.
|
|
|
|
*/
|
2015-11-16 14:37:51 +01:00
|
|
|
#define ARRAYS_DIR_NAME "arrays" /**< The name of the arrays directory.
|
2015-11-03 14:22:00 +01:00
|
|
|
*/
|
2015-05-23 16:29:06 +03:00
|
|
|
|
2015-09-30 12:03:46 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief A structure describing an OBIDMS instance
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
|
|
|
* A pointer to this structure is returned on creation
|
|
|
|
* and opening of an OBITools Data Management System (DMS)
|
|
|
|
*/
|
|
|
|
typedef struct OBIDMS {
|
2015-06-17 16:51:16 +02:00
|
|
|
char directory_name[OBIDMS_MAX_NAME+1]; /**< The name of the directory
|
2015-09-30 12:03:46 +02:00
|
|
|
* containing the DMS.
|
2015-06-17 16:51:16 +02:00
|
|
|
*/
|
|
|
|
DIR* directory; /**< A directory entry usable to
|
2015-09-30 12:03:46 +02:00
|
|
|
* refer and scan the database directory.
|
2015-06-17 16:51:16 +02:00
|
|
|
*/
|
2015-11-09 15:06:02 +01:00
|
|
|
int dir_fd; /**< The file descriptor of the directory entry
|
|
|
|
* usable to refer and scan the database directory.
|
|
|
|
*/
|
2015-11-03 14:22:00 +01:00
|
|
|
DIR* array_directory; /**< A directory entry usable to
|
|
|
|
* refer and scan the array directory.
|
|
|
|
*/
|
2015-11-09 15:06:02 +01:00
|
|
|
int array_dir_fd; /**< The file descriptor of the directory entry
|
|
|
|
* usable to refer and scan the array directory.
|
|
|
|
*/
|
2015-05-23 16:29:06 +03:00
|
|
|
} OBIDMS_t, *OBIDMS_p;
|
|
|
|
|
|
|
|
|
2015-09-30 12:03:46 +02:00
|
|
|
/**
|
|
|
|
* @brief Checks if an OBIDMS exists.
|
2015-05-26 21:36:55 +02:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @param dms_name A pointer to a C string containing the name of the database.
|
2015-05-26 21:36:55 +02:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @returns An integer value indicating the status of the database
|
|
|
|
* @retval 1 if the database exists.
|
|
|
|
* @retval 0 if the database does not exist.
|
|
|
|
* @retval -1 if an error occurred.
|
2015-05-26 21:36:55 +02:00
|
|
|
*
|
|
|
|
* @since May 2015
|
|
|
|
* @author Eric Coissac (eric.coissac@metabarcoding.org)
|
|
|
|
*/
|
2015-06-17 16:51:16 +02:00
|
|
|
int obi_dms_exists(const char* dms_name);
|
2015-05-23 16:29:06 +03:00
|
|
|
|
2015-06-10 15:19:02 +02:00
|
|
|
|
2015-05-23 16:29:06 +03:00
|
|
|
/**
|
2015-06-10 15:19:02 +02:00
|
|
|
* @brief Creates a new OBITools Data Management instance (OBIDMS).
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
2015-06-10 15:19:02 +02:00
|
|
|
* A `DMS` is implemented as a directory. This function checks
|
|
|
|
* if a directory with this name does not already exist
|
|
|
|
* before creating the new database.
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
2015-11-06 17:55:15 +01:00
|
|
|
* A directory to store obiarrays is also created.
|
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @param dms_name A pointer to a C string containing the name of the database.
|
|
|
|
* The actual directory name used to store the DMS will be
|
|
|
|
* `<dms_name>.obidms`.
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @returns A pointer to an OBIDMS structure describing the newly created DMS.
|
|
|
|
* @retval NULL if an error occurred.
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
|
|
|
* @see obi_close_dms()
|
|
|
|
* @since May 2015
|
|
|
|
* @author Eric Coissac (eric.coissac@metabarcoding.org)
|
|
|
|
*/
|
2015-09-30 12:03:46 +02:00
|
|
|
OBIDMS_p obi_create_dms(const char* dms_name);
|
2015-05-23 16:29:06 +03:00
|
|
|
|
2015-06-10 15:19:02 +02:00
|
|
|
|
2015-05-23 16:29:06 +03:00
|
|
|
/**
|
2015-06-10 15:19:02 +02:00
|
|
|
* @brief Opens an existing OBITools Data Management instance (OBIDMS).
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @param dms_name A pointer to a C string containing the name of the database.
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @returns A pointer to an OBIDMS structure describing the opened DMS.
|
|
|
|
* @retval NULL if an error occurred.
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
|
|
|
* @see obi_close_dms()
|
|
|
|
* @since May 2015
|
|
|
|
* @author Eric Coissac (eric.coissac@metabarcoding.org)
|
|
|
|
*/
|
2015-09-30 12:03:46 +02:00
|
|
|
OBIDMS_p obi_open_dms(const char* dms_name);
|
2015-05-23 16:29:06 +03:00
|
|
|
|
2015-06-10 15:19:02 +02:00
|
|
|
|
2015-05-26 21:36:55 +02:00
|
|
|
/**
|
2015-09-30 12:03:46 +02:00
|
|
|
* @brief Creates or opens a new OBIDMS instance.
|
2015-05-26 21:36:55 +02:00
|
|
|
*
|
2015-06-10 15:19:02 +02:00
|
|
|
* If the database already exists, this function opens it, otherwise it
|
|
|
|
* creates a new database.
|
2015-05-26 21:36:55 +02:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @param dms_name A pointer to a C string containing the name of the database.
|
2015-05-26 21:36:55 +02:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @returns A pointer to an OBIDMS structure describing the OBIDMS.
|
|
|
|
* @retval NULL if an error occurred.
|
2015-05-26 21:36:55 +02:00
|
|
|
*
|
|
|
|
* @see obi_close_dms()
|
|
|
|
* @since May 2015
|
|
|
|
* @author Eric Coissac (eric.coissac@metabarcoding.org)
|
|
|
|
*/
|
2015-09-30 12:03:46 +02:00
|
|
|
OBIDMS_p obi_dms(const char* dms_name);
|
2015-05-26 21:36:55 +02:00
|
|
|
|
2015-06-10 15:19:02 +02:00
|
|
|
|
2015-05-23 16:29:06 +03:00
|
|
|
/**
|
2015-06-10 15:19:02 +02:00
|
|
|
* @brief Closes an opened OBITools Data Management instance (OBIDMS).
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @param dms A pointer as returned by obi_create_dms() or obi_open_dms().
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
2015-09-30 12:03:46 +02:00
|
|
|
* @returns An integer value indicating the success of the operation. Even on
|
|
|
|
* error, the `OBIDMS` structure is freed.
|
|
|
|
* @retval 0 on success.
|
|
|
|
* @retval -1 if an error occurred?-.
|
2015-05-23 16:29:06 +03:00
|
|
|
*
|
|
|
|
* @see obi_create_dms()
|
|
|
|
* @see obi_open_dms()
|
|
|
|
* @since May 2015
|
|
|
|
* @author Eric Coissac (eric.coissac@metabarcoding.org)
|
|
|
|
*/
|
|
|
|
int obi_close_dms(OBIDMS_p dms);
|
|
|
|
|
2015-06-10 15:19:02 +02:00
|
|
|
|
2015-05-23 16:29:06 +03:00
|
|
|
#endif /* OBIDMS_H_ */
|