# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
presto_type <- Sys.getenv("PRESTO_TYPE", "Presto")
is_trino <- (presto_type == "Trino")
has_conn <- FALSE
# If the Presto/Trino server is started and the memory catalog is set up,
# populate an "iris" table in both "default" and "testing" schemas
tryCatch(
{
conn <- DBI::dbConnect(
RPresto::Presto(),
catalog = "memory",
schema = "default",
host = "http://localhost",
port = ifelse(is_trino, 8090, 8080),
source = "RPresto_test",
user = Sys.getenv("USER"),
use.trino.headers = is_trino
)
has_conn <- DBI::dbGetQuery(conn, "SELECT TRUE AS res")$res
},
error = function(...) {
warning(
presto_type, " connection default is not available",
call. = FALSE, immediate. = TRUE
)
}
)
if (has_conn) {
if (DBI::dbExistsTable(conn, "iris")) {
stop(
"iris table already exists in ", presto_type, " connection default",
call. = FALSE
)
}
DBI::dbWriteTable(conn, "iris", iris)
if (DBI::dbExistsTable(conn, "iris")) {
message(
"iris table is successfully written in ",
presto_type,
" connection default"
)
} else {
stop(
"iris table failed to be written in ", presto_type, " connection default",
call. = FALSE
)
}
schemas <- DBI::dbGetQuery(conn, "SHOW SCHEMAS")$Schema
has_testing_schema <- "testing" %in% schemas
if (!has_testing_schema) {
DBI::dbExecute(conn, "CREATE SCHEMA testing")
}
if (DBI::dbExistsTable(conn, dbplyr::in_schema("testing", "iris"))) {
stop(
"iris table already exists in ", presto_type, " connection testing",
call. = FALSE
)
}
DBI::dbWriteTable(conn, dbplyr::in_schema("testing", "iris"), iris)
if (DBI::dbExistsTable(conn, dbplyr::in_schema("testing", "iris"))) {
message(
"iris table is successfully written in ",
presto_type,
" connection testing"
)
} else {
stop(
"iris table failed to be written in ", presto_type, " connection testing",
call. = FALSE
)
}
}
withr::defer(
{
if (has_conn && DBI::dbExistsTable(conn, "iris")) {
DBI::dbRemoveTable(conn, "iris")
}
if (has_conn && DBI::dbExistsTable(conn, dbplyr::in_schema("testing", "iris"))) {
DBI::dbRemoveTable(conn, dbplyr::in_schema("testing", "iris"))
}
if (has_conn && !has_testing_schema) {
DBI::dbExecute(conn, "DROP SCHEMA IF EXISTS testing")
}
},
teardown_env()
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.