obi ls: now done in C (preparing things for R packages to read DMS) and
switch to version 3.0.0b36
This commit is contained in:
140
src/obiview.c
140
src/obiview.c
@ -17,6 +17,7 @@
|
||||
#include <sys/mman.h>
|
||||
#include <inttypes.h>
|
||||
#include <math.h>
|
||||
#include <time.h>
|
||||
//#include <ctype.h>
|
||||
|
||||
#include "obiview.h"
|
||||
@ -1185,6 +1186,7 @@ static int close_view(Obiview_p view)
|
||||
obidebug(1, "\nError getting a column to close from the linked list of column pointers of a view");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (obi_close_column(column) < 0)
|
||||
{
|
||||
obidebug(1, "\nError closing a column while closing a view");
|
||||
@ -2603,6 +2605,144 @@ int obi_view_create_column_alias(Obiview_p view, const char* current_name, const
|
||||
}
|
||||
|
||||
|
||||
char* obi_view_formatted_infos(Obiview_p view, bool detailed)
|
||||
{
|
||||
int i;
|
||||
char* view_infos = NULL;
|
||||
char* view_name = NULL;
|
||||
time_t creation_date = NULL;
|
||||
char* creation_date_str = NULL;
|
||||
index_t line_count;
|
||||
char line_count_str[256];
|
||||
OBIDMS_column_p column;
|
||||
char* column_alias = NULL;
|
||||
char* column_infos = NULL;
|
||||
char* comments = NULL;
|
||||
|
||||
// View name
|
||||
view_name = (view->infos)->name;
|
||||
view_infos = (char*) malloc((strlen("# View name:\n")+strlen(view_name)+1) * sizeof(char));
|
||||
strcpy(view_infos, "# View name:\n");
|
||||
strcat(view_infos, view_name);
|
||||
|
||||
// Date created
|
||||
if (view->read_only) // Date not saved until view is finished writing
|
||||
{
|
||||
creation_date = (view->infos)->creation_date;
|
||||
creation_date_str = ctime(&creation_date);
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+strlen("\n# Date created:\n")+strlen(creation_date_str)+1) * sizeof(char));
|
||||
strcat(view_infos, "\n# Date created:\n");
|
||||
strcat(view_infos, creation_date_str);
|
||||
}
|
||||
|
||||
// Line count
|
||||
line_count = (view->infos)->line_count;
|
||||
snprintf(line_count_str, sizeof line_count_str, "%zu", line_count);
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+strlen("\n# Line count:\n")+strlen(line_count_str)+1) * sizeof(char));
|
||||
strcat(view_infos, "# Line count:\n");
|
||||
strcat(view_infos, line_count_str);
|
||||
|
||||
// Columns: go through each, print their alias then their infos
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+strlen("\n# Columns:")+1) * sizeof(char));
|
||||
strcat(view_infos, "\n# Columns:");
|
||||
for (i=0; i<((view->infos)->column_count); i++)
|
||||
{
|
||||
column = *((OBIDMS_column_p*)ll_get(view->columns, i));
|
||||
if (column == NULL)
|
||||
{
|
||||
obidebug(1, "\nError getting a column from the linked list of column pointers of a view to format view infos");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Column alias
|
||||
column_alias = (((view->infos)->column_references)[i]).alias;
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+strlen("\n")+strlen(column_alias)+strlen(", ")+1) * sizeof(char));
|
||||
strcat(view_infos, "\n");
|
||||
strcat(view_infos, column_alias);
|
||||
strcat(view_infos, ", ");
|
||||
|
||||
// Column infos
|
||||
column_infos = obi_column_formatted_infos(column, detailed);
|
||||
if (column_infos == NULL)
|
||||
{
|
||||
obidebug(1, "\nError getting column infos to format view infos");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+strlen(column_infos)+1) * sizeof(char));
|
||||
strcat(view_infos, column_infos);
|
||||
free(column_infos);
|
||||
}
|
||||
|
||||
// Get commments if detailed informations required
|
||||
if (detailed)
|
||||
{
|
||||
comments = (view->infos)->comments;
|
||||
if (strlen(comments)>2) // Add all comments if not empty
|
||||
{
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+strlen("\n# Comments:\n")+strlen(comments)+1) * sizeof(char));
|
||||
if (view_infos == NULL)
|
||||
{
|
||||
obi_set_errno(OBI_MALLOC_ERROR);
|
||||
obidebug(1, "\nError allocating memory for formatted view infos");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
strcat(view_infos, "\n# Comments:\n");
|
||||
strcat(view_infos, comments);
|
||||
}
|
||||
}
|
||||
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+2) * sizeof(char));
|
||||
strcat(view_infos, "\n");
|
||||
|
||||
return view_infos;
|
||||
}
|
||||
|
||||
|
||||
char* obi_view_formatted_infos_one_line(Obiview_p view)
|
||||
{
|
||||
int i;
|
||||
char* view_infos = NULL;
|
||||
char* view_name = NULL;
|
||||
time_t creation_date = NULL;
|
||||
char* creation_date_str = NULL;
|
||||
index_t line_count;
|
||||
char line_count_str[256];
|
||||
|
||||
// View name
|
||||
view_name = (view->infos)->name;
|
||||
view_infos = (char*) malloc((strlen(" # ")+strlen(view_name)+2) * sizeof(char));
|
||||
strcpy(view_infos, " # ");
|
||||
strcat(view_infos, view_name);
|
||||
strcat(view_infos, ":");
|
||||
|
||||
// Date created
|
||||
if (view->read_only) // Date not saved until view is finished writing
|
||||
{
|
||||
creation_date = (view->infos)->creation_date;
|
||||
creation_date_str = ctime(&creation_date);
|
||||
// Delete \n added by ctime
|
||||
creation_date_str[strlen(creation_date_str)-1] = '\0';
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+strlen(" Date created: ")+strlen(creation_date_str)+1) * sizeof(char));
|
||||
strcat(view_infos, " Date created: ");
|
||||
strcat(view_infos, creation_date_str);
|
||||
}
|
||||
|
||||
// Line count
|
||||
line_count = (view->infos)->line_count;
|
||||
snprintf(line_count_str, sizeof line_count_str, "%zu", line_count);
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+strlen(" ; Line count: ")+strlen(line_count_str)+1) * sizeof(char));
|
||||
strcat(view_infos, " ; Line count: ");
|
||||
strcat(view_infos, line_count_str);
|
||||
|
||||
view_infos = realloc(view_infos, (strlen(view_infos)+2) * sizeof(char));
|
||||
strcat(view_infos, "\n");
|
||||
|
||||
return view_infos;
|
||||
}
|
||||
|
||||
|
||||
int obi_view_write_comments(Obiview_p view, const char* comments)
|
||||
{
|
||||
size_t new_size;
|
||||
|
Reference in New Issue
Block a user