#115
authorAnton Adamansky <adamansky@gmail.com>
Mon, 2 Mar 2015 10:58:08 +0000 (16:58 +0600)
committerAnton Adamansky <adamansky@gmail.com>
Mon, 2 Mar 2015 10:58:08 +0000 (16:58 +0600)
28 files changed:
.gitignore
tcejdb/.gitignore [new file with mode: 0644]
tcejdb/CMakeLists.txt
tcejdb/CTestConfig.cmake [new file with mode: 0644]
tcejdb/CTestCustom.cmake [new file with mode: 0644]
tcejdb/cmake/Modules/EjdbUtils.cmake [new file with mode: 0644]
tcejdb/ctest.cmake [new file with mode: 0644]
tcejdb/src/CMakeFiles/progress.marks [deleted file]
tcejdb/src/Makefile [deleted file]
tcejdb/src/bson/nxjson.c
tcejdb/src/cmake_install.cmake [deleted file]
tcejdb/src/ejdb/ejdb.c
tcejdb/src/ejdb/ejdb_private.h
tcejdb/src/generated/basedefs.h [deleted file]
tcejdb/src/generated/myconf.h [deleted file]
tcejdb/src/myconf.h.in
tcejdb/src/tcbdb/tcbdb.c
tcejdb/src/tcbdb/tests/CMakeLists.txt [new file with mode: 0644]
tcejdb/src/tcbdb/tools/CMakeLists.txt [new file with mode: 0644]
tcejdb/src/tcfdb/tests/CMakeLists.txt [new file with mode: 0644]
tcejdb/src/tcfdb/tools/CMakeLists.txt [new file with mode: 0644]
tcejdb/src/tchdb/tchdb.c
tcejdb/src/tchdb/tests/CMakeLists.txt [new file with mode: 0644]
tcejdb/src/tchdb/tools/CMakeLists.txt [new file with mode: 0644]
tcejdb/src/tctdb/tests/CMakeLists.txt [new file with mode: 0644]
tcejdb/src/tctdb/tools/CMakeLists.txt [new file with mode: 0644]
tcejdb/src/tcutil/tests/CMakeLists.txt
tcejdb/tcejdb.project

index e66c9f4..3fd592e 100644 (file)
@@ -1,7 +1,3 @@
-Makefile
-tcejdb/src/*/tests/*test
-tcejdb/generated/
-tcejdb/Testing/
 
 CMakeCache.txt
 CMakeFiles
@@ -15,9 +11,6 @@ compilation.db
 .dep.inc
 
 *.iml
-*.o
-*.vlog
-*.log
 *.status
 *.dylib
 *.upload
@@ -38,4 +31,3 @@ compilation.db
 *.pyc
 *.tags
 
-
diff --git a/tcejdb/.gitignore b/tcejdb/.gitignore
new file mode 100644 (file)
index 0000000..7e47b9d
--- /dev/null
@@ -0,0 +1,7 @@
+Makefile
+build/*
+Testing/*
+src/old/*
+
+DartConfiguration.tcl
+
index a6648ed..5b26e42 100644 (file)
@@ -1,8 +1,25 @@
 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)
@@ -10,14 +27,16 @@ set(ALL_SRC)
 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)
 
@@ -25,10 +44,9 @@ set(EJDB_GENERATED_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/generated)
 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)
@@ -39,6 +57,11 @@ else()
 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)
@@ -96,37 +119,29 @@ target_link_libraries(ejdb ${EJDB_LLIBRARIES})
 #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)
 
@@ -134,7 +149,6 @@ message("")
 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}")
diff --git a/tcejdb/CTestConfig.cmake b/tcejdb/CTestConfig.cmake
new file mode 100644 (file)
index 0000000..9979dad
--- /dev/null
@@ -0,0 +1,3 @@
+set(CTEST_PROJECT_NAME "ejdb")
+set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC")
+
diff --git a/tcejdb/CTestCustom.cmake b/tcejdb/CTestCustom.cmake
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tcejdb/cmake/Modules/EjdbUtils.cmake b/tcejdb/cmake/Modules/EjdbUtils.cmake
new file mode 100644 (file)
index 0000000..91a7d38
--- /dev/null
@@ -0,0 +1,10 @@
+
+
+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)
diff --git a/tcejdb/ctest.cmake b/tcejdb/ctest.cmake
new file mode 100644 (file)
index 0000000..cf6a08f
--- /dev/null
@@ -0,0 +1,37 @@
+# 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()
+
+
diff --git a/tcejdb/src/CMakeFiles/progress.marks b/tcejdb/src/CMakeFiles/progress.marks
deleted file mode 100644 (file)
index 573541a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/tcejdb/src/Makefile b/tcejdb/src/Makefile
deleted file mode 100644 (file)
index 5e8f648..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-# 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
-
index 5ae7f68..7579f8a 100644 (file)
@@ -192,6 +192,7 @@ static char* skip_block_comment(char* p) {
 }
 
 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++)) {
diff --git a/tcejdb/src/cmake_install.cmake b/tcejdb/src/cmake_install.cmake
deleted file mode 100644 (file)
index 68a62ca..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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()
-
index f4e861b..a1045e6 100644 (file)
@@ -136,7 +136,7 @@ static bool _qrycondcheckstrand(const char *vbuf, const TCLIST *tokens);
 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);
@@ -145,7 +145,7 @@ static EJQ* _qryaddand(EJDB *jb, EJQ *q, const void *andbsdata);
 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);
@@ -158,12 +158,9 @@ static EJCOLL* _createcollimpl(EJDB *jb, const char *colname, EJCOLLOPTS *opts);
 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;
@@ -549,9 +546,9 @@ EJQ* ejdbqueryhints(EJDB *jb, EJQ *q, const void *hintsbsdata) {
         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;
@@ -1184,7 +1181,7 @@ static bool _rmcollimpl(EJDB *jb, EJCOLL *coll, bool unlinkfile) {
 }
 
 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;
@@ -1684,9 +1681,9 @@ static void _qrydel(EJQ *q, bool freequery) {
         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);
@@ -2049,14 +2046,14 @@ static bool _qrybsvalmatch(const EJQF *qf, bson_iterator *it, bool expandarrays,
 }
 
 
-//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;
@@ -2161,15 +2158,15 @@ static bool _qrybsmatch(EJQF *qf, const void *bsbuf, int bsbufsz) {
         .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) {
@@ -2416,11 +2413,11 @@ static void _qryfieldup(const EJQF *src, EJQF *target, uint32_t qflags) {
     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);
     }
 }
 
@@ -2443,8 +2440,8 @@ static bool _qrydup(const EJQ *src, EJQ *target, uint32_t qflags) {
     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));
@@ -2478,13 +2475,13 @@ typedef struct { /**> $do action visitor context */
     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;
@@ -2634,7 +2631,7 @@ static bson_visitor_cmd_t _bson$dovisitor(const char *ipath, int ipathlen, const
 
 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;
     }
@@ -2648,27 +2645,27 @@ static bool _pushprocessedbson(_QRYCTX *ctx, const void *bsbuf, int bsbufsz) {
     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;
@@ -2735,9 +2732,9 @@ static bool _pushprocessedbson(_QRYCTX *ctx, const void *bsbuf, int bsbufsz) {
     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,
@@ -2745,7 +2742,7 @@ static bool _exec$do(_QRYCTX *ctx, const void *bsbuf, bson *bsout) {
     };
     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;
@@ -2756,7 +2753,7 @@ static bool _exec$do(_QRYCTX *ctx, const void *bsbuf, bson *bsout) {
 //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;
@@ -2766,15 +2763,15 @@ static bson* _qfgetupdateobj(const EJQF *qf) {
     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);
@@ -3295,7 +3292,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
     //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;
     }
@@ -3329,7 +3326,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
                         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);
@@ -3373,7 +3370,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
                         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));
                 }
             }
@@ -3390,7 +3387,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
         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) {
@@ -3410,7 +3407,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
             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 {
@@ -3429,7 +3426,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
             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 {
@@ -3465,7 +3462,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
                 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 {
@@ -3502,7 +3499,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
                 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 {
@@ -3523,7 +3520,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
         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 {
@@ -3549,7 +3546,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
                 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));
                     }
                 }
@@ -3563,7 +3560,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
                 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));
                     }
                 }
@@ -3588,7 +3585,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
                 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));
                     }
                 }
@@ -3602,7 +3599,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
                 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));
                     }
                 }
@@ -3632,7 +3629,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
         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);
@@ -3668,7 +3665,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
             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 {
@@ -3704,7 +3701,7 @@ static TCLIST* _qryexecute(EJCOLL *coll, const EJQ *_q, uint32_t *outcount, int
         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));
             }
         }
@@ -3766,7 +3763,7 @@ fullscan: /* Full scan */
                 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));
@@ -4030,7 +4027,7 @@ static bool _qrypreprocess(_QRYCTX *ctx) {
         EJQF **qfp = TCLISTVALPTR(alist, i);
         q->allqfields[i] = *qfp; //*EJQF
     }
-    q->allqfields[TCLISTNUM(alist)] = '\0';
+    q->allqfields[TCLISTNUM(alist)] = NULL;
     tclistdel(alist);
     alist = NULL;
 
@@ -4132,10 +4129,10 @@ static bool _qrypreprocess(_QRYCTX *ctx) {
                             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;
                             }
                         }
@@ -4263,11 +4260,11 @@ static bool _qrypreprocess(_QRYCTX *ctx) {
         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, ".$");
@@ -4280,15 +4277,15 @@ static bool _qrypreprocess(_QRYCTX *ctx) {
                     }
                     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));
                     }
                 }
             }
@@ -4486,11 +4483,11 @@ static void _delqfdata(const EJQ *q, const EJQF *qf) {
     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
@@ -4839,12 +4836,12 @@ static int _parse_qobj_impl(EJDB *jb, EJQ *q, bson_iterator *it, TCLIST *qlist,
                                     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);
@@ -5549,4 +5546,4 @@ static bool _qrycondcheckstror(const char *vbuf, const TCLIST *tokens) {
         }
     }
     return false;
-}
\ No newline at end of file
+}
index fc5f454..206ac51 100644 (file)
@@ -79,7 +79,7 @@ enum { /**> Query flags */
     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 */
@@ -112,8 +112,8 @@ struct EJQF { /**> Matching field and status */
     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;
 
@@ -126,7 +126,7 @@ struct EJQ { /**> Query object. */
      *  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 */
diff --git a/tcejdb/src/generated/basedefs.h b/tcejdb/src/generated/basedefs.h
deleted file mode 100644 (file)
index f59b271..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*************************************************************************************************
- * 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 */
-
diff --git a/tcejdb/src/generated/myconf.h b/tcejdb/src/generated/myconf.h
deleted file mode 100644 (file)
index 106d803..0000000
+++ /dev/null
@@ -1,552 +0,0 @@
-/*************************************************************************************************
- * 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
index 106d803..3423552 100644 (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"
 
 /*************************************************************************************************
@@ -514,15 +520,13 @@ void *_tc_recdecode(const void *ptr, int size, int *sp, void *op);
   } 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)
@@ -543,9 +547,8 @@ void *_tc_recdecode(const void *ptr, int size, int *sp, void *op);
 #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
 
index a5cf206..b088ea6 100644 (file)
@@ -2886,9 +2886,7 @@ static bool tcbdbopenimpl(TCBDB *bdb, const char *path, int omode) {
         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);
diff --git a/tcejdb/src/tcbdb/tests/CMakeLists.txt b/tcejdb/src/tcbdb/tests/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8823bf4
--- /dev/null
@@ -0,0 +1,304 @@
+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
diff --git a/tcejdb/src/tcbdb/tools/CMakeLists.txt b/tcejdb/src/tcbdb/tools/CMakeLists.txt
new file mode 100644 (file)
index 0000000..52902ae
--- /dev/null
@@ -0,0 +1,2 @@
+link_libraries(ejdb)
+add_executable(tcbmgr tcbmgr.c)
diff --git a/tcejdb/src/tcfdb/tests/CMakeLists.txt b/tcejdb/src/tcfdb/tests/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8ea7c5e
--- /dev/null
@@ -0,0 +1,194 @@
+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
+
diff --git a/tcejdb/src/tcfdb/tools/CMakeLists.txt b/tcejdb/src/tcfdb/tools/CMakeLists.txt
new file mode 100644 (file)
index 0000000..7a516bb
--- /dev/null
@@ -0,0 +1,2 @@
+link_libraries(ejdb)
+add_executable(tcfmgr tcfmgr.c)
index 9dea335..b6290bc 100644 (file)
@@ -219,8 +219,8 @@ EJDB_INLINE bool tchdbwritesmem(TCHDB *hdb, size_t off, const void *ptr, size_t
 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);
@@ -3154,6 +3154,11 @@ static bool tchdbreadrec(TCHDB *hdb, TCHREC *rec, char *rbuf) {
         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__);
diff --git a/tcejdb/src/tchdb/tests/CMakeLists.txt b/tcejdb/src/tchdb/tests/CMakeLists.txt
new file mode 100644 (file)
index 0000000..ec88d49
--- /dev/null
@@ -0,0 +1,245 @@
+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
+
diff --git a/tcejdb/src/tchdb/tools/CMakeLists.txt b/tcejdb/src/tchdb/tools/CMakeLists.txt
new file mode 100644 (file)
index 0000000..111cab0
--- /dev/null
@@ -0,0 +1,2 @@
+link_libraries(ejdb)
+add_executable(tchmgr tchmgr.c)
diff --git a/tcejdb/src/tctdb/tests/CMakeLists.txt b/tcejdb/src/tctdb/tests/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0e7d809
--- /dev/null
@@ -0,0 +1,257 @@
+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
+
diff --git a/tcejdb/src/tctdb/tools/CMakeLists.txt b/tcejdb/src/tctdb/tools/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c009c0a
--- /dev/null
@@ -0,0 +1,2 @@
+link_libraries(ejdb)
+add_executable(tctmgr tctmgr.c)
index 05493e4..15408fc 100644 (file)
@@ -1,6 +1,6 @@
 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)
 
index 0d8a79d..9c04f19 100644 (file)
       <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>