Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions +types/+util/+dynamictable/+internal/getColumnHeight.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
%
% This helper inspects the underlying stored data shape only. It does not
% resolve VectorIndex chains to determine DynamicTable row height.
arguments
column
end

if isempty(column)
columnHeight = 0;
Expand All @@ -12,6 +15,10 @@
end

function columnHeight = getDataHeight(data)
arguments
data
end

if isempty(data)
columnHeight = 0;
elseif isa(data, 'types.untyped.DataPipe')
Expand Down
2 changes: 1 addition & 1 deletion +types/+util/+dynamictable/+internal/getColumnRowHeight.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
% column, whose height corresponds to the number of table rows.

arguments
dynamicTable
dynamicTable {matnwb.common.validation.mustBeDynamicTable}
columnName {mustBeTextScalar}
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
% Note: Relevant for ragged array columns

arguments
dynamicTable
dynamicTable {matnwb.common.validation.mustBeDynamicTable}
columnName {mustBeTextScalar}
end

Expand Down
2 changes: 1 addition & 1 deletion +types/+util/+dynamictable/+internal/getTableHeight.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
% column object.

arguments
dynamicTable
dynamicTable {matnwb.common.validation.mustBeDynamicTable}
end

if ~isempty(dynamicTable.id)
Expand Down
4 changes: 2 additions & 2 deletions +types/+util/+dynamictable/+internal/initDynamicTableId.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ function initDynamicTableId(dynamicTable, tableHeight)
% core namespace.

arguments
dynamicTable
dynamicTable {matnwb.common.validation.mustBeDynamicTable}
tableHeight = []
end

Expand All @@ -15,7 +15,7 @@ function initDynamicTableId(dynamicTable, tableHeight)
else
idData = [];
end

if exist('types.hdmf_common.ElementIdentifiers', 'class') == 8
dynamicTable.id = types.hdmf_common.ElementIdentifiers('data', idData);
else % legacy ElementIdentifiers
Expand Down
48 changes: 26 additions & 22 deletions +types/+util/+dynamictable/addColumn.m
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
function addColumn(DynamicTable, varargin)
function addColumn(dynamicTable, varargin)
% ADDCOLUMN Given a dynamic table and a set of keyword arguments for one or
% more columns, add one or more columns to the dynamic table by providing
% either keywords or a MATLAB table
%
% ADDCOLUMN(DT,TABLE) append the columns of the MATLAB Table TABLE to the
% ADDCOLUMN(DT,TABLE) append the columns of the MATLAB Table TABLE to the
% DynamicTable
%
% ADDCOLUMN(DT,col_name1,col_vector1,...,col_namen,col_vectorn)
Expand All @@ -15,24 +15,28 @@ function addColumn(DynamicTable, varargin)
% 2) The height of the columns to be appended matches the height of the
% existing columns

validateattributes(DynamicTable,...
{'types.core.DynamicTable', 'types.hdmf_common.DynamicTable'},...
{'scalar'});

assert(nargin > 1, 'NWB:DynamicTable:AddColumn:NoData', 'Not enough arguments');


if isempty(DynamicTable.id)
types.util.dynamictable.internal.initDynamicTableId(DynamicTable);
end

assert(~isa(DynamicTable.id.data, 'types.untyped.DataStub'),...
'NWB:DynamicTable:AddColumn:Uneditable',...
['Cannot write to on-file Dynamic Tables without enabling data pipes. '...
'If this was produced with pynwb, please enable chunking for this table.']);

if istable(varargin{1})
types.util.dynamictable.addTableColumn(DynamicTable, varargin{:});
else
types.util.dynamictable.addVarargColumn(DynamicTable, varargin{:});
arguments
dynamicTable (1,1) {matnwb.common.validation.mustBeDynamicTable}
end
arguments (Repeating)
varargin
end

assert(nargin > 1, 'NWB:DynamicTable:AddColumn:NoData', ...
'Not enough arguments');

if isempty(dynamicTable.id)
types.util.dynamictable.internal.initDynamicTableId(dynamicTable);
end

assert(~isa(dynamicTable.id.data, 'types.untyped.DataStub'),...
'NWB:DynamicTable:AddColumn:Uneditable',...
['Cannot write to on-file Dynamic Tables without enabling data pipes. '...
'If this was produced with pynwb, please enable chunking for this table.']);

if istable(varargin{1})
types.util.dynamictable.addTableColumn(dynamicTable, varargin{:});
else
types.util.dynamictable.addVarargColumn(dynamicTable, varargin{:});
end
end
Loading
Loading