Rzućmy okiem na przykład w ?sql_variant
:Czy sql_variant w programie dbplyr działa tak, jak powinien?
Definiujemy nową funkcję tłumacza do funkcji zagregowanych, rozbudowany niż domyślny:
postgres_agg <- sql_translator(.parent = base_agg,
cor = sql_prefix("corr"),
cov = sql_prefix("covar_samp"),
sd = sql_prefix("stddev_samp"),
var = sql_prefix("var_samp")
)
Następnie definiujemy nowy wariant, który jest wykonany z funkcje tłumaczenie z 3 różnych typów (tutaj 2):
postgres_var <- sql_variant(
base_scalar,
postgres_agg
)
translate_sql(cor(x, y), variant = postgres_var)
# <SQL> COR("x", "y")
translate_sql(sd(income/years), variant = postgres_var)
# <SQL> SD("income"/"years")
one nie wyglądają tłumaczona na mnie, nie powinny one być "CORR"
i "STDDEV_SAMP"
?
# Original comment:
# Any functions not explicitly listed in the converter will be translated
# to sql as is, so you don't need to convert all functions.
translate_sql(regr_intercept(y, x), variant = postgres_var)
# <SQL> REGR_INTERCEPT("y", "x")
Ten zachowuje się zgodnie z oczekiwaniami, czyli podobnie jak inne 2.
Z drugiej strony domyślnie tłumaczone funkcje działają, patrz:
translate_sql(mean(x), variant = postgres_var)
#<SQL> avg("x") OVER()
Jest to prawo bug? czy coś mi brakuje?
Moim celem jest, aby stworzyć kilka wariantów dla Oracle
i używać go w następujący sposób, to dla bardziej skomplikowanych funkcji (przykład z SQLite
być powtarzalna):
con <- DBI::dbConnect(RSQLite::SQLite(), path = ":memory:")
copy_to(con, cars, "cars")
con %>% tbl("cars") %>% summarize(dist = group_concat(dist)) # works as expected, as we're stealing the keyword from sqlite directly
sqlite_variant <- sql_variant(aggregate=sql_translator(.parent = base_agg,gpc = sql_prefix("group_concat")))
con %>% tbl("cars") %>% summarize(dist = gpc(dist)) # how do I make this work ?
EDIT:
Jeszcze jedna nagroda nie została jeszcze rozwiązana. Przekonałem się, że problem został opublikowany bezpośrednio na stronie, gdzie nie jestem pewien, czy ma on lub zwróci uwagę, ale na wypadek, gdy ja (lub ktoś inny) nie zaktualizuje to w czasie, sprawdź ten link: https://github.com/tidyverse/dplyr/issues/3117