-Makefile
-tcejdb/src/*/tests/*test
-tcejdb/generated/
-tcejdb/Testing/
CMakeCache.txt
CMakeFiles
.dep.inc
*.iml
-*.o
-*.vlog
-*.log
*.status
*.dylib
*.upload
*.pyc
*.tags
-
--- /dev/null
+Makefile
+build/*
+Testing/*
+src/old/*
+
+DartConfiguration.tcl
+
cmake_minimum_required(VERSION 3.1)
set(PROJECT_NAME "ejdb")
+
+option(WITH_TESTS "Build EJDB test cases" OFF)
+option(ENABLE_STATIC_LIB "Build ejdb static library" OFF)
+
project(${PROJECT_NAME}
VERSION 1.2.0
LANGUAGES C)
+
+if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
+ if (CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
+ message(FATAL_ERROR "GCC version must be at least 4.7!")
+ endif()
+elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
+ if (CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4)
+ message(FATAL_ERROR "Clang version must be at least 3.4!")
+ endif()
+else()
+ message(FATAL_ERROR "You are using an unsupported compiler! EJDB has only been tested \
+ with Clang >= 3.4 and GCC >= 4.7")
+endif()
set(EJDB_LLIBRARIES)
set(EJDB_INCLUDE_DIRS)
set(ALL_HDRS)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
-
+include(EjdbUtils)
+
+macro_ensure_out_of_source_build(
+ "${CMAKE_PROJECT_NAME} requires an out of source build."
+)
+
if (NOT CMAKE_BUILD_TYPE)
message(FATAL_ERROR "Please specify the build type -DCMAKE_BUILD_TYPE=Debug|Release|RelWithDebInfo")
endif(NOT CMAKE_BUILD_TYPE)
-option(WITH_TESTS "Build EJDB test cases" OFF)
-option(ENABLE_STATIC_LIB "Build ejdb static library" OFF)
-option(WITH_VALGRIND_CHECK "Build EJDB test cases with valgrind check support" OFF)
set(MODULES tcutil tchdb tcbdb tctdb tcfdb bson ejdb)
list(APPEND EJDB_INCLUDE_DIRS "${EJDB_GENERATED_DIR}")
foreach(MODULE IN LISTS MODULES)
- #include_directories(src/${MODULE})
- list(APPEND EJDB_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/src/${MODULE}")
- file(GLOB MODULE_SRC src/${MODULE}/*.c)
- file(GLOB MODULE_HDRS src/${MODULE}/*.h)
+ list(APPEND EJDB_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src/${MODULE}")
+ file(GLOB MODULE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/${MODULE}/*.c)
+ file(GLOB MODULE_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/src/${MODULE}/*.h)
list(APPEND ALL_SRC ${MODULE_SRC})
list(APPEND ALL_HDRS ${MODULE_HDRS})
endforeach(MODULE)
add_library(ejdb SHARED ${ALL_SRC})
endif(ENABLE_STATIC_LIB)
+set_target_properties(ejdb PROPERTIES
+ VERSION ${ejdb_VERSION}
+ SOVERSION ${ejdb_VERSION_MAJOR})
+
+
find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD)
if (CMAKE_USE_WIN32_THREADS_INIT)
add_definitions(-D_TC_WIN32_THREADS)
#todo check the host system!
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -fsigned-char -Wall -pedantic")
-set(CMAKE_C_FLAGS_DEBUG "-O0 -Wfatal-errors -DDEBUG -D_DEBUG -UNDEBUG")
-set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
+set(CMAKE_C_FLAGS_DEBUG "-O0 -Wfatal-errors -Werror -DDEBUG -D_DEBUG -UNDEBUG")
+set(CMAKE_C_FLAGS_RELEASE "-O3 -Wfatal-errors -DNDEBUG")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2")
-configure_file(src/basedefs.h.in ${EJDB_GENERATED_DIR}/basedefs.h)
-configure_file(src/myconf.h.in ${EJDB_GENERATED_DIR}/myconf.h)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/basedefs.h.in ${EJDB_GENERATED_DIR}/basedefs.h)
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/myconf.h.in ${EJDB_GENERATED_DIR}/myconf.h)
file(GLOB GENERATED_HDRS ${EJDB_GENERATED_DIR}/*.h)
list(APPEND ALL_HDRS ${GENERATED_HDRS})
if (WITH_TESTS)
- #Valgrind staff
- if (WITH_VALGRIND_CHECK)
- find_program(VALGRIND_FOUND valgrind)
- if (NOT VALGRIND_FOUND)
- message(FATAL_ERROR "'valgrind' executable not found")
- endif(NOT VALGRIND_FOUND)
- set(TEST_TOOL_CMD valgrind --tool=memcheck --leak-check=full --error-exitcode=1)
- endif(WITH_VALGRIND_CHECK)
- enable_testing()
+ include(CTest)
find_package(CUnit REQUIRED)
endif(WITH_TESTS)
foreach(MODULE IN LISTS MODULES)
- if (EXISTS src/${MODULE}/CMakeLists.txt)
- add_subdirectory(src/${MODULE})
+ if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/${MODULE}/CMakeLists.txt)
+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/${MODULE})
endif()
- if (EXISTS src/${MODULE}/tools/CMakeLists.txt)
- add_subdirectory(src/${MODULE}/tools)
+ if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/${MODULE}/tools/CMakeLists.txt)
+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/${MODULE}/tools)
endif()
- if (WITH_TESTS AND EXISTS src/${MODULE}/tests/CMakeLists.txt)
- add_subdirectory(src/${MODULE}/tests)
+ if (WITH_TESTS AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/${MODULE}/tests/CMakeLists.txt)
+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/${MODULE}/tests)
endif()
endforeach(MODULE)
message("#############################################")
message(" ENABLE_STATIC_LIB: ${ENABLE_STATIC_LIB}")
message(" WITH_TESTS: ${WITH_TESTS}")
-message(" WITH_VALGRIND_CHECK: ${WITH_VALGRIND_CHECK}")
message(" LINK LIBS: ${EJDB_LLIBRARIES}")
message(" INCLUDE DIRS: ${EJDB_INCLUDE_DIRS}")
message(" SOURCES: ${ALL_SRC}")
--- /dev/null
+set(CTEST_PROJECT_NAME "ejdb")
+set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
+
--- /dev/null
+
+
+macro(MACRO_ENSURE_OUT_OF_SOURCE_BUILD MSG)
+ string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" insource)
+ get_filename_component(PARENTDIR ${CMAKE_SOURCE_DIR} PATH)
+ string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${PARENTDIR}" insourcesubdir)
+ if(insource OR insourcesubdir)
+ message(FATAL_ERROR "${MSG}")
+ endif(insource OR insourcesubdir)
+endmacro(MACRO_ENSURE_OUT_OF_SOURCE_BUILD)
--- /dev/null
+# Source directory: /home/adam/Projects/softmotions/ejdb/tcejdb
+# Build directory: /home/adam/Projects/softmotions/ejdb/tcejdb
+
+set(CTEST_SOURCE_DIRECTORY /home/adam/Projects/softmotions/ejdb/tcejdb)
+set(CTEST_BINARY_DIRECTORY /home/adam/Projects/softmotions/ejdb/tcejdb/build)
+
+set(CTEST_START_WITH_EMPTY_BINARY_DIRECTORY TRUE)
+set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
+set(CTEST_BUILD_CONFIGURATION "Debug")
+set(CTEST_BUILD_OPTIONS)
+
+set(CTEST_CONFIGURE_COMMAND "${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION}")
+set(CTEST_CONFIGURE_COMMAND "${CTEST_CONFIGURE_COMMAND} -DWITH_TESTS:BOOL=ON ${CTEST_BUILD_OPTIONS}")
+set(CTEST_CONFIGURE_COMMAND "${CTEST_CONFIGURE_COMMAND} \"-G${CTEST_CMAKE_GENERATOR}\"")
+set(CTEST_CONFIGURE_COMMAND "${CTEST_CONFIGURE_COMMAND} \"${CTEST_SOURCE_DIRECTORY}\"")
+
+find_program(CTEST_COVERAGE_COMMAND NAMES gcov)
+find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
+
+ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
+
+ctest_start("Nightly")
+#ctest_update()
+ctest_configure()
+ctest_build()
+ctest_test()
+
+if (WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
+ ctest_coverage()
+endif (WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
+if (WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
+ ctest_memcheck()
+endif (WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
+
+#ctest_submit()
+
+
+++ /dev/null
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.1
-
-# Default target executed when no arguments are given to make.
-default_target: all
-.PHONY : default_target
-
-# Allow only one "make -f Makefile2" at a time, but pass parallelism.
-.NOTPARALLEL:
-.PHONY : .NOTPARALLEL
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-# A target that is always out of date.
-cmake_force:
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/bin/cmake
-
-# The command to remove a file.
-RM = /usr/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /home/adam/Projects/softmotions/ejdb/tcejdb
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /home/adam/Projects/softmotions/ejdb/tcejdb
-
-#=============================================================================
-# Targets provided globally by CMake.
-
-# Special rule for the target edit_cache
-edit_cache:
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
- /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
-.PHONY : edit_cache
-
-# Special rule for the target edit_cache
-edit_cache/fast: edit_cache
-.PHONY : edit_cache/fast
-
-# Special rule for the target rebuild_cache
-rebuild_cache:
- @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
- /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
-.PHONY : rebuild_cache
-
-# Special rule for the target rebuild_cache
-rebuild_cache/fast: rebuild_cache
-.PHONY : rebuild_cache/fast
-
-# The main all target
-all: cmake_check_build_system
- cd /home/adam/Projects/softmotions/ejdb/tcejdb && $(CMAKE_COMMAND) -E cmake_progress_start /home/adam/Projects/softmotions/ejdb/tcejdb/CMakeFiles /home/adam/Projects/softmotions/ejdb/tcejdb/src/CMakeFiles/progress.marks
- cd /home/adam/Projects/softmotions/ejdb/tcejdb && $(MAKE) -f CMakeFiles/Makefile2 src/all
- $(CMAKE_COMMAND) -E cmake_progress_start /home/adam/Projects/softmotions/ejdb/tcejdb/CMakeFiles 0
-.PHONY : all
-
-# The main clean target
-clean:
- cd /home/adam/Projects/softmotions/ejdb/tcejdb && $(MAKE) -f CMakeFiles/Makefile2 src/clean
-.PHONY : clean
-
-# The main clean target
-clean/fast: clean
-.PHONY : clean/fast
-
-# Prepare targets for installation.
-preinstall: all
- cd /home/adam/Projects/softmotions/ejdb/tcejdb && $(MAKE) -f CMakeFiles/Makefile2 src/preinstall
-.PHONY : preinstall
-
-# Prepare targets for installation.
-preinstall/fast:
- cd /home/adam/Projects/softmotions/ejdb/tcejdb && $(MAKE) -f CMakeFiles/Makefile2 src/preinstall
-.PHONY : preinstall/fast
-
-# clear depends
-depend:
- cd /home/adam/Projects/softmotions/ejdb/tcejdb && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
-.PHONY : depend
-
-# Help Target
-help:
- @echo "The following are some of the valid targets for this Makefile:"
- @echo "... all (the default if no target is provided)"
- @echo "... clean"
- @echo "... depend"
- @echo "... edit_cache"
- @echo "... rebuild_cache"
-.PHONY : help
-
-
-
-#=============================================================================
-# Special targets to cleanup operation of make.
-
-# Special rule to run CMake to check the build system integrity.
-# No rule that depends on this can have commands that come from listfiles
-# because they might be regenerated.
-cmake_check_build_system:
- cd /home/adam/Projects/softmotions/ejdb/tcejdb && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
-.PHONY : cmake_check_build_system
-
}
static char* parse_key(const char** key, char* p, nx_json_unicode_encoder encoder) {
+ *key = NULL;
// on '}' return with *p=='}'
char c;
while ((c=*p++)) {
+++ /dev/null
-# Install script for directory: /home/adam/Projects/softmotions/ejdb/tcejdb/src
-
-# Set the install prefix
-if(NOT DEFINED CMAKE_INSTALL_PREFIX)
- set(CMAKE_INSTALL_PREFIX "/usr/local")
-endif()
-string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
-
-# Set the install configuration name.
-if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
- if(BUILD_TYPE)
- string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
- CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
- else()
- set(CMAKE_INSTALL_CONFIG_NAME "")
- endif()
- message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
-endif()
-
-# Set the component getting installed.
-if(NOT CMAKE_INSTALL_COMPONENT)
- if(COMPONENT)
- message(STATUS "Install component: \"${COMPONENT}\"")
- set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
- else()
- set(CMAKE_INSTALL_COMPONENT)
- endif()
-endif()
-
-# Install shared libraries without execute permission?
-if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
- set(CMAKE_INSTALL_SO_NO_EXE "1")
-endif()
-
static bool _qrycondcheckstror(const char *vbuf, const TCLIST *tokens);
static bool _qrybsvalmatch(const EJQF *qf, bson_iterator *it, bool expandarrays, int *arridx);
static bool _qrybsmatch(EJQF *qf, const void *bsbuf, int bsbufsz);
-static bool _qry_$and_$or_match(EJCOLL *coll, EJQ *ejq, const void *pkbuf, int pkbufsz);
+static bool _qry_and_or_match(EJCOLL *coll, EJQ *ejq, const void *pkbuf, int pkbufsz);
static bool _qryormatch2(EJCOLL *coll, EJQ *ejq, const void *bsbuf, int bsbufsz);
static bool _qryormatch3(EJCOLL *coll, EJQ *ejq, EJQ *oq, const void *bsbuf, int bsbufsz);
static bool _qryandmatch2(EJCOLL *coll, EJQ *ejq, const void *bsbuf, int bsbufsz);
static bool _qrydup(const EJQ *src, EJQ *target, uint32_t qflags);
static void _qrydel(EJQ *q, bool freequery);
static bool _pushprocessedbson(_QRYCTX *ctx, const void *bsbuf, int bsbufsz);
-static bool _exec$do(_QRYCTX *ctx, const void *bsbuf, bson *bsout);
+static bool _exec_do(_QRYCTX *ctx, const void *bsbuf, bson *bsout);
static void _qryctxclear(_QRYCTX *ctx);
static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *q, uint32_t *count, int qflags, TCXSTR *log);
EJDB_INLINE void _nufetch(_EJDBNUM *nu, const char *sval, bson_type bt);
static bool _rmcollimpl(EJDB *jb, EJCOLL *coll, bool unlinkfile);
static bool _setindeximpl(EJCOLL *coll, const char *fpath, int flags, bool nolock);
-
extern const char *utf8proc_errmsg(ssize_t errcode);
-
static const bool yes = true;
-static const bool no = false;
const char *ejdbversion() {
return _TC_VERSION;
bson_del(q->hints);
q->hints = NULL;
}
- if (q->$ifields) {
- tcmapdel(q->$ifields);
- q->$ifields = NULL;
+ if (q->ifields) {
+ tcmapdel(q->ifields);
+ q->ifields = NULL;
}
q->hints = bs;
return q;
}
static EJCOLL* _createcollimpl(EJDB *jb, const char *colname, EJCOLLOPTS *opts) {
- EJCOLL *coll;
+ EJCOLL *coll = NULL;
if (!JBISVALCOLNAME(colname)) {
_ejdbsetecode(jb, JBEINVALIDCOLNAME, __FILE__, __LINE__, __func__);
return NULL;
bson_del(q->hints);
q->hints = NULL;
}
- if (q->$ifields) {
- tcmapdel(q->$ifields);
- q->$ifields = NULL;
+ if (q->ifields) {
+ tcmapdel(q->ifields);
+ q->ifields = NULL;
}
if (q->colbuf) {
tcxstrdel(q->colbuf);
}
-//Fills `ffpctx` and `qf->$uslots`
+//Fills `ffpctx` and `qf->uslots`
static void _qrysetarrayidx(FFPCTX *ffpctx, EJQF *qf, int dpos, int mpos) {
if (ffpctx->dpos == dpos && ffpctx->mpos == -1) { //single ctx matching
ffpctx->mpos = mpos;
}
- if (qf->$uslots) {
- for (int i = 0; i < TCLISTNUM(qf->$uslots); ++i) {
- USLOT *us = TCLISTVALPTR(qf->$uslots, i);
+ if (qf->uslots) {
+ for (int i = 0; i < TCLISTNUM(qf->uslots); ++i) {
+ USLOT *us = TCLISTVALPTR(qf->uslots, i);
assert(us);
if (us->dpos == dpos && us->mpos == -1) {
us->mpos = mpos;
.dpos = -1,
.mpos = -1
};
- if (qf->$uslots) {
- for (int i = 0; i < TCLISTNUM(qf->$uslots); ++i) {
- ((USLOT*) (TCLISTVALPTR(qf->$uslots, i)))->mpos = -1;
+ if (qf->uslots) {
+ for (int i = 0; i < TCLISTNUM(qf->uslots); ++i) {
+ ((USLOT*) (TCLISTVALPTR(qf->uslots, i)))->mpos = -1;
}
}
return _qrybsrecurrmatch(qf, &ffpctx, 0);
}
-static bool _qry_$and_$or_match(EJCOLL *coll, EJQ *ejq, const void *pkbuf, int pkbufsz) {
+static bool _qry_and_or_match(EJCOLL *coll, EJQ *ejq, const void *pkbuf, int pkbufsz) {
bool isor = (ejq->orqlist && TCLISTNUM(ejq->orqlist) > 0);
bool isand = (ejq->andqlist && TCLISTNUM(ejq->andqlist) > 0);
if (!isor && !isand) {
if (src->updateobj) {
target->updateobj = bson_dup(src->updateobj);
}
- if (src->$ufields) {
- target->$ufields = tclistdup(src->$ufields);
+ if (src->ufields) {
+ target->ufields = tclistdup(src->ufields);
}
- if (src->$uslots) {
- target->$uslots = tclistdup(src->$uslots);
+ if (src->uslots) {
+ target->uslots = tclistdup(src->uslots);
}
}
if (src->hints) {
target->hints = bson_dup(src->hints);
}
- if (src->$ifields) {
- target->$ifields = tcmapdup(src->$ifields);
+ if (src->ifields) {
+ target->ifields = tcmapdup(src->ifields);
}
if (src->orqlist) {
target->orqlist = tclistnew2(TCLISTNUM(src->orqlist));
EJDB *jb;
TCMAP *dfields;
bson *sbson;
-} _BSON$DOVISITORCTX;
+} _BSONDOVISITORCTX;
-static bson_visitor_cmd_t _bson$dovisitor(const char *ipath, int ipathlen, const char *key, int keylen,
+static bson_visitor_cmd_t _bsondovisitor(const char *ipath, int ipathlen, const char *key, int keylen,
const bson_iterator *it, bool after, void *op) {
assert(op);
- _BSON$DOVISITORCTX *ictx = op;
+ _BSONDOVISITORCTX *ictx = op;
EJCOLL *coll;
TCMAP *dfields = ictx->dfields;
bson_type lbt = BSON_ITERATOR_TYPE(it), bt;
static bool _pushprocessedbson(_QRYCTX *ctx, const void *bsbuf, int bsbufsz) {
assert(bsbuf && bsbufsz);
- if (!ctx->dfields && !ctx->ifields && !ctx->q->$ifields) { //Trivial case: no $do operations or $fields
+ if (!ctx->dfields && !ctx->ifields && !ctx->q->ifields) { //Trivial case: no $do operations or $fields
tclistpush(ctx->res, bsbuf, bsbufsz);
return true;
}
bson_init_on_stack(&bsout, bstack, bsbufsz, JBSBUFFERSZ);
if (ctx->dfields) { //$do fields exists
- rv = _exec$do(ctx, bsbuf, &bsout);
+ rv = _exec_do(ctx, bsbuf, &bsout);
}
- if (rv && (ifields || q->$ifields)) { //$fields hints
+ if (rv && (ifields || q->ifields)) { //$fields hints
TCMAP *_ifields = ifields;
TCMAP *_fkfields = NULL; //Fields with overriden keys
char* inbuf = (bsout.finished) ? bsout.data : (char*) bsbuf;
if (bsout.finished) {
bson_init_size(&bsout, bson_size(&bsout));
}
- if (q->$ifields) { //we have positional $(projection)
+ if (q->ifields) { //we have positional $(projection)
assert(ctx->imode == true); //ensure we are in include mode
if (!_ifields) {
- _ifields = tcmapnew2(q->$ifields->bnum);
+ _ifields = tcmapnew2(q->ifields->bnum);
} else {
_ifields = tcmapdup(ifields);
}
_fkfields = tcmapnew2(TCMAPTINYBNUM);
for (int i = 0; i < TCLISTNUM(q->qflist); ++i) {
EJQF *qf = TCLISTVALPTR(q->qflist, i);
- const char *dfpath = tcmapget(q->$ifields, qf->fpath, qf->fpathsz, &sp);
+ const char *dfpath = tcmapget(q->ifields, qf->fpath, qf->fpathsz, &sp);
if (dfpath) {
TCXSTR *ifield = tcxstrnew3(sp + 10);
bson_iterator it;
return rv;
}
-static bool _exec$do(_QRYCTX *ctx, const void *bsbuf, bson *bsout) {
+static bool _exec_do(_QRYCTX *ctx, const void *bsbuf, bson *bsout) {
assert(ctx && ctx->dfields);
- _BSON$DOVISITORCTX ictx = {
+ _BSONDOVISITORCTX ictx = {
.q = ctx->q,
.jb = ctx->coll->jb,
.dfields = ctx->dfields,
};
bson_iterator it;
BSON_ITERATOR_FROM_BUFFER(&it, bsbuf);
- bson_visit_fields(&it, 0, _bson$dovisitor, &ictx);
+ bson_visit_fields(&it, 0, _bsondovisitor, &ictx);
if (bson_finish(bsout) != BSON_OK) {
_ejdbsetecode(ctx->coll->jb, JBEINVALIDBSON, __FILE__, __LINE__, __func__);
return false;
//Create update BSON object for $set/$unset/$inc operations
static bson* _qfgetupdateobj(const EJQF *qf) {
assert(qf->updateobj);
- if (!qf->$ufields || TCLISTNUM(qf->$ufields) < 1) { //we do not ref $(query) fields.
+ if (!qf->ufields || TCLISTNUM(qf->ufields) < 1) { //we do not ref $(query) fields.
return qf->updateobj;
}
const EJQ *q = qf->q;
bson_type bt;
bson *ret = bson_create();
bson_init(ret);
- for (int i = 0; i < TCLISTNUM(qf->$ufields); ++i) {
- const char *uf = TCLISTVALPTR(qf->$ufields, i);
+ for (int i = 0; i < TCLISTNUM(qf->ufields); ++i) {
+ const char *uf = TCLISTVALPTR(qf->ufields, i);
for (int j = 0; *(q->allqfields + j) != '\0'; ++j) {
const EJQF *kqf = *(q->allqfields + j);
- if (kqf == qf || kqf->$uslots == NULL || TCLISTNUM(kqf->$uslots) < 1) {
+ if (kqf == qf || kqf->uslots == NULL || TCLISTNUM(kqf->uslots) < 1) {
continue;
}
- for (int k = 0; k < TCLISTNUM(kqf->$uslots); ++k) {
- USLOT *uslot = TCLISTVALPTR(kqf->$uslots, k);
+ for (int k = 0; k < TCLISTNUM(kqf->uslots); ++k) {
+ USLOT *uslot = TCLISTVALPTR(kqf->uslots, k);
if (uslot->op == uf && uslot->mpos >= 0) {
char *dp = strchr(uf, '$');
assert(dp);
//EOF #define JBQREGREC
bool trim = (midx && *midx->name != '\0');
- if (anum > 0 && !(mqf->flags & EJFEXCLUDED) && !(mqf->$uslots && TCLISTNUM(mqf->$uslots) > 0)) {
+ if (anum > 0 && !(mqf->flags & EJFEXCLUDED) && !(mqf->uslots && TCLISTNUM(mqf->uslots) > 0)) {
anum--;
mqf->flags |= EJFEXCLUDED;
}
break;
}
}
- if (matched && _qry_$and_$or_match(coll, q, &oid, sizeof (oid))) {
+ if (matched && _qry_and_or_match(coll, q, &oid, sizeof (oid))) {
JBQREGREC(&oid, sizeof (oid), TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
} while (false);
break;
}
}
- if (matched && _qry_$and_$or_match(coll, q, &oid, sizeof (oid))) {
+ if (matched && _qry_and_or_match(coll, q, &oid, sizeof (oid))) {
JBQREGREC(&oid, sizeof (oid), TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
}
while ((all || count < max) && (kbuf = tcbdbcurkey3(cur, &kbufsz)) != NULL) {
if (trim) kbufsz -= 3;
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
if (mqf->order >= 0) {
if (trim) kbufsz -= 3;
if (kbufsz == exprsz && !memcmp(kbuf, expr, exprsz)) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
} else {
if (trim) kbufsz -= 3;
if (kbufsz >= exprsz && !memcmp(kbuf, expr, exprsz)) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
} else {
if (trim) kbufsz -= 3;
if (kbufsz >= tsiz && !memcmp(kbuf, token, tsiz)) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
} else {
if (trim) kbufsz -= 3;
if (kbufsz == tsiz && !memcmp(kbuf, token, tsiz)) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
} else {
while ((all || count < max) && (kbuf = tcbdbcurkey3(cur, &kbufsz)) != NULL) {
if (_nucmp(&num, kbuf, mqf->ftype) == 0) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
} else {
if (cmp < 0) break;
if (cmp > 0 || (mqf->tcop == TDBQCNUMGE && cmp >= 0)) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
}
int cmp = _nucmp2(&knum, &xnum, mqf->ftype);
if (cmp > 0 || (mqf->tcop == TDBQCNUMGE && cmp >= 0)) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
}
if (cmp > 0) break;
if (cmp < 0 || (cmp <= 0 && mqf->tcop == TDBQCNUMLE)) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
}
int cmp = _nucmp2(&knum, &xnum, mqf->ftype);
if (cmp < 0 || (cmp <= 0 && mqf->tcop == TDBQCNUMLE)) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
}
while ((all || count < max) && (kbuf = tcbdbcurkey3(cur, &kbufsz)) != NULL) {
if (tcatof2(kbuf) > upper) break;
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
tcbdbcurnext(cur);
while ((all || count < max) && (kbuf = tcbdbcurkey3(cur, &kbufsz)) != NULL) {
if (tcatof2(kbuf) == xnum) {
vbuf = tcbdbcurval3(cur, &vbufsz);
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_$and_$or_match(coll, q, vbuf, vbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, vbuf, vbufsz) && _qry_and_or_match(coll, q, vbuf, vbufsz)) {
JBQREGREC(vbuf, vbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
} else {
TCMAP *tres = tctdbidxgetbytokens(coll->tdb, midx, tokens, mqf->tcop, log);
tcmapiterinit(tres);
while ((all || count < max) && (kbuf = tcmapiternext(tres, &kbufsz)) != NULL) {
- if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, kbuf, kbufsz) && _qry_$and_$or_match(coll, q, kbuf, kbufsz)) {
+ if (_qryallcondsmatch(q, anum, coll, qfs, qfsz, kbuf, kbufsz) && _qry_and_or_match(coll, q, kbuf, kbufsz)) {
JBQREGREC(kbuf, kbufsz, TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
}
}
break;
}
}
- if (matched && _qry_$and_$or_match(coll, q, TCXSTRPTR(skbuf), TCXSTRSIZE(skbuf))) {
+ if (matched && _qry_and_or_match(coll, q, TCXSTRPTR(skbuf), TCXSTRSIZE(skbuf))) {
if (updkeys) { //we are in updating mode
if (tcmapputkeep(updkeys, TCXSTRPTR(skbuf), TCXSTRSIZE(skbuf), &yes, sizeof (yes))) {
JBQREGREC(TCXSTRPTR(skbuf), TCXSTRSIZE(skbuf), TCXSTRPTR(q->bsbuf), TCXSTRSIZE(q->bsbuf));
EJQF **qfp = TCLISTVALPTR(alist, i);
q->allqfields[i] = *qfp; //*EJQF
}
- q->allqfields[TCLISTNUM(alist)] = '\0';
+ q->allqfields[TCLISTNUM(alist)] = NULL;
tclistdel(alist);
alist = NULL;
int j;
for (j = 0; *(key + j) != '\0' && *(key + j) == *(qf->fpath + j); ++j);
if (key + j == pptr || key + j == pptr + 1) { //existing QF matched the $(projection) prefix
- if (!q->$ifields) {
- q->$ifields = tcmapnew2(TCMAPTINYBNUM);
+ if (!q->ifields) {
+ q->ifields = tcmapnew2(TCMAPTINYBNUM);
}
- tcmapput(q->$ifields, qf->fpath, qf->fpathsz, key, strlen(key));
+ tcmapput(q->ifields, qf->fpath, qf->fpathsz, key, strlen(key));
break;
}
}
ctx->mqf = oqf;
}
- if (q->flags & EJQHAS$UQUERY) { //check update $(query) projection then sync inter-qf refs #91
+ if (q->flags & EJQHASUQUERY) { //check update $(query) projection then sync inter-qf refs #91
for (int i = 0; *(q->allqfields + i) != '\0'; ++i) {
EJQF *qf = q->allqfields[i];
- if (!qf->$ufields) continue;
- TCLIST *uflist = qf->$ufields;
+ if (!qf->ufields) continue;
+ TCLIST *uflist = qf->ufields;
for (int j = 0; j < TCLISTNUM(uflist); ++j) {
const char *ukey = TCLISTVALPTR(uflist, j);
char *pptr = strstr(ukey, ".$");
}
for (l = 0; *(ukey + l) != '\0' && *(ukey + l) == *(kqf->fpath + l); ++l);
if (ukey + l == pptr || ukey + l == pptr + 1) { //existing QF matched the $(query) prefix
- if (!kqf->$uslots) {
- kqf->$uslots = tclistnew2(TCLISTINYNUM);
+ if (!kqf->uslots) {
+ kqf->uslots = tclistnew2(TCLISTINYNUM);
}
USLOT uslot = {
.mpos = -1,
.dpos = (pptr - ukey),
.op = ukey
};
- tclistpush(kqf->$uslots, &uslot, sizeof(uslot));
+ tclistpush(kqf->uslots, &uslot, sizeof(uslot));
}
}
}
if (qf->updateobj) {
bson_del(qf->updateobj);
}
- if (qf->$ufields) {
- tclistdel(qf->$ufields);
+ if (qf->ufields) {
+ tclistdel(qf->ufields);
}
- if (qf->$uslots) {
- tclistdel(qf->$uslots);
+ if (qf->uslots) {
+ tclistdel(qf->uslots);
}
if (qf->regex && !(EJQINTERNAL & q->flags)) {
//We do not clear regex_t data because it not deep copy in internal queries
if (dc != 1) { //More than one '$' chars in projection, it is invalid
continue;
}
- // Now just store only [$(query) key] into the qf->$ufields
- if (!qf.$ufields) {
- qf.$ufields = tclistnew2(TCLISTINYNUM);
+ // Now just store only [$(query) key] into the qf->ufields
+ if (!qf.ufields) {
+ qf.ufields = tclistnew2(TCLISTINYNUM);
}
- q->flags |= EJQHAS$UQUERY;
- tclistpush(qf.$ufields, ukey, strlen(ukey));
+ q->flags |= EJQHASUQUERY;
+ tclistpush(qf.ufields, ukey, strlen(ukey));
}
}
bson_append_field_from_iterator(&sit, qf.updateobj);
}
}
return false;
-}
\ No newline at end of file
+}
EJQUPDATING = 1 << 1, /**> Query in updating mode */
EJQDROPALL = 1 << 2, /**> Drop bson object if matched */
EJQONLYCOUNT = 1 << 3, /**> Only count mode */
- EJQHAS$UQUERY = 1 << 4 /**> It means the query contains update $(query) fields #91 */
+ EJQHASUQUERY = 1 << 4 /**> It means the query contains update $(query) fields #91 */
};
typedef struct { /**> $(query) matchin slot used in update $ placeholder processing. #91 */
EJQ *q; /**> Query object in which this field embedded */
double exprdblval; /**> Double value representation */
int64_t exprlongval; /**> Integer value represeintation */
- TCLIST *$ufields; /**> Update $(query) prositional fields #91 */
- TCLIST *$uslots; /**> $(query) matching slots USLOT #91 */
+ TCLIST *ufields; /**> Update $(query) prositional fields #91 */
+ TCLIST *uslots; /**> $(query) matching slots USLOT #91 */
};
typedef struct EJQF EJQF;
* Mapping EJQF fpath => $(projection) field name
* http://docs.mongodb.org/manual/reference/projection/positional/#proj._S_
*/
- TCMAP *$ifields;
+ TCMAP *ifields;
uint32_t skip; /**> Number of records to skip. */
uint32_t max; /**> Max number of results */
uint32_t flags; /**> Control flags */
+++ /dev/null
-/*************************************************************************************************
- * The abstract database API of EJDB
- * Copyright (C) 2012-2015 Softmotions Ltd <info@softmotions.com>
- * This file is part of EJDB.
- * EJDB is free software; you can redistribute it and/or modify it under the terms of
- * the GNU Lesser General Public License as published by the Free Software Foundation; either
- * version 2.1 of the License or any later version. EJDB is distributed in the hope
- * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- * License for more details.
- * You should have received a copy of the GNU Lesser General Public License along with Tokyo
- * Cabinet; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307 USA.
- *************************************************************************************************/
-
-#ifndef BASEDEFS_H
-#define BASEDEFS_H
-
-#define EJDB_VERSION "1.2.0"
-#define EJDB_VERSION_MAJOR 1
-#define EJDB_VERSION_MINOR 2
-#define EJDB_VERSION_PATCH 0
-
-#ifdef __cplusplus
-#define EJDB_EXTERN_C_START extern "C" {
-#define EJDB_EXTERN_C_END }
-#else
-#define EJDB_EXTERN_C_START
-#define EJDB_EXTERN_C_END
-#endif
-
-EJDB_EXTERN_C_START
-
-#ifdef __GNUC__
-#define EJDB_INLINE static inline
-#else
-#define EJDB_INLINE static
-#endif
-
-#ifdef _WIN32
-#ifdef EJDB_DLL
-#define EJDB_EXPORT __declspec(dllexport)
-#elif !defined(EJDB_STATIC)
-#define EJDB_EXPORT __declspec(dllimport)
-#else
-#define EJDB_EXPORT
-#endif
-#else
-#define EJDB_EXPORT
-#endif
-
-#ifdef _WIN32
-#include <windows.h>
-#define INVALIDHANDLE(_HNDL) (((_HNDL) == INVALID_HANDLE_VALUE) || (_HNDL) == NULL)
-#else
-typedef int HANDLE;
-#define INVALID_HANDLE_VALUE (-1)
-#define INVALIDHANDLE(_HNDL) ((_HNDL) < 0 || (_HNDL) == UINT16_MAX)
-#endif
-
-#define JDBIDKEYNAME "_id" /**> Name of PK _id field in BSONs */
-#define JDBIDKEYNAMEL 3
-
-EJDB_EXTERN_C_END
-#endif /* BASEDEFS_H */
-
+++ /dev/null
-/*************************************************************************************************
- * System-dependent configurations of Tokyo Cabinet
- * Copyright (C) 2006-2012 FAL Labs
- * Copyright (C) 2012-2015 Softmotions Ltd <info@softmotions.com>
- * This file is part of Tokyo Cabinet.
- * Tokyo Cabinet is free software; you can redistribute it and/or modify it under the terms of
- * the GNU Lesser General Public License as published by the Free Software Foundation; either
- * version 2.1 of the License or any later version. Tokyo Cabinet is distributed in the hope
- * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- * License for more details.
- * You should have received a copy of the GNU Lesser General Public License along with Tokyo
- * Cabinet; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307 USA.
- *************************************************************************************************/
-
-
-#ifndef _MYCONF_H // duplication check
-#define _MYCONF_H
-
-#include "basedefs.h"
-
-/*************************************************************************************************
- * system discrimination
- *************************************************************************************************/
-
-
-#if defined(__linux__)
-
-#define _SYS_LINUX_
-#define TCSYSNAME "Linux"
-
-#elif defined(__FreeBSD__)
-
-#define _SYS_FREEBSD_
-#define TCSYSNAME "FreeBSD"
-
-#elif defined(__NetBSD__)
-
-#define _SYS_NETBSD_
-#define TCSYSNAME "NetBSD"
-
-#elif defined(__OpenBSD__)
-
-#define _SYS_OPENBSD_
-#define TCSYSNAME "OpenBSD"
-
-#elif defined(__sun__) || defined(__sun)
-
-#define _SYS_SUNOS_
-#define TCSYSNAME "SunOS"
-
-#elif defined(__hpux)
-
-#define _SYS_HPUX_
-#define TCSYSNAME "HP-UX"
-
-#elif defined(__osf)
-
-#define _SYS_TRU64_
-#define TCSYSNAME "Tru64"
-
-#elif defined(_AIX)
-
-#define _SYS_AIX_
-#define TCSYSNAME "AIX"
-
-#elif defined(__APPLE__) && defined(__MACH__)
-
-#define _SYS_MACOSX_
-#define TCSYSNAME "Mac OS X"
-
-#elif defined(_MSC_VER)
-
-#define _SYS_MSVC_
-#define TCSYSNAME "Windows (VC++)"
-
-#elif defined(_WIN32)
-
-#define _SYS_MINGW_
-#define TCSYSNAME "Windows (MinGW)"
-
-#elif defined(__CYGWIN__)
-
-#define _SYS_CYGWIN_
-#define TCSYSNAME "Windows (Cygwin)"
-
-#else
-
-#define _SYS_GENERIC_
-#define TCSYSNAME "Generic"
-
-#endif
-
-/* String containing the version information. */
-extern EJDB_EXPORT const char *tcversion;
-
-/*************************************************************************************************
- * common settings
- *************************************************************************************************/
-
-
-#if defined(NDEBUG)
-#define TCDODEBUG(TC_expr) \
- do { \
- } while(false)
-#else
-#define TCDODEBUG(TC_expr) \
- do { \
- TC_expr; \
- } while(false)
-#endif
-
-#define TCSWAB16(TC_num) \
- ( \
- ((TC_num & 0x00ffU) << 8) | \
- ((TC_num & 0xff00U) >> 8) \
- )
-
-#define TCSWAB32(TC_num) \
- ( \
- ((TC_num & 0x000000ffUL) << 24) | \
- ((TC_num & 0x0000ff00UL) << 8) | \
- ((TC_num & 0x00ff0000UL) >> 8) | \
- ((TC_num & 0xff000000UL) >> 24) \
- )
-
-#define TCSWAB64(TC_num) \
- ( \
- ((TC_num & 0x00000000000000ffULL) << 56) | \
- ((TC_num & 0x000000000000ff00ULL) << 40) | \
- ((TC_num & 0x0000000000ff0000ULL) << 24) | \
- ((TC_num & 0x00000000ff000000ULL) << 8) | \
- ((TC_num & 0x000000ff00000000ULL) >> 8) | \
- ((TC_num & 0x0000ff0000000000ULL) >> 24) | \
- ((TC_num & 0x00ff000000000000ULL) >> 40) | \
- ((TC_num & 0xff00000000000000ULL) >> 56) \
- )
-
-#if defined(_MYBIGEND) || defined(_MYSWAB)
-#define TCBIGEND 1
-#define TCHTOIS(TC_num) TCSWAB16(TC_num)
-#define TCHTOIL(TC_num) TCSWAB32(TC_num)
-#define TCHTOILL(TC_num) TCSWAB64(TC_num)
-#define TCITOHS(TC_num) TCSWAB16(TC_num)
-#define TCITOHL(TC_num) TCSWAB32(TC_num)
-#define TCITOHLL(TC_num) TCSWAB64(TC_num)
-#else
-#define TCBIGEND 0
-#define TCHTOIS(TC_num) (TC_num)
-#define TCHTOIL(TC_num) (TC_num)
-#define TCHTOILL(TC_num) (TC_num)
-#define TCITOHS(TC_num) (TC_num)
-#define TCITOHL(TC_num) (TC_num)
-#define TCITOHLL(TC_num) (TC_num)
-#endif
-
-#if defined(_MYNOUBC) || defined(__hppa__)
-#define TCUBCACHE 0
-#elif defined(_SYS_LINUX_) || defined(_SYS_FREEBSD_) || defined(_SYS_NETBSD_) || \
- defined(_SYS_MACOSX_) || defined(_SYS_SUNOS_) || defined(_WIN32)
-#define TCUBCACHE 1
-#else
-#define TCUBCACHE 0
-#endif
-
-#if defined(_MYNOZLIB)
-#define TCUSEZLIB 0
-#else
-#define TCUSEZLIB 1
-#endif
-
-#if defined(_MYBZIP)
-#define TCUSEBZIP 1
-#else
-#define TCUSEBZIP 0
-#endif
-
-#if defined(_MYEXLZMA)
-#define TCUSEEXLZMA 1
-#else
-#define TCUSEEXLZMA 0
-#endif
-
-#if defined(_MYEXLZO)
-#define TCUSEEXLZO 1
-#else
-#define TCUSEEXLZO 0
-#endif
-
-#if defined(_MYMICROYIELD)
-#define TCMICROYIELD 1
-#else
-#define TCMICROYIELD 0
-#endif
-
-#define MYMALLOC malloc
-#define MYCALLOC calloc
-#define MYREALLOC realloc
-#define MYFREE free
-
-/*************************************************************************************************
- * general headers
- *************************************************************************************************/
-
-
-#ifdef _WIN32
-#include <pcreposix.h>
-#include "win32/platform.h"
-#define GET_STDOUT_HANDLE() GetStdHandle(STD_OUTPUT_HANDLE)
-#define GET_STDERR_HANDLE() GetStdHandle(STD_ERROR_HANDLE)
-#define GET_STDIN_HANDLE() GetStdHandle(STD_INPUT_HANDLE)
-#define CLOSEFH(_fd) (CloseHandle(_fd))
-#else
-#if defined(__unix) || defined(__APPLE__)
-#include "nix/platform.h"
-#endif
-#include <regex.h>
-#include <glob.h>
-#include <sys/mman.h>
-#include <sys/times.h>
-#include <sys/wait.h>
-#include <sys/resource.h>
-#define GET_STDOUT_HANDLE() (1)
-#define GET_STDERR_HANDLE() (2)
-#define GET_STDIN_HANDLE() (0)
-#define CLOSEFH(_fd) (closefd(_fd))
-#define sysconf_SC_CLK_TCK sysconf(_SC_CLK_TCK)
-#endif
-
-#define CLOSEFH2(_fd) \
- do { \
- CLOSEFH(_fd); \
- (_fd) = INVALID_HANDLE_VALUE; \
- } while(0)
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <float.h>
-#include <limits.h>
-#include <locale.h>
-#include <math.h>
-#include <setjmp.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <string.h>
-#include <time.h>
-
-#include <inttypes.h>
-#include <stdbool.h>
-#include <stdint.h>
-
-#include <unistd.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-
-#include <fcntl.h>
-#include <dirent.h>
-#include <pthread.h>
-
-#if defined(_POSIX_PRIORITY_SCHEDULING)
-#include <sched.h>
-#endif
-
-/*************************************************************************************************
- * miscellaneous hacks
- *************************************************************************************************/
-
-
-#if defined(__GNUC__)
-#define _alignof(TC_a) ((size_t)__alignof__(TC_a))
-#else
-#define _alignof(TC_a) sizeof(TC_a)
-#endif
-#define _issigned(TC_a) ((TC_a)-1 < 1 ? true : false)
-#define _maxof(TC_a) \
- ((TC_a)(sizeof(TC_a) == sizeof(int64_t) ? _issigned(TC_a) ? INT64_MAX : UINT64_MAX : \
- sizeof(TC_a) == sizeof(int32_t) ? _issigned(TC_a) ? INT32_MAX : UINT32_MAX : \
- sizeof(TC_a) == sizeof(int16_t) ? _issigned(TC_a) ? INT16_MAX : UINT16_MAX : \
- _issigned(TC_a) ? INT8_MAX : UINT8_MAX))
-
-#if defined(_SYS_FREEBSD_) || defined(_SYS_NETBSD_) || defined(_SYS_OPENBSD_)
-#define nan(TC_a) strtod("nan", NULL)
-#define nanl(TC_a) ((long double)strtod("nan", NULL))
-#endif
-
-#if ! defined(PATH_MAX)
-#if defined(MAXPATHLEN)
-#define PATH_MAX MAXPATHLEN
-#else
-#define PATH_MAX 4096
-#endif
-#endif
-#if ! defined(NAME_MAX)
-#define NAME_MAX 255
-#endif
-
-extern int _tc_dummy_cnt;
-
-int _tc_dummyfunc(void);
-
-int _tc_dummyfuncv(int a, ...);
-
-/* MAX and MIN are defined in a really funky place in Solaris. */
-#ifndef MIN
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
-#ifndef MAX
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#endif
-
-/*************************************************************************************************
- * notation of filesystems
- *************************************************************************************************/
-
-#ifdef _WIN32
-#define MYPATHCHR '\\'
-#define MYPATHSTR "\\"
-#else
-#define MYPATHCHR '/'
-#define MYPATHSTR "/"
-#endif
-
-#define MYEXTCHR '.'
-#define MYEXTSTR "."
-#define MYCDIRSTR "."
-#define MYPDIRSTR ".."
-
-
-
-/*************************************************************************************************
- * for ZLIB
- *************************************************************************************************/
-
-
-enum {
- _TCZMZLIB,
- _TCZMRAW,
- _TCZMGZIP
-};
-
-
-extern char *(*_tc_deflate)(const char *, int, int *, int);
-
-extern char *(*_tc_inflate)(const char *, int, int *, int);
-
-extern unsigned int (*_tc_getcrc)(const char *, int);
-
-
-
-/*************************************************************************************************
- * for BZIP2
- *************************************************************************************************/
-
-
-extern char *(*_tc_bzcompress)(const char *, int, int *);
-
-extern char *(*_tc_bzdecompress)(const char *, int, int *);
-
-
-
-/*************************************************************************************************
- * for test of custom codec functions
- *************************************************************************************************/
-
-
-void *_tc_recencode(const void *ptr, int size, int *sp, void *op);
-
-void *_tc_recdecode(const void *ptr, int size, int *sp, void *op);
-
-#if TCMICROYIELD
-#define TCTESTYIELD() \
- do { \
- if(((++_tc_dummy_cnt) & (0x20 - 1)) == 0){ \
- sched_yield(); \
- if(_tc_dummy_cnt > 0x1000) _tc_dummy_cnt = (uint32_t)time(NULL) % 0x1000; \
- } \
- } while(false)
-#undef assert
-#define assert(TC_expr) \
- do { \
- if(!(TC_expr)){ \
- fprintf(stderr, "assertion failed: %s\n", #TC_expr); \
- abort(); \
- } \
- TCTESTYIELD(); \
- } while(false)
-#define if(TC_cond) \
- if((((++_tc_dummy_cnt) & (0x100 - 1)) != 0 || (sched_yield() * 0) == 0) && (TC_cond))
-#define while(TC_cond) \
- while((((++_tc_dummy_cnt) & (0x100 - 1)) != 0 || (sched_yield() * 0) == 0) && (TC_cond))
-#else
-#define TCTESTYIELD() \
- do { \
- } while(false)
-#endif
-
-#ifndef _POSIX_PRIORITY_SCHEDULING
-#define sched_yield() usleep(1000 * 20)
-#endif
-
-
-
-/*************************************************************************************************
- * utilities for implementation
- *************************************************************************************************/
-
-
-#define TCNUMBUFSIZ 32 // size of a buffer for a number
-
-/* set a buffer for a variable length number */
-#define TCSETVNUMBUF(TC_len, TC_buf, TC_num) \
- do { \
- int _TC_num = (TC_num); \
- if(_TC_num == 0){ \
- ((signed char *)(TC_buf))[0] = 0; \
- (TC_len) = 1; \
- } else { \
- (TC_len) = 0; \
- while(_TC_num > 0){ \
- int _TC_rem = _TC_num & 0x7f; \
- _TC_num >>= 7; \
- if(_TC_num > 0){ \
- ((signed char *)(TC_buf))[(TC_len)] = -_TC_rem - 1; \
- } else { \
- ((signed char *)(TC_buf))[(TC_len)] = _TC_rem; \
- } \
- (TC_len)++; \
- } \
- } \
- } while(false)
-
-/* set a buffer for a variable length number of 64-bit */
-#define TCSETVNUMBUF64(TC_len, TC_buf, TC_num) \
- do { \
- long long int _TC_num = (TC_num); \
- if(_TC_num == 0){ \
- ((signed char *)(TC_buf))[0] = 0; \
- (TC_len) = 1; \
- } else { \
- (TC_len) = 0; \
- while(_TC_num > 0){ \
- int _TC_rem = _TC_num & 0x7f; \
- _TC_num >>= 7; \
- if(_TC_num > 0){ \
- ((signed char *)(TC_buf))[(TC_len)] = -_TC_rem - 1; \
- } else { \
- ((signed char *)(TC_buf))[(TC_len)] = _TC_rem; \
- } \
- (TC_len)++; \
- } \
- } \
- } while(false)
-
-/* read a variable length buffer */
-#define TCREADVNUMBUF(TC_buf, TC_num, TC_step) \
- do { \
- TC_num = 0; \
- int _TC_base = 1; \
- int _TC_i = 0; \
- while(true){ \
- if(((signed char *)(TC_buf))[_TC_i] >= 0){ \
- TC_num += ((signed char *)(TC_buf))[_TC_i] * _TC_base; \
- break; \
- } \
- TC_num += _TC_base * (((signed char *)(TC_buf))[_TC_i] + 1) * -1; \
- _TC_base <<= 7; \
- _TC_i++; \
- } \
- (TC_step) = _TC_i + 1; \
- } while(false)
-
-/* read a variable length buffer */
-#define TCREADVNUMBUF64(TC_buf, TC_num, TC_step) \
- do { \
- TC_num = 0; \
- long long int _TC_base = 1; \
- int _TC_i = 0; \
- while(true){ \
- if(((signed char *)(TC_buf))[_TC_i] >= 0){ \
- TC_num += ((signed char *)(TC_buf))[_TC_i] * _TC_base; \
- break; \
- } \
- TC_num += _TC_base * (((signed char *)(TC_buf))[_TC_i] + 1) * -1; \
- _TC_base <<= 7; \
- _TC_i++; \
- } \
- (TC_step) = _TC_i + 1; \
- } while(false)
-
-/* calculate the size of a buffer for a variable length number */
-#define TCCALCVNUMSIZE(TC_num) \
- ((TC_num) < 0x80 ? 1 : (TC_num) < 0x4000 ? 2 : (TC_num) < 0x200000 ? 3 : \
- (TC_num) < 0x10000000 ? 4 : 5)
-
-#define TCCMPLEXICAL(TC_rv, TC_aptr, TC_asiz, TC_bptr, TC_bsiz) \
- do { \
- (TC_rv) = 0; \
- int _TC_min = (TC_asiz) < (TC_bsiz) ? (TC_asiz) : (TC_bsiz); \
- for(int _TC_i = 0; _TC_i < _TC_min; _TC_i++){ \
- if(((unsigned char *)(TC_aptr))[_TC_i] != ((unsigned char *)(TC_bptr))[_TC_i]){ \
- (TC_rv) = ((unsigned char *)(TC_aptr))[_TC_i] - ((unsigned char *)(TC_bptr))[_TC_i]; \
- break; \
- } \
- } \
- if((TC_rv) == 0) (TC_rv) = (TC_asiz) - (TC_bsiz); \
- } while(false)
-
-
-
-
-/*************************************************************************************************
- * atomics
- *************************************************************************************************/
-
-#if !defined(__GNUC__) || \
- ((__GNUC__ - 0) * 100 + (__GNUC_MINOR__ - 0)) < 407 || \
- defined(__INTEL_COMPILER) || defined(__clang__)
-#define __atomic_load_n(ptr,order) *(ptr)
-#define __atomic_store_n(ptr,val,order) (*(ptr) = (val), (void)0)
-#define __atomic_exchange_n(ptr,val,order) __sync_lock_test_and_set(ptr, val)
-#define __atomic_compare_exchange_n(ptr,expected,desired,weak,order1,order2) \
- __sync_bool_compare_and_swap(ptr, *(expected), desired) ? 1 : \
- (*(expected) = *(ptr), 0)
-
-#define __atomic_add_fetch(ptr,val,order) __sync_add_and_fetch(ptr, val)
-#define __atomic_sub_fetch(ptr,val,order) __sync_sub_and_fetch(ptr, val)
-#define __atomic_or_fetch(ptr,val,order) __sync_or_and_fetch(ptr, val)
-#define __atomic_and_fetch(ptr,val,order) __sync_and_and_fetch(ptr, val)
-#define __atomic_xor_fetch(ptr,val,order) __sync_xor_and_fetch(ptr, val)
-#define __atomic_nand_fetch(ptr,val,order) __sync_nand_and_fetch(ptr, val)
-
-#define __atomic_fetch_add(ptr,val,order) __sync_fetch_and_add(ptr, val)
-#define __atomic_fetch_sub(ptr,val,order) __sync_fetch_and_sub(ptr, val)
-#define __atomic_fetch_or(ptr,val,order) __sync_fetch_and_or(ptr, val)
-#define __atomic_fetch_and(ptr,val,order) __sync_fetch_and_and(ptr, val)
-#define __atomic_fetch_xor(ptr,val,order) __sync_fetch_and_xor(ptr, val)
-#define __atomic_fetch_nand(ptr,val,order) __sync_fetch_and_nand(ptr, val)
-#endif
-
-#define TCAS(ptr, expected, desired) __sync_bool_compare_and_swap(ptr, expected, desired)
-
-#endif // duplication check
-
-// END OF FILE
#ifndef _MYCONF_H // duplication check
#define _MYCONF_H
+#if ( (defined(__clang__) && ((__clang_major__ - 0) * 100 + (__clang_minor__ - 0)) < 302) || \
+ (!defined(__clang__) && defined(__GNUC__) && ((__GNUC__ - 0) * 100 + (__GNUC_MINOR__ - 0)) < 407) || \
+ (!defined(__GNUC__) && !defined(__clang__)) )
+#error You are using an unsupported compiler! EJDB has only been tested with Clang >= 3.2 and GCC >= 4.7
+#endif
+
#include "basedefs.h"
/*************************************************************************************************
} while(false)
-
-
/*************************************************************************************************
* atomics
*************************************************************************************************/
+
+#define TCAS(ptr, expected, desired) __sync_bool_compare_and_swap(ptr, expected, desired)
-#if !defined(__GNUC__) || \
- ((__GNUC__ - 0) * 100 + (__GNUC_MINOR__ - 0)) < 407 || \
- defined(__INTEL_COMPILER) || defined(__clang__)
+/*
#define __atomic_load_n(ptr,order) *(ptr)
#define __atomic_store_n(ptr,val,order) (*(ptr) = (val), (void)0)
#define __atomic_exchange_n(ptr,val,order) __sync_lock_test_and_set(ptr, val)
#define __atomic_fetch_and(ptr,val,order) __sync_fetch_and_and(ptr, val)
#define __atomic_fetch_xor(ptr,val,order) __sync_fetch_and_xor(ptr, val)
#define __atomic_fetch_nand(ptr,val,order) __sync_fetch_and_nand(ptr, val)
-#endif
+*/
-#define TCAS(ptr, expected, desired) __sync_bool_compare_and_swap(ptr, expected, desired)
#endif // duplication check
tchdbclose(bdb->hdb);
return false;
}
- if (bdb->lmemb < BDBMINLMEMB || bdb->nmemb < BDBMINNMEMB ||
- bdb->root < 1 || bdb->first < 1 || bdb->last < 1 ||
- bdb->lnum < 0 || bdb->nnum < 0 || bdb->rnum < 0) {
+ if (bdb->lmemb < BDBMINLMEMB || bdb->nmemb < BDBMINNMEMB || bdb->root < 1 || bdb->first < 1 || bdb->last < 1) {
tcbdbsetecode(bdb, TCEMETA, __FILE__, __LINE__, __func__);
tcmapdel(bdb->nodec);
tcmapdel(bdb->leafc);
--- /dev/null
+link_libraries(ejdb)
+set(TEST_DATA_DIR ${CMAKE_CURRENT_BINARY_DIR})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TEST_DATA_DIR})
+
+add_executable(tcbtest tcbtest.c)
+add_executable(tcbmttest tcbmttest.c)
+add_dependencies(tcbtest tchmgr)
+add_dependencies(tcbmttest tchmgr tchmttest)
+
+add_test(NAME tcbtest1 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ write casket 50000 5 5 5000 5 5)
+
+add_test(NAME tcbtest2 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ read casket)
+
+add_test(NAME tcbtest3 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ remove casket)
+
+add_test(NAME tcbtest4 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ list -rb 00001000 00002000 casket) #check.out
+
+add_test(NAME tcbtest5 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ list -fm 000001 casket) #check.out
+
+add_test(NAME tcbtest6 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ write -mt -tl -td -ls 1024 casket 50000 5000 5000 5000 5 5)
+
+add_test(NAME tcbtest6_2 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ read -mt -nb casket)
+
+add_test(NAME tcbtest7 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ remove -mt casket)
+
+add_test(NAME tcbtest8 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ write -tb -xm 50000 casket 50000 5 5 50000 5 5)
+
+add_test(NAME tcbtest9 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ read -nl casket)
+
+add_test(NAME tcbtest10 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ remove -df 5 casket)
+
+add_test(NAME tcbtest11 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ rcat -lc 5 -nc 5 -df 5 -pn 500 casket 50000 5 5 5000 5 5)
+
+add_test(NAME tcbtest12 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ rcat -tl -td -pn 5000 casket 50000 5 5 500 5 15)
+
+add_test(NAME tcbtest13 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ rcat -nl -pn 5000 -rl casket 15000 5 5 500 5 5)
+
+add_test(NAME tcbtest14 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ rcat -ca 1000 -tb -pn 5000 casket 15000 5 5 500 5 5)
+
+add_test(NAME tcbtest15 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ rcat -ru -pn 500 casket 5000 5 5 500 1 1)
+
+add_test(NAME tcbtest16 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ rcat -cd -tl -td -ru -pn 500 casket 5000 5 5 500 1 1)
+
+add_test(NAME tcbtest17 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tcbtest18 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ queue casket 15000 5 5)
+
+add_test(NAME tcbtest19 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ misc casket 5000)
+
+add_test(NAME tcbtest20 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ misc -tl -td casket 5000)
+
+add_test(NAME tcbtest21 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ misc -mt -tb casket 500)
+
+add_test(NAME tcbtest22 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ wicked casket 50000)
+
+add_test(NAME tcbtest23 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ wicked -tl -td casket 50000)
+
+add_test(NAME tcbtest24 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ wicked -mt -tb casket 5000)
+
+add_test(NAME tcbtest25 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ wicked -tt casket 5000)
+
+add_test(NAME tcbtest26 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ wicked -tx casket 5000)
+
+add_test(NAME tcbtest27 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ write -cd -lc 5 -nc 5 casket 5000 5 5 5 5 5)
+
+add_test(NAME tcbtest28 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ read -cd -lc 5 -nc 5 casket)
+
+add_test(NAME tcbtest29 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ remove -cd -lc 5 -nc 5 casket)
+
+add_test(NAME tcbtest30 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tcbtest31 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ write -ci -td -lc 5 -nc 5 casket 5000 5 5 5 5 5)
+
+add_test(NAME tcbtest32 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ read -ci -lc 5 -nc 5 casket)
+
+add_test(NAME tcbtest33 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ remove -ci -lc 5 -nc 5 casket)
+
+add_test(NAME tcbtest34 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tcbtest35 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ write -cj -tb -lc 5 -nc 5 casket 5000 5 5 5 5 5)
+
+add_test(NAME tcbtest36 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ read -cj -lc 5 -nc 5 casket)
+
+add_test(NAME tcbtest37 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbtest>
+ remove -cj -lc 5 -nc 5 casket)
+
+add_test(NAME tcbtest38 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tcbtest39 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ write -df 5 -tl casket 5 5000 5 5 500 5)
+
+add_test(NAME tcbtest40 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ read -df 5 casket 5)
+
+add_test(NAME tcbtest41 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ read -rnd casket 5)
+
+add_test(NAME tcbtest42 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ remove casket 5)
+
+add_test(NAME tcbtest43 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ wicked -nc casket 5 5000)
+
+add_test(NAME tcbtest44 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ wicked -tl -td casket 5 5000)
+
+add_test(NAME tcbtest45 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest> #review
+ wicked -tb casket 5 5000)
+
+add_test(NAME tcbtest46 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ typical -df 5 casket 5 50000 5 5)
+
+add_test(NAME tcbtest47 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ typical -rr 1000 casket 5 50000 5 5)
+
+add_test(NAME tcbtest48 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ typical -tl -nc casket 5 50000 5 5)
+
+add_test(NAME tcbtest49 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmttest>
+ race -df 5 casket 5 10000)
+
+add_test(NAME tcbtest50 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ create casket 4 4 3 1 1)
+
+add_test(NAME tcbtest51 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ inform casket)
+
+add_test(NAME tcbtest52 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put casket one first)
+
+add_test(NAME tcbtest53 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put casket two second)
+
+add_test(NAME tcbtest54 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put -dk casket three third)
+
+add_test(NAME tcbtest55 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put -dc casket three third)
+
+add_test(NAME tcbtest56 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put -dc casket three third)
+
+add_test(NAME tcbtest57 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put -dd casket three third)
+
+add_test(NAME tcbtest58 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put -dd casket three third)
+
+add_test(NAME tcbtest59 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put casket four fourth)
+
+add_test(NAME tcbtest60 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put -dk casket five fifth)
+
+add_test(NAME tcbtest61 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ out casket one)
+
+add_test(NAME tcbtest62 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ out casket two)
+
+add_test(NAME tcbtest63 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ get casket three) #check.out
+
+add_test(NAME tcbtest64 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ get casket four) #check.out
+
+add_test(NAME tcbtest65 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ get casket five) #check.out
+
+add_test(NAME tcbtest66 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tcbtest67 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ list -j three -pv casket) #check.out
+
+add_test(NAME tcbtest68 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ optimize casket)
+
+add_test(NAME tcbtest69 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ put -dc casket three third)
+
+add_test(NAME tcbtest70 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ get casket three) #check.out
+
+add_test(NAME tcbtest71 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ get casket four) #check.out
+
+add_test(NAME tcbtest72 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ get casket five) #check.out
+
+add_test(NAME tcbtest73 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcbmgr>
+ list -pv casket) #check.out
--- /dev/null
+link_libraries(ejdb)
+add_executable(tcbmgr tcbmgr.c)
--- /dev/null
+link_libraries(ejdb)
+set(TEST_DATA_DIR ${CMAKE_CURRENT_BINARY_DIR})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TEST_DATA_DIR})
+
+add_executable(tcftest tcftest.c)
+add_executable(tcfmttest tcfmttest.c)
+
+add_dependencies(tcftest tcfmgr)
+add_dependencies(tcfmttest tcfmgr)
+
+add_test(NAME tcftest1 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ write casket 50000 50)
+
+add_test(NAME tcftest2 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ read casket)
+
+add_test(NAME tcftest3 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ remove casket)
+
+add_test(NAME tcftest4 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ write casket 50000 50)
+
+add_test(NAME tcftest5 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ read -mt -nb casket)
+
+add_test(NAME tcftest6 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ remove -mt casket)
+
+add_test(NAME tcftest7 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ rcat -pn 500 casket 50000 50)
+
+add_test(NAME tcftest8 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ rcat -nl -pn 500 -rl casket 5000 500)
+
+add_test(NAME tcftest9 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ rcat -pn 500 -ru casket 5000 500)
+
+add_test(NAME tcftest10 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tcftest11 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ list -pv -ri "[100,200)" -px casket) #check.out
+
+add_test(NAME tcftest12 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ misc casket 5000)
+
+add_test(NAME tcftest13 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ misc -mt -nl casket 500)
+
+add_test(NAME tcftest14 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ wicked casket 50000)
+
+add_test(NAME tcftest15 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcftest>
+ wicked -mt -nb casket 50000)
+
+add_test(NAME tcftest16 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmttest>
+ write casket 5 5000 50)
+
+add_test(NAME tcftest17 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmttest>
+ read casket 5)
+
+add_test(NAME tcftest18 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmttest>
+ read -rnd casket 5)
+
+add_test(NAME tcftest19 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmttest>
+ remove casket 5)
+
+add_test(NAME tcftest20 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmttest>
+ wicked -nc casket 5 5000)
+
+add_test(NAME tcftest21 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmttest>
+ wicked casket 5 5000)
+
+add_test(NAME tcftest22 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmttest>
+ typical casket 5 50000 50)
+
+add_test(NAME tcftest23 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmttest>
+ typical -rr 1000 casket 5 50000 50)
+
+add_test(NAME tcftest24 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmttest>
+ typical -nc casket 5 50000 50)
+
+add_test(NAME tcftest25 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ create casket 50)
+
+add_test(NAME tcftest26 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ inform casket)
+
+add_test(NAME tcftest27 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ put casket 1 first)
+
+add_test(NAME tcftest28 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ put casket 2 second)
+
+add_test(NAME tcftest29 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ put -dk casket 3 third)
+
+add_test(NAME tcftest30 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ put -dc casket 3 third)
+
+add_test(NAME tcftest31 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ put -dc casket 3 third)
+
+add_test(NAME tcftest32 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ put -dc casket 3 third)
+
+add_test(NAME tcftest33 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ put casket 4 fourth)
+
+add_test(NAME tcftest34 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ put -dk casket 5 fifth)
+
+add_test(NAME tcftest35 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ out casket 1)
+
+add_test(NAME tcftest36 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ out casket 2)
+
+add_test(NAME tcftest37 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ get casket 3) #check.out
+
+add_test(NAME tcftest38 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ get casket 4) #check.out
+
+add_test(NAME tcftest39 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ get casket 5) #check.out
+
+add_test(NAME tcftest40 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tcftest41 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ optimize casket 5)
+
+add_test(NAME tcftest42 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ put -dc casket 3 third)
+
+add_test(NAME tcftest43 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ get casket 3) #check.out
+
+add_test(NAME tcftest44 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ get casket 4) #check.out
+
+add_test(NAME tcftest45 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ get casket 5) #check.out
+
+add_test(NAME tcftest46 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcfmgr>
+ list -pv casket) #check.out
+
--- /dev/null
+link_libraries(ejdb)
+add_executable(tcfmgr tcfmgr.c)
EJDB_INLINE bool tchdbreadsmem(TCHDB *hdb, void *dst, size_t off, size_t sz, int opts);
EJDB_INLINE bool tchdblockmethod(TCHDB *hdb, bool wr);
EJDB_INLINE bool tchdbunlockmethod(TCHDB *hdb);
-EJDB_INLINE bool tchdblocksmem(TCHDB *hdb, bool wr);
-EJDB_INLINE bool tchdblocksmem2(TCHDB *hdb, bool wr);
+EJDB_INLINE bool tchdblocksmem(TCHDB *hdb, bool wr) __attribute__((unused));
+EJDB_INLINE bool tchdblocksmem2(TCHDB *hdb, bool wr) __attribute__((unused));
EJDB_INLINE bool tchdbunlocksmem(TCHDB *hdb);
EJDB_INLINE bool tchdblockrecord(TCHDB *hdb, uint8_t bidx, bool wr);
EJDB_INLINE bool tchdbunlockrecord(TCHDB *hdb, uint8_t bidx);
uint32_t lnum;
memcpy(&lnum, rp, sizeof (lnum));
rec->rsiz = TCITOHL(lnum);
+ rec->ksiz = rec->vsiz = 0;
+ rec->left = rec->right = 0;
+ rec->vbuf = rec->kbuf = NULL;
+ rec->boff = 0;
+ rec->hash = 0;
return true;
} else if (rec->magic != HDBMAGICREC) {
tchdbsetecode(hdb, TCERHEAD, __FILE__, __LINE__, __func__);
--- /dev/null
+link_libraries(ejdb)
+set(TEST_DATA_DIR ${CMAKE_CURRENT_BINARY_DIR})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TEST_DATA_DIR})
+
+add_executable(tchtest tchtest.c)
+add_executable(tchmttest tchmttest.c)
+add_dependencies(tchtest tchmgr)
+add_dependencies(tchmttest tchmgr)
+
+add_test(NAME tchtest1 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ write casket 50000 5000 5 5)
+
+add_test(NAME tchtest2 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ read casket)
+
+add_test(NAME tchtest3 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ remove casket)
+
+add_test(NAME tchtest4 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ write -mt -tl -td -rc 50 -xm 500000 casket 50000 5000 5 5)
+
+add_test(NAME tchtest5 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ read -mt -nb -rc 50 -xm 500000 casket)
+
+add_test(NAME tchtest6 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ remove -mt -rc 50 -xm 500000 casket)
+
+add_test(NAME tchtest7 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ write -as -tb -rc 50 -xm 500000 casket 50000 50000 5 5)
+
+add_test(NAME tchtest8 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ read -nl -rc 50 -xm 500000 casket)
+
+add_test(NAME tchtest9 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ remove -rc 50 -xm 500000 -df 5 casket)
+
+add_test(NAME tchtest10 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ rcat -pn 500 -xm 50000 -df 5 casket 50000 5000 5 5)
+
+add_test(NAME tchtest11 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ rcat -tl -td -pn 5000 casket 50000 500 5 15)
+
+add_test(NAME tchtest12 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ rcat -nl -pn 500 -rl casket 5000 500 5 5)
+
+add_test(NAME tchtest13 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ rcat -tb -pn 500 casket 5000 500 5 5)
+
+add_test(NAME tchtest14 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ rcat -ru -pn 500 casket 5000 500 1 1)
+
+add_test(NAME tchtest15 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ rcat -tl -td -ru -pn 500 casket 5000 500 1 1)
+
+add_test(NAME tchtest16 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ list -pv casket)
+
+add_test(NAME tchtest17 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ list -pv -fm 1 -px casket)
+
+add_test(NAME tchtest18 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ misc casket 5000)
+
+add_test(NAME tchtest19 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ misc -tl -td casket 5000)
+
+add_test(NAME tchtest20 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ misc -mt -tb casket 500)
+
+add_test(NAME tchtest21 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ wicked casket 50000)
+
+add_test(NAME tchtest22 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ wicked -tl -td casket 50000)
+
+add_test(NAME tchtest23 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ wicked -mt -tb casket 5000)
+
+add_test(NAME tchtest24 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ wicked -tt casket 5000)
+
+add_test(NAME tchtest25 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchtest>
+ wicked -tx casket 5000)
+
+add_test(NAME tchtest26 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ write -xm 500000 -df 5 -tl casket 5 5000 500 5)
+
+add_test(NAME tchtest27 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ read -xm 500000 -df 5 casket 5)
+
+add_test(NAME tchtest28 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ read -xm 500000 -rnd casket 5)
+
+add_test(NAME tchtest29 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ remove -xm 500000 casket 5)
+
+add_test(NAME tchtest30 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ wicked -nc casket 5 5000)
+
+add_test(NAME tchtest31 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ wicked -tl -td casket 5 5000)
+
+add_test(NAME tchtest32 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ wicked -tb casket 5 5000)
+
+add_test(NAME tchtest33 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ typical -df 5 casket 5 50000 5000)
+
+add_test(NAME tchtest34 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ typical -rr 1000 casket 5 50000 5000)
+
+add_test(NAME tchtest35 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ typical -tl -rc 50000 -nc casket 5 50000 5000)
+
+add_test(NAME tchtest36 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmttest>
+ race -df 5 casket 5 10000)
+
+add_test(NAME tchtest37 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ create casket 3 1 1)
+
+add_test(NAME tchtest38 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ inform casket)
+
+add_test(NAME tchtest39 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ put casket one first)
+
+add_test(NAME tchtest40 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ put casket two second)
+
+add_test(NAME tchtest41 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ put -dk casket three third)
+
+add_test(NAME tchtest42 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ put -dc casket three third)
+
+add_test(NAME tchtest43 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ put -dc casket three third)
+
+add_test(NAME tchtest44 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ put -dc casket three third)
+
+add_test(NAME tchtest45 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ put casket four fourth)
+
+add_test(NAME tchtest46 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ put -dk casket five fifth)
+
+add_test(NAME tchtest47 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ out casket one)
+
+add_test(NAME tchtest48 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ out casket two)
+
+add_test(NAME tchtest49 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ get casket three) #check.out
+
+add_test(NAME tchtest50 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ get casket four) #check.out
+
+add_test(NAME tchtest51 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ get casket five) #check.out
+
+add_test(NAME tchtest52 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tchtest53 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ optimize casket)
+
+add_test(NAME tchtest54 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ put -dc casket three third)
+
+add_test(NAME tchtest55 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ get casket three) #check.out
+
+add_test(NAME tchtest56 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ get casket three) #check.out
+
+add_test(NAME tchtest57 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ get casket four) #check.out
+
+add_test(NAME tchtest58 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ get casket five) #check.out
+
+add_test(NAME tchtest59 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tchmgr>
+ list -pv casket) #check.out
+
--- /dev/null
+link_libraries(ejdb)
+add_executable(tchmgr tchmgr.c)
--- /dev/null
+link_libraries(ejdb)
+set(TEST_DATA_DIR ${CMAKE_CURRENT_BINARY_DIR})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TEST_DATA_DIR})
+
+add_executable(tcttest tcttest.c)
+add_executable(tctmttest tctmttest.c)
+add_dependencies(tcttest tchmgr tcbmgr)
+add_dependencies(tctmttest tchmgr tcbmgr)
+
+add_test(NAME tcttest1 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ write casket 50000 5000 5 5)
+
+add_test(NAME tcttest2 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ read casket)
+
+add_test(NAME tcttest3 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ remove casket)
+
+add_test(NAME tcttest4 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ write -mt -tl -td -rc 50 -lc 5 -nc 5 -xm 500000
+ -is -in -it -if -ix casket 5000 5000 5 5)
+
+add_test(NAME tcttest5 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ read -mt -nb -rc 50 -lc 5 -nc 5 -xm 500000 casket)
+
+add_test(NAME tcttest6 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ remove -mt -rc 50 -lc 5 -nc 5 -xm 500000 -df 5 casket)
+
+add_test(NAME tcttest7 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ rcat -pn 500 -xm 50000 -df 5 -is casket 5000 5000 5 5)
+
+add_test(NAME tcttest8 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ rcat -tl -td -pn 5000 -is -in casket 5000 500 5 15)
+
+add_test(NAME tcttest9 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ rcat -nl -pn 500 -rl -is -in casket 5000 500 5 5)
+
+add_test(NAME tcttest10 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ rcat -tb -pn 500 -is -in casket 5000 500 5 5)
+
+add_test(NAME tcttest11 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ rcat -ru -pn 500 -is -in casket 5000 500 1 1)
+
+add_test(NAME tcttest12 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ rcat -tl -td -ru -pn 500 -is -in casket 5000 500 1 1)
+
+add_test(NAME tcttest13 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tcttest14 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ list -pv -px casket) #check.out
+
+add_test(NAME tcttest15 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ misc casket 500)
+
+add_test(NAME tcttest16 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ misc -tl -td casket 500)
+
+add_test(NAME tcttest17 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ misc -mt -tb casket 500)
+
+add_test(NAME tcttest18 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ wicked casket 5000)
+
+add_test(NAME tcttest19 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ wicked -tl -td casket 5000)
+
+add_test(NAME tcttest20 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ wicked -tl -td casket 5000)
+
+add_test(NAME tcttest21 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ wicked -mt -tb casket 5000)
+
+add_test(NAME tcttest22 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ wicked -tt casket 5000)
+
+add_test(NAME tcttest23 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tcttest>
+ wicked -tx casket 5000)
+
+add_test(NAME tcttest24 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmttest>
+ write -xm 500000 -df 5 -tl -is -in casket 5 5000 500 5)
+
+add_test(NAME tcttest25 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmttest>
+ read -xm 500000 -df 5 casket 5)
+
+add_test(NAME tcttest26 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmttest>
+ read -xm 500000 -rnd casket 5)
+
+add_test(NAME tcttest27 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmttest>
+ remove -xm 500000 casket 5)
+
+add_test(NAME tcttest28 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmttest>
+ wicked casket 5 5000)
+
+add_test(NAME tcttest29 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmttest>
+ wicked -tl -td casket 5 5000)
+
+add_test(NAME tcttest30 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmttest>
+ typical -df 5 casket 5 5000 500)
+
+add_test(NAME tcttest31 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmttest>
+ typical -rr 1000 casket 5 5000 500)
+
+add_test(NAME tcttest32 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmttest>
+ typical -tl -rc 50000 -lc 5 -nc 5 casket 5 5000 500)
+
+add_test(NAME tcttest33 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ create casket 3 1 1)
+
+add_test(NAME tcttest34 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ setindex casket name)
+
+add_test(NAME tcttest35 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ inform casket)
+
+add_test(NAME tcttest36 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ put casket "" name mikio birth 19780211 lang ja,en,c)
+
+add_test(NAME tcttest37 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ put casket "" name fal birth 19771007 lang ja)
+
+add_test(NAME tcttest38 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ put casket "" name banana price 100)
+
+add_test(NAME tcttest39 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ put -dc casket 3 color yellow)
+
+add_test(NAME tcttest40 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ put -dk casket "" name melon price 1200 color green)
+
+add_test(NAME tcttest41 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ put casket "" name void birth 20010101 lang en)
+
+add_test(NAME tcttest42 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ out casket 5)
+
+add_test(NAME tcttest43 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ get casket 1) #check.out
+
+add_test(NAME tcttest44 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ get casket 2) #check.out
+
+add_test(NAME tcttest45 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ get casket 3) #check.out
+
+add_test(NAME tcttest46 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ search casket) #check.out
+
+add_test(NAME tcttest47 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ search -m 10 -sk 1 -pv -ph casket) #check.out
+
+add_test(NAME tcttest48 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ search -m 10 -ord name STRDESC -pv -ph casket) #check.out
+
+add_test(NAME tcttest49 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ search -m 10 -ord name STRDESC -pv -ph casket
+ name STRBW mi birth NUMBT 19700101,19791231 lang STRAND ja,en) #check.out
+
+add_test(NAME tcttest50 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ search -ord birth NUMDESC -pv -ms UNION casket
+ name STREQ mikio name STRINC fal name FTSEX "ba na na") #check.out
+
+add_test(NAME tcttest51 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ setindex casket name)
+
+add_test(NAME tcttest52 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ setindex -it dec casket birth)
+
+add_test(NAME tcttest53 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ setindex casket lang)
+
+add_test(NAME tcttest54 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ list -pv casket) #check.out
+
+add_test(NAME tcttest55 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ optimize casket)
+
+add_test(NAME tcttest56 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ put casket "" name tokyo country japan lang ja)
+
+add_test(NAME tcttest57 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ search -m 10 -sk 1 -pv -ph casket) #check.out
+
+add_test(NAME tcttest58 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ search -m 10 -ord name STRDESC -pv -ph casket) #check.out
+
+add_test(NAME tcttest59 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ search -m 10 -ord name STRDESC -pv -ph casket
+ name STRBW mi birth NUMBT 19700101,19791231 lang STRAND ja,en) #check.out
+
+add_test(NAME tcttest60 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ search -ord price NUMDESC -ph -rm casket name STRINC a)
+
+add_test(NAME tcttest61 WORKING_DIRECTORY ${TEST_DATA_DIR}
+ COMMAND ${TEST_TOOL_CMD} $<TARGET_FILE:tctmgr>
+ list -pv casket) #check.out
+
--- /dev/null
+link_libraries(ejdb)
+add_executable(tctmgr tctmgr.c)
link_libraries(ejdb)
-set(TEST_DATA_DIR ${CMAKE_CURRENT_BINARY_DIR}/var)
-file(MAKE_DIRECTORY ${TEST_DATA_DIR})
+set(TEST_DATA_DIR ${CMAKE_CURRENT_BINARY_DIR})
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TEST_DATA_DIR})
add_executable(tcutest tcutest.c)
<VirtualDirectory Name="tests">
<File Name="src/tcbdb/tests/tcbmttest.c"/>
<File Name="src/tcbdb/tests/tcbtest.c"/>
+ <File Name="src/tcbdb/tests/CMakeLists.txt"/>
</VirtualDirectory>
<File Name="src/tcbdb/tcbdb.c"/>
<File Name="src/tcbdb/tcbdb.h"/>
<VirtualDirectory Name="tools">
<File Name="src/tcbdb/tools/tcbmgr.c"/>
+ <File Name="src/tcbdb/tools/CMakeLists.txt"/>
</VirtualDirectory>
</VirtualDirectory>
<VirtualDirectory Name="tcfdb">
<VirtualDirectory Name="tests">
<File Name="src/tcfdb/tests/tcfmttest.c"/>
<File Name="src/tcfdb/tests/tcftest.c"/>
+ <File Name="src/tcfdb/tests/CMakeLists.txt"/>
</VirtualDirectory>
<File Name="src/tcfdb/tcfdb.c"/>
<File Name="src/tcfdb/tcfdb.h"/>
<VirtualDirectory Name="tools">
<File Name="src/tcfdb/tools/tcfmgr.c"/>
+ <File Name="src/tcfdb/tools/CMakeLists.txt"/>
</VirtualDirectory>
</VirtualDirectory>
<VirtualDirectory Name="tchdb">
<VirtualDirectory Name="tests">
<File Name="src/tchdb/tests/tchmttest.c"/>
<File Name="src/tchdb/tests/tchtest.c"/>
+ <File Name="src/tchdb/tests/CMakeLists.txt"/>
</VirtualDirectory>
<File Name="src/tchdb/tchdb.c"/>
<File Name="src/tchdb/tchdb.h"/>
<VirtualDirectory Name="tools">
<File Name="src/tchdb/tools/tchmgr.c"/>
+ <File Name="src/tchdb/tools/CMakeLists.txt"/>
</VirtualDirectory>
</VirtualDirectory>
<VirtualDirectory Name="tctdb">
<VirtualDirectory Name="tests">
<File Name="src/tctdb/tests/tctmttest.c"/>
<File Name="src/tctdb/tests/tcttest.c"/>
+ <File Name="src/tctdb/tests/CMakeLists.txt"/>
</VirtualDirectory>
<File Name="src/tctdb/tctdb.c"/>
<File Name="src/tctdb/tctdb.h"/>
<VirtualDirectory Name="tools">
<File Name="src/tctdb/tools/tctmgr.c"/>
+ <File Name="src/tctdb/tools/CMakeLists.txt"/>
</VirtualDirectory>
</VirtualDirectory>
<VirtualDirectory Name="tcutil">
<File Name="cmake/Modules/FindLzo.cmake"/>
<File Name="cmake/Modules/FindCUnit.cmake"/>
<File Name="CMakeLists.txt"/>
+ <File Name="CTestConfig.cmake"/>
+ <File Name="ctest.cmake"/>
+ <File Name="cmake/Modules/EjdbUtils.cmake"/>
</VirtualDirectory>
</CodeLite_Project>