test_that("custom scalar functions translated correctly", {
local_con(simulate_oracle())
expect_equal(test_translate_sql(as.character(x)), sql("CAST(`x` AS VARCHAR2(255))"))
expect_equal(test_translate_sql(as.integer64(x)), sql("CAST(`x` AS NUMBER(19))"))
expect_equal(test_translate_sql(as.double(x)), sql("CAST(`x` AS NUMBER)"))
expect_equal(test_translate_sql(as.Date(x)), sql("DATE `x`"))
expect_equal(test_translate_sql(as.Date("2023-01-01")), sql("DATE '2023-01-01'"))
})
test_that("paste and paste0 translate correctly", {
local_con(simulate_oracle())
expect_equal(test_translate_sql(paste(x, y)), sql("`x` || ' ' || `y`"))
expect_equal(test_translate_sql(paste0(x, y)), sql("`x` || `y`"))
expect_equal(test_translate_sql(str_c(x, y)), sql("`x` || `y`"))
})
test_that("string functions translate correctly", {
local_con(simulate_oracle())
expect_snapshot({
test_translate_sql(str_replace(col, "pattern", "replacement"))
test_translate_sql(str_replace_all(col, "pattern", "replacement"))
})
})
test_that("queries translate correctly", {
mf <- lazy_frame(x = 1, con = simulate_oracle())
expect_snapshot(mf %>% head())
})
test_that("`sql_query_upsert()` is correct", {
con <- simulate_oracle()
df_y <- lazy_frame(
a = 2:3, b = c(12L, 13L), c = -(2:3), d = c("y", "z"),
con = con,
.name = "df_y"
) %>%
mutate(c = c + 1)
expect_snapshot(
sql_query_upsert(
con = con,
table = ident("df_x"),
from = sql_render(df_y, con, lvl = 1),
by = c("a", "b"),
update_cols = c("c", "d"),
returning_cols = c("a", b2 = "b"),
method = "merge"
)
)
})
test_that("generates custom sql", {
con <- simulate_oracle()
expect_snapshot(sql_table_analyze(con, in_schema("schema", "tbl")))
expect_snapshot(sql_query_explain(con, sql("SELECT * FROM foo")))
lf <- lazy_frame(x = 1, con = con)
expect_snapshot(left_join(lf, lf, by = "x", na_matches = "na"))
expect_snapshot(sql_query_save(con, sql("SELECT * FROM foo"), in_schema("schema", "tbl")))
expect_snapshot(sql_query_save(con, sql("SELECT * FROM foo"), in_schema("schema", "tbl"), temporary = FALSE))
expect_snapshot(slice_sample(lf, n = 1))
})
test_that("copy_inline uses UNION ALL", {
con <- simulate_oracle()
y <- tibble::tibble(id = 1L, arr = "{1,2,3}")
types <- c(id = "bigint", arr = "integer[]")
expect_snapshot({
copy_inline(con, y %>% slice(0)) %>% remote_query()
copy_inline(con, y) %>% remote_query()
# with `types`
copy_inline(con, y %>% slice(0), types = types) %>% remote_query()
copy_inline(con, y, types = types) %>% remote_query()
})
})
test_that("custom clock functions translated correctly", {
local_con(simulate_oracle())
expect_equal(test_translate_sql(add_years(x, 1)), sql("(`x` + NUMTODSINTERVAL(1.0 * 365.25, 'day'))"))
expect_equal(test_translate_sql(add_days(x, 1)), sql("(`x` + NUMTODSINTERVAL(1.0, 'day'))"))
expect_error(test_translate_sql(add_days(x, 1, "dots", "must", "be empty")))
})
test_that("difftime is translated correctly", {
local_con(simulate_oracle())
expect_equal(test_translate_sql(difftime(start_date, end_date, units = "days")), sql("CEIL(CAST(`end_date` AS DATE) - CAST(`start_date` AS DATE))"))
expect_equal(test_translate_sql(difftime(start_date, end_date)), sql("CEIL(CAST(`end_date` AS DATE) - CAST(`start_date` AS DATE))"))
expect_error(test_translate_sql(difftime(start_date, end_date, units = "auto")))
expect_error(test_translate_sql(difftime(start_date, end_date, tz = "UTC", units = "days")))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.