TileDB-R icon indicating copy to clipboard operation
TileDB-R copied to clipboard

Metadata: zero char is not handled the same by array and group.

Open cgiachalis opened this issue 6 months ago • 0 comments

Passing a zero character as metadata is handled differently by array and group. See full reprex at the bottom.


# metadata for array and group
key <- "tzone"
val <- ""
nchar(val)
[1] 0

# array ---------------------------------------------------
# libtiledb_array_get_metadata_list
tiledb_get_all_metadata(arr_handle) # Error
#> Error: Not compatible with STRSXP: [type=NULL].

tiledb_get_metadata(arr_handle, "tzone") # Error
#> Error: Not compatible with STRSXP: [type=NULL].

# group  -------------------------------------------------

# with one metadata key
# Returns empty list
tiledb_group_get_all_metadata(grp)
#> list()

# Returns NULL
tiledb_group_get_metadata(grp, key)
#> NULL

# with 2 metadata keys
tiledb_group_metadata_num(grp) # 2
#> [1] 2

# Error as it tries to assign "key" attribute (array doesn't assign key attr)
tiledb_group_get_all_metadata(grp) # errors
#> Error in names(res)[i] <- attr(obj, "key"): replacement has length zero

R Code - reprex
library(tiledb)

# metadata for array and group
key <- "tzone"
val <- ""

 nchar(val)
[1] 0

# Array metadata ------------------------

uri_arr <- tempfile("arr1")
fromDataFrame(data.frame(a = "foo"), uri_arr)
arr_handle <- tiledb_array(uri_arr)

arr_handle <- tiledb_array_open(arr_handle, type = "WRITE")

# Put metadata
tiledb_put_metadata(arr_handle, key, val) # OK
#> [1] TRUE


arr_handle <- tiledb_array_close(arr_handle)
arr_handle <- tiledb_array_open(arr_handle, type = "READ")

# libtiledb_array_get_metadata_list
tiledb_get_all_metadata(arr_handle) # Error
#> Error: Not compatible with STRSXP: [type=NULL].

tiledb_get_metadata(arr_handle, "tzone") # Error
#> Error: Not compatible with STRSXP: [type=NULL].

# Group metadata ------------------------

uri_grp <- tempfile("grp1")
grp <- tiledb_group_create(uri_grp)
grp <- tiledb_group(grp, type = "WRITE")

# Put metadata
tiledb_group_put_metadata(grp, key, val) # OK
#> [1] TRUE


grp <- tiledb_group_close(grp)
grp <- tiledb_group_open(grp, type = "READ")

# Returns empty list
tiledb_group_get_all_metadata(grp)
#> list()

# Returns NULL
tiledb_group_get_metadata(grp, key)
#> NULL


# Put another key,val metadata
grp <- tiledb_group_close(grp)
grp <- tiledb_group(uri_grp, type = "WRITE")

tiledb_group_put_metadata(grp, "b", 2) # OK
#> [1] TRUE

grp <- tiledb_group_close(grp)
grp <- tiledb_group_open(grp, type = "READ")

tiledb_group_metadata_num(grp) # 2
#> [1] 2

# Error as it tries to assign "key" attribute (array doesn't assign key attr)
tiledb_group_get_all_metadata(grp) # errors
#> Error in names(res)[i] <- attr(obj, "key"): replacement has length zero

cgiachalis avatar Jul 02 '25 05:07 cgiachalis