From ad1fd3c341faf14edd2bb2634551b6716e803dcc Mon Sep 17 00:00:00 2001 From: Celine Mercier Date: Wed, 10 Mar 2021 16:50:30 +1300 Subject: [PATCH] Now handling dictionaries with one key --- python/obitools3/commands/cat.pyx | 2 +- python/obitools3/commands/import.pyx | 10 +++-- python/obitools3/commands/test.pyx | 5 +++ python/obitools3/commands/uniq.pyx | 2 + python/obitools3/dms/capi/obidmscolumn.pxd | 1 + python/obitools3/dms/capi/obiview.pxd | 1 + python/obitools3/dms/column/column.pyx | 12 ++++- .../dms/column/typed_column/bool.pyx | 4 +- .../dms/column/typed_column/char.pyx | 2 + .../dms/column/typed_column/float.pyx | 2 + .../obitools3/dms/column/typed_column/int.pyx | 2 + .../dms/column/typed_column/qual.pyx | 2 + .../obitools3/dms/column/typed_column/seq.pyx | 2 + .../obitools3/dms/column/typed_column/str.pyx | 2 + python/obitools3/dms/view/view.pyx | 3 +- src/build_reference_db.c | 3 ++ src/obi_clean.c | 12 ++--- src/obi_ecopcr.c | 44 +++++++++---------- src/obi_ecotag.c | 12 ++--- src/obi_lcs.c | 24 +++++----- src/obidms.c | 5 ++- src/obidmscolumn.c | 3 ++ src/obidmscolumn.h | 4 ++ src/obiview.c | 18 ++++---- src/obiview.h | 2 + 25 files changed, 115 insertions(+), 64 deletions(-) diff --git a/python/obitools3/commands/cat.pyx b/python/obitools3/commands/cat.pyx index 457496e..09175b2 100755 --- a/python/obitools3/commands/cat.pyx +++ b/python/obitools3/commands/cat.pyx @@ -115,7 +115,7 @@ def run(config): v.close() for coln in dict_cols: Column.new_column(o_view, coln, dict_cols[coln]['obitype'], - nb_elements_per_line=dict_cols[coln]['nbelts'], elements_names=list(dict_cols[coln]['eltnames'])) + nb_elements_per_line=dict_cols[coln]['nbelts'], elements_names=list(dict_cols[coln]['eltnames']), dict_column=True) # Initialize the progress bar if not config['obi']['noprogressbar']: diff --git a/python/obitools3/commands/import.pyx b/python/obitools3/commands/import.pyx index ef64a59..711dc47 100755 --- a/python/obitools3/commands/import.pyx +++ b/python/obitools3/commands/import.pyx @@ -257,7 +257,8 @@ def run(config): for tag in dict_dict: dcols[tag] = (Column.new_column(view, tag, dict_dict[tag][1], \ nb_elements_per_line=len(dict_dict[tag][0]), \ - elements_names=list(dict_dict[tag][0])), \ + elements_names=list(dict_dict[tag][0]), \ + dict_column=True), \ dict_dict[tag][1]) @@ -328,10 +329,13 @@ def run(config): value_type = type(value) nb_elts = 1 value_obitype = OBI_VOID + dict_col = False if value_type == dict or value_type == list : nb_elts = len(value) elt_names = list(value) + if value_type == dict : + dict_col = True else : nb_elts = 1 elt_names = None @@ -339,11 +343,9 @@ def run(config): value_obitype = get_obitype(value) if value_obitype != OBI_VOID : - dcols[tag] = (Column.new_column(view, tag, value_obitype, nb_elements_per_line=nb_elts, elements_names=elt_names), value_obitype) + dcols[tag] = (Column.new_column(view, tag, value_obitype, nb_elements_per_line=nb_elts, elements_names=elt_names, dict_column=dict_col), value_obitype) # Fill value - if value_type == dict and nb_elts == 1: # special case that makes the OBI3 create a 1 elt/line column which won't read a dict value - value = value[list(value.keys())[0]] # The solution is to transform the value in a simple atomic one acceptable by the column dcols[tag][0][i] = value # TODO else log error? diff --git a/python/obitools3/commands/test.pyx b/python/obitools3/commands/test.pyx index 782dd89..3c56320 100755 --- a/python/obitools3/commands/test.pyx +++ b/python/obitools3/commands/test.pyx @@ -302,12 +302,16 @@ def create_random_column(config, infos) : alias = random.choice([b'', random_unique_name(infos)]) tuples = random.choice([True, False]) if not tuples : + dict_column = random.choice([True, False]) nb_elements_per_line=random.randint(1, config['test']['maxelts']) + if nb_elements_per_line > 1: + dict_column = True elements_names = [] for i in range(nb_elements_per_line) : elements_names.append(random_unique_element_name(config, infos)) elements_names = random.choice([None, elements_names]) else : + dict_column = False nb_elements_per_line = 1 elements_names = None name = random_unique_name(infos) @@ -318,6 +322,7 @@ def create_random_column(config, infos) : data_type, nb_elements_per_line=nb_elements_per_line, elements_names=elements_names, + dict_column=dict_column, tuples=tuples, comments=random_comments(config), alias=alias diff --git a/python/obitools3/commands/uniq.pyx b/python/obitools3/commands/uniq.pyx index b733450..02396e8 100644 --- a/python/obitools3/commands/uniq.pyx +++ b/python/obitools3/commands/uniq.pyx @@ -378,6 +378,7 @@ cdef uniq_sequences(View_NUC_SEQS view, View_NUC_SEQS o_view, ProgressBar pb, di OBI_INT, nb_elements_per_line=merged_infos[merged_col_name]['nb_elts'], elements_names=list(merged_infos[merged_col_name]['elt_names']), + dict_column=True, comments=i_col.comments, alias=merged_col_name ) @@ -400,6 +401,7 @@ cdef uniq_sequences(View_NUC_SEQS view, View_NUC_SEQS o_view, ProgressBar pb, di OBI_INT, nb_elements_per_line=len(view), elements_names=[id for id in i_id_col], + dict_column=True, alias=TAXID_DIST_COLUMN ) diff --git a/python/obitools3/dms/capi/obidmscolumn.pxd b/python/obitools3/dms/capi/obidmscolumn.pxd index a73e398..9d15383 100755 --- a/python/obitools3/dms/capi/obidmscolumn.pxd +++ b/python/obitools3/dms/capi/obidmscolumn.pxd @@ -31,6 +31,7 @@ cdef extern from "obidmscolumn.h" nogil: const_char_p elements_names OBIType_t returned_data_type OBIType_t stored_data_type + bint dict_column bint tuples bint to_eval time_t creation_date diff --git a/python/obitools3/dms/capi/obiview.pxd b/python/obitools3/dms/capi/obiview.pxd index db0f241..3335a6c 100755 --- a/python/obitools3/dms/capi/obiview.pxd +++ b/python/obitools3/dms/capi/obiview.pxd @@ -95,6 +95,7 @@ cdef extern from "obiview.h" nogil: index_t nb_elements_per_line, char* elements_names, bint elt_names_formatted, + bint dict_column, bint tuples, bint to_eval, const_char_p indexer_name, diff --git a/python/obitools3/dms/column/column.pyx b/python/obitools3/dms/column/column.pyx index e1b3b88..d3039d3 100755 --- a/python/obitools3/dms/column/column.pyx +++ b/python/obitools3/dms/column/column.pyx @@ -90,6 +90,7 @@ cdef class Column(OBIWrapper) : obitype_t data_type, index_t nb_elements_per_line=1, list elements_names=None, + bint dict_column=False, bint tuples=False, bint to_eval=False, object associated_column_name=b"", @@ -152,6 +153,7 @@ cdef class Column(OBIWrapper) : nb_elements_per_line = nb_elements_per_line, elements_names = elements_names_p, elt_names_formatted = False, + dict_column = dict_column, tuples = tuples, to_eval = to_eval, indexer_name = NULL, @@ -200,7 +202,7 @@ cdef class Column(OBIWrapper) : column_p = column_pp[0] column_type = column_p.header.returned_data_type - column_class = Column.get_column_class(column_type, (column_p.header.nb_elements_per_line > 1), column_p.header.tuples) + column_class = Column.get_column_class(column_type, (column_p.header.nb_elements_per_line > 1 or column_p.header.dict_column == True), column_p.header.tuples) column = OBIWrapper.new_wrapper(column_class, column_pp) column._view = view @@ -236,6 +238,7 @@ cdef class Column(OBIWrapper) : nb_elements_per_line = -1, elements_names = NULL, elt_names_formatted = False, + dict_column = False, tuples = False, to_eval = False, indexer_name = NULL, @@ -374,6 +377,13 @@ cdef class Column(OBIWrapper) : raise OBIDeactivatedInstanceError() return self.pointer().header.nb_elements_per_line + # dict_column property getter + @property + def dict_column(self): + if not self.active() : + raise OBIDeactivatedInstanceError() + return self.pointer().header.dict_column + # data_type property getter @property def data_type(self): diff --git a/python/obitools3/dms/column/typed_column/bool.pyx b/python/obitools3/dms/column/typed_column/bool.pyx index 54377fd..cb63885 100755 --- a/python/obitools3/dms/column/typed_column/bool.pyx +++ b/python/obitools3/dms/column/typed_column/bool.pyx @@ -38,11 +38,13 @@ cdef class Column_bool(Column): object column_name, index_t nb_elements_per_line=1, object elements_names=None, + bint dict_column=False, bint tuples=False, object comments={}): return Column.new_column(view, column_name, OBI_BOOL, nb_elements_per_line=nb_elements_per_line, - elements_names=elements_names, + elements_names=elements_names, + dict_column=dict_column, tuples=tuples, comments=comments) diff --git a/python/obitools3/dms/column/typed_column/char.pyx b/python/obitools3/dms/column/typed_column/char.pyx index 1ba7e89..fac6adb 100755 --- a/python/obitools3/dms/column/typed_column/char.pyx +++ b/python/obitools3/dms/column/typed_column/char.pyx @@ -36,12 +36,14 @@ cdef class Column_char(Column): object column_name, index_t nb_elements_per_line=1, object elements_names=None, + bint dict_column=False, bint tuples=False, object comments={}): return Column.new_column(view, column_name, OBI_CHAR, nb_elements_per_line=nb_elements_per_line, elements_names=elements_names, + dict_column=dict_column, tuples=tuples, comments=comments) diff --git a/python/obitools3/dms/column/typed_column/float.pyx b/python/obitools3/dms/column/typed_column/float.pyx index 3a0702b..a747d94 100755 --- a/python/obitools3/dms/column/typed_column/float.pyx +++ b/python/obitools3/dms/column/typed_column/float.pyx @@ -36,12 +36,14 @@ cdef class Column_float(Column): object column_name, index_t nb_elements_per_line=1, object elements_names=None, + bint dict_column=False, bint tuples=False, object comments={}): return Column.new_column(view, column_name, OBI_FLOAT, nb_elements_per_line=nb_elements_per_line, elements_names=elements_names, + dict_column=dict_column, tuples=tuples, comments=comments) diff --git a/python/obitools3/dms/column/typed_column/int.pyx b/python/obitools3/dms/column/typed_column/int.pyx index 5d9150e..6dd9511 100755 --- a/python/obitools3/dms/column/typed_column/int.pyx +++ b/python/obitools3/dms/column/typed_column/int.pyx @@ -38,12 +38,14 @@ cdef class Column_int(Column): object column_name, index_t nb_elements_per_line=1, object elements_names=None, + bint dict_column=False, bint tuples=False, object comments={}): return Column.new_column(view, column_name, OBI_INT, nb_elements_per_line=nb_elements_per_line, elements_names=elements_names, + dict_column=dict_column, tuples=tuples, comments=comments) diff --git a/python/obitools3/dms/column/typed_column/qual.pyx b/python/obitools3/dms/column/typed_column/qual.pyx index 7670f3a..f865dcb 100755 --- a/python/obitools3/dms/column/typed_column/qual.pyx +++ b/python/obitools3/dms/column/typed_column/qual.pyx @@ -38,6 +38,7 @@ cdef class Column_qual(Column_idx): object column_name, index_t nb_elements_per_line=1, object elements_names=None, + bint dict_column=False, object associated_column_name=b"", int associated_column_version=-1, object comments={}): @@ -45,6 +46,7 @@ cdef class Column_qual(Column_idx): return Column.new_column(view, column_name, OBI_QUAL, nb_elements_per_line=nb_elements_per_line, elements_names=elements_names, + dict_column=dict_column, tuples=False, associated_column_name=associated_column_name, associated_column_version=associated_column_name, diff --git a/python/obitools3/dms/column/typed_column/seq.pyx b/python/obitools3/dms/column/typed_column/seq.pyx index e77e076..fa53290 100755 --- a/python/obitools3/dms/column/typed_column/seq.pyx +++ b/python/obitools3/dms/column/typed_column/seq.pyx @@ -39,12 +39,14 @@ cdef class Column_seq(Column_idx): object column_name, index_t nb_elements_per_line=1, object elements_names=None, + bint dict_column=False, bint tuples=False, object comments={}): return Column.new_column(view, column_name, OBI_SEQ, nb_elements_per_line=nb_elements_per_line, elements_names=elements_names, + dict_column=dict_column, tuples=tuples, comments=comments) diff --git a/python/obitools3/dms/column/typed_column/str.pyx b/python/obitools3/dms/column/typed_column/str.pyx index 412d86b..09b0842 100755 --- a/python/obitools3/dms/column/typed_column/str.pyx +++ b/python/obitools3/dms/column/typed_column/str.pyx @@ -38,12 +38,14 @@ cdef class Column_str(Column_idx): object column_name, index_t nb_elements_per_line=1, object elements_names=None, + bint dict_column=False, bint tuples=False, object comments={}): return Column.new_column(view, column_name, OBI_STR, nb_elements_per_line=nb_elements_per_line, elements_names=elements_names, + dict_column=dict_column, tuples=tuples, comments=comments) diff --git a/python/obitools3/dms/view/view.pyx b/python/obitools3/dms/view/view.pyx index 3b69424..2314bdd 100755 --- a/python/obitools3/dms/view/view.pyx +++ b/python/obitools3/dms/view/view.pyx @@ -343,7 +343,7 @@ cdef class View(OBIWrapper) : new_column = Column.new_column(self, old_column.pointer().header.name, new_data_type, nb_elements_per_line=new_nb_elements_per_line, elements_names=new_elements_names, - comments=old_column.comments, alias=column_name_b+tobytes('___new___')) + dict_column=(new_nb_elements_per_line>1), comments=old_column.comments, alias=column_name_b+tobytes('___new___')) switch_to_dict = old_column.nb_elements_per_line == 1 and new_nb_elements_per_line > 1 ori_key = old_column._elements_names[0] @@ -404,6 +404,7 @@ cdef class View(OBIWrapper) : col.data_type_int, nb_elements_per_line = col.nb_elements_per_line, elements_names = col._elements_names, + dict_column = col.dict_column, tuples = col.tuples, to_eval = col.to_eval, comments = col.comments, diff --git a/src/build_reference_db.c b/src/build_reference_db.c index f17a059..8ef1d02 100755 --- a/src/build_reference_db.c +++ b/src/build_reference_db.c @@ -243,6 +243,7 @@ int build_reference_db(const char* dms_name, false, false, false, + false, "", "", -1, @@ -392,6 +393,7 @@ int build_reference_db(const char* dms_name, 1, "", false, + false, true, false, "", @@ -415,6 +417,7 @@ int build_reference_db(const char* dms_name, 1, "", false, + false, true, false, "", diff --git a/src/obi_clean.c b/src/obi_clean.c index 5b69412..d94850c 100755 --- a/src/obi_clean.c +++ b/src/obi_clean.c @@ -88,42 +88,42 @@ static int create_output_columns(Obiview_p o_view, int sample_count) { // Status column - if (obi_view_add_column(o_view, CLEAN_STATUS_COLUMN_NAME, -1, NULL, OBI_CHAR, 0, sample_count, (sample_column->header)->elements_names, true, false, false, NULL, NULL, -1, CLEAN_STATUS_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, CLEAN_STATUS_COLUMN_NAME, -1, NULL, OBI_CHAR, 0, sample_count, (sample_column->header)->elements_names, true, true, false, false, NULL, NULL, -1, CLEAN_STATUS_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", CLEAN_STATUS_COLUMN_NAME); return -1; } // Head column - if (obi_view_add_column(o_view, CLEAN_HEAD_COLUMN_NAME, -1, NULL, OBI_BOOL, 0, 1, NULL, false, false, false, NULL, NULL, -1, CLEAN_HEAD_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, CLEAN_HEAD_COLUMN_NAME, -1, NULL, OBI_BOOL, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, CLEAN_HEAD_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", CLEAN_HEAD_COLUMN_NAME); return -1; } // Sample count column - if (obi_view_add_column(o_view, CLEAN_SAMPLECOUNT_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, CLEAN_SAMPLECOUNT_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, CLEAN_SAMPLECOUNT_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, CLEAN_SAMPLECOUNT_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", CLEAN_SAMPLECOUNT_COLUMN_NAME); return -1; } // Head count column - if (obi_view_add_column(o_view, CLEAN_HEADCOUNT_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, CLEAN_HEADCOUNT_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, CLEAN_HEADCOUNT_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, CLEAN_HEADCOUNT_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", CLEAN_HEADCOUNT_COLUMN_NAME); return -1; } // Internal count column - if (obi_view_add_column(o_view, CLEAN_INTERNALCOUNT_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, CLEAN_INTERNALCOUNT_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, CLEAN_INTERNALCOUNT_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, CLEAN_INTERNALCOUNT_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", CLEAN_INTERNALCOUNT_COLUMN_NAME); return -1; } // Singleton count column - if (obi_view_add_column(o_view, CLEAN_SINGLETONCOUNT_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, CLEAN_SINGLETONCOUNT_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, CLEAN_SINGLETONCOUNT_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, CLEAN_SINGLETONCOUNT_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", CLEAN_SINGLETONCOUNT_COLUMN_NAME); return -1; diff --git a/src/obi_ecopcr.c b/src/obi_ecopcr.c index eaffa2b..5f605fa 100644 --- a/src/obi_ecopcr.c +++ b/src/obi_ecopcr.c @@ -150,49 +150,49 @@ static int print_seq(Obiview_p i_view, Obiview_p o_view, static int create_output_columns(Obiview_p o_view, bool kingdom_mode) { // Original length column - if (obi_view_add_column(o_view, ECOPCR_SEQLEN_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_SEQLEN_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_SEQLEN_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_SEQLEN_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_SEQLEN_COLUMN_NAME); return -1; } // Amplicon length column - if (obi_view_add_column(o_view, ECOPCR_AMPLICONLEN_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_AMPLICONLEN_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_AMPLICONLEN_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_AMPLICONLEN_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_AMPLICONLEN_COLUMN_NAME); return -1; } // Taxid column - if (obi_view_add_column(o_view, TAXID_COLUMN, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, TAXID_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, TAXID_COLUMN, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, TAXID_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", TAXID_COLUMN); return -1; } // Taxonomic rank column - if (obi_view_add_column(o_view, ECOPCR_RANK_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_RANK_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_RANK_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_RANK_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_RANK_COLUMN_NAME); return -1; } // Species taxid column - if (obi_view_add_column(o_view, ECOPCR_SPECIES_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_SPECIES_TAXID_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_SPECIES_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_SPECIES_TAXID_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_SPECIES_TAXID_COLUMN_NAME); return -1; } // Genus taxid column - if (obi_view_add_column(o_view, ECOPCR_GENUS_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_GENUS_TAXID_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_GENUS_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_GENUS_TAXID_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_GENUS_TAXID_COLUMN_NAME); return -1; } // Family taxid column - if (obi_view_add_column(o_view, ECOPCR_FAMILY_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_FAMILY_TAXID_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_FAMILY_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_FAMILY_TAXID_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_FAMILY_TAXID_COLUMN_NAME); return -1; @@ -201,7 +201,7 @@ static int create_output_columns(Obiview_p o_view, bool kingdom_mode) if (kingdom_mode) { // Kingdom taxid column - if (obi_view_add_column(o_view, ECOPCR_KINGDOM_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_KINGDOM_TAXID_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_KINGDOM_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_KINGDOM_TAXID_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_KINGDOM_TAXID_COLUMN_NAME); return -1; @@ -210,7 +210,7 @@ static int create_output_columns(Obiview_p o_view, bool kingdom_mode) else { // Superkingdom taxid column - if (obi_view_add_column(o_view, ECOPCR_SUPERKINGDOM_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_SUPERKINGDOM_TAXID_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_SUPERKINGDOM_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_SUPERKINGDOM_TAXID_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_SUPERKINGDOM_TAXID_COLUMN_NAME); return -1; @@ -218,28 +218,28 @@ static int create_output_columns(Obiview_p o_view, bool kingdom_mode) } // Scientific name column - if (obi_view_add_column(o_view, ECOPCR_SCIENTIFIC_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_SCIENTIFIC_NAME_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_SCIENTIFIC_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_SCIENTIFIC_NAME_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_SCIENTIFIC_NAME_COLUMN_NAME); return -1; } // Species name column - if (obi_view_add_column(o_view, ECOPCR_SPECIES_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_SPECIES_NAME_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_SPECIES_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_SPECIES_NAME_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_SPECIES_NAME_COLUMN_NAME); return -1; } // Genus name column - if (obi_view_add_column(o_view, ECOPCR_GENUS_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_GENUS_NAME_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_GENUS_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_GENUS_NAME_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_GENUS_NAME_COLUMN_NAME); return -1; } // Family name column - if (obi_view_add_column(o_view, ECOPCR_FAMILY_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_FAMILY_NAME_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_FAMILY_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_FAMILY_NAME_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_FAMILY_NAME_COLUMN_NAME); return -1; @@ -248,7 +248,7 @@ static int create_output_columns(Obiview_p o_view, bool kingdom_mode) if (kingdom_mode) { // Kingdom name column - if (obi_view_add_column(o_view, ECOPCR_KINGDOM_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_KINGDOM_NAME_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_KINGDOM_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_KINGDOM_NAME_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_KINGDOM_NAME_COLUMN_NAME); return -1; @@ -257,7 +257,7 @@ static int create_output_columns(Obiview_p o_view, bool kingdom_mode) else { // Superkingdom name column - if (obi_view_add_column(o_view, ECOPCR_SUPERKINGDOM_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_SUPERKINGDOM_NAME_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_SUPERKINGDOM_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_SUPERKINGDOM_NAME_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_SUPERKINGDOM_NAME_COLUMN_NAME); return -1; @@ -265,49 +265,49 @@ static int create_output_columns(Obiview_p o_view, bool kingdom_mode) } // Strand column - if (obi_view_add_column(o_view, ECOPCR_STRAND_COLUMN_NAME, -1, NULL, OBI_CHAR, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_STRAND_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_STRAND_COLUMN_NAME, -1, NULL, OBI_CHAR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_STRAND_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_STRAND_COLUMN_NAME); return -1; } // Primer 1 column - if (obi_view_add_column(o_view, ECOPCR_PRIMER1_COLUMN_NAME, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_PRIMER1_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_PRIMER1_COLUMN_NAME, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_PRIMER1_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_PRIMER1_COLUMN_NAME); return -1; } // Primer 2 column - if (obi_view_add_column(o_view, ECOPCR_PRIMER2_COLUMN_NAME, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_PRIMER2_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_PRIMER2_COLUMN_NAME, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_PRIMER2_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_PRIMER2_COLUMN_NAME); return -1; } // Error 1 column - if (obi_view_add_column(o_view, ECOPCR_ERROR1_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_ERROR1_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_ERROR1_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_ERROR1_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_ERROR1_COLUMN_NAME); return -1; } // Error 2 column - if (obi_view_add_column(o_view, ECOPCR_ERROR2_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_ERROR2_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_ERROR2_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_ERROR2_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_ERROR2_COLUMN_NAME); return -1; } // Temperature 1 column - if (obi_view_add_column(o_view, ECOPCR_TEMP1_COLUMN_NAME, -1, NULL, OBI_FLOAT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_TEMP1_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_TEMP1_COLUMN_NAME, -1, NULL, OBI_FLOAT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_TEMP1_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_TEMP1_COLUMN_NAME); return -1; } // Temperature 2 column - if (obi_view_add_column(o_view, ECOPCR_TEMP2_COLUMN_NAME, -1, NULL, OBI_FLOAT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ECOPCR_TEMP2_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(o_view, ECOPCR_TEMP2_COLUMN_NAME, -1, NULL, OBI_FLOAT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ECOPCR_TEMP2_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the %s column", ECOPCR_TEMP2_COLUMN_NAME); return -1; diff --git a/src/obi_ecotag.c b/src/obi_ecotag.c index 3773479..09f094c 100755 --- a/src/obi_ecotag.c +++ b/src/obi_ecotag.c @@ -104,42 +104,42 @@ int print_assignment_result(Obiview_p output_view, index_t line, static int create_output_columns(Obiview_p o_view) { // Score column - if (obi_view_add_column(o_view, ECOTAG_SCORE_COLUMN_NAME, -1, NULL, OBI_FLOAT, 0, 1, NULL, false, false, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(o_view, ECOTAG_SCORE_COLUMN_NAME, -1, NULL, OBI_FLOAT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "\nError creating the column for the score in ecotag"); return -1; } // Assigned taxid column - if (obi_view_add_column(o_view, ECOTAG_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(o_view, ECOTAG_TAXID_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "\nError creating the column for the assigned taxid in ecotag"); return -1; } // Assigned scientific name column - if (obi_view_add_column(o_view, ECOTAG_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(o_view, ECOTAG_NAME_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "\nError creating the column for the assigned scientific name in ecotag"); return -1; } // Assignement status column - if (obi_view_add_column(o_view, ECOTAG_STATUS_COLUMN_NAME, -1, NULL, OBI_BOOL, 0, 1, NULL, false, false, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(o_view, ECOTAG_STATUS_COLUMN_NAME, -1, NULL, OBI_BOOL, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "\nError creating the column for the assignment status in ecotag"); return -1; } // Column for array of best match ids - if (obi_view_add_column(o_view, ECOTAG_BEST_MATCH_IDS_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, true, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(o_view, ECOTAG_BEST_MATCH_IDS_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, true, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "\nError creating the column for the array of ids of best matches in ecotag"); return -1; } // Column for array of best match taxids - if (obi_view_add_column(o_view, ECOTAG_BEST_MATCH_TAXIDS_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, true, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(o_view, ECOTAG_BEST_MATCH_TAXIDS_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, true, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "\nError creating the column for the array of taxids of best matches in ecotag"); return -1; diff --git a/src/obi_lcs.c b/src/obi_lcs.c index 6d4f443..6108167 100755 --- a/src/obi_lcs.c +++ b/src/obi_lcs.c @@ -155,35 +155,35 @@ static int create_alignment_output_columns(Obiview_p output_view, bool normalize, int reference, bool similarity_mode) { // Create the column for the ids of the 1st sequence aligned - if (obi_view_add_column(output_view, ID1_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, id1_indexer_name, NULL, -1, ID1_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, ID1_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, id1_indexer_name, NULL, -1, ID1_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the first column for the sequence ids when aligning"); return -1; } // Create the column for the ids of the 2nd sequence aligned - if (obi_view_add_column(output_view, ID2_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, id2_indexer_name, NULL, -1, ID2_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, ID2_COLUMN_NAME, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, id2_indexer_name, NULL, -1, ID2_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the second column for the sequence ids when aligning"); return -1; } // Create the column for the index (in the input view) of the first sequences aligned - if (obi_view_add_column(output_view, IDX1_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, IDX1_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, IDX1_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, IDX1_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the first column for the sequence indices when aligning"); return -1; } // Create the column for the index (in the input view) of the second sequences aligned - if (obi_view_add_column(output_view, IDX2_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, IDX2_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, IDX2_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, IDX2_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the second column for the sequence indices when aligning"); return -1; } // Create the column for the LCS length - if (obi_view_add_column(output_view, LCS_LENGTH_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, LCS_LENGTH_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, LCS_LENGTH_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, LCS_LENGTH_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the column for the LCS length when aligning"); return -1; @@ -192,7 +192,7 @@ static int create_alignment_output_columns(Obiview_p output_view, // Create the column for the alignment length if it is computed if ((reference == ALILEN) && (normalize || !similarity_mode)) { - if (obi_view_add_column(output_view, ALI_LENGTH_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, ALI_LENGTH_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, ALI_LENGTH_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, ALI_LENGTH_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the column for the alignment length when aligning"); return -1; @@ -201,7 +201,7 @@ static int create_alignment_output_columns(Obiview_p output_view, // Create the column for the alignment score if (normalize) { - if (obi_view_add_column(output_view, SCORE_COLUMN_NAME, -1, NULL, OBI_FLOAT, 0, 1, NULL, false, false, false, NULL, NULL, -1, SCORE_COLUMN_NAME, true) < 0) + if (obi_view_add_column(output_view, SCORE_COLUMN_NAME, -1, NULL, OBI_FLOAT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, SCORE_COLUMN_NAME, true) < 0) { obidebug(1, "\nError creating the column for the score when aligning"); return -1; @@ -209,7 +209,7 @@ static int create_alignment_output_columns(Obiview_p output_view, } else { - if (obi_view_add_column(output_view, SCORE_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, SCORE_COLUMN_NAME, true) < 0) + if (obi_view_add_column(output_view, SCORE_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, SCORE_COLUMN_NAME, true) < 0) { obidebug(1, "\nError creating the column for the score when aligning"); return -1; @@ -219,14 +219,14 @@ static int create_alignment_output_columns(Obiview_p output_view, if (print_seq) { // Create the column for the first sequences aligned - if (obi_view_add_column(output_view, SEQ1_COLUMN_NAME, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, seq1_indexer_name, NULL, -1, SEQ1_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, SEQ1_COLUMN_NAME, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, false, seq1_indexer_name, NULL, -1, SEQ1_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the first column for the sequences when aligning"); return -1; } // Create the column for the second sequences aligned - if (obi_view_add_column(output_view, SEQ2_COLUMN_NAME, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, seq2_indexer_name, NULL, -1, SEQ2_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, SEQ2_COLUMN_NAME, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, false, seq2_indexer_name, NULL, -1, SEQ2_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the second column for the sequences when aligning"); return -1; @@ -235,14 +235,14 @@ static int create_alignment_output_columns(Obiview_p output_view, if (print_count) { // Create the column for the count of the first sequences aligned - if (obi_view_add_column(output_view, COUNT1_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, COUNT1_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, COUNT1_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, COUNT1_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the first column for the sequence counts when aligning"); return -1; } // Create the column for the count of the second sequences aligned - if (obi_view_add_column(output_view, COUNT2_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, COUNT2_COLUMN_COMMENTS, true) < 0) + if (obi_view_add_column(output_view, COUNT2_COLUMN_NAME, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, COUNT2_COLUMN_COMMENTS, true) < 0) { obidebug(1, "\nError creating the second column for the sequence counts when aligning"); return -1; diff --git a/src/obidms.c b/src/obidms.c index ca4920a..c3b5fbb 100755 --- a/src/obidms.c +++ b/src/obidms.c @@ -1575,8 +1575,8 @@ obiversion_t obi_import_column(const char* dms_path_1, const char* dms_path_2, c // Create new column column_2 = obi_create_column(dms_2, column_name, header_1->returned_data_type, header_1->line_count, - header_1->nb_elements_per_line, header_1->elements_names, true, header_1->tuples, - header_1->to_eval, new_avl_name, (header_1->associated_column).column_name, + header_1->nb_elements_per_line, header_1->elements_names, true, header_1->dict_column, + header_1->tuples, header_1->to_eval, new_avl_name, (header_1->associated_column).column_name, (header_1->associated_column).version, header_1->comments); if (column_2 == NULL) @@ -1813,6 +1813,7 @@ int obi_import_view(const char* dms_path_1, const char* dms_path_2, const char* false, false, false, + false, NULL, NULL, -1, diff --git a/src/obidmscolumn.c b/src/obidmscolumn.c index 70f71f9..93200b0 100644 --- a/src/obidmscolumn.c +++ b/src/obidmscolumn.c @@ -1024,6 +1024,7 @@ OBIDMS_column_p obi_create_column(OBIDMS_p dms, index_t nb_elements_per_line, char* elements_names, bool elt_names_formatted, + bool dict_column, bool tuples, bool to_eval, const char* indexer_name, @@ -1282,6 +1283,7 @@ OBIDMS_column_p obi_create_column(OBIDMS_p dms, header->nb_elements_per_line = nb_elements_per_line; header->stored_data_type = stored_data_type; header->returned_data_type = returned_data_type; + header->dict_column = dict_column; header->tuples = tuples; header->to_eval = to_eval; header->creation_date = time(NULL); @@ -1611,6 +1613,7 @@ OBIDMS_column_p obi_clone_column(OBIDMS_p dms, nb_elements_per_line, (column_to_clone->header)->elements_names, true, + (column_to_clone->header)->dict_column, (column_to_clone->header)->tuples, (column_to_clone->header)->to_eval, (column_to_clone->header)->indexer_name, diff --git a/src/obidmscolumn.h b/src/obidmscolumn.h index 50f80ac..400d88c 100755 --- a/src/obidmscolumn.h +++ b/src/obidmscolumn.h @@ -77,6 +77,8 @@ typedef struct OBIDMS_column_header { OBIType_t stored_data_type; /**< Type of the data that is actually stored in the data * part of the column. */ + bool dict_column; /**< Whether the column contains dictionary-like values. + */ bool tuples; /**< A boolean indicating whether the column contains indices referring to indexed tuples. */ bool to_eval; /**< A boolean indicating whether the column contains expressions that should be evaluated @@ -249,6 +251,7 @@ size_t obi_calculate_header_size(index_t nb_elements_per_line, int64_t elts_name * @param elements_names The names of the elements with ';' as separator (no terminal ';'), * NULL or "" if the default names are to be used ("0\01\02\0...\0n"). * @param elt_names_formatted Whether the separator for the elements names is ';' (false), or '\0' (true, as formatted by format_elements_names()). + * @param dict_column A boolean indicating whether the column should contain dictionary-like values. * @param tuples A boolean indicating whether the column should contain indices referring to indexed tuples. * @param to_eval A boolean indicating whether the column contains expressions that should be evaluated * (typically OBI_STR columns containing character strings to be evaluated by Python). @@ -271,6 +274,7 @@ OBIDMS_column_p obi_create_column(OBIDMS_p dms, index_t nb_elements_per_line, char* elements_names, bool elt_names_formatted, + bool dict_column, bool tuples, bool to_eval, const char* indexer_name, diff --git a/src/obiview.c b/src/obiview.c index 0ce9efe..e259fca 100755 --- a/src/obiview.c +++ b/src/obiview.c @@ -1712,7 +1712,7 @@ Obiview_p obi_new_view(OBIDMS_p dms, const char* view_name, Obiview_p view_to_cl // If there is a new line selection, build it by combining it with the one from the view to clone if there is one else if (line_selection != NULL) { - view->line_selection = obi_create_column(view->dms, LINES_COLUMN_NAME, OBI_IDX, 0, 1, NULL, false, false, false, NULL, NULL, -1, NULL); + view->line_selection = obi_create_column(view->dms, LINES_COLUMN_NAME, OBI_IDX, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, NULL); if ((view->line_selection) == NULL) { obidebug(1, "\nError creating a column corresponding to a line selection"); @@ -1862,6 +1862,7 @@ Obiview_p obi_new_view(OBIDMS_p dms, const char* view_name, Obiview_p view_to_cl false, false, false, + false, NULL, NULL, -1, @@ -1930,19 +1931,19 @@ Obiview_p obi_new_view_nuc_seqs(OBIDMS_p dms, const char* view_name, Obiview_p v if ((view_to_clone == NULL) && create_default_columns) { // Adding sequence column - if (obi_view_add_column(view, NUC_SEQUENCE_COLUMN, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, NULL, NULL, -1, "{}", true) < 0) // discuss using same indexer "NUC_SEQ_INDEXER" + if (obi_view_add_column(view, NUC_SEQUENCE_COLUMN, -1, NULL, OBI_SEQ, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, "{}", true) < 0) // discuss using same indexer "NUC_SEQ_INDEXER" { obidebug(1, "Error adding an obligatory column in a nucleotide sequences view"); return NULL; } // Adding id column - if (obi_view_add_column(view, ID_COLUMN, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(view, ID_COLUMN, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "Error adding an obligatory column in a nucleotide sequences view"); return NULL; } // Adding definition column - if (obi_view_add_column(view, DEFINITION_COLUMN, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(view, DEFINITION_COLUMN, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "Error adding an obligatory column in a nucleotide sequences view"); return NULL; @@ -1951,7 +1952,7 @@ Obiview_p obi_new_view_nuc_seqs(OBIDMS_p dms, const char* view_name, Obiview_p v if (quality_column) { associated_nuc_column = obi_view_get_column(view, NUC_SEQUENCE_COLUMN); - if (obi_view_add_column(view, QUALITY_COLUMN, -1, NULL, OBI_QUAL, 0, 1, NULL, false, false, false, NULL, (associated_nuc_column->header)->name, (associated_nuc_column->header)->version, "{}", true) < 0) // TODO discuss automatic association + if (obi_view_add_column(view, QUALITY_COLUMN, -1, NULL, OBI_QUAL, 0, 1, NULL, false, false, false, false, NULL, (associated_nuc_column->header)->name, (associated_nuc_column->header)->version, "{}", true) < 0) // TODO discuss automatic association { obidebug(1, "Error adding an obligatory column in a nucleotide sequences view"); return NULL; @@ -2284,6 +2285,7 @@ int obi_view_add_column(Obiview_p view, index_t nb_elements_per_line, char* elements_names, bool elt_names_formatted, + bool dict_column, bool tuples, bool to_eval, const char* indexer_name, @@ -2366,7 +2368,7 @@ int obi_view_add_column(Obiview_p view, // Open or create the column if (create) { // Create column - column = obi_create_column(view->dms, column_name, data_type, nb_lines, nb_elements_per_line, elements_names, elt_names_formatted, tuples, to_eval, indexer_name, associated_column_name, associated_column_version, comments); + column = obi_create_column(view->dms, column_name, data_type, nb_lines, nb_elements_per_line, elements_names, elt_names_formatted, dict_column, tuples, to_eval, indexer_name, associated_column_name, associated_column_version, comments); if (column == NULL) { obidebug(1, "\nError creating a column to add to a view"); @@ -3230,7 +3232,7 @@ int obi_create_auto_count_column(Obiview_p view) return -1; } - if (obi_view_add_column(view, COUNT_COLUMN, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(view, COUNT_COLUMN, -1, NULL, OBI_INT, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "Error adding an automatic count column in a view"); return -1; @@ -3282,7 +3284,7 @@ int obi_create_auto_id_column(Obiview_p view, const char* prefix) } // Create the new ID column - if (obi_view_add_column(view, ID_COLUMN, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, NULL, NULL, -1, "{}", true) < 0) + if (obi_view_add_column(view, ID_COLUMN, -1, NULL, OBI_STR, 0, 1, NULL, false, false, false, false, NULL, NULL, -1, "{}", true) < 0) { obidebug(1, "Error adding an automatic ID column in a view"); return -1; diff --git a/src/obiview.h b/src/obiview.h index e928741..c3cede1 100755 --- a/src/obiview.h +++ b/src/obiview.h @@ -400,6 +400,7 @@ Obiview_p obi_open_view(OBIDMS_p dms, const char* view_name); * @param elements_names The names of the elements with ';' as separator (no terminal ';'), * if the column is created; NULL or "" if the default names are to be used ("0\01\02\0...\0n"). * @param elt_names_formatted Whether the separator for the elements names is ';' (false), or '\0' (true, as formatted by format_elements_names()). + * @param dict_column Whether the column contains dictionary-like values. * @param tuples A boolean indicating whether the column should contain indices referring to indexed tuples. * @param to_eval A boolean indicating whether the column contains expressions that should be evaluated * (typically OBI_STR columns containing character strings to be evaluated by Python). @@ -426,6 +427,7 @@ int obi_view_add_column(Obiview_p view, index_t nb_elements_per_line, char* elements_names, bool elt_names_formatted, + bool dict_column, bool tuples, bool to_eval, const char* indexer_name,