tests/testthat/_snaps/primary-keys.md

dm_add_pk() works as intended?

Code
  dm(x = tibble(x = integer())) %>% dm_add_pk(x)
Condition
  Error in `dm_add_pk()`:
  ! `columns` is absent but must be supplied.

dm_rm_pk() supports partial filters

Code
  dm_for_filter() %>% dm_rm_pk(tf_4) %>% get_all_keys()
Output
  $pks
  # A tibble: 5 x 3
    table pk_col autoincrement
    <chr> <keys> <lgl>        
  1 tf_1  a      TRUE         
  2 tf_2  c      FALSE        
  3 tf_3  f, f1  FALSE        
  4 tf_5  k      FALSE        
  5 tf_6  o      FALSE

  $fks
  # A tibble: 5 x 5
    child_table child_fk_cols parent_table parent_key_cols on_delete
    <chr>       <keys>        <chr>        <keys>          <chr>    
  1 tf_2        d             tf_1         a               no_action
  2 tf_2        e, e1         tf_3         f, f1           no_action
  3 tf_4        j, j1         tf_3         f, f1           no_action
  4 tf_5        l             tf_4         h               cascade  
  5 tf_5        m             tf_6         n               no_action

Code
  dm_for_filter() %>% dm_rm_pk(tf_3) %>% get_all_keys()
Output
  $pks
  # A tibble: 5 x 3
    table pk_col autoincrement
    <chr> <keys> <lgl>        
  1 tf_1  a      TRUE         
  2 tf_2  c      FALSE        
  3 tf_4  h      FALSE        
  4 tf_5  k      FALSE        
  5 tf_6  o      FALSE

  $fks
  # A tibble: 5 x 5
    child_table child_fk_cols parent_table parent_key_cols on_delete
    <chr>       <keys>        <chr>        <keys>          <chr>    
  1 tf_2        d             tf_1         a               no_action
  2 tf_2        e, e1         tf_3         f, f1           no_action
  3 tf_4        j, j1         tf_3         f, f1           no_action
  4 tf_5        l             tf_4         h               cascade  
  5 tf_5        m             tf_6         n               no_action

Code
  dm_for_filter() %>% dm_rm_pk(tf_6) %>% get_all_keys()
Output
  $pks
  # A tibble: 5 x 3
    table pk_col autoincrement
    <chr> <keys> <lgl>        
  1 tf_1  a      TRUE         
  2 tf_2  c      FALSE        
  3 tf_3  f, f1  FALSE        
  4 tf_4  h      FALSE        
  5 tf_5  k      FALSE

  $fks
  # A tibble: 5 x 5
    child_table child_fk_cols parent_table parent_key_cols on_delete
    <chr>       <keys>        <chr>        <keys>          <chr>    
  1 tf_2        d             tf_1         a               no_action
  2 tf_2        e, e1         tf_3         f, f1           no_action
  3 tf_4        j, j1         tf_3         f, f1           no_action
  4 tf_5        l             tf_4         h               cascade  
  5 tf_5        m             tf_6         n               no_action

Code
  dm_for_filter() %>% dm_rm_pk(tf_4, rm_referencing_fks = TRUE) %>% get_all_keys()
Condition
  Warning:
  The `rm_referencing_fks` argument of `dm_rm_pk()` is deprecated as of dm 0.2.1.
  i When removing a primary key, potential associated foreign keys will be pointing at an implicit unique key.
Output
  $pks
  # A tibble: 5 x 3
    table pk_col autoincrement
    <chr> <keys> <lgl>        
  1 tf_1  a      TRUE         
  2 tf_2  c      FALSE        
  3 tf_3  f, f1  FALSE        
  4 tf_5  k      FALSE        
  5 tf_6  o      FALSE

  $fks
  # A tibble: 5 x 5
    child_table child_fk_cols parent_table parent_key_cols on_delete
    <chr>       <keys>        <chr>        <keys>          <chr>    
  1 tf_2        d             tf_1         a               no_action
  2 tf_2        e, e1         tf_3         f, f1           no_action
  3 tf_4        j, j1         tf_3         f, f1           no_action
  4 tf_5        l             tf_4         h               cascade  
  5 tf_5        m             tf_6         n               no_action

Code
  dm_for_filter() %>% dm_rm_pk(columns = c) %>% get_all_keys()
Message
  Removing primary keys: %>%
    dm_rm_pk(tf_2)
Output
  $pks
  # A tibble: 5 x 3
    table pk_col autoincrement
    <chr> <keys> <lgl>        
  1 tf_1  a      TRUE         
  2 tf_3  f, f1  FALSE        
  3 tf_4  h      FALSE        
  4 tf_5  k      FALSE        
  5 tf_6  o      FALSE

  $fks
  # A tibble: 5 x 5
    child_table child_fk_cols parent_table parent_key_cols on_delete
    <chr>       <keys>        <chr>        <keys>          <chr>    
  1 tf_2        d             tf_1         a               no_action
  2 tf_2        e, e1         tf_3         f, f1           no_action
  3 tf_4        j, j1         tf_3         f, f1           no_action
  4 tf_5        l             tf_4         h               cascade  
  5 tf_5        m             tf_6         n               no_action

Code
  dm_for_filter() %>% dm_rm_pk(columns = c(f, f1)) %>% get_all_keys()
Message
  Removing primary keys: %>%
    dm_rm_pk(tf_3)
Output
  $pks
  # A tibble: 5 x 3
    table pk_col autoincrement
    <chr> <keys> <lgl>        
  1 tf_1  a      TRUE         
  2 tf_2  c      FALSE        
  3 tf_4  h      FALSE        
  4 tf_5  k      FALSE        
  5 tf_6  o      FALSE

  $fks
  # A tibble: 5 x 5
    child_table child_fk_cols parent_table parent_key_cols on_delete
    <chr>       <keys>        <chr>        <keys>          <chr>    
  1 tf_2        d             tf_1         a               no_action
  2 tf_2        e, e1         tf_3         f, f1           no_action
  3 tf_4        j, j1         tf_3         f, f1           no_action
  4 tf_5        l             tf_4         h               cascade  
  5 tf_5        m             tf_6         n               no_action

Code
  dm_for_filter() %>% dm_rm_pk(fail_fk = FALSE) %>% get_all_keys()
Condition
  Warning:
  The `fail_fk` argument of `dm_rm_pk()` is deprecated as of dm 1.0.4.
  i When removing a primary key, potential associated foreign keys will be pointing at an implicit unique key.
Message
  Removing primary keys: %>%
    dm_rm_pk(tf_1) %>%
    dm_rm_pk(tf_2) %>%
    dm_rm_pk(tf_3) %>%
    dm_rm_pk(tf_4) %>%
    dm_rm_pk(tf_5) %>%
    dm_rm_pk(tf_6)
Output
  $pks
  # A tibble: 0 x 3
  # i 3 variables: table <chr>, pk_col <keys>, autoincrement <lgl>

  $fks
  # A tibble: 5 x 5
    child_table child_fk_cols parent_table parent_key_cols on_delete
    <chr>       <keys>        <chr>        <keys>          <chr>    
  1 tf_2        d             tf_1         a               no_action
  2 tf_2        e, e1         tf_3         f, f1           no_action
  3 tf_4        j, j1         tf_3         f, f1           no_action
  4 tf_5        l             tf_4         h               cascade  
  5 tf_5        m             tf_6         n               no_action

dm_enum_pk_candidates() works properly?

Code
  dm_enum_pk_candidates(dm_test_obj(), dm_table_1)
Output
  # A tibble: 2 x 3
    columns candidate why  
    <keys>  <lgl>     <chr>
  1 a       TRUE      ""   
  2 b       TRUE      ""   
Code
  dm_enum_pk_candidates(dm_test_obj(), dm_table_2)
Output
  # A tibble: 1 x 3
    columns candidate why                        
    <keys>  <lgl>     <chr>                      
  1 c       FALSE     has duplicate values: 5 (2)
Code
  dm_enum_pk_candidates(dm_test_obj(), dm_table_5)
Output
  # A tibble: 1 x 3
    columns candidate why                 
    <keys>  <lgl>     <chr>               
  1 c       FALSE     has 1 missing values
Code
  dm_enum_pk_candidates(dm_test_obj(), dm_table_6)
Output
  # A tibble: 1 x 3
    columns candidate why                                              
    <keys>  <lgl>     <chr>                                            
  1 c       FALSE     has 1 missing values, and duplicate values: 3 (2)

output

Code
  dm(x = tibble(a = c(1, 1))) %>% dm_add_pk(x, a, check = TRUE)
Condition
  Error in `abort_not_unique_key()`:
  ! (`a`) not a unique key of `x`.

dm_get_all_pks() with table arg

Code
  nyc_comp() %>% dm_get_all_pks("weather")
Output
  # A tibble: 1 x 3
    table   pk_col            autoincrement
    <chr>   <keys>            <lgl>        
  1 weather origin, time_hour FALSE        
Code
  nyc_comp() %>% dm_get_all_pks(c(airlines, weather))
Output
  # A tibble: 2 x 3
    table    pk_col            autoincrement
    <chr>    <keys>            <lgl>        
  1 airlines carrier           FALSE        
  2 weather  origin, time_hour FALSE        
Code
  nyc_comp() %>% dm_get_all_pks(starts_with("weat"))
Output
  # A tibble: 1 x 3
    table   pk_col            autoincrement
    <chr>   <keys>            <lgl>        
  1 weather origin, time_hour FALSE        
Code
  nyc_comp() %>% dm_get_all_pks(matches("^a.*s$"))
Output
  # A tibble: 2 x 3
    table    pk_col  autoincrement
    <chr>    <keys>  <lgl>        
  1 airlines carrier FALSE        
  2 airports faa     FALSE

dm_get_all_pks() with table arg fails nicely

Can't subset tables that don't exist.
x Table `timetable` doesn't exist.

dm_get_all_pks() with compound keys

Code
  nyc_comp()
Output
  -- Metadata --------------------------------------------------------------------
  Tables: `airlines`, `airports`, `flights`, `planes`, `weather`
  Columns: 53
  Primary keys: 4
  Foreign keys: 4
Code
  nyc_comp() %>% dm_get_all_pks()
Output
  # A tibble: 4 x 3
    table    pk_col            autoincrement
    <chr>    <keys>            <lgl>        
  1 airlines carrier           FALSE        
  2 airports faa               FALSE        
  3 planes   tailnum           FALSE        
  4 weather  origin, time_hour FALSE

autoincrement fails with compound keys

Code
  dm(x) %>% dm_add_pk(x, columns = c(x_id, z), autoincrement = TRUE)
Condition
  Error in `dm_add_pk()`:
  ! Composite primary keys cannot be autoincremented.
  * Provide only a single column name to `columns`.

set autoincrement PK

Code
  dm(x, y = x) %>% dm_add_pk(x, columns = c(x_id), autoincrement = TRUE) %>%
    dm_add_pk(y, columns = c(x_id, z)) %>% dm_get_all_pks()
Output
  # A tibble: 2 x 3
    table pk_col  autoincrement
    <chr> <keys>  <lgl>        
  1 x     x_id    TRUE         
  2 y     x_id, z FALSE


Try the dm package in your browser

Any scripts or data that you put into this service are public.

dm documentation built on Nov. 2, 2023, 6:07 p.m.