11"""
2- SubDataset{<:Dataset, <:AbstractIndex, <:AbstractVector{Int}} <: Dataset
2+ SubDataset{<:Dataset, <:AbstractIndex, <:AbstractVector{Int}, DateTime } <: Dataset
33
44A view of a `Dataset`. It is returned by a call to the `view` function
55on an `Dataset` if a collections of rows and columns are specified.
@@ -90,6 +90,7 @@ struct SubDataset{D<:AbstractDataset, S<:AbstractIndex, T<:AbstractVector{Int}}
9090 parent:: D
9191 colindex:: S
9292 rows:: T # maps from subds row indexes to parent row indexes
93+ created:: DateTime
9394end
9495
9596_attributes (sds:: SubDataset ) = getfield (parent (sds), :attributes )
@@ -111,11 +112,25 @@ Base.@propagate_inbounds function SubDataset(parent::Dataset, rows::AbstractVect
111112 sindex = SubIndex (index (parent), cols)
112113 # SubDataset without columns should not have any row
113114 if all (== (0 ), sindex. remap)
114- SubDataset (parent, sindex, Int[])
115+ SubDataset (parent, sindex, Int[], _get_lastmodified ( _attributes (parent)) )
115116 else
116- SubDataset (parent,sindex , rows)
117+ SubDataset (parent,sindex , rows, _get_lastmodified ( _attributes (parent)) )
117118 end
118119end
120+
121+ Base. @propagate_inbounds function SubDataset (parent:: Dataset , rows:: AbstractVector{Int} , cols, created)
122+ @boundscheck if ! checkindex (Bool, axes (parent, 1 ), rows)
123+ throw (BoundsError (parent, (rows, cols)))
124+ end
125+ sindex = SubIndex (index (parent), cols)
126+ # SubDataset without columns should not have any row
127+ if all (== (0 ), sindex. remap)
128+ SubDataset (parent, sindex, Int[], created)
129+ else
130+ SubDataset (parent,sindex , rows, created)
131+ end
132+ end
133+
119134Base. @propagate_inbounds SubDataset (parent:: Dataset , :: Colon , cols) =
120135 SubDataset (parent, axes (parent, 1 ), cols)
121136@inline SubDataset (parent:: Dataset , row:: Integer , cols) =
@@ -144,7 +159,7 @@ Base.@propagate_inbounds function SubDataset(parent::Dataset, rows::AbstractVect
144159end
145160
146161Base. @propagate_inbounds SubDataset (sds:: SubDataset , rowind, cols) =
147- SubDataset (parent (sds), rows (sds)[rowind], parentcols (index (sds), cols))
162+ SubDataset (parent (sds), rows (sds)[rowind], parentcols (index (sds), cols), getfield (sds, :created ) )
148163Base. @propagate_inbounds SubDataset (sds:: SubDataset , rowind:: Bool , cols) =
149164 throw (ArgumentError (" invalid row index of type Bool" ))
150165
@@ -158,7 +173,7 @@ Base.@propagate_inbounds SubDataset(sds::SubDataset, rowind::Bool, cols) =
158173Base. @propagate_inbounds SubDataset (sds:: SubDataset , rowind:: Bool , :: Colon ) =
159174 throw (ArgumentError (" invalid row index of type Bool" ))
160175Base. @propagate_inbounds SubDataset (sds:: SubDataset , :: Colon , cols) =
161- SubDataset (parent (sds), rows (sds), parentcols (index (sds), cols))
176+ SubDataset (parent (sds), rows (sds), parentcols (index (sds), cols), getfield (sds, :created ) )
162177@inline SubDataset (sds:: SubDataset , :: Colon , :: Colon ) = sds
163178
164179# just for showing SubDataset
@@ -202,15 +217,15 @@ Base.@propagate_inbounds Base.view(ads::AbstractDataset, ::typeof(!), colind::Co
202217
203218@inline Base. view (ads:: AbstractDataset , rowinds, colind:: Bool ) =
204219 throw (ArgumentError (" invalid column index $colind of type `Bool`" ))
205- Base. @propagate_inbounds Base. view (ads :: AbstractDataset , rowinds,
220+ Base. @propagate_inbounds Base. view (parent :: AbstractDataset , rowinds,
206221 colinds:: MultiColumnIndex ) =
207- SubDataset (ads , rowinds, colinds)
208- Base. @propagate_inbounds Base. view (ads :: AbstractDataset , rowinds:: typeof (! ),
222+ SubDataset (parent , rowinds, colinds)
223+ Base. @propagate_inbounds Base. view (parent :: AbstractDataset , rowinds:: typeof (! ),
209224 colinds:: MultiColumnIndex ) =
210- SubDataset (ads , :, colinds)
211- Base. @propagate_inbounds Base. view (ads :: AbstractDataset , rowinds:: Not ,
225+ SubDataset (parent , :, colinds)
226+ Base. @propagate_inbounds Base. view (parent :: AbstractDataset , rowinds:: Not ,
212227 colinds:: MultiColumnIndex ) =
213- SubDataset (ads , axes (ads , 1 )[rowinds], colinds)
228+ SubDataset (parent , axes (parent , 1 )[rowinds], colinds)
214229
215230# #############################################################################
216231# #
0 commit comments