commit
415bfe4d35
|
@ -0,0 +1,13 @@
|
|||
# CMake
|
||||
.ninja_deps
|
||||
.ninja_log
|
||||
CMakeCache.txt
|
||||
CMakeFiles/
|
||||
Makefile
|
||||
build.ninja
|
||||
cmake_install.cmake
|
||||
rules.ninja
|
||||
|
||||
# Build products
|
||||
librealm-object-store.dylib
|
||||
tests/tests
|
|
@ -0,0 +1,6 @@
|
|||
[submodule "external/pegtl"]
|
||||
path = external/pegtl
|
||||
url = https://github.com/ColinH/PEGTL
|
||||
[submodule "external/catch"]
|
||||
path = external/catch
|
||||
url = https://github.com/philsquared/Catch
|
|
@ -0,0 +1,15 @@
|
|||
set(CMAKE_CXX_STANDARD 14)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED on)
|
||||
set(CMAKE_CXX_EXTENSIONS off)
|
||||
set(CMAKE_BUILD_TYPE CACHE STRING Debug)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
||||
|
||||
if(${CMAKE_GENERATOR} STREQUAL "Ninja")
|
||||
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcolor-diagnostics")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcolor-diagnostics")
|
||||
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=always")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always")
|
||||
endif()
|
||||
endif()
|
|
@ -0,0 +1,43 @@
|
|||
include(ExternalProject)
|
||||
|
||||
function(download_realm_core core_version)
|
||||
set(core_url "https://static.realm.io/downloads/core/realm-core-${core_version}.tar.bz2")
|
||||
set(core_tarball_name "realm-core-${core_version}.tar.bz2")
|
||||
set(core_temp_tarball "/tmp/${core_tarball_name}")
|
||||
set(core_directory_parent "${CMAKE_CURRENT_SOURCE_DIR}${CMAKE_FILES_DIRECTORY}")
|
||||
set(core_directory "${core_directory_parent}/realm-core-${core_version}")
|
||||
set(core_tarball "${core_directory_parent}/${core_tarball_name}")
|
||||
|
||||
if (NOT EXISTS ${core_tarball})
|
||||
if (NOT EXISTS ${core_temp_tarball})
|
||||
message("Downloading core ${core_version} from ${core_url}.")
|
||||
file(DOWNLOAD ${core_url} ${core_temp_tarball}.tmp SHOW_PROGRESS)
|
||||
file(RENAME ${core_temp_tarball}.tmp ${core_temp_tarball})
|
||||
endif()
|
||||
file(COPY ${core_temp_tarball} DESTINATION ${core_directory_parent})
|
||||
endif()
|
||||
|
||||
set(core_library_debug ${core_directory}/librealm-dbg.a)
|
||||
set(core_library_release ${core_directory}/librealm.a)
|
||||
set(core_libraries ${core_library_debug} ${core_library_release})
|
||||
|
||||
add_custom_command(
|
||||
COMMENT "Extracting ${core_tarball_name}"
|
||||
OUTPUT ${core_libraries}
|
||||
DEPENDS ${core_temp_tarball}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${core_temp_tarball} ${core_directory_parent}
|
||||
COMMAND ${CMAKE_COMMAND} -E tar xf ${core_tarball}
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory ${core_directory}
|
||||
COMMAND ${CMAKE_COMMAND} -E rename core ${core_directory}
|
||||
COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${core_libraries})
|
||||
|
||||
add_custom_target(realm-core DEPENDS ${core_libraries})
|
||||
|
||||
add_library(realm STATIC IMPORTED)
|
||||
add_dependencies(realm realm-core)
|
||||
set_property(TARGET realm PROPERTY IMPORTED_LOCATION_DEBUG ${core_library_debug})
|
||||
set_property(TARGET realm PROPERTY IMPORTED_LOCATION_RELEASE ${core_library_release})
|
||||
set_property(TARGET realm PROPERTY IMPORTED_LOCATION ${core_library_release})
|
||||
|
||||
set(REALM_CORE_INCLUDE_DIR ${core_directory}/include PARENT_SCOPE)
|
||||
endfunction()
|
|
@ -0,0 +1,14 @@
|
|||
project(realm-object-store)
|
||||
|
||||
cmake_minimum_required(VERSION 3.2.0)
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
|
||||
|
||||
include(CompilerFlags)
|
||||
|
||||
include(RealmCore)
|
||||
download_realm_core(0.95.5)
|
||||
|
||||
include_directories(${REALM_CORE_INCLUDE_DIR} src external/pegtl)
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(tests)
|
26
README.md
26
README.md
|
@ -1,6 +1,6 @@
|
|||
# Realm Object Store
|
||||
|
||||
Cross-platform code used accross bindings. Binding developers can choose to use some or all the included functionality
|
||||
Cross-platform code used accross bindings. Binding developers can choose to use some or all the included functionality:
|
||||
- `object_store`/`schema`/`object_schema`/`property` - contains the structures and logic used to setup and modify realm files and their schema.
|
||||
- `shared_realm` - wraps the object_store apis to provide transactions, notifications, realm caching, migrations, and other higher level functionality.
|
||||
- `object_accessor`/`results`/`list` - accessor classes, object creation/update pipeline, and helpers for creating platform specific property getters and setters.
|
||||
|
@ -8,8 +8,28 @@ Cross-platform code used accross bindings. Binding developers can choose to use
|
|||
|
||||
## Building
|
||||
|
||||
TBD
|
||||
The object store's build system currently only suports building for OS X. The object store itself can build for all Apple
|
||||
platforms when integrated into a binding.
|
||||
|
||||
1. Install CMake. You can download an installer for OS X from the [CMake download page], or install via [Homebrew](http://brew.sh):
|
||||
```
|
||||
brew install cmake
|
||||
```
|
||||
|
||||
2. Generate build files:
|
||||
|
||||
```
|
||||
cmake .
|
||||
```
|
||||
|
||||
3. Build:
|
||||
|
||||
```
|
||||
make
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
TBD
|
||||
```
|
||||
make run-tests
|
||||
```
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Subproject commit f294c9847272b1b92c5119a6f711e57113b5f231
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 49a5b0a49e154b362ef9cf1e756dd8673ddd4efe
|
|
@ -0,0 +1,22 @@
|
|||
include_directories(impl)
|
||||
|
||||
set(SOURCES
|
||||
index_set.cpp
|
||||
list.cpp
|
||||
object_schema.cpp
|
||||
object_store.cpp
|
||||
results.cpp
|
||||
schema.cpp
|
||||
shared_realm.cpp
|
||||
impl/transact_log_handler.cpp
|
||||
parser/parser.cpp
|
||||
parser/query_builder.cpp)
|
||||
|
||||
if(APPLE)
|
||||
include_directories(impl/apple)
|
||||
list(APPEND SOURCES impl/apple/external_commit_helper.cpp)
|
||||
find_library(CF_LIBRARY CoreFoundation)
|
||||
endif()
|
||||
|
||||
add_library(realm-object-store SHARED ${SOURCES})
|
||||
target_link_libraries(realm-object-store realm ${CF_LIBRARY})
|
|
@ -25,7 +25,6 @@
|
|||
#include <vector>
|
||||
|
||||
namespace realm {
|
||||
class Property;
|
||||
class Group;
|
||||
struct Property;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
include_directories(../external/catch/single_include)
|
||||
add_executable(tests main.cpp parser.cpp)
|
||||
target_link_libraries(tests realm-object-store)
|
||||
|
||||
add_custom_target(run-tests USES_TERMINAL DEPENDS tests COMMAND ./tests)
|
|
@ -0,0 +1,2 @@
|
|||
#define CATCH_CONFIG_MAIN
|
||||
#include "catch.hpp"
|
|
@ -1,10 +1,8 @@
|
|||
|
||||
#include "parser.hpp"
|
||||
#include "catch.hpp"
|
||||
#include "parser/parser.hpp"
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <exception>
|
||||
#include <iostream>
|
||||
|
||||
static std::vector<std::string> valid_queries = {
|
||||
// true/false predicates
|
||||
|
@ -131,36 +129,16 @@ static std::vector<std::string> invalid_queries = {
|
|||
"truepredicate & truepredicate",
|
||||
};
|
||||
|
||||
namespace realm {
|
||||
namespace parser {
|
||||
|
||||
bool test_grammar()
|
||||
{
|
||||
bool success = true;
|
||||
for (auto &query : valid_queries) {
|
||||
std::cout << "valid query: " << query << std::endl;
|
||||
try {
|
||||
realm::parser::parse(query);
|
||||
} catch (std::exception &ex) {
|
||||
std::cout << "FAILURE - " << ex.what() << std::endl;
|
||||
success = false;
|
||||
}
|
||||
TEST_CASE("valid queries") {
|
||||
for (auto& query : valid_queries) {
|
||||
INFO("query: " << query);
|
||||
CHECK_NOTHROW(realm::parser::parse(query));
|
||||
}
|
||||
}
|
||||
|
||||
for (auto &query : invalid_queries) {
|
||||
std::cout << "invalid query: " << query << std::endl;
|
||||
try {
|
||||
realm::parser::parse(query);
|
||||
} catch (std::exception &ex) {
|
||||
// std::cout << "message: " << ex.what() << std::endl;
|
||||
continue;
|
||||
}
|
||||
std::cout << "FAILURE - query should throw an exception" << std::endl;
|
||||
success = false;
|
||||
TEST_CASE("invalid queries") {
|
||||
for (auto& query : invalid_queries) {
|
||||
INFO("query: " << query);
|
||||
CHECK_THROWS(realm::parser::parse(query));
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue