@@ -3691,10 +3691,10 @@ def from_csv(
36913691 # ------------------------------------------------------------------
36923692
36933693 @staticmethod
3694- def _column_spec_default_and_cparams (
3694+ def _column_spec_default_and_config (
36953695 spec_or_field : SchemaSpec | dataclasses .Field ,
3696- ) -> tuple [SchemaSpec , Any , dict | None ]:
3697- """Extract the schema spec, default and cparams for ``add_column()``."""
3696+ ) -> tuple [SchemaSpec , Any , ColumnConfig ]:
3697+ """Extract the schema spec, default and storage config for ``add_column()``."""
36983698 if isinstance (spec_or_field , dataclasses .Field ):
36993699 meta = get_blosc2_field_metadata (spec_or_field )
37003700 if meta is None :
@@ -3706,22 +3706,25 @@ def _column_spec_default_and_cparams(
37063706 default = spec_or_field .default_factory ()
37073707 else :
37083708 default = MISSING
3709- cparams = meta .get ("cparams" )
3709+ config = ColumnConfig (
3710+ cparams = meta .get ("cparams" ),
3711+ dparams = meta .get ("dparams" ),
3712+ chunks = meta .get ("chunks" ),
3713+ blocks = meta .get ("blocks" ),
3714+ )
37103715 else :
37113716 spec = spec_or_field
37123717 default = MISSING
3713- cparams = None
3718+ config = ColumnConfig ( cparams = None , dparams = None , chunks = None , blocks = None )
37143719
37153720 if not isinstance (spec , SchemaSpec ):
37163721 raise TypeError (f"add_column() requires a SchemaSpec, got { type (spec )!r} ." )
3717- return spec , default , cparams
3722+ return spec , default , config
37183723
37193724 def add_column (
37203725 self ,
37213726 name : str ,
37223727 spec : SchemaSpec | dataclasses .Field ,
3723- * ,
3724- cparams : dict | None = None ,
37253728 ) -> None :
37263729 """Add a new column filled from the default declared in *spec*.
37273730
@@ -3734,10 +3737,6 @@ def add_column(
37343737 descriptor such as ``b2.field(b2.int64(ge=0), default=0)``.
37353738 A default is required when the table already has live rows, so
37363739 those rows can be backfilled.
3737- cparams:
3738- Optional compression parameters for this column's NDArray. When
3739- *spec* is a :func:`blosc2.field` descriptor, its compression
3740- parameters are used unless this argument is provided.
37413740
37423741 Raises
37433742 ------
@@ -3757,9 +3756,7 @@ def add_column(
37573756 if name in self ._computed_cols :
37583757 raise ValueError (f"A computed column named { name !r} already exists." )
37593758
3760- spec , default , field_cparams = self ._column_spec_default_and_cparams (spec )
3761- if cparams is None :
3762- cparams = field_cparams
3759+ spec , default , column_config = self ._column_spec_default_and_config (spec )
37633760
37643761 live_pos = np .where (self ._valid_rows [:])[0 ]
37653762 if default is MISSING and len (live_pos ) > 0 :
@@ -3769,6 +3766,7 @@ def add_column(
37693766 )
37703767
37713768 compiled_col = self ._compiled_column_from_spec (name , spec )
3769+ compiled_col .config = column_config
37723770 self ._resolve_nullable_specs (
37733771 CompiledSchema (row_cls = None , columns = [compiled_col ], columns_by_name = {name : compiled_col }),
37743772 validate_column_null_values = False ,
@@ -3777,7 +3775,13 @@ def add_column(
37773775
37783776 if self ._is_varlen_scalar_column (compiled_col ):
37793777 # Varlen scalar columns don't use fixed-width NDArray storage.
3780- new_col = self ._storage .create_varlen_scalar_column (name , spec = spec , cparams = cparams )
3778+ col_storage = self ._resolve_column_storage (compiled_col , None , None )
3779+ new_col = self ._storage .create_varlen_scalar_column (
3780+ name ,
3781+ spec = spec ,
3782+ cparams = col_storage .get ("cparams" ),
3783+ dparams = col_storage .get ("dparams" ),
3784+ )
37813785 for _ in live_pos :
37823786 new_col .append (default )
37833787 new_col .flush ()
@@ -3798,20 +3802,20 @@ def add_column(
37983802
37993803 capacity = len (self ._valid_rows )
38003804 default_chunks , default_blocks = compute_chunks_blocks ((capacity ,))
3805+ col_storage = self ._resolve_column_storage (compiled_col , default_chunks , default_blocks )
38013806 new_col = self ._storage .create_column (
38023807 name ,
38033808 dtype = spec .dtype ,
38043809 shape = (capacity ,),
3805- chunks = default_chunks ,
3806- blocks = default_blocks ,
3807- cparams = cparams ,
3808- dparams = None ,
3810+ chunks = col_storage [ "chunks" ] ,
3811+ blocks = col_storage [ "blocks" ] ,
3812+ cparams = col_storage . get ( " cparams" ) ,
3813+ dparams = col_storage . get ( "dparams" ) ,
38093814 )
38103815 if len (live_pos ) > 0 :
38113816 new_col [live_pos ] = default_val
38123817
38133818 compiled_col .default = default
3814- compiled_col .config = ColumnConfig (cparams = cparams , dparams = None , chunks = None , blocks = None )
38153819 self ._cols [name ] = new_col
38163820 self .col_names .append (name )
38173821 self ._col_widths [name ] = max (len (name ), compiled_col .display_width )
0 commit comments