From 24335a0a1feef00028bc6dc7acce265f71c4e99e Mon Sep 17 00:00:00 2001 From: Folling Date: Sun, 5 Jan 2025 18:42:39 +0100 Subject: [PATCH] add missing flags in project funcs --- src/ikarus/errors.cpp | 35 ++++++++----------------- src/ikarus/persistence/project.cpp | 42 +++++++++++++++--------------- 2 files changed, 32 insertions(+), 45 deletions(-) diff --git a/src/ikarus/errors.cpp b/src/ikarus/errors.cpp index 07f7a15..b8dcc7d 100644 --- a/src/ikarus/errors.cpp +++ b/src/ikarus/errors.cpp @@ -4,11 +4,7 @@ #include -void safe_strcpy( - std::string_view const src, - char * dest, - std::size_t const dest_size -) { +void safe_strcpy(std::string_view const src, char * dest, std::size_t const dest_size) { int i = 0; for (; i < dest_size - 1; ++i) { if (src[i] == '\0') { @@ -21,7 +17,7 @@ void safe_strcpy( dest[i] = '\0'; } -char const * ikarus_get_error_info_name(IkarusErrorInfo info) { +char const * ikarus_error_info_get_name(IkarusErrorInfo info) { switch (info) { case IkarusErrorInfo_None: return "None"; @@ -29,34 +25,25 @@ char const * ikarus_get_error_info_name(IkarusErrorInfo info) { case IkarusErrorInfo_Client_InvalidInput: return "Client::InvalidInput"; case IkarusErrorInfo_Client_NonExistent: return "Client::NonExistent"; case IkarusErrorInfo_Client_InvalidFormat: return "Client::InvalidFormat"; - case IkarusErrorInfo_Client_ConstraintViolated: - return "Client::ConstraintViolated"; + case IkarusErrorInfo_Client_ConstraintViolated: return "Client::ConstraintViolated"; case IkarusErrorInfo_Filesystem_NotFound: return "Filesystem::NotFound"; - case IkarusErrorInfo_Filesystem_AlreadyExists: - return "Filesystem::AlreadyExists"; - case IkarusErrorInfo_Filesystem_MissingPermissions: - return "Filesystem::MissingPermissions"; - case IkarusErrorInfo_Filesystem_InsufficientSpace: - return "Filesystem::InsufficientSpace"; - case IkarusErrorInfo_Filesystem_InvalidPath: - return "Filesystem::InvalidPath"; + case IkarusErrorInfo_Filesystem_AlreadyExists: return "Filesystem::AlreadyExists"; + case IkarusErrorInfo_Filesystem_MissingPermissions: return "Filesystem::MissingPermissions"; + case IkarusErrorInfo_Filesystem_InsufficientSpace: return "Filesystem::InsufficientSpace"; + case IkarusErrorInfo_Filesystem_InvalidPath: return "Filesystem::InvalidPath"; - case IkarusErrorInfo_Database_ConnectionFailed: - return "Database::ConnectionFailed"; + case IkarusErrorInfo_Database_ConnectionFailed: return "Database::ConnectionFailed"; case IkarusErrorInfo_Database_QueryFailed: return "Database::QueryFailed"; - case IkarusErrorInfo_Database_MigrationFailed: - return "Database::MigrationFailed"; + case IkarusErrorInfo_Database_MigrationFailed: return "Database::MigrationFailed"; case IkarusErrorInfo_Database_InvalidState: return "Database::InvalidState"; case IkarusErrorInfo_OS_SystemCallFailed: return "OS::SystemCallFailed"; case IkarusErrorInfo_OS_InvalidReturnValue: return "OS::InvalidReturnValue"; case IkarusErrorInfo_OS_InsufficientMemory: return "OS::InsufficientMemory"; - case IkarusErrorInfo_LibIkarus_InvalidState: - return "LibIkarus::InvalidState"; - case IkarusErrorInfo_LibIkarus_CannotPerformOperation: - return "LibIkarus::CannotPerformOperation"; + case IkarusErrorInfo_LibIkarus_InvalidState: return "LibIkarus::InvalidState"; + case IkarusErrorInfo_LibIkarus_CannotPerformOperation: return "LibIkarus::CannotPerformOperation"; case IkarusErrorInfo_LibIkarus_Timeout: return "LibIkarus::Timeout"; default: return "Invalid"; diff --git a/src/ikarus/persistence/project.cpp b/src/ikarus/persistence/project.cpp index 8dfb3ed..2501eed 100644 --- a/src/ikarus/persistence/project.cpp +++ b/src/ikarus/persistence/project.cpp @@ -149,7 +149,11 @@ IkarusProject * ikarus_project_create(char const * path, char const * name, Ikar } } -IkarusProject * ikarus_project_create_in_memory(char const * name, IkarusErrorData * error_out) { +IkarusProject * ikarus_project_create_in_memory( + char const * name, + IkarusProjectCreateInMemoryFlags flags, + IkarusErrorData * error_out +) { IKARUS_FAIL_IF_NULL(name, nullptr); IKARUS_FAIL_IF( cppbase::is_empty_or_blank(name), @@ -178,7 +182,7 @@ IkarusProject * ikarus_project_create_in_memory(char const * name, IkarusErrorDa } } -IkarusProject * ikarus_project_open(char const * path, IkarusErrorData * error_out) { +IkarusProject * ikarus_project_open(char const * path, IkarusProjectOpenFlags flags, IkarusErrorData * error_out) { IKARUS_FAIL_IF_NULL(path, nullptr); IKARUS_FAIL_IF( cppbase::is_empty_or_blank(path), @@ -213,31 +217,27 @@ IkarusProject * ikarus_project_open(char const * path, IkarusErrorData * error_o return new IkarusProject{name, path, std::move(db)}; } +void ikarus_project_close(struct IkarusProject * project, IkarusProjectCloseFlags flags, IkarusErrorData * error_out) { + IKARUS_FAIL_IF_NULL(project, IKARUS_VOID_RETURN); + + if (project->db) { + IKARUS_TRYRV_OR_FAIL( + IKARUS_VOID_RETURN, + "failed to close project db: {}", + IkarusErrorInfo_Database_QueryFailed, + project->db->close() + ); + } + + delete project; +} + char const * ikarus_project_get_name(IkarusProject const * project, IkarusErrorData * error_out) { IKARUS_FAIL_IF_NULL(project, nullptr); return project->name.data(); } -void ikarus_project_set_name(IkarusProject * project, char const * new_name, IkarusErrorData * error_out) { - IKARUS_FAIL_IF_NULL(project, IKARUS_VOID_RETURN); - IKARUS_FAIL_IF_NULL(new_name, IKARUS_VOID_RETURN); - - IKARUS_FAIL_IF( - cppbase::is_empty_or_blank(new_name), - IKARUS_VOID_RETURN, - "name must not be empty", - IkarusErrorInfo_Client_InvalidInput - ); - - IKARUS_TRYRV_OR_FAIL( - IKARUS_VOID_RETURN, - "failed to update project name: {}", - IkarusErrorInfo_Database_QueryFailed, - project->db->execute("UPDATE `metadata` SET `value` = ? WHERE `key` = ?", new_name, DB_PROJECT_NAME_KEY) - ); -} - char const * ikarus_project_get_path(IkarusProject const * project, IkarusErrorData * error_out) { IKARUS_FAIL_IF_NULL(project, nullptr);