## ----setup, include = FALSE----------------------------------------------
source("setup/setup.R")

## ------------------------------------------------------------------------
# library(dm)

## ------------------------------------------------------------------------
# data_1 <- tibble(a = c(1, 2, 1), b = c(1, 4, 1), c = c(5, 6, 7))
# data_2 <- tibble(a = c(1, 2, 3), b = c(4, 5, 6), c = c(7, 8, 9))

## ----error = TRUE--------------------------------------------------------
try({
# check_key(data_1, a)
})

## ------------------------------------------------------------------------
# check_key(data_2, a)

## ------------------------------------------------------------------------
# check_subset(data_1, a, data_2, a)

## ----error = TRUE--------------------------------------------------------
try({
# check_subset(data_2, a, data_1, a)
})

## ----eval=FALSE----------------------------------------------------------
# check_key(t2, c2)
# check_subset(t1, c1, t2, c2)

## ----error=TRUE----------------------------------------------------------
try({
# check_set_equality(data_1, a, data_2, a)
})

## ------------------------------------------------------------------------
# data_3 <- tibble(a = c(2, 1, 2), b = c(4, 5, 6), c = c(7, 8, 9))
# 
# check_set_equality(data_1, a, data_3, a)

## ------------------------------------------------------------------------
# d1 <- tibble(a = 1:5)
# d2 <- tibble(c = c(1:5, 5))
# d3 <- tibble(c = 1:4)
# d4 <- tibble(a = c(2:5, 5))

## ----error=TRUE----------------------------------------------------------
try({
# # This does not pass, `c` is not unique key of d2:
# check_cardinality_0_n(d2, c, d1, a)
# 
# # This passes, multiple values in d2$c are allowed:
# check_cardinality_0_n(d1, a, d2, c)
# 
# # This does not pass, injectivity is violated:
# check_cardinality_1_1(d1, a, d2, c)
# 
# # This passes:
# check_cardinality_0_1(d1, a, d3, c)
})

## ------------------------------------------------------------------------
# examine_cardinality(d1, a, d3, c)
# examine_cardinality(d1, a, d2, c)
# examine_cardinality(d1, a, d1, a)
# examine_cardinality(d1, a, d4, a)

## ------------------------------------------------------------------------
# examine_cardinality(d2, c, d1, a)

## ------------------------------------------------------------------------
# mtcars_tibble <- tibble::as_tibble(mtcars)
# mtcars_tibble
# decomposed_table <- decompose_table(mtcars_tibble, am_gear_carb_id, am, gear, carb)
# decomposed_table

## ------------------------------------------------------------------------
# parent_table <- decomposed_table$parent_table
# child_table <- decomposed_table$child_table
# reunite_parent_child(child_table, parent_table, id_column = am_gear_carb_id)

## ----eval = FALSE--------------------------------------------------------
# # Shortcut:
# reunite_parent_child_from_list(decomposed_table, id_column = am_gear_carb_id)