The elements names when a column contains several elements per line are

now formatted with '\0' as separator and handled in a more optimized way
This commit is contained in:
Celine Mercier
2017-01-31 16:48:06 +01:00
parent 651c1d7845
commit e50da64ea1
6 changed files with 411 additions and 152 deletions

View File

@ -97,8 +97,7 @@ def test_set_and_get(config, infos):
return
idx = random_int(config)
value = infos['random_generator'][data_type](config)
if len(element_names) > 1 :
if col.nb_elements_per_line > 1 :
elt = random.choice(element_names)
col[idx][elt] = value
assert col[idx][elt] == value, "Set value != gotten value "+str(col[idx][elt])+" != "+str(value)
@ -187,6 +186,7 @@ def create_random_column(config, infos) :
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])
name = random_unique_name(infos)
infos['view'].add_column(name,
alias=alias,
@ -358,7 +358,9 @@ def run(config):
config['test']['elt_name_max_len'] = int((COL_COMMENTS_MAX_LEN - config['test']['maxelts']) / config['test']['maxelts'])
print("Initializing the DMS and the first view...")
shutil.rmtree(config['obi']['defaultdms']+'.obidms', ignore_errors=True)
ini_dms_and_first_view(config, infos)
print_test(config, repr(infos['view']))

View File

@ -7,7 +7,8 @@ from .capi.obidms cimport obi_dms, \
from .capi.obidmscolumn cimport obi_close_column, \
OBIDMS_column_p, \
OBIDMS_column_header_p
OBIDMS_column_header_p, \
obi_get_elements_names
from .capi.obiutils cimport obi_format_date
@ -75,7 +76,7 @@ from .capi.obiview cimport Obiview_p, \
DEFINITION_COLUMN, \
QUALITY_COLUMN
from libc.stdlib cimport malloc
from libc.stdlib cimport malloc, free
cdef class OBIDMS_column :
@ -138,7 +139,12 @@ cdef class OBIDMS_column :
# elements_names property getter
@property
def elements_names(self):
return (bytes2str(((self._pointer)[0].header).elements_names)).split(';')
cdef char* elts_names_b
cdef str elts_names
elts_names_b = obi_get_elements_names((self._pointer)[0])
elts_names = bytes2str(elts_names_b)
free(<char*>elts_names_b)
return elts_names.split(';')
# nb_elements_per_line property getter
@property
@ -376,7 +382,7 @@ cdef class OBIView :
elements_names_b = str2bytes("")
else :
elements_names_b = str2bytes(';'.join(elements_names))
if type : # TODO make C function that does that
if type == 'OBI_INT' :
data_type = OBI_INT

View File

@ -47,31 +47,8 @@ cdef extern from "obidmscolumn.h" nogil:
bint writable
ctypedef OBIDMS_column_t* OBIDMS_column_p
OBIDMS_column_p obi_create_column(OBIDMS_p dms,
const_char_p column_name,
OBIType_t type,
index_t nb_lines,
index_t nb_elements_per_line,
const_char_p elements_names,
const_char_p indexer_name,
const_char_p associated_colum_name,
obiversion_t associated_colum_version,
const_char_p comments)
OBIDMS_column_p obi_open_column(OBIDMS_p dms,
const_char_p column_name,
obiversion_t version_number)
int obi_close_column(OBIDMS_column_p column)
OBIDMS_column_p obi_clone_column(OBIDMS_p dms,
OBIDMS_column_p line_selection,
const_char_p column_name,
obiversion_t version_number,
bint clone_data)
int obi_close_column(OBIDMS_column_p column)
obiversion_t obi_column_get_latest_version_from_name(OBIDMS_p dms,
const_char_p column_name)
@ -81,9 +58,9 @@ cdef extern from "obidmscolumn.h" nogil:
obiversion_t version_number)
int obi_close_header(OBIDMS_column_header_p header)
int obi_select(OBIDMS_column_p line_selection_column, index_t line_to_grep)
char* obi_get_elements_names(OBIDMS_column_p column)
cdef extern from "obidmscolumn_int.h" nogil: