consolidate write functions into one file. Add execute function.
This commit is contained in:
parent
867e9bb559
commit
08bf6ee17e
|
@ -1,4 +1,3 @@
|
|||
|
||||
# Copyright 2019 Observational Health Data Sciences and Informatics
|
||||
#
|
||||
# This file is part of CdmDdlBase
|
||||
|
@ -46,7 +45,7 @@ createDdl <- function(cdmVersion){
|
|||
tableList <- tableSpecs$cdmTableName
|
||||
|
||||
sql_result <- c()
|
||||
sql_result <- c(paste0("--@targetdialect CDM DDL Specification for OMOP Common Data Model ", cdmVersion))
|
||||
sql_result <- c(paste0("--@targetDialect CDM DDL Specification for OMOP Common Data Model ", cdmVersion))
|
||||
for (tableName in tableList){
|
||||
fields <- subset(cdmSpecs, cdmTableName == tableName)
|
||||
fieldNames <- fields$cdmFieldName
|
||||
|
@ -92,7 +91,7 @@ createDdl <- function(cdmVersion){
|
|||
}
|
||||
|
||||
|
||||
#' @describeIn createDdl
|
||||
#' @describeIn createDdl createPrimaryKeys asdfladsfj
|
||||
#' @export
|
||||
createPrimaryKeys <- function(cdmVersion){
|
||||
|
||||
|
@ -105,7 +104,7 @@ createPrimaryKeys <- function(cdmVersion){
|
|||
primaryKeys <- subset(cdmSpecs, isPrimaryKey == "Yes")
|
||||
pkFields <- primaryKeys$cdmFieldName
|
||||
|
||||
sql_result <- c(paste0("--@targetdialect CDM Primary Key Constraints for OMOP Common Data Model ", cdmVersion, "\n"))
|
||||
sql_result <- c(paste0("--@targetDialect CDM Primary Key Constraints for OMOP Common Data Model ", cdmVersion, "\n"))
|
||||
for (pkField in pkFields){
|
||||
|
||||
subquery <- subset(primaryKeys, cdmFieldName==pkField)
|
||||
|
@ -116,7 +115,7 @@ createPrimaryKeys <- function(cdmVersion){
|
|||
return(paste0(sql_result, collapse = ""))
|
||||
}
|
||||
|
||||
#' @describeIn createDdl
|
||||
#' @describeIn createDdl createForeignKeys asdfladsf
|
||||
#' @export
|
||||
createForeignKeys <- function(cdmVersion){
|
||||
|
||||
|
@ -129,7 +128,7 @@ createForeignKeys <- function(cdmVersion){
|
|||
foreignKeys <- subset(cdmSpecs, isForeignKey == "Yes")
|
||||
foreignKeys$key <- paste0(foreignKeys$cdmTableName, "_", foreignKeys$cdmFieldName)
|
||||
|
||||
sql_result <- c(paste0("--@targetdialect CDM Foreign Key Constraints for OMOP Common Data Model ", cdmVersion, "\n"))
|
||||
sql_result <- c(paste0("--@targetDialect CDM Foreign Key Constraints for OMOP Common Data Model ", cdmVersion, "\n"))
|
||||
for (foreignKey in foreignKeys$key){
|
||||
|
||||
subquery <- subset(foreignKeys, foreignKeys$key==foreignKey)
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
#'
|
||||
#' @examples
|
||||
#' \dontrun{
|
||||
#' downloadCurrentDdl("OHDSI/CommonDataModel", pathToCsv="Sql%20Server/OMOP%20CDM%20sql%20server%20ddl.txt")
|
||||
#' downloadCurrentDdl("OHDSI/CommonDataModel",
|
||||
#' pathToCsv="Sql%20Server/OMOP%20CDM%20sql%20server%20ddl.txt")
|
||||
#' }
|
||||
#'
|
||||
#' @export
|
||||
|
|
|
@ -0,0 +1,86 @@
|
|||
# Copyright 2019 Observational Health Data Sciences and Informatics
|
||||
#
|
||||
# This file is part of CdmDdlBase
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#' Generate and execute the DDL on a database
|
||||
#'
|
||||
#' This function will generate the DDL for a specific dbms and CDM version and
|
||||
#' then execute the DDL on a database.
|
||||
#'
|
||||
#' @param connectionDetails An object of class connectionDetails as created by the DatabaseConnector::createConnectionDetails function.
|
||||
#' @param cdmVersion The version of the CDM you are creating, e.g. 5.3, 5.4
|
||||
#' @param cdmDatabaseSchema The schema of the CDM instance where the DDL will be run. For example, this would be "ohdsi.dbo" when testing on sql server.
|
||||
#' @param executeDdl Should the DDL be executed? TRUE or FALSE
|
||||
#' @param executePrimaryKey Should the primary keys be added? TRUE or FALSE
|
||||
#' @param executeForeignKey Should the foreign keys be added? TRUE or FALSE
|
||||
#' @param ... Other arguments passed on to DatabaseConnector::executeSql. (This allows the user to set the path to errorReportFile.)
|
||||
#' @export
|
||||
#'
|
||||
#' @examples
|
||||
#' \dontrun{
|
||||
#' executeDdl(connectionDetails = connectionDetails,
|
||||
#' cdmVersion = "5.4",
|
||||
#' cdmDatabaseSchema = "myCdm")
|
||||
#'}
|
||||
executeDdl <- function(connectionDetails,
|
||||
cdmVersion,
|
||||
cdmDatabaseSchema,
|
||||
executeDdl = TRUE,
|
||||
executePrimaryKey = TRUE,
|
||||
executeForeignKey = TRUE,
|
||||
...) {
|
||||
|
||||
outputpath <- tempdir(check = TRUE)
|
||||
|
||||
|
||||
if(executeDdl) {
|
||||
filename <- writeDdl(targetDialect = connectionDetails$dbms,
|
||||
cdmVersion = cdmVersion,
|
||||
cdmDatabaseSchema = cdmDatabaseSchema,
|
||||
outputpath = outputpath)
|
||||
|
||||
sql <- readr::read_file(file.path(outputpath, filename))
|
||||
} else {
|
||||
sql <- ""
|
||||
}
|
||||
|
||||
if(executePrimaryKey) {
|
||||
filename <- writePrimaryKeys(targetDialect = connectionDetails$dbms,
|
||||
cdmVersion = cdmVersion,
|
||||
cdmDatabaseSchema = cdmDatabaseSchema,
|
||||
outputpath = outputpath)
|
||||
|
||||
sql <- paste(sql, readr::read_file(file.path(outputpath, filename)), sep = "\n")
|
||||
}
|
||||
|
||||
if(executeForeignKey) {
|
||||
filename <- writeForeignKeys(targetDialect = connectionDetails$dbms,
|
||||
cdmVersion = cdmVersion,
|
||||
cdmDatabaseSchema = cdmDatabaseSchema,
|
||||
outputpath = outputpath)
|
||||
|
||||
sql <- paste(sql, readr::read_file(file.path(outputpath, filename)), sep = "\n")
|
||||
}
|
||||
|
||||
con <- DatabaseConnector::connect(connectionDetails = connectionDetails)
|
||||
|
||||
DatabaseConnector::executeSql(con, sql = sql, ...)
|
||||
|
||||
DatabaseConnector::disconnect(con)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
108
R/writeDDL.R
108
R/writeDDL.R
|
@ -16,22 +16,108 @@
|
|||
|
||||
#' Write DDL script
|
||||
#'
|
||||
#' @param targetdialect The dialect of the target database. Choices are "oracle", "postgresql", "pdw", "redshift", "impala", "netezza", "bigquery", "sql server"
|
||||
#' @param cdmVersion The version of the CDM for which you are creating the DDL. e.g. 5.3.1
|
||||
#' Write the DDL to a SQL file. The SQL will be rendered (parameters replaced) and translated to the target SQL
|
||||
#' dialect. By default the @cdmDatabaseSchema parameter is kept in the SQL file and needs to be replaced before
|
||||
#' execution.
|
||||
#'
|
||||
#' @param targetDialect The dialect of the target database. Choices are "oracle", "postgresql", "pdw", "redshift", "impala", "netezza", "bigquery", "sql server"
|
||||
#' @param cdmVersion The version of the CDM you are creating, e.g. 5.3, 5.4
|
||||
#' @param outputpath The directory or folder where the SQL file should be saved.
|
||||
#' @param cdmDatabaseSchema The schema of the CDM instance where the DDL will be run. For example, this would be "ohdsi.dbo" when testing on sql server.
|
||||
#' Defaults to "@cdmDatabaseSchema"
|
||||
#'
|
||||
#' @export
|
||||
writeDDL <- function(targetdialect, cdmVersion, cdmDatabaseSchema = "@cdmDatabaseSchema") {
|
||||
outputpath <- file.path("ddl", cdmVersion, targetdialect)
|
||||
dir.create(outputpath, showWarnings = FALSE, recursive = TRUE)
|
||||
writeDdl <- function(targetDialect, cdmVersion, outputpath, cdmDatabaseSchema = "@cdmDatabaseSchema") {
|
||||
|
||||
# argument checks
|
||||
stopifnot(targetDialect %in% c("oracle", "postgresql", "pdw", "redshift", "impala", "netezza", "bigquery", "sql server"))
|
||||
stopifnot(cdmVersion %in% listSupportedVersions())
|
||||
stopifnot(is.character(cdmDatabaseSchema))
|
||||
|
||||
if(missing(outputpath)) {
|
||||
outputpath <- file.path("ddl", cdmVersion, gsub(" ", "_", targetDialect))
|
||||
}
|
||||
|
||||
if(!dir.exists(outputpath)) dir.create(outputpath, showWarnings = FALSE, recursive = TRUE)
|
||||
|
||||
sql <- createDdl(cdmVersion)
|
||||
sql <- SqlRender::render(sql = sql, cdmDatabaseSchema = cdmDatabaseSchema, targetdialect = targetdialect)
|
||||
sql <- SqlRender::translate(sql, targetDialect = targetdialect)
|
||||
sql <- SqlRender::render(sql = sql, cdmDatabaseSchema = cdmDatabaseSchema, targetDialect = targetDialect)
|
||||
sql <- SqlRender::translate(sql, targetDialect = targetDialect)
|
||||
|
||||
filename <- paste("OMOPCDM", targetdialect, cdmVersion, "ddl.sql", sep = "_")
|
||||
SqlRender::writeSql(sql = sql,
|
||||
targetFile = file.path(outputpath, filename)
|
||||
)
|
||||
filename <- paste("OMOPCDM", gsub(" ", "_", targetDialect), cdmVersion, "ddl.sql", sep = "_")
|
||||
SqlRender::writeSql(sql = sql, targetFile = file.path(outputpath, filename))
|
||||
invisible(filename)
|
||||
}
|
||||
|
||||
#' @describeIn writeDdl writePrimaryKeys Write the SQL code that creates the primary keys to a file.
|
||||
#' @export
|
||||
writePrimaryKeys <- function(targetDialect, cdmVersion, outputpath, cdmDatabaseSchema = "@cdmDatabaseSchema") {
|
||||
|
||||
# argument checks
|
||||
stopifnot(targetDialect %in% c("oracle", "postgresql", "pdw", "redshift", "impala", "netezza", "bigquery", "sql server"))
|
||||
stopifnot(cdmVersion %in% listSupportedVersions())
|
||||
stopifnot(is.character(cdmDatabaseSchema))
|
||||
|
||||
if(missing(outputpath)) {
|
||||
outputpath <- file.path("ddl", cdmVersion, gsub(" ", "_", targetDialect))
|
||||
}
|
||||
|
||||
if(!dir.exists(outputpath)) dir.create(outputpath, showWarnings = FALSE, recursive = TRUE)
|
||||
|
||||
sql <- createPrimaryKeys(cdmVersion)
|
||||
sql <- SqlRender::render(sql = sql, cdmDatabaseSchema = cdmDatabaseSchema, targetDialect = targetDialect)
|
||||
sql <- SqlRender::translate(sql, targetDialect = targetDialect)
|
||||
|
||||
filename <- paste("OMOPCDM", gsub(" ", "_", targetDialect), cdmVersion, "primary", "keys.sql", sep = "_")
|
||||
SqlRender::writeSql(sql = sql, targetFile = file.path(outputpath, filename))
|
||||
invisible(filename)
|
||||
}
|
||||
|
||||
#' @describeIn writeDdl writeForeignKeys Write the SQL code that creates the foreign keys to a file.
|
||||
#' @export
|
||||
writeForeignKeys <- function(targetDialect, cdmVersion, outputpath, cdmDatabaseSchema = "@cdmDatabaseSchema") {
|
||||
|
||||
# argument checks
|
||||
stopifnot(targetDialect %in% c("oracle", "postgresql", "pdw", "redshift", "impala", "netezza", "bigquery", "sql server"))
|
||||
stopifnot(cdmVersion %in% listSupportedVersions())
|
||||
stopifnot(is.character(cdmDatabaseSchema))
|
||||
|
||||
if(missing(outputpath)) {
|
||||
outputpath <- file.path("ddl", cdmVersion, gsub(" ", "_", targetDialect))
|
||||
}
|
||||
|
||||
if(!dir.exists(outputpath)) dir.create(outputpath, showWarnings = FALSE, recursive = TRUE)
|
||||
|
||||
sql <- createForeignKeys(cdmVersion)
|
||||
sql <- SqlRender::render(sql = sql, cdmDatabaseSchema = cdmDatabaseSchema, targetDialect = targetDialect)
|
||||
sql <- SqlRender::translate(sql, targetDialect = targetDialect)
|
||||
|
||||
filename <- paste("OMOPCDM", gsub(" ", "_", targetDialect), cdmVersion, "constraints.sql", sep = "_")
|
||||
SqlRender::writeSql(sql = sql, targetFile = file.path(outputpath, filename))
|
||||
invisible(filename)
|
||||
}
|
||||
|
||||
#' @describeIn writeDdl writeIndex Write the rendered and translated sql that creates recommended indexes to a file.
|
||||
#' @export
|
||||
writeIndex <- function(targetDialect, cdmVersion, outputpath, cdmDatabaseSchema = "@cdmDatabaseSchema") {
|
||||
|
||||
# argument checks
|
||||
stopifnot(targetDialect %in% c("oracle", "postgresql", "pdw", "redshift", "impala", "netezza", "bigquery", "sql server"))
|
||||
stopifnot(cdmVersion %in% listSupportedVersions())
|
||||
stopifnot(is.character(cdmDatabaseSchema))
|
||||
|
||||
if(missing(outputpath)) {
|
||||
outputpath <- file.path("ddl", cdmVersion, gsub(" ", "_", targetDialect))
|
||||
}
|
||||
|
||||
if(!dir.exists(outputpath)) dir.create(outputpath, showWarnings = FALSE, recursive = TRUE)
|
||||
|
||||
sqlFilename <- paste0("OMOP_CDM_indices_v", cdmVersion, ".sql")
|
||||
sql <- readr::read_file(system.file(file.path("sql", "sql_server", sqlFilename), package = "CommonDataModel"))
|
||||
sql <- SqlRender::render(sql, targetDialect = targetDialect, cdmDatabaseSchema = cdmDatabaseSchema)
|
||||
sql <- SqlRender::translate(sql, targetDialect = targetDialect)
|
||||
|
||||
filename <- paste("OMOPCDM", gsub(" ", "_", targetDialect), cdmVersion, "indices.sql", sep = "_")
|
||||
SqlRender::writeSql(sql = sql, targetFile = file.path(outputpath, filename))
|
||||
invisible(filename)
|
||||
}
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
# Copyright 2017 Observational Health Data Sciences and Informatics
|
||||
#
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#' Write constraint script
|
||||
#'
|
||||
#' @param targetdialect The dialect of the target database. Choices are "oracle", "postgresql", "pdw", "redshift", "impala", "netezza", "bigquery", "sql server"
|
||||
#' @param cdmVersion The version of the CDM that you are creating the primary keys for
|
||||
#' @param cdmDatabaseSchema The name of the schema where the cdm sits. Defaults to "@cdmDatabaseSchema"
|
||||
#'
|
||||
#' @export
|
||||
|
||||
writeForeignKeys <- function(targetdialect, cdmVersion, cdmDatabaseSchema = "@cdmDatabaseSchema") {
|
||||
outputpath <- file.path("ddl", cdmVersion, targetdialect)
|
||||
dir.create(outputpath, showWarnings = FALSE, recursive = TRUE)
|
||||
|
||||
sql <- createForeignKeys(cdmVersion)
|
||||
sql <- SqlRender::render(sql = sql, cdmDatabaseSchema = cdmDatabaseSchema, targetdialect = targetdialect)
|
||||
sql <- SqlRender::translate(sql, targetDialect = targetdialect)
|
||||
|
||||
filename <- paste("OMOPCDM", targetdialect, cdmVersion, "constraints.sql", sep = "_")
|
||||
SqlRender::writeSql(sql = sql,
|
||||
targetFile = file.path(outputpath, filename)
|
||||
)
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
# Copyright 2017 Observational Health Data Sciences and Informatics
|
||||
#
|
||||
# This file is part of DDLGeneratr
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#' Write Index script
|
||||
#'
|
||||
#' @param targetdialect The dialect of the target database. Choices are "oracle", "postgresql", "pdw", "redshift", "impala", "netezza", "bigquery", "sql server"
|
||||
#' @param cdmVersion The version of the CDM that you are creating the indices for. e.g. 5.3.1
|
||||
#' @param cdmDatabaseSchema The name of the schema where the cdm sits. Defaults to "@cdmDatabaseSchema"
|
||||
#'
|
||||
#' @export
|
||||
writeIndex <- function(targetdialect, cdmVersion, cdmDatabaseSchema = "@cdmDatabaseSchema") {
|
||||
outputpath <- file.path("ddl", cdmVersion, targetdialect)
|
||||
dir.create(outputpath, showWarnings = FALSE, recursive = TRUE)
|
||||
|
||||
sqlFilename <- paste0("OMOP CDM indices v", cdmVersion, ".sql")
|
||||
sql <- SqlRender::loadRenderTranslateSql(sqlFilename = sqlFilename,
|
||||
packageName = "CdmDdlBase",
|
||||
dbms = targetdialect,
|
||||
targetdialect = targetdialect,
|
||||
cdmDatabaseSchema = cdmDatabaseSchema)
|
||||
|
||||
filename <- paste("OMOPCDM", targetdialect, cdmVersion, "indices.sql", sep = "_")
|
||||
SqlRender::writeSql(sql = sql,
|
||||
targetFile = file.path(outputpath, filename))
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
# Copyright 2017 Observational Health Data Sciences and Informatics
|
||||
#
|
||||
# This file is part of DDLGeneratr
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#' Write primary key script
|
||||
#'
|
||||
#' @param targetdialect The dialect of the target database. Choices are "oracle", "postgresql", "pdw", "redshift", "impala", "netezza", "bigquery", "sql server"
|
||||
#' @param cdmVersion The version of the CDM that you are creating the primary keys for
|
||||
#' @param cdmDatabaseSchema The name of the schema where the cdm sits. Defaults to "@cdmDatabaseSchema"
|
||||
#'
|
||||
#' @export
|
||||
|
||||
writePrimaryKeys <- function(targetdialect, cdmVersion, cdmDatabaseSchema = "@cdmDatabaseSchema") {
|
||||
outputpath <- file.path("ddl", cdmVersion, targetdialect)
|
||||
dir.create(outputpath, showWarnings = FALSE, recursive = TRUE)
|
||||
|
||||
sql <- createPrimaryKeys(cdmVersion)
|
||||
sql <- SqlRender::render(sql = sql, cdmDatabaseSchema = cdmDatabaseSchema, targetdialect = targetdialect)
|
||||
sql <- SqlRender::translate(sql, targetDialect = targetdialect)
|
||||
|
||||
filename <- paste("OMOPCDM", targetdialect, cdmVersion, "primary", "keys.sql", sep = "_")
|
||||
SqlRender::writeSql(sql = sql,
|
||||
targetFile = file.path(outputpath, filename)
|
||||
)
|
||||
}
|
Loading…
Reference in New Issue