mirror of
https://github.com/latentPrion/cppbessot.git
synced 2026-06-23 23:28:36 +00:00
Add migration commands for SQLite; not PGSql
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/../dbActionShared.cmake")
|
||||
|
||||
function(cppbessot_db_action_require_var var_name)
|
||||
if(NOT DEFINED ${var_name} OR "${${var_name}}" STREQUAL "")
|
||||
message(FATAL_ERROR "Required variable `${var_name}` is missing.")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_resolve_project_path out_var input_path)
|
||||
cppbessot_db_action_require_var(CPPBESSOT_PROJECT_SOURCE_DIR)
|
||||
if(IS_ABSOLUTE "${input_path}")
|
||||
set(_resolved "${input_path}")
|
||||
else()
|
||||
set(_resolved "${CPPBESSOT_PROJECT_SOURCE_DIR}/${input_path}")
|
||||
endif()
|
||||
|
||||
get_filename_component(_resolved "${_resolved}" ABSOLUTE)
|
||||
set(${out_var} "${_resolved}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_validate_schema_dir_name schema_dir)
|
||||
_cppbessot_db_action_validate_basename(
|
||||
"${schema_dir}"
|
||||
"Schema directory name"
|
||||
"CPPBESSOT_WORKDIR")
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_get_schema_dir_path out_var schema_dir)
|
||||
cppbessot_db_action_validate_schema_dir_name("${schema_dir}")
|
||||
cppbessot_db_action_resolve_project_path(_workdir "${CPPBESSOT_WORKDIR}")
|
||||
set(${out_var} "${_workdir}/${schema_dir}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_assert_schema_dir_ready schema_dir)
|
||||
cppbessot_db_action_get_schema_dir_path(_schema_dir_path "${schema_dir}")
|
||||
if(NOT IS_DIRECTORY "${_schema_dir_path}")
|
||||
message(FATAL_ERROR "Schema directory does not exist: ${_schema_dir_path}")
|
||||
endif()
|
||||
|
||||
set(_openapi_file "${_schema_dir_path}/openapi/openapi.yaml")
|
||||
if(NOT EXISTS "${_openapi_file}")
|
||||
message(FATAL_ERROR "OpenAPI file does not exist: ${_openapi_file}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_validate_migration_dir_name migration_dir)
|
||||
_cppbessot_db_action_validate_basename(
|
||||
"${migration_dir}"
|
||||
"Migration directory name"
|
||||
"CPPBESSOT_WORKDIR/migrations")
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_get_migration_dir_path out_var migration_dir)
|
||||
cppbessot_db_action_validate_migration_dir_name("${migration_dir}")
|
||||
cppbessot_db_action_resolve_project_path(_workdir "${CPPBESSOT_WORKDIR}")
|
||||
set(${out_var} "${_workdir}/migrations/${migration_dir}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_assert_migration_dir_exists migration_dir)
|
||||
cppbessot_db_action_get_migration_dir_path(_migration_dir_path "${migration_dir}")
|
||||
if(NOT IS_DIRECTORY "${_migration_dir_path}")
|
||||
message(FATAL_ERROR "Migration directory does not exist: ${_migration_dir_path}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_validate_db_target db_target)
|
||||
_cppbessot_db_action_validate_db_target_impl("${db_target}")
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_backend_subdir out_var backend)
|
||||
if("${backend}" STREQUAL "sqlite")
|
||||
set(${out_var} "sqlite" PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if("${backend}" STREQUAL "postgre")
|
||||
set(${out_var} "postgre" PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(FATAL_ERROR "Unsupported backend `${backend}`.")
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_collect_nonempty_sql_files out_var sql_dir)
|
||||
if(NOT IS_DIRECTORY "${sql_dir}")
|
||||
set(${out_var} "" PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
file(GLOB _candidate_files "${sql_dir}/*.sql")
|
||||
list(SORT _candidate_files)
|
||||
|
||||
set(_sql_files)
|
||||
foreach(_candidate IN LISTS _candidate_files)
|
||||
file(READ "${_candidate}" _contents)
|
||||
string(STRIP "${_contents}" _trimmed)
|
||||
if(NOT "${_trimmed}" STREQUAL "")
|
||||
list(APPEND _sql_files "${_candidate}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(${out_var} "${_sql_files}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_require_nonempty_sql_dir sql_dir failure_prefix)
|
||||
cppbessot_db_action_collect_nonempty_sql_files(_sql_files "${sql_dir}")
|
||||
if(NOT _sql_files)
|
||||
message(FATAL_ERROR "${failure_prefix}: no non-empty SQL files found under ${sql_dir}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(cppbessot_db_action_find_program_or_fail out_var program_name hint)
|
||||
find_program(_program "${program_name}")
|
||||
if(NOT _program)
|
||||
message(FATAL_ERROR "Missing required program `${program_name}`. ${hint}")
|
||||
endif()
|
||||
set(${out_var} "${_program}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
Reference in New Issue
Block a user