Browse Source

Merge branch 'candidate-3.8.x'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 13 years ago
parent
commit
d700652c69
100 changed files with 3136 additions and 403 deletions
  1. 16 0
      CMakeLists.txt
  2. 11 52
      cmake_modules/commonSetup.cmake
  3. 1 1
      common/fileview2/CMakeLists.txt
  4. 1 1
      common/monitoring/prosysinfo/CMakeLists.txt
  5. 64 51
      dali/base/dacsds.cpp
  6. 2 0
      dali/base/dacsds.ipp
  7. 20 6
      dali/base/dasess.cpp
  8. 1 5
      dali/base/dasubs.cpp
  9. 1 1
      dali/dafilesrv/dafilesrv.cmake
  10. 1 1
      dali/dafilesrv/dafscontrol.cmake
  11. 1 1
      dali/daliadmin/CMakeLists.txt
  12. 1 1
      dali/dalidiag/CMakeLists.txt
  13. 1 1
      dali/dalistop/CMakeLists.txt
  14. 1 1
      dali/datest/datest.cmake
  15. 1 1
      dali/datest/dfuwutest.cmake
  16. 1 1
      dali/daunittest/CMakeLists.txt
  17. 1 1
      dali/dfu/dfuserver.cmake
  18. 1 1
      dali/dfuplus/CMakeLists.txt
  19. 1 1
      dali/dfuxref/CMakeLists.txt
  20. 1 1
      dali/ft/ftslave.cmake
  21. 1 1
      dali/hellodali/CMakeLists.txt
  22. 1 1
      dali/regress/CMakeLists.txt
  23. 2 2
      dali/sasha/CMakeLists.txt
  24. 1 1
      dali/server/CMakeLists.txt
  25. 1 1
      dali/treeview/CMakeLists.txt
  26. 1 1
      dali/updtdalienv/CMakeLists.txt
  27. 1 1
      deployment/configgen/CMakeLists.txt
  28. 1 1
      deployment/envgen/CMakeLists.txt
  29. 2 0
      docs/HPCCClientTools/CMakeLists.txt
  30. 142 0
      docs/HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml
  31. 1 4
      docs/HPCCClientTools/ClientTools.xml
  32. 74 0
      docs/HPCCClientTools/TheECLIDEandHPCCClientTools.xml
  33. 13 13
      docs/HPCCDataHandling/DataHandling.xml
  34. 10 13
      docs/RDDERef/RDDERef.xml
  35. 3 3
      docs/UsingConfigManager/UsingConfigManager.xml
  36. 499 0
      docs/Visualizing/Visualizing.xml
  37. BIN
      docs/images/RM-03.jpg
  38. BIN
      docs/images/viz01.jpg
  39. BIN
      docs/images/viz02a.jpg
  40. BIN
      docs/images/viz03.jpg
  41. BIN
      docs/images/viz04.jpg
  42. BIN
      docs/images/viz05.jpg
  43. BIN
      docs/images/viz06.jpg
  44. 1 1
      ecl/agentexec/CMakeLists.txt
  45. 1 1
      ecl/agentexec/agentexec.cmake
  46. 3 3
      ecl/ecl-package/CMakeLists.txt
  47. 1 1
      ecl/eclagent/CMakeLists.txt
  48. 1 1
      ecl/eclcc/CMakeLists.txt
  49. 27 7
      ecl/eclcc/eclcc.cpp
  50. 1 1
      ecl/eclccserver/CMakeLists.txt
  51. 1 1
      ecl/eclcmd/CMakeLists.txt
  52. 2 2
      ecl/eclcmd/queries/CMakeLists.txt
  53. 1 1
      ecl/eclplus/CMakeLists.txt
  54. 1 1
      ecl/eclscheduler/CMakeLists.txt
  55. 7 0
      ecl/hqlcpp/hqlhtcpp.cpp
  56. 1 1
      ecl/scheduleadmin/CMakeLists.txt
  57. 1 1
      ecl/wutest/CMakeLists.txt
  58. 1 1
      esp/clients/WUManager/CMakeLists.txt
  59. 2 2
      esp/files/scripts/configmgr/navtree.js
  60. 1 1
      esp/platform/CMakeLists.txt
  61. 1 1
      esp/services/esp_compile_scm/CMakeLists.txt
  62. 1 1
      esp/test/httptest/CMakeLists.txt
  63. 1 1
      esp/tools/soapplus/CMakeLists.txt
  64. 1 1
      initfiles/CMakeLists.txt
  65. 52 0
      lib2/CMakeLists.txt
  66. 1 1
      plugins/dataconnectors/hdfsconnector/CMakeLists.txt
  67. 3 19
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/ECLEngine.java
  68. 6 53
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/HPCCConnection.java
  69. 29 75
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/HPCCDatabaseMetaData.java
  70. 2 1
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/test/jdbcdriver/HPCCDriverTest.java
  71. 6 3
      plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/test/jdbcdriver/HPCCDriverTestThread.java
  72. 90 26
      plugins/unicodelib/unicodelib.cpp
  73. 1 1
      roxie/roxie/CMakeLists.txt
  74. 1 1
      roxie/roxieclienttest/CMakeLists.txt
  75. 1 1
      roxie/roxiepipe/CMakeLists.txt
  76. 1 1
      roxie/udplib/udptransport.cmake
  77. 1 1
      services/runagent/frunagent.cmake
  78. 1 1
      services/runagent/frunssh.cmake
  79. 1 1
      system/mp/test/CMakeLists.txt
  80. 1 1
      system/security/test/ldapsecuritytest/CMakeLists.txt
  81. 1 1
      system/security/test/myssl/CMakeLists.txt
  82. 1 1
      system/xmllibtest/CMakeLists.txt
  83. 1293 0
      testing/ecl/key/prefixjoinu.xml
  84. 691 0
      testing/ecl/prefixjoinu.ecl
  85. 1 1
      thorlcr/master/CMakeLists.txt
  86. 1 1
      thorlcr/slave/CMakeLists.txt
  87. 1 1
      tools/backupnode/CMakeLists.txt
  88. 1 1
      tools/combine/CMakeLists.txt
  89. 1 1
      tools/copyexp/CMakeLists.txt
  90. 1 1
      tools/dumpkey/CMakeLists.txt
  91. 1 1
      tools/esdl/CMakeLists.txt
  92. 1 1
      tools/esdl/esdl.cmake
  93. 1 1
      tools/fcached/CMakeLists.txt
  94. 1 1
      tools/genht/CMakeLists.txt
  95. 1 1
      tools/hidl/CMakeLists.txt
  96. 1 1
      tools/keydiff/keydiff.cmake
  97. 1 1
      tools/keydiff/keypatch.cmake
  98. 1 1
      tools/pskill/CMakeLists.txt
  99. 1 1
      tools/pstart/CMakeLists.txt
  100. 0 0
      tools/start-stop-daemon/CMakeLists.txt

+ 16 - 0
CMakeLists.txt

@@ -121,6 +121,9 @@ if ( NOT MAKE_DOCS_ONLY )
     HPCC_ADD_SUBDIRECTORY (thorlcr "PLATFORM")
     HPCC_ADD_SUBDIRECTORY (thorlcr "PLATFORM")
 endif()
 endif()
 HPCC_ADD_SUBDIRECTORY (docs "PLATFORM")
 HPCC_ADD_SUBDIRECTORY (docs "PLATFORM")
+if (APPLE)
+  HPCC_ADD_SUBDIRECTORY (lib2)
+endif (APPLE)
 
 
 ###
 ###
 ## CPack install and packaging setup.
 ## CPack install and packaging setup.
@@ -279,6 +282,19 @@ else()
     message("WARNING: CMAKE 2.8.1 or later required to create RPMs from this project")
     message("WARNING: CMAKE 2.8.1 or later required to create RPMs from this project")
 endif()
 endif()
 
 
+if (APPLE)
+    set ( CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_RPM_PACKAGE_VERSION}_${version}-${stagever}-${CPACK_SYSTEM_NAME}")
+    set ( CPACK_MONOLITHIC_INSTALL TRUE )
+    set ( CPACK_PACKAGE_VENDOR "HPCC Systems" )
+    file(WRITE "${PROJECT_BINARY_DIR}/welcome.txt" 
+        "HPCC Systems - Client Tools\r"
+        "===========================\r\r"
+        "This installer will install the HPCC Systems Client Tools.")
+    set ( CPACK_RESOURCE_FILE_README "${PROJECT_BINARY_DIR}/welcome.txt" )
+    set ( CPACK_RESOURCE_FILE_LICENSE "${HPCC_SOURCE_DIR}/${LICENSE_FILE}" )
+    set ( CPACK_PACKAGE_DESCRIPTION_SUMMARY "HPCC Systems Client Tools." )
+endif()
+
 ###
 ###
 ## Below are the non-compile based install scripts required for
 ## Below are the non-compile based install scripts required for
 ## the hpcc platform.
 ## the hpcc platform.

+ 11 - 52
cmake_modules/commonSetup.cmake

@@ -171,6 +171,10 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
     endif ()
     endif ()
   endif ()
   endif ()
 
 
+  macro(HPCC_ADD_EXECUTABLE target)
+    add_executable(${target} ${ARGN})
+  endmacro(HPCC_ADD_EXECUTABLE target)
+
   macro(HPCC_ADD_LIBRARY target)
   macro(HPCC_ADD_LIBRARY target)
     add_library(${target} ${ARGN})
     add_library(${target} ${ARGN})
   endmacro(HPCC_ADD_LIBRARY target)
   endmacro(HPCC_ADD_LIBRARY target)
@@ -473,7 +477,11 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
   ###
   ###
   ## The following sets the install directories and names.
   ## The following sets the install directories and names.
   ###
   ###
-  set ( OSSDIR "${DIR_NAME}" )
+  if ( PLATFORM )
+    set ( OSSDIR "${DIR_NAME}" )
+  else()
+    set ( OSSDIR "${DIR_NAME}/${version}/clienttools" )
+  endif()
   set ( CPACK_INSTALL_PREFIX "${PREFIX}" )
   set ( CPACK_INSTALL_PREFIX "${PREFIX}" )
   set ( CPACK_PACKAGING_INSTALL_PREFIX "${PREFIX}" )
   set ( CPACK_PACKAGING_INSTALL_PREFIX "${PREFIX}" )
   set ( CMAKE_INSTALL_PREFIX "${PREFIX}" )
   set ( CMAKE_INSTALL_PREFIX "${PREFIX}" )
@@ -481,60 +489,11 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
   SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 
   SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 
   SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OSSDIR}/lib")
   SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OSSDIR}/lib")
   SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
   SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
-
-  MACRO (FIXUP_MACPORTS apps dylibs)
-	foreach(dylib ${dylibs})
-		get_filename_component(dylib_path ${dylib} REALPATH)
-		install(PROGRAMS "${dylib_path}" DESTINATION "${OSSDIR}/lib2")
-	endforeach(dylib)
-	foreach(dylib ${dylibs})
-		get_filename_component(dylib_path ${dylib} REALPATH)
-		get_filename_component(dylib_name_ext ${dylib_path} NAME)
-		install(CODE "
-				execute_process(COMMAND install_name_tool -id \"@loader_path/../lib2/${dylib_name_ext}\" ${CMAKE_INSTALL_PREFIX}/${OSSDIR}/lib2/${dylib_name_ext})
-		" ) 
-		foreach(app ${apps})
-			#HACK HACK - Could be done generically with some REGEX?
-			string(REPLACE ".28.0.dylib" ".28.dylib" dylib_28_path "${dylib_path}")
-			string(REPLACE ".48.1.dylib" ".48.dylib" dylib_48_path "${dylib_path}")
-			install(CODE "
-				execute_process(COMMAND install_name_tool -change \"${dylib_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" ${EXECUTABLE_OUTPUT_PATH}/${app})
-				execute_process(COMMAND install_name_tool -change \"${dylib_28_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" ${EXECUTABLE_OUTPUT_PATH}/${app})
-				execute_process(COMMAND install_name_tool -change \"${dylib_48_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" ${EXECUTABLE_OUTPUT_PATH}/${app})
-			" ) 
-		endforeach(app)
-	endforeach(dylib)
-  ENDMACRO()
-
   if (APPLE)
   if (APPLE)
-    SET(CMAKE_INSTALL_RPATH "@loader_path/../lib")
+    set(CMAKE_INSTALL_RPATH "@loader_path/../lib")
     set(CMAKE_INSTALL_NAME_DIR "@loader_path/../lib") 
     set(CMAKE_INSTALL_NAME_DIR "@loader_path/../lib") 
-    set(APPS
-      "dafilesrv"
-      "dfuplus"
-      "ecl"
-      "ecl-package"
-      "ecl-queries"
-      "eclcc"
-      "eclplus"
-      "wuget"
-    )
-    set(DYLIBS)
-    if (USE_ICU)
-      set(DYLIBS ${DYLIBS} ${ICU_LIBRARIES})
-    endif ()
-    if (USE_BOOST_REGEX)
-      set(DYLIBS ${DYLIBS} ${BOOST_REGEX_LIBRARIES})
-    endif ()
-    if (USE_XALAN)
-      set(DYLIBS ${DYLIBS} ${XALAN_LIBRARIES})
-    endif ()
-    if (USE_XERCES)
-      set(DYLIBS ${DYLIBS} ${XERCES_LIBRARIES})
-    endif ()
-    FIXUP_MACPORTS("${APPS}" "${DYLIBS}")
   endif()
   endif()
-  
+
   MACRO (FETCH_GIT_TAG workdir edition result)
   MACRO (FETCH_GIT_TAG workdir edition result)
       execute_process(COMMAND "${GIT_COMMAND}" describe --tags --dirty --abbrev=6 --match ${edition}*
       execute_process(COMMAND "${GIT_COMMAND}" describe --tags --dirty --abbrev=6 --match ${edition}*
         WORKING_DIRECTORY "${workdir}"
         WORKING_DIRECTORY "${workdir}"

+ 1 - 1
common/fileview2/CMakeLists.txt

@@ -107,7 +107,7 @@ set (    SRCS
 ADD_DEFINITIONS ( -D_CONSOLE )
 ADD_DEFINITIONS ( -D_CONSOLE )
 
 
 if( PLATFORM )
 if( PLATFORM )
-    add_executable ( fvserver ${SRCS} )
+    HPCC_ADD_EXECUTABLE ( fvserver ${SRCS} )
     set_target_properties(fvserver PROPERTIES 
     set_target_properties(fvserver PROPERTIES 
         COMPILE_FLAGS -D_CONSOLE
         COMPILE_FLAGS -D_CONSOLE
     )
     )

+ 1 - 1
common/monitoring/prosysinfo/CMakeLists.txt

@@ -29,5 +29,5 @@ set (    SRCS
          main.cpp 
          main.cpp 
     )
     )
 
 
-add_executable ( prosysinfo ${SRCS} )
+HPCC_ADD_EXECUTABLE ( prosysinfo ${SRCS} )
 install ( TARGETS prosysinfo DESTINATION ${OSSDIR}/bin )
 install ( TARGETS prosysinfo DESTINATION ${OSSDIR}/bin )

+ 64 - 51
dali/base/dacsds.cpp

@@ -1418,74 +1418,87 @@ IPropertyTreeIterator *CClientSDSManager::getElements(CRemoteConnection &connect
     return NULL;
     return NULL;
 }
 }
 
 
+void CClientSDSManager::noteDisconnected(CRemoteConnection &connection)
+{
+    connection.setConnected(false);
+    connections.removeExact(&connection);
+}
+
 void CClientSDSManager::commit(CRemoteConnection &connection, bool *disconnectDeleteRoot)
 void CClientSDSManager::commit(CRemoteConnection &connection, bool *disconnectDeleteRoot)
 {
 {
     CriticalBlock b(crit); // if >1 commit per client concurrently would cause problems with serverId.
     CriticalBlock b(crit); // if >1 commit per client concurrently would cause problems with serverId.
 
 
     CClientRemoteTree *tree = (CClientRemoteTree *) connection.queryRoot();
     CClientRemoteTree *tree = (CClientRemoteTree *) connection.queryRoot();
 
 
-    CMessageBuffer mb;
-    mb.append((int)DAMP_SDSCMD_DATA);
-    mb.append(connection.queryConnectionId());
-    if (disconnectDeleteRoot)
-    {
-        mb.append((byte)(0x80 + 1)); // kludge, high bit to indicate new client format. (for backward compat.)
-        mb.append(*disconnectDeleteRoot);
-    }
-    else
-        mb.append((byte)0x80); // kludge, high bit to indicate new client format. (for backward compat.)
-    bool lazyFetch = connection.setLazyFetch(false);
-    Owned<IPropertyTree> changes = tree->collateData();
-    connection.setLazyFetch(lazyFetch);
-
-    if (NULL == disconnectDeleteRoot && !changes) return;
-    if (changes) changes->serialize(mb);
     try
     try
     {
     {
-        if (!sendRequest(mb))
-            throw MakeSDSException(SDSExcpt_FailedToCommunicateWithServer, "committing");
-    }
-    catch (IDaliClient_Exception *e)
-    {
-        if (DCERR_server_closed == e->errorCode())
+        CMessageBuffer mb;
+        mb.append((int)DAMP_SDSCMD_DATA);
+        mb.append(connection.queryConnectionId());
+        if (disconnectDeleteRoot)
         {
         {
-            if (changes)
-                WARNLOG("Dali server disconnect, failed to commit data");
-            e->Release();
-            return;
+            mb.append((byte)(0x80 + 1)); // kludge, high bit to indicate new client format. (for backward compat.)
+            mb.append(*disconnectDeleteRoot);
         }
         }
         else
         else
-            throw;
-    }
+            mb.append((byte)0x80); // kludge, high bit to indicate new client format. (for backward compat.)
+        bool lazyFetch = connection.setLazyFetch(false);
+        Owned<IPropertyTree> changes = tree->collateData();
+        connection.setLazyFetch(lazyFetch);
+
+        if (NULL == disconnectDeleteRoot && !changes) return;
+        if (changes) changes->serialize(mb);
+        try
+        {
+            if (!sendRequest(mb))
+                throw MakeSDSException(SDSExcpt_FailedToCommunicateWithServer, "committing");
+        }
+        catch (IDaliClient_Exception *e)
+        {
+            if (DCERR_server_closed == e->errorCode())
+            {
+                if (changes)
+                    WARNLOG("Dali server disconnect, failed to commit data");
+                e->Release();
+                if (disconnectDeleteRoot)
+                    noteDisconnected(connection);
+                return; // JCSMORE does this really help, shouldn't it just throw?
+            }
+            else
+                throw;
+        }
 
 
-    SdsReply replyMsg;
-    mb.read((int &)replyMsg);
-    
-    switch (replyMsg)
-    {
-        case DAMP_SDSREPLY_OK:
+        SdsReply replyMsg;
+        mb.read((int &)replyMsg);
+
+        switch (replyMsg)
         {
         {
-            bool lazyFetch = connection.setLazyFetch(false);
-            // NOTE: this means that send collated data order and the following order have to match!
-            // JCSMORE - true but.. hmm.. (could possibly have alternative lookup scheme)
-            tree->clearCommitChanges(&mb);
-            assertex(mb.getPos() == mb.length()); // must have read it all
-            connection.setLazyFetch(lazyFetch);
-
-            if (disconnectDeleteRoot)
+            case DAMP_SDSREPLY_OK:
             {
             {
-                connection.setConnected(false);
-                connections.removeExact(&connection);
+                bool lazyFetch = connection.setLazyFetch(false);
+                // NOTE: this means that send collated data order and the following order have to match!
+                // JCSMORE - true but.. hmm.. (could possibly have alternative lookup scheme)
+                tree->clearCommitChanges(&mb);
+                assertex(mb.getPos() == mb.length()); // must have read it all
+                connection.setLazyFetch(lazyFetch);
+                break;
             }
             }
-            break;
+            case DAMP_SDSREPLY_EMPTY:
+                break;
+            case DAMP_SDSREPLY_ERROR:
+                throwMbException("SDS Reply Error ", mb);
+            default:
+                assertex(false);
         }
         }
-        case DAMP_SDSREPLY_EMPTY:
-            break;
-        case DAMP_SDSREPLY_ERROR:
-            throwMbException("SDS Reply Error ", mb);
-        default:
-            assertex(false);
     }
     }
+    catch (IException *)
+    {
+        if (disconnectDeleteRoot)
+            noteDisconnected(connection);
+        throw;
+    }
+    if (disconnectDeleteRoot)
+        noteDisconnected(connection);
 }
 }
 
 
 void CClientSDSManager::changeMode(CRemoteConnection &connection, unsigned mode, unsigned timeout, bool suppressReloads)
 void CClientSDSManager::changeMode(CRemoteConnection &connection, unsigned mode, unsigned timeout, bool suppressReloads)

+ 2 - 0
dali/base/dacsds.ipp

@@ -406,6 +406,8 @@ public:
     virtual bool updateEnvironment(IPropertyTree *newEnv, bool forceGroupUpdate, StringBuffer &response);
     virtual bool updateEnvironment(IPropertyTree *newEnv, bool forceGroupUpdate, StringBuffer &response);
 
 
 private:
 private:
+    void noteDisconnected(CRemoteConnection &connection);
+
     CriticalSection crit;
     CriticalSection crit;
     CCopyConnectionHashTable connections;
     CCopyConnectionHashTable connections;
     Semaphore concurrentRequests;
     Semaphore concurrentRequests;

+ 20 - 6
dali/base/dasess.cpp

@@ -1515,6 +1515,7 @@ void setClientAuth(IDaliClientAuthConnection *authconn)
 
 
 
 
 
 
+#define REG_SLEEP 5000
 bool registerClientProcess(ICommunicator *comm, IGroup *& retcoven,unsigned timeout,DaliClientRole role)
 bool registerClientProcess(ICommunicator *comm, IGroup *& retcoven,unsigned timeout,DaliClientRole role)
 {
 {
     // NB doesn't use coven as not yet set up
     // NB doesn't use coven as not yet set up
@@ -1522,7 +1523,8 @@ bool registerClientProcess(ICommunicator *comm, IGroup *& retcoven,unsigned time
         return false;
         return false;
     CTimeMon tm(timeout);
     CTimeMon tm(timeout);
     retcoven = NULL;
     retcoven = NULL;
-    unsigned t=5000;
+    unsigned nextLog = 0, lastNextLog = 0;
+    unsigned t=REG_SLEEP;
     unsigned remaining;
     unsigned remaining;
     rank_t r;
     rank_t r;
     while (!tm.timedout(&remaining)) {
     while (!tm.timedout(&remaining)) {
@@ -1592,13 +1594,25 @@ bool registerClientProcess(ICommunicator *comm, IGroup *& retcoven,unsigned time
                 return true;
                 return true;
             }
             }
         }
         }
-        bool timedout = tm.timedout();
         StringBuffer str;
         StringBuffer str;
-        PROGLOG("Failed to connect to Dali Server %s%s",comm->queryGroup().queryNode(r).endpoint().getUrlStr(str).str(),timedout?"":". Retrying...");
-        if (timedout)
+        PROGLOG("Failed to connect to Dali Server %s.", comm->queryGroup().queryNode(r).endpoint().getUrlStr(str).str());
+        if (tm.timedout())
+        {
+            PROGLOG("%s", str.append(" Timed out.").str());
             break;
             break;
-        Sleep(t);
-        t *= 2;
+        }
+        else if (0 == nextLog)
+        {
+            PROGLOG("%s", str.append(" Retrying...").str());
+            if ((lastNextLog * REG_SLEEP) >= 60000) // limit to a minute between logging
+                nextLog = 60000 / REG_SLEEP;
+            else
+                nextLog = lastNextLog + 2; // wait +2 REG_SLEEP pauses before next logging
+            lastNextLog = nextLog;
+        }
+        else
+            --nextLog;
+        Sleep(REG_SLEEP);
     }
     }
     return false;
     return false;
 }
 }

+ 1 - 5
dali/base/dasubs.cpp

@@ -465,8 +465,7 @@ public:
         }
         }
         catch (IDaliClient_Exception *e) {
         catch (IDaliClient_Exception *e) {
             PrintExceptionLog(e,"Dali CDaliSubscriptionManagerStub::add");
             PrintExceptionLog(e,"Dali CDaliSubscriptionManagerStub::add");
-            e->Release();
-            abort();
+            throw;
         }
         }
     }
     }
 
 
@@ -486,10 +485,7 @@ public:
         }
         }
         catch (IDaliClient_Exception *e) {
         catch (IDaliClient_Exception *e) {
             PrintExceptionLog(e,"Dali CDaliSubscriptionManagerStub::remove");
             PrintExceptionLog(e,"Dali CDaliSubscriptionManagerStub::remove");
-            if (e->errorCode()!=DCERR_server_closed)
-                abort();
             e->Release();
             e->Release();
-            return;
         }
         }
         subscriptions.remove(idx);
         subscriptions.remove(idx);
         ids.remove(idx);
         ids.remove(idx);

+ 1 - 1
dali/dafilesrv/dafilesrv.cmake

@@ -39,7 +39,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 endif()
 
 
-add_executable ( dafilesrv ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dafilesrv ${SRCS} )
 set_target_properties (dafilesrv PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 set_target_properties (dafilesrv PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 install ( TARGETS dafilesrv DESTINATION ${OSSDIR}/bin )
 install ( TARGETS dafilesrv DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dafilesrv
 target_link_libraries ( dafilesrv

+ 1 - 1
dali/dafilesrv/dafscontrol.cmake

@@ -40,7 +40,7 @@ include_directories (
          ./../../common/environment 
          ./../../common/environment 
     )
     )
 
 
-add_executable ( dafscontrol ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dafscontrol ${SRCS} )
 set_target_properties (dafscontrol PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 set_target_properties (dafscontrol PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 install ( TARGETS dafscontrol DESTINATION ${OSSDIR}/bin )
 install ( TARGETS dafscontrol DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dafscontrol  
 target_link_libraries ( dafscontrol  

+ 1 - 1
dali/daliadmin/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( daliadmin ${SRCS} )
+HPCC_ADD_EXECUTABLE ( daliadmin ${SRCS} )
 install ( TARGETS daliadmin DESTINATION ${OSSDIR}/bin )
 install ( TARGETS daliadmin DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( daliadmin  
 target_link_libraries ( daliadmin  
          jlib
          jlib

+ 1 - 1
dali/dalidiag/CMakeLists.txt

@@ -40,7 +40,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( dalidiag ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dalidiag ${SRCS} )
 install ( TARGETS dalidiag DESTINATION ${OSSDIR}/bin )
 install ( TARGETS dalidiag DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dalidiag 
 target_link_libraries ( dalidiag 
          jlib
          jlib

+ 1 - 1
dali/dalistop/CMakeLists.txt

@@ -40,7 +40,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( dalistop ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dalistop ${SRCS} )
 install ( TARGETS dalistop DESTINATION ${OSSDIR}/bin )
 install ( TARGETS dalistop DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dalistop 
 target_link_libraries ( dalistop 
          jlib
          jlib

+ 1 - 1
dali/datest/datest.cmake

@@ -37,7 +37,7 @@ include_directories (
          ./../../system/jlib 
          ./../../system/jlib 
     )
     )
 
 
-add_executable ( datest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( datest ${SRCS} )
 set_target_properties (datest PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 set_target_properties (datest PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 target_link_libraries ( datest 
 target_link_libraries ( datest 
          jlib
          jlib

+ 1 - 1
dali/datest/dfuwutest.cmake

@@ -41,7 +41,7 @@ include_directories (
          ../../common/environment 
          ../../common/environment 
     )
     )
 
 
-add_executable ( dfuwutest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dfuwutest ${SRCS} )
 set_target_properties (dfuwutest PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 set_target_properties (dfuwutest PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 target_link_libraries ( dfuwutest
 target_link_libraries ( dfuwutest
          workunit
          workunit

+ 1 - 1
dali/daunittest/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( daunittest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( daunittest ${SRCS} )
 target_link_libraries ( daunittest
 target_link_libraries ( daunittest
          jlib
          jlib
          mp 
          mp 

+ 1 - 1
dali/dfu/dfuserver.cmake

@@ -48,7 +48,7 @@ include_directories (
          ./../../common/workunit 
          ./../../common/workunit 
     )
     )
 
 
-add_executable ( dfuserver ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dfuserver ${SRCS} )
 set_target_properties ( dfuserver PROPERTIES 
 set_target_properties ( dfuserver PROPERTIES 
         COMPILE_FLAGS "-D_CONSOLE -D_DFUSERVER"
         COMPILE_FLAGS "-D_CONSOLE -D_DFUSERVER"
         )
         )

+ 1 - 1
dali/dfuplus/CMakeLists.txt

@@ -57,7 +57,7 @@ set_source_files_properties (dfuplus.cpp PROPERTIES COMPILE_FLAGS -DDAFILESRV_LO
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( dfuplus ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dfuplus ${SRCS} )
 add_dependencies ( dfuplus espscm )
 add_dependencies ( dfuplus espscm )
 install ( TARGETS dfuplus DESTINATION ${OSSDIR}/bin )
 install ( TARGETS dfuplus DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dfuplus
 target_link_libraries ( dfuplus

+ 1 - 1
dali/dfuxref/CMakeLists.txt

@@ -44,7 +44,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -D_CONSOLE -DMAIN_DFUXREF )
 ADD_DEFINITIONS ( -D_CONSOLE -DMAIN_DFUXREF )
 
 
-add_executable ( dfuxref ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dfuxref ${SRCS} )
 install ( TARGETS dfuxref DESTINATION ${OSSDIR}/bin )
 install ( TARGETS dfuxref DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( dfuxref 
 target_link_libraries ( dfuxref 
          jlib
          jlib

+ 1 - 1
dali/ft/ftslave.cmake

@@ -37,7 +37,7 @@ include_directories (
          ./../../system/jlib 
          ./../../system/jlib 
     )
     )
 
 
-add_executable ( ftslave ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ftslave ${SRCS} )
 set_target_properties (ftslave PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 set_target_properties (ftslave PROPERTIES COMPILE_FLAGS -D_CONSOLE)
 install ( TARGETS ftslave DESTINATION ${OSSDIR}/bin )
 install ( TARGETS ftslave DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( ftslave
 target_link_libraries ( ftslave

+ 1 - 1
dali/hellodali/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( hellodali ${SRCS} )
+HPCC_ADD_EXECUTABLE ( hellodali ${SRCS} )
 install ( TARGETS hellodali DESTINATION ${OSSDIR}/bin )
 install ( TARGETS hellodali DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( hellodali
 target_link_libraries ( hellodali
          jlib
          jlib

+ 1 - 1
dali/regress/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( daregress ${SRCS} )
+HPCC_ADD_EXECUTABLE ( daregress ${SRCS} )
 install ( TARGETS daregress DESTINATION ${OSSDIR}/bin )
 install ( TARGETS daregress DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( daregress  
 target_link_libraries ( daregress  
          jlib
          jlib

+ 2 - 2
dali/sasha/CMakeLists.txt

@@ -68,7 +68,7 @@ if (WIN32)
     endif ()
     endif ()
 endif()
 endif()
 
 
-add_executable ( saserver ${SRCS} )
+HPCC_ADD_EXECUTABLE ( saserver ${SRCS} )
 install ( TARGETS saserver DESTINATION ${OSSDIR}/bin)
 install ( TARGETS saserver DESTINATION ${OSSDIR}/bin)
 
 
 
 
@@ -103,7 +103,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 ADD_DEFINITIONS ( -D_CONSOLE )
 
 
-add_executable ( sasha ${SRCS} )
+HPCC_ADD_EXECUTABLE ( sasha ${SRCS} )
 install ( TARGETS sasha DESTINATION ${OSSDIR}/bin)
 install ( TARGETS sasha DESTINATION ${OSSDIR}/bin)
 
 
 target_link_libraries ( sasha 
 target_link_libraries ( sasha 

+ 1 - 1
dali/server/CMakeLists.txt

@@ -53,7 +53,7 @@ if (WIN32)
     endif ()
     endif ()
 endif()
 endif()
 
 
-add_executable ( daserver ${SRCS} )
+HPCC_ADD_EXECUTABLE ( daserver ${SRCS} )
 install ( TARGETS daserver DESTINATION ${OSSDIR}/bin)
 install ( TARGETS daserver DESTINATION ${OSSDIR}/bin)
 target_link_libraries ( daserver 
 target_link_libraries ( daserver 
          jlib
          jlib

+ 1 - 1
dali/treeview/CMakeLists.txt

@@ -45,7 +45,7 @@ if (WIN32)
         )
         )
 
 
     add_definitions("-D_AFXDLL")
     add_definitions("-D_AFXDLL")
-    add_executable ( treeview WIN32 ${SRCS} )
+    HPCC_ADD_EXECUTABLE ( treeview WIN32 ${SRCS} )
     install ( TARGETS treeview DESTINATION ${OSSDIR}/bin )
     install ( TARGETS treeview DESTINATION ${OSSDIR}/bin )
     target_link_libraries ( treeview
     target_link_libraries ( treeview
              jlib
              jlib

+ 1 - 1
dali/updtdalienv/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( updtdalienv ${SRCS} )
+HPCC_ADD_EXECUTABLE ( updtdalienv ${SRCS} )
 install ( TARGETS updtdalienv DESTINATION ${OSSDIR}/bin )
 install ( TARGETS updtdalienv DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( updtdalienv  
 target_link_libraries ( updtdalienv  
          jlib
          jlib

+ 1 - 1
deployment/configgen/CMakeLists.txt

@@ -40,7 +40,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 ADD_DEFINITIONS ( -D_CONSOLE )
 
 
-add_executable ( configgen ${SRCS} )
+HPCC_ADD_EXECUTABLE ( configgen ${SRCS} )
 install ( TARGETS configgen DESTINATION ${OSSDIR}/sbin )
 install ( TARGETS configgen DESTINATION ${OSSDIR}/sbin )
 target_link_libraries ( configgen 
 target_link_libraries ( configgen 
         deploy 
         deploy 

+ 1 - 1
deployment/envgen/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 ADD_DEFINITIONS ( -D_CONSOLE )
 
 
-add_executable ( envgen ${SRCS} )
+HPCC_ADD_EXECUTABLE ( envgen ${SRCS} )
 install ( TARGETS envgen DESTINATION ${OSSDIR}/sbin )
 install ( TARGETS envgen DESTINATION ${OSSDIR}/sbin )
 target_link_libraries ( envgen 
 target_link_libraries ( envgen 
         deploy
         deploy

+ 2 - 0
docs/HPCCClientTools/CMakeLists.txt

@@ -17,3 +17,5 @@
 
 
 DOCBOOK_TO_PDF( ${FO_XSL} ClientTools.xml "HPCCClientTools" "CT_Mods")
 DOCBOOK_TO_PDF( ${FO_XSL} ClientTools.xml "HPCCClientTools" "CT_Mods")
 
 
+DOCBOOK_TO_PDF( ${FO_XSL} TheECLIDEandHPCCClientTools.xml "TheECLIDEandHPCCClientTools" "CT_Mods")
+

+ 142 - 0
docs/HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml

@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="CT_Overview">
+  <title><emphasis role="bold">Overview</emphasis></title>
+
+  <para>This manual contains documentation for the set of Client Tools for use
+  with the LexisNexis HPCC. These tools include:</para>
+
+  <informaltable colsep="0" frame="none" rowsep="0">
+    <tgroup cols="2">
+      <colspec align="left" colwidth="122.40pt" />
+
+      <colspec />
+
+      <tbody>
+       
+       
+        <row>
+          <entry><emphasis role="bold">ECLPlus</emphasis></entry>
+
+          <entry>Command line ECL execution tool to facilitate automation of
+          ECL Code execution.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis role="bold">ECL</emphasis></entry>
+
+          <entry>Command line ECL tool.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis role="bold">ECL Compiler</emphasis></entry>
+
+          <entry>Command line ECL Compiler</entry>
+        </row>
+
+        <row>
+          <entry><emphasis role="bold">DFUPlus</emphasis></entry>
+
+          <entry>Command line Distributed File Utility management tool,
+          facilitate automation of data file spray, despray, and other common
+          file handling tasks.</entry>
+        </row>
+      </tbody>
+    </tgroup>
+  </informaltable>
+
+  <para><emphasis role="bold"> </emphasis></para>
+
+  <sect1 id="Documentation_Conventions">
+    <title>Documentation Conventions</title>
+
+    <sect2 id="ECL_Language">
+      <title><emphasis>ECL Language</emphasis></title>
+
+      <para>Although ECL is not case-sensitive, ECL reserved keywords and
+      built-in functions in this document are always shown in ALL CAPS to make
+      them stand out for easy identification.</para>
+
+      <sect3>
+        <title>Example Code</title>
+
+        <para>All example code in this document appears in the following
+        font:</para>
+
+        <programlisting>MyECLFileName := COUNT(Person);
+// MyECLFileName is a user-defined ECL file
+// COUNT is a built-in ECL function
+// Person is the name of a dataset</programlisting>
+
+        <para>ECL file names and record set names are always shown in example
+        code as mixed-case. Run-on words may be used to explicitly identify
+        purpose in examples.</para>
+      </sect3>
+
+      <sect3>
+        <title>Actions</title>
+
+        <para>In step-by-step sections, there will be explicit actions to
+        perform. These are all shown with a bullet to differentiate action
+        steps from explanatory text, as shown here:</para>
+
+        <para><itemizedlist>
+            <listitem>
+              <para>Keyboard and mouse actions are shown in small caps, such
+              as: DOUBLE-CLICK, or press the ENTER key. word.</para>
+            </listitem>
+
+            <listitem>
+              <para>On-screen items to select are shown in boldface, such as:
+              press the <emphasis role="bold">OK </emphasis>button.</para>
+            </listitem>
+          </itemizedlist></para>
+      </sect3>
+    </sect2>
+
+    <sect2 id="Installation">
+      <title><emphasis>Installation</emphasis></title>
+
+      <para>The installation program installs all client tools, including the
+      ECLPlus, DFUPlus, and RoxieConfig. The installation program
+      provides the option to select which tools to install.</para>
+
+      <itemizedlist mark="bullet">
+        <listitem>
+          <para>From the CD, your Build Server, or your download:</para>
+        </listitem>
+
+        <listitem>
+          <para>Run <emphasis role="bold">setup.msi </emphasis>, then follow
+          the prompts</para>
+        </listitem>
+      </itemizedlist>
+
+      <para><emphasis>System Requirements</emphasis></para>
+
+      <para>The recommended system configuration is:</para>
+
+      <para>A Pentium III processor (or higher) and at least 128 megabytes
+      (MB) of RAM.</para>
+
+      <para>Microsoft Windows 2000, Windows XP, Windows Server 2003, Windows
+      Vista, Windows 7, or higher.</para>
+
+      <para>A full installation requires less than 16 MB of disk space.<!-- --></para>
+
+      <para>The optional Tutorial Data File is 100 MB.</para>
+
+      <para>In addition, you will need Internet Explorer 7 and have Active
+      Scripting support enabled (Javascript). If browser security is set to
+      High, you should add the ECLWatch IP (or DNS name) as a Trusted
+      Site.</para>
+
+      <para>Adobe Reader 5 (or higher) is required to view the documentation
+      PDF files.</para>
+
+      <para>GVC Viewer is used to display graphs in ECL Watch, and RoxieConfig GUI. 
+      It is installed automatically.</para>
+    </sect2>
+  </sect1>
+</chapter>

+ 1 - 4
docs/HPCCClientTools/ClientTools.xml

@@ -50,10 +50,7 @@
     </mediaobject>
     </mediaobject>
   </bookinfo>
   </bookinfo>
 
 
-  <xi:include href="HPCCClientTools/CT_Mods/CT_Overview.xml" xpointer="CT_Overview"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
-
-  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_IDE.xml" xpointer="The_ECL_Ide"
+  <xi:include href="HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml" xpointer="CT_Overview"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_ECL.xml" xpointer="Command_Line_ECL"
   <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_ECL.xml" xpointer="Command_Line_ECL"

+ 74 - 0
docs/HPCCClientTools/TheECLIDEandHPCCClientTools.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<book lang="en_US" xml:base="../">
+  <bookinfo>
+    <title>The ECL IDE and HPCC Client Tools</title>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/redswooshWithLogo3.jpg" />
+      </imageobject>
+    </mediaobject>
+
+    <author>
+      <surname>Boca Raton Documentation Team</surname>
+    </author>
+
+    <legalnotice>
+      <para>We welcome your comments and feedback about this document via
+      email to <email>docfeedback@hpccsystems.com</email> Please include
+      <emphasis role="bold">Documentation Feedback</emphasis> in the subject
+      line and reference the document name, page numbers, and current Version
+      Number in the text of the message.</para>
+
+      <para>LexisNexis and the Knowledge Burst logo are registered trademarks
+      of Reed Elsevier Properties Inc., used under license. Other products,
+      logos, and services may be trademarks or registered trademarks of their
+      respective companies. All names and example data used in this manual are
+      fictitious. Any similarity to actual persons, living or dead, is purely
+      coincidental.</para>
+
+      <para></para>
+    </legalnotice>
+
+    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="common/Version.xml" xpointer="DateVer"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <corpname>HPCC Systems</corpname>
+
+    <xi:include href="common/Version.xml" xpointer="Copyright"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <mediaobject role="logo">
+      <imageobject>
+        <imagedata fileref="images/LN_Rightjustified.jpg" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_Overview.xml"
+              xpointer="CT_Overview"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_IDE.xml"
+              xpointer="The_ECL_Ide"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_ECL.xml"
+              xpointer="Command_Line_ECL"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml" xpointer="ECL_CLI"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml" xpointer="ECL_Compiler"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml"
+              xpointer="Command_Line_DFU"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+</book>

+ 13 - 13
docs/HPCCDataHandling/DataHandling.xml

@@ -1313,15 +1313,15 @@
   </chapter>
   </chapter>
 
 
   <chapter>
   <chapter>
-    <title>HPCC Data Backups</title>
+    <title><emphasis>HPCC Data Backups</emphasis></title>
 
 
     <sect1 id="Introduction2" role="nobrk">
     <sect1 id="Introduction2" role="nobrk">
       <title>Introduction</title>
       <title>Introduction</title>
 
 
       <para>This section covers critical system data that requires regular
       <para>This section covers critical system data that requires regular
-      backup procedures to prevent data loss. </para>
+      backup procedures to prevent data loss.</para>
 
 
-      <para>There are </para>
+      <para>There are</para>
 
 
       <itemizedlist>
       <itemizedlist>
         <listitem>
         <listitem>
@@ -1355,21 +1355,21 @@
 
 
       <para>The Dali Server data is typically mirrored to its backup node.
       <para>The Dali Server data is typically mirrored to its backup node.
       This location is specified in the environment configuration file using
       This location is specified in the environment configuration file using
-      the Configuration Manager. </para>
+      the Configuration Manager.</para>
 
 
       <para>Since the data is written simultaneously to both nodes, there is
       <para>Since the data is written simultaneously to both nodes, there is
-      no need for a manual backup procedure. </para>
+      no need for a manual backup procedure.</para>
     </sect1>
     </sect1>
 
 
     <sect1>
     <sect1>
       <title>Environment Configuration files</title>
       <title>Environment Configuration files</title>
 
 
       <para>There is only one active environment file, but you may have many
       <para>There is only one active environment file, but you may have many
-      alternative configurations. </para>
+      alternative configurations.</para>
 
 
       <para>Configuration manager only works on files in the
       <para>Configuration manager only works on files in the
       /etc/HPCCSystems/source/ folder. To make a configuration active, it is
       /etc/HPCCSystems/source/ folder. To make a configuration active, it is
-      copied to /etc/HPCCSystems/environment.xml on all nodes. </para>
+      copied to /etc/HPCCSystems/environment.xml on all nodes.</para>
 
 
       <para>Configuration Manager automatically creates backup copies in the
       <para>Configuration Manager automatically creates backup copies in the
       /etc/HPCCSystems/source/backup/ folder.</para>
       /etc/HPCCSystems/source/backup/ folder.</para>
@@ -1380,7 +1380,7 @@
 
 
       <para>Thor clusters are normally configured to automatically replicate
       <para>Thor clusters are normally configured to automatically replicate
       data to a secondary location known as the mirror location. Usually, this
       data to a secondary location known as the mirror location. Usually, this
-      is on the second drive of the subsequent node. </para>
+      is on the second drive of the subsequent node.</para>
 
 
       <para>If the data is not found at the primary location (for example, due
       <para>If the data is not found at the primary location (for example, due
       to drive failure or because a node has been swapped out), it looks in
       to drive failure or because a node has been swapped out), it looks in
@@ -1427,11 +1427,11 @@
         </orderedlist>
         </orderedlist>
       </sect2>
       </sect2>
 
 
-      <sect2>
+      <sect2 role="brk">
         <title>Scheduled backup</title>
         <title>Scheduled backup</title>
 
 
         <para>The easiest way to schedule the backup process is to create a
         <para>The easiest way to schedule the backup process is to create a
-        cron job. Cron is a daemon that serves as a task scheduler. </para>
+        cron job. Cron is a daemon that serves as a task scheduler.</para>
 
 
         <para>Cron tab (short for CRON TABle) is a text file that contains a
         <para>Cron tab (short for CRON TABle) is a text file that contains a
         the task list. To edit with the default editor, use the
         the task list. To edit with the default editor, use the
@@ -1442,9 +1442,9 @@
         <para>Here is a sample cron tab entry:</para>
         <para>Here is a sample cron tab entry:</para>
 
 
         <para><programlisting>30 23 * * * /opt/HPCCSystems/bin/start_backupnode mythor 
         <para><programlisting>30 23 * * * /opt/HPCCSystems/bin/start_backupnode mythor 
-</programlisting>30 represents the minute of the hour. </para>
+</programlisting>30 represents the minute of the hour.</para>
 
 
-        <para>23 represents the hour of the day </para>
+        <para>23 represents the hour of the day</para>
 
 
         <para>The asterisks (*) represent every day, month, and
         <para>The asterisks (*) represent every day, month, and
         weekday.</para>
         weekday.</para>
@@ -1497,7 +1497,7 @@
       <para>Attribute repositories are stored on ECL developer's local hard
       <para>Attribute repositories are stored on ECL developer's local hard
       drives. They can contain a significant number of hours of work and
       drives. They can contain a significant number of hours of work and
       therefore should be regularly backed up. In addition, we suggest using
       therefore should be regularly backed up. In addition, we suggest using
-      some form of source version control, too. </para>
+      some form of source version control, too.</para>
     </sect1>
     </sect1>
 
 
     <sect1>
     <sect1>

+ 10 - 13
docs/RDDERef/RDDERef.xml

@@ -32,7 +32,7 @@
       <para></para>
       <para></para>
     </legalnotice>
     </legalnotice>
 
 
-   <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="FooterInfo"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
 
     <xi:include href="common/Version.xml" xpointer="DateVer"
     <xi:include href="common/Version.xml" xpointer="DateVer"
@@ -40,7 +40,7 @@
 
 
     <corpname>HPCC Systems</corpname>
     <corpname>HPCC Systems</corpname>
 
 
-   <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="Copyright"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
 
     <mediaobject role="logo">
     <mediaobject role="logo">
@@ -287,14 +287,12 @@
         </listitem>
         </listitem>
       </itemizedlist>
       </itemizedlist>
 
 
-      <para>This configuration provides multiple redundant copies of data
-      files. In this example, there are six copies of each file at any given
-      time; eliminating the need to use traditional backup procedures for
-      Roxie data files.</para>
+      <para><?dbfo-need height="8.75in"?>This configuration provides multiple
+      redundant copies of data files. In this example, there are six copies of
+      each file at any given time; eliminating the need to use traditional
+      backup procedures for Roxie data files.</para>
 
 
-      <para></para>
-
-      <para><graphic fileref="images/RM-03.PNG" /></para>
+      <para><graphic fileref="images/RM-03.jpg" /></para>
 
 
       <para></para>
       <para></para>
     </sect1>
     </sect1>
@@ -510,7 +508,6 @@
   <chapter id="Packages">
   <chapter id="Packages">
     <title>Packages</title>
     <title>Packages</title>
 
 
-   
     <para>Packages are used as a means to separate data from queries. Newer
     <para>Packages are used as a means to separate data from queries. Newer
     Package files can be copied to and loaded on a Roxie cluster without
     Package files can be copied to and loaded on a Roxie cluster without
     recompiling queries. This allows you to refresh data and ensure you are
     recompiling queries. This allows you to refresh data and ensure you are
@@ -1116,8 +1113,8 @@
           <listitem>
           <listitem>
             <?dbfo keep-together="always"?>
             <?dbfo keep-together="always"?>
 
 
-            <para>Press the <emphasis role="bold">Submit</emphasis> button.
-            </para>
+            <para>Press the <emphasis role="bold">Submit</emphasis>
+            button.</para>
 
 
             <para>The resulting page displays all the requested information,
             <para>The resulting page displays all the requested information,
             as shown below:</para>
             as shown below:</para>
@@ -1490,7 +1487,7 @@
 
 
         <para></para>
         <para></para>
 
 
-        <?hard-pagebreak?>
+        <?hard-pagebreak ?>
 
 
         <itemizedlist mark="bullet">
         <itemizedlist mark="bullet">
           <listitem>
           <listitem>

+ 3 - 3
docs/UsingConfigManager/UsingConfigManager.xml

@@ -1258,7 +1258,7 @@ sudo configmgr</programlisting>
           </sect4>
           </sect4>
         </sect3>
         </sect3>
 
 
-        <sect3 id="ECL-Agent">
+        <sect3 id="ECL-Agent" role="brk">
           <title><emphasis>ECL Agent</emphasis></title>
           <title><emphasis>ECL Agent</emphasis></title>
 
 
           <sect4>
           <sect4>
@@ -1399,7 +1399,7 @@ sudo configmgr</programlisting>
           </sect4>
           </sect4>
         </sect3>
         </sect3>
 
 
-        <sect3>
+        <sect3 role="brk">
           <title>ECL CC Server Process</title>
           <title>ECL CC Server Process</title>
 
 
           <sect4>
           <sect4>
@@ -1727,7 +1727,7 @@ sudo configmgr</programlisting>
               </informaltable></para>
               </informaltable></para>
           </sect4>
           </sect4>
 
 
-          <sect4>
+          <sect4 role="brk">
             <title>Esp - myesp Service BindingsTab</title>
             <title>Esp - myesp Service BindingsTab</title>
 
 
             <para>This section describes the Esp - myesp Service Bindings
             <para>This section describes the Esp - myesp Service Bindings

+ 499 - 0
docs/Visualizing/Visualizing.xml

@@ -0,0 +1,499 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book lang="en_US" xml:base="../">
+  <title>Visualizing ECL Results</title>
+
+  <bookinfo>
+    <title>Visualizing ECL Results: Technical Preview</title>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/redswooshWithLogo3.jpg" />
+      </imageobject>
+    </mediaobject>
+
+    <author>
+      <surname>Boca Raton Documentation Team</surname>
+    </author>
+
+    <legalnotice>
+      <para>We welcome your comments and feedback about this document via
+      email to <email>docfeedback@hpccsystems.com</email></para>
+
+      <para>Please include <emphasis role="bold">Documentation
+      Feedback</emphasis> in the subject line and reference the document name,
+      page numbers, and current Version Number in the text of the
+      message.</para>
+
+      <para>LexisNexis and the Knowledge Burst logo are registered trademarks
+      of Reed Elsevier Properties Inc., used under license. Other products,
+      logos, and services may be trademarks or registered trademarks of their
+      respective companies. All names and example data used in this manual are
+      fictitious. Any similarity to actual persons, living or dead, is purely
+      coincidental.</para>
+
+      <para />
+    </legalnotice>
+
+    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="common/Version.xml" xpointer="DateVer"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <corpname>HPCC Systems</corpname>
+
+    <xi:include href="common/Version.xml" xpointer="Copyright"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <mediaobject role="logo">
+      <imageobject>
+        <imagedata fileref="images/LN_Rightjustified.jpg" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <chapter>
+    <title>Introduction</title>
+
+    <para>The ECL compiler now supports adding external resources to a
+    Workunit using a manifest file. The manifest, in XML format, adds external
+    resources such as XSLT transformations, or other objects to the archive
+    before it is compiled and deployed to the server. In future versions, you
+    should be able to add different types of resources, for example, a
+    Cascading Style Sheet (css file).</para>
+
+    <para>In the examples we provide, we will demonstrate how to use this
+    feature to visualize ECL job results using Google Chart Tools. This
+    library provides an easy way to visualize data from ECL results.</para>
+
+    <para>See <ulink
+    url="http://code.google.com/apis/chart/interactive/docs/index.html">http://code.google.com/apis/chart/interactive/docs/index.html</ulink>
+    for more information.</para>
+
+    <para />
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <?dbfo keep-together="always"?>
+
+      <tgroup cols="2">
+        <colspec colwidth="49.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry>
+              <inlinegraphic fileref="images/caution.png" />
+            </entry>
+
+            <entry>In this version of the HPCC Platform, these features are
+            being released as a technical preview. Some planned functionality
+            has not yet been implemented, but the portions that are available
+            have been tested and are ready for use.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <sect1>
+      <title>Overview of the process</title>
+
+      <para>This section is a summary of the details in this guide. After you
+      have completed the detailed steps that follow, you can use this summary
+      to refresh your memory later.</para>
+
+      <para />
+
+      <para>
+        <informaltable colsep="1" frame="all" rowsep="1">
+          <?dbfo keep-together="always"?>
+
+          <tgroup cols="2">
+            <colspec colwidth="49.50pt" />
+
+            <colspec />
+
+            <tbody>
+              <row>
+                <entry>
+                  <inlinegraphic fileref="images/tip.jpg" />
+                </entry>
+
+                <entry>We suggest <emphasis role="bold">reading</emphasis>
+                this document in its entirety before beginning.</entry>
+              </row>
+            </tbody>
+          </tgroup>
+        </informaltable>
+      </para>
+
+      <para>To use Google Charts, you should:</para>
+
+      <orderedlist numeration="arabic">
+        <listitem>
+          <para>Write ECL Code that produces an output containing data that
+          fits the visualization you select. (In this exercise, we will use
+          the ones provided in the examples.)</para>
+        </listitem>
+
+        <listitem>
+          <para>In the code, make sure your ECL OUTPUT action has the NAMED
+          option with the desired visualization nominated, as shown
+          below.</para>
+
+          <para>
+            <programlisting>OUTPUT(dPie, NAMED('PieChart_Pie_Chart_Test'));</programlisting>
+          </para>
+        </listitem>
+
+        <listitem>
+          <para>Create an XSLT template to handle the output. (In this
+          exercise, we will use the ones provided in the examples.)</para>
+        </listitem>
+
+        <listitem>
+          <para>Create a Manifest file including the XSLT template(s). (In
+          this exercise, we will use the ones provided in the examples. The
+          example XSLT files contain code that will select a visualization
+          based on the output name used in the ECL code)</para>
+        </listitem>
+
+        <listitem>
+          <para>Using either the ECL IDE or the ECLCC command line, create an
+          archive with<emphasis role="bold">-manifest=argument</emphasis>
+          naming the manifest file.</para>
+
+          <para>For example (in the IDE’s compiler arguments):</para>
+
+          <para>
+            <programlisting>-manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
+              My Files\visualizations\google_charts\files\manifest.xml"</programlisting>
+          </para>
+
+          <para>For example (on command line):</para>
+
+          <para>
+            <programlisting>eclcc pie.ecl -E -manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
+                               My Files\visualizations\google_charts\files\manifest.xml" &gt;myarchive.xml</programlisting>
+          </para>
+        </listitem>
+
+        <listitem>
+          <para>Deploy the Archive to an ESP server. This is automatic when
+          you submit using the IDE, If you used the ECLCC command line to
+          create the archive, then you must use the ECL command line tool to
+          deploy the Archive.</para>
+
+          <para>For example:</para>
+
+          <programlisting>ecl deploy myarchive.xml --server=192.168.219.8 --cluster=thor</programlisting>
+
+          <programlisting>ecl publish &lt;WUID&gt; --server=192.168.219.8 --cluster=thor --activate--name=pie</programlisting>
+
+          <para />
+        </listitem>
+
+        <listitem>
+          <para>Run the Workunit and view the Results in ECL Watch</para>
+        </listitem>
+      </orderedlist>
+    </sect1>
+
+    <sect1>
+      <title>Get the Samples</title>
+
+      <para>The collection of visualization sample files contains a set of ECL
+      files, a set of XSLT transformation templates, and a sample manifest
+      file to use to include these XSLT files into a workunit.</para>
+
+      <itemizedlist mark="bullet">
+        <listitem>
+          <para>Get the sample code from GitHub:</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>
+        <ulink
+        url="https://github.com/hpcc-systems/ecl-samples/tree/master/visualizations/google_charts">https://github.com/hpcc-systems/ecl-samples/tree/master/visualizations/google_charts</ulink>
+      </para>
+
+      <itemizedlist mark="bullet">
+        <listitem>
+          <para>Click on the Zip button to download.</para>
+        </listitem>
+      </itemizedlist>
+
+      <figure>
+        <title>ZIP button</title>
+
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="images/viz01.jpg" />
+          </imageobject>
+        </mediaobject>
+      </figure>
+
+      <itemizedlist mark="bullet">
+        <listitem>
+          <para>Copy to the folder you use for ECL code.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para />
+    </sect1>
+  </chapter>
+
+  <chapter>
+    <title>Detailed Steps Using the IDE</title>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Open the ECL IDE and Open Preferences</para>
+      </listitem>
+
+      <listitem>
+        <para>Create a new configuration pointing to the server you wish to
+        use.</para>
+      </listitem>
+
+      <listitem>
+        <para>Add the following compiler argument:</para>
+      </listitem>
+    </itemizedlist>
+
+    <programlisting>-manifest=&lt;fullpathtomanifestfile&gt;</programlisting>
+
+    <para>For example:</para>
+
+    <programlisting>-manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
+              My Files\visualizations\google_charts\files\manifest.xml"</programlisting>
+
+    <para>If the path contains spaces, you must enclose in double
+    quotes.</para>
+
+    <figure>
+      <title>manifest path</title>
+
+      <mediaobject>
+        <imageobject>
+          <imagedata fileref="images/viz02a.jpg" />
+        </imageobject>
+      </mediaobject>
+    </figure>
+
+    <para>NOTE: This configuration includes the manifest in every submission,
+    so only use it for ECL that needs the manifest resources (Google
+    Charts).</para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Make sure you can see the new samples. (You may need to
+        refresh)</para>
+      </listitem>
+    </itemizedlist>
+
+    <figure>
+      <title>ECL samples</title>
+
+      <mediaobject>
+        <imageobject>
+          <imagedata fileref="images/viz03.jpg" />
+        </imageobject>
+      </mediaobject>
+    </figure>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Open one of the example files, for this example use pie.</para>
+      </listitem>
+
+      <listitem>
+        <para>Syntax Check the code (This is always a good idea)</para>
+      </listitem>
+
+      <listitem>
+        <para>Select <emphasis role="bold">thor</emphasis> as your target
+        cluster</para>
+      </listitem>
+
+      <listitem>
+        <para>Press the <emphasis role="bold">Submit</emphasis> button.</para>
+      </listitem>
+
+      <listitem>
+        <para>After the job completes, select the Workunit’s ECL Watch
+        view:</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>
+      <figure>
+        <title>ECL Watch view</title>
+
+        <mediaobject>
+          <imageobject>
+            <imagedata fileref="images/viz04.jpg" />
+          </imageobject>
+        </mediaobject>
+      </figure>
+    </para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Scroll down, and expand the Result section.</para>
+      </listitem>
+
+      <listitem>
+        <para>Click on the <emphasis role="bold">Google Chart by
+        Name</emphasis> link</para>
+
+        <para>The visualization displays</para>
+      </listitem>
+    </itemizedlist>
+
+    <para />
+
+    <figure>
+      <title>visualization chart</title>
+
+      <mediaobject>
+        <imageobject>
+          <imagedata fileref="images/viz05.jpg" />
+        </imageobject>
+      </mediaobject>
+    </figure>
+  </chapter>
+
+  <chapter>
+    <title>Detailed Steps using the command line tools</title>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Open a command window in the location of your ECL files.</para>
+      </listitem>
+
+      <listitem>
+        <para>Type the following command:</para>
+      </listitem>
+    </itemizedlist>
+
+    <programlisting>eclcc pie.ecl -E -manifest=&lt;mainfestfilepath&gt; &gt;myarchive.xml</programlisting>
+
+    <para>
+      <emphasis>where &lt;manifestfilepath&gt; is the location of your
+      manifest file</emphasis>
+    </para>
+
+    <para>For example:</para>
+
+    <programlisting>eclcc pie.ecl -E -manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
+                    My Files\visualizations\google_charts\files\manifest.xml" &gt;myarchive.xml</programlisting>
+
+    <para />
+
+    <para>This invokes the ECLCC compiler to create an archive named
+    myarchive.xml.</para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Type the following command:</para>
+      </listitem>
+    </itemizedlist>
+
+    <programlisting>ecl deploy myarchive.xml --server=10.239.219.8 --cluster=thor</programlisting>
+
+    <para>
+      <emphasis>where --server= is the IP address of your ESP server
+      and</emphasis>
+
+      <emphasis>--cluster= is the target cluster name.</emphasis>
+    </para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>Take note of the WUID returned by the pervious command.</para>
+      </listitem>
+
+      <listitem>
+        <para>Type the following command:</para>
+      </listitem>
+    </itemizedlist>
+
+    <programlisting>ecl publish &lt;WUID&gt; --server=10.239.219.8 --cluster=thor --activate --name=pie</programlisting>
+
+    <para>
+      <emphasis>where &lt;WUID&gt; is the workuint id number, --server= is the
+      IP address of your ESP server, and --cluster= is the target cluster
+      name.</emphasis>
+    </para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>In a browser, open the URL for the WsECL service (typically
+        found on port 8002 of your ESP Server).</para>
+      </listitem>
+
+      <listitem>
+        <para>Expand the <emphasis role="bold">thor</emphasis> branch on the
+        left, then click on the <emphasis role="bold">pie</emphasis> service
+        link.</para>
+      </listitem>
+
+      <listitem>
+        <para>Press the Submit button.</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>The visualization displays.</para>
+
+    <figure>
+      <title>visualization</title>
+
+      <mediaobject>
+        <imageobject>
+          <imagedata fileref="images/viz06.jpg" />
+        </imageobject>
+      </mediaobject>
+    </figure>
+  </chapter>
+
+  <chapter>
+    <title>Next Steps</title>
+
+    <para>Try the remaining examples:</para>
+
+    <itemizedlist mark="bullet">
+      <listitem>
+        <para>geomap</para>
+      </listitem>
+
+      <listitem>
+        <para>motion</para>
+      </listitem>
+
+      <listitem>
+        <para>pie</para>
+      </listitem>
+
+      <listitem>
+        <para>scatter</para>
+      </listitem>
+
+      <listitem>
+        <para>sparkline</para>
+      </listitem>
+
+      <listitem>
+        <para>timeline</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>Try creating your own XSLT files and Manifest to use other Google
+    Charts.</para>
+
+    <para>Try creating your own XSLT files and Manifest to use other
+    third-party visualizations.</para>
+  </chapter>
+</book>

BIN
docs/images/RM-03.jpg


BIN
docs/images/viz01.jpg


BIN
docs/images/viz02a.jpg


BIN
docs/images/viz03.jpg


BIN
docs/images/viz04.jpg


BIN
docs/images/viz05.jpg


BIN
docs/images/viz06.jpg


+ 1 - 1
ecl/agentexec/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( agentexec ${SRCS} )
+HPCC_ADD_EXECUTABLE ( agentexec ${SRCS} )
 install ( TARGETS agentexec DESTINATION ${OSSDIR}/bin )
 install ( TARGETS agentexec DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( agentexec
 target_link_libraries ( agentexec
          jlib 
          jlib 

+ 1 - 1
ecl/agentexec/agentexec.cmake

@@ -44,7 +44,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 ADD_DEFINITIONS ( -D_CONSOLE )
 
 
-add_executable ( agentexec ${SRCS} )
+HPCC_ADD_EXECUTABLE ( agentexec ${SRCS} )
 install ( TARGETS agentexec DESTINATION ${OSSDIR}/bin )
 install ( TARGETS agentexec DESTINATION ${OSSDIR}/bin )
 
 
 target_link_libraries ( agentexec
 target_link_libraries ( agentexec

+ 3 - 3
ecl/ecl-package/CMakeLists.txt

@@ -42,14 +42,14 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( ecl-package ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ecl-package ${SRCS} )
 add_dependencies ( ecl-package espscm ws_packageprocess )
 add_dependencies ( ecl-package espscm ws_packageprocess )
-install ( TARGETS ecl-package DESTINATION ${DIR_NAME}/bin )
+install ( TARGETS ecl-package DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( ecl-package
 target_link_libraries ( ecl-package
         jlib
         jlib
         esphttp
         esphttp
         workunit
         workunit
     )
     )
 
 
-install ( PROGRAMS ecl-package.install DESTINATION ${DIR_NAME}/etc/init.d/install COMPONENT Runtime )
+install ( PROGRAMS ecl-package.install DESTINATION ${OSSDIR}/etc/init.d/install COMPONENT Runtime )
 
 

+ 1 - 1
ecl/eclagent/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -DNO_SYBASE -D_CONSOLE )
 ADD_DEFINITIONS( -DNO_SYBASE -D_CONSOLE )
 
 
-add_executable ( eclagent ${SRCS} )
+HPCC_ADD_EXECUTABLE ( eclagent ${SRCS} )
 install ( TARGETS eclagent DESTINATION ${OSSDIR}/bin )
 install ( TARGETS eclagent DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( eclagent
 target_link_libraries ( eclagent
       hthor           
       hthor           

+ 1 - 1
ecl/eclcc/CMakeLists.txt

@@ -51,7 +51,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:10000000 ${CMAKE_EXE_LINKER_FLAGS}")
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:10000000 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 endif()
 
 
-add_executable ( eclcc ${SRCS} )
+HPCC_ADD_EXECUTABLE ( eclcc ${SRCS} )
 install ( TARGETS eclcc DESTINATION ${OSSDIR}/bin )
 install ( TARGETS eclcc DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( eclcc 
 target_link_libraries ( eclcc 
          jlib
          jlib

+ 27 - 7
ecl/eclcc/eclcc.cpp

@@ -42,6 +42,10 @@
 #include "build-config.h"
 #include "build-config.h"
 #include "rmtfile.hpp"
 #include "rmtfile.hpp"
 
 
+#if defined (__APPLE__)
+#include <mach-o/dyld.h>
+#endif
+
 #define INIFILE "eclcc.ini"
 #define INIFILE "eclcc.ini"
 #define SYSTEMCONFDIR CONFIG_DIR
 #define SYSTEMCONFDIR CONFIG_DIR
 #define DEFAULTINIFILE "eclcc.ini"
 #define DEFAULTINIFILE "eclcc.ini"
@@ -405,14 +409,31 @@ void EclCC::loadOptions()
     extractOption(templatePath, globals, "ECLCC_TPL_PATH", "templatePath", syspath, ".");
     extractOption(templatePath, globals, "ECLCC_TPL_PATH", "templatePath", syspath, ".");
     extractOption(eclLibraryPath, globals, "ECLCC_ECLLIBRARY_PATH", "eclLibrariesPath", syspath, ".\\ecllibrary");
     extractOption(eclLibraryPath, globals, "ECLCC_ECLLIBRARY_PATH", "eclLibrariesPath", syspath, ".\\ecllibrary");
 #else
 #else
-    StringBuffer fn(SYSTEMCONFDIR);
-    fn.append(PATHSEPSTR).append(SYSTEMCONFFILE);
-    Owned<IProperties> sysconf = createProperties(fn, true);
-    
     StringBuffer syspath;
     StringBuffer syspath;
-    sysconf->getProp("path", syspath);
-    syspath.append(PATHSEPCHAR);
+    #if defined (__APPLE__)
+        char path[PATH_MAX]; 
+        uint32_t size = sizeof(path); 
+        _NSGetExecutablePath(path, &size);
+
+        splitFilename(path, &syspath, &syspath, NULL, NULL);
+        //  Remove trailing folder (typically "/bin/")
+        removeTrailingPathSepChar(syspath);
+        for (int i = syspath.length() - 1; i >= 0; --i)
+        {
+            if (isPathSepChar(syspath.charAt(i)))
+            {
+                syspath.setLength(i + 1);
+                break;
+            }
+        }
+    #else
+        StringBuffer fn(SYSTEMCONFDIR);
+        fn.append(PATHSEPSTR).append(SYSTEMCONFFILE);
+        Owned<IProperties> sysconf = createProperties(fn, true);
 
 
+        sysconf->getProp("path", syspath);
+        syspath.append(PATHSEPCHAR);
+    #endif
     extractOption(compilerPath, globals, "CL_PATH", "compilerPath", "/usr", NULL);
     extractOption(compilerPath, globals, "CL_PATH", "compilerPath", "/usr", NULL);
     extractOption(libraryPath, globals, "ECLCC_LIBRARY_PATH", "libraryPath", syspath, "lib");
     extractOption(libraryPath, globals, "ECLCC_LIBRARY_PATH", "libraryPath", syspath, "lib");
     extractOption(includePath, globals, "ECLCC_INCLUDE_PATH", "includePath", syspath, "componentfiles/cl/include");
     extractOption(includePath, globals, "ECLCC_INCLUDE_PATH", "includePath", syspath, "componentfiles/cl/include");
@@ -420,7 +441,6 @@ void EclCC::loadOptions()
     extractOption(hooksPath, globals, "HPCC_FILEHOOKS_PATH", "filehooks", syspath, "filehooks");
     extractOption(hooksPath, globals, "HPCC_FILEHOOKS_PATH", "filehooks", syspath, "filehooks");
     extractOption(templatePath, globals, "ECLCC_TPL_PATH", "templatePath", syspath, "componentfiles");
     extractOption(templatePath, globals, "ECLCC_TPL_PATH", "templatePath", syspath, "componentfiles");
     extractOption(eclLibraryPath, globals, "ECLCC_ECLLIBRARY_PATH", "eclLibrariesPath", syspath, "share/ecllibrary/");
     extractOption(eclLibraryPath, globals, "ECLCC_ECLLIBRARY_PATH", "eclLibrariesPath", syspath, "share/ecllibrary/");
-
 #endif
 #endif
 
 
     extractOption(stdIncludeLibraryPath, globals, "ECLCC_ECLINCLUDE_PATH", "eclIncludePath", ".", NULL);
     extractOption(stdIncludeLibraryPath, globals, "ECLCC_ECLINCLUDE_PATH", "eclIncludePath", ".", NULL);

+ 1 - 1
ecl/eclccserver/CMakeLists.txt

@@ -45,7 +45,7 @@ include_directories (
          ./../../system/jlib 
          ./../../system/jlib 
     )
     )
 
 
-add_executable ( eclccserver ${SRCS} ${INCLUDES} )
+HPCC_ADD_EXECUTABLE ( eclccserver ${SRCS} ${INCLUDES} )
 install ( TARGETS eclccserver DESTINATION ${OSSDIR}/bin )
 install ( TARGETS eclccserver DESTINATION ${OSSDIR}/bin )
 
 
 target_link_libraries ( eclccserver 
 target_link_libraries ( eclccserver 

+ 1 - 1
ecl/eclcmd/CMakeLists.txt

@@ -66,7 +66,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( ecl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ecl ${SRCS} )
 add_dependencies ( ecl espscm workunit ws_workunits )
 add_dependencies ( ecl espscm workunit ws_workunits )
 install ( TARGETS ecl DESTINATION ${OSSDIR}/bin )
 install ( TARGETS ecl DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( ecl
 target_link_libraries ( ecl

+ 2 - 2
ecl/eclcmd/queries/CMakeLists.txt

@@ -42,9 +42,9 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( ecl-queries ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ecl-queries ${SRCS} )
 add_dependencies ( ecl-queries espscm ws_workunits )
 add_dependencies ( ecl-queries espscm ws_workunits )
-install ( TARGETS ecl-queries DESTINATION ${DIR_NAME}/bin )
+install ( TARGETS ecl-queries DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( ecl-queries
 target_link_libraries ( ecl-queries
         jlib
         jlib
         esphttp
         esphttp

+ 1 - 1
ecl/eclplus/CMakeLists.txt

@@ -61,7 +61,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -DECLPLUS_EXPORTS -D_CONSOLE )
 ADD_DEFINITIONS( -DECLPLUS_EXPORTS -D_CONSOLE )
 
 
-add_executable ( eclplus ${SRCS} )
+HPCC_ADD_EXECUTABLE ( eclplus ${SRCS} )
 add_dependencies ( eclplus espscm )
 add_dependencies ( eclplus espscm )
 install ( TARGETS eclplus DESTINATION ${OSSDIR}/bin )
 install ( TARGETS eclplus DESTINATION ${OSSDIR}/bin )
 target_link_libraries (  eclplus 
 target_link_libraries (  eclplus 

+ 1 - 1
ecl/eclscheduler/CMakeLists.txt

@@ -44,7 +44,7 @@ include_directories (
          ./../../ecl/schedulectrl
          ./../../ecl/schedulectrl
     )
     )
 
 
-add_executable ( eclscheduler ${SRCS} ${INCLUDES} )
+HPCC_ADD_EXECUTABLE ( eclscheduler ${SRCS} ${INCLUDES} )
 install ( TARGETS eclscheduler DESTINATION ${OSSDIR}/bin )
 install ( TARGETS eclscheduler DESTINATION ${OSSDIR}/bin )
 
 
 target_link_libraries ( eclscheduler 
 target_link_libraries ( eclscheduler 

+ 7 - 0
ecl/hqlcpp/hqlhtcpp.cpp

@@ -11411,7 +11411,14 @@ ABoundActivity * HqlCppTranslator::doBuildActivityJoinOrDenormalize(BuildCtx & c
         HqlExprArray args;
         HqlExprArray args;
         args.append(*lhsDsRef.mapCompound(&leftSorts.tos(), leftSelect));
         args.append(*lhsDsRef.mapCompound(&leftSorts.tos(), leftSelect));
         args.append(*rhsDsRef.mapCompound(&rightSorts.tos(), rightSelect));
         args.append(*rhsDsRef.mapCompound(&rightSorts.tos(), rightSelect));
+
         _ATOM func = prefixDiffStrAtom;
         _ATOM func = prefixDiffStrAtom;
+        ITypeInfo * lhsType = args.item(0).queryType();
+        if (isUnicodeType(lhsType))
+        {
+            func = prefixDiffUnicodeAtom;
+            args.append(*createConstant(lhsType->queryLocale()->str()));
+        }
         OwnedHqlExpr compare = bindFunctionCall(func, args);
         OwnedHqlExpr compare = bindFunctionCall(func, args);
         
         
         buildCompareMemberLR(instance->nestedctx, "PrefixCompare", compare, dataset1, dataset2, selSeq);
         buildCompareMemberLR(instance->nestedctx, "PrefixCompare", compare, dataset1, dataset2, selSeq);

+ 1 - 1
ecl/scheduleadmin/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -DNO_SYBASE -D_CONSOLE )
 ADD_DEFINITIONS( -DNO_SYBASE -D_CONSOLE )
 
 
-add_executable ( scheduleadmin ${SRCS} )
+HPCC_ADD_EXECUTABLE ( scheduleadmin ${SRCS} )
 install ( TARGETS scheduleadmin DESTINATION ${OSSDIR}/bin )
 install ( TARGETS scheduleadmin DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( scheduleadmin 
 target_link_libraries ( scheduleadmin 
          jlib
          jlib

+ 1 - 1
ecl/wutest/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( wutest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( wutest ${SRCS} )
 target_link_libraries ( wutest 
 target_link_libraries ( wutest 
          jlib
          jlib
          remote 
          remote 

+ 1 - 1
esp/clients/WUManager/CMakeLists.txt

@@ -46,7 +46,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( wumanager ${SRCS} )
+HPCC_ADD_EXECUTABLE ( wumanager ${SRCS} )
 add_dependencies ( wumanager espscm )
 add_dependencies ( wumanager espscm )
 #install ( TARGETS wumanager DESTINATION ${OSSDIR}/bin ) # do not install - this is an example program
 #install ( TARGETS wumanager DESTINATION ${OSSDIR}/bin ) # do not install - this is an example program
 
 

+ 2 - 2
esp/files/scripts/configmgr/navtree.js

@@ -660,8 +660,6 @@ function createNavigationTree(navTreeData) {
     for (var idx = 0; idx < selRows.length; idx++) {
     for (var idx = 0; idx < selRows.length; idx++) {
       Dom.addClass(this.getTrEl(selRows[idx]), 'outoffocus');
       Dom.addClass(this.getTrEl(selRows[idx]), 'outoffocus');
     }
     }
-    if (top.document.ContextMenuCenter != null)
-      top.document.ContextMenuCenter.clearContent();
   });
   });
 
 
 
 
@@ -1326,6 +1324,8 @@ function createNavigationTree(navTreeData) {
 
 
 
 
   var handleWindowMouseDown = function(e) {
   var handleWindowMouseDown = function(e) {
+    if (top.document.ContextMenuCenter != null)
+      top.document.ContextMenuCenter.clearContent();
     var tabView = top.document.RightTabView;
     var tabView = top.document.RightTabView;
     if (tabView) {
     if (tabView) {
       var actTab = tabView.get("activeTab");
       var actTab = tabView.get("activeTab");

+ 1 - 1
esp/platform/CMakeLists.txt

@@ -49,7 +49,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( esp ${SRCS} )
+HPCC_ADD_EXECUTABLE ( esp ${SRCS} )
 install ( TARGETS esp DESTINATION ${OSSDIR}/bin )
 install ( TARGETS esp DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( esp 
 target_link_libraries ( esp 
          jlib
          jlib

+ 1 - 1
esp/services/esp_compile_scm/CMakeLists.txt

@@ -151,7 +151,7 @@ set (    SRCS
     )
     )
 
 
 # OBJS = 
 # OBJS = 
-add_executable ( esp_compile_scm ${SRCS} )
+HPCC_ADD_EXECUTABLE ( esp_compile_scm ${SRCS} )
 install ( TARGETS esp_compile_scm DESTINATION ${OSSDIR}/bin )
 install ( TARGETS esp_compile_scm DESTINATION ${OSSDIR}/bin )
 
 
 
 

+ 1 - 1
esp/test/httptest/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( httptest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( httptest ${SRCS} )
 
 
 target_link_libraries ( httptest 
 target_link_libraries ( httptest 
          jlib
          jlib

+ 1 - 1
esp/tools/soapplus/CMakeLists.txt

@@ -45,7 +45,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( soapplus ${SRCS} )
+HPCC_ADD_EXECUTABLE ( soapplus ${SRCS} )
 install ( TARGETS soapplus DESTINATION ${OSSDIR}/bin COMPONENT Runtime)
 install ( TARGETS soapplus DESTINATION ${OSSDIR}/bin COMPONENT Runtime)
 
 
 target_link_libraries ( soapplus 
 target_link_libraries ( soapplus 

+ 1 - 1
initfiles/CMakeLists.txt

@@ -18,7 +18,7 @@
 cmake_minimum_required(VERSION 2.8)
 cmake_minimum_required(VERSION 2.8)
 PROJECT(initfiles)
 PROJECT(initfiles)
 
 
-ADD_EXECUTABLE(processor processor.cpp)
+HPCC_ADD_EXECUTABLE(processor processor.cpp)
 
 
 MACRO(GENERATE_BASH processor bash-vars in out)
 MACRO(GENERATE_BASH processor bash-vars in out)
     GET_TARGET_PROPERTY(processorLocation processor LOCATION)
     GET_TARGET_PROPERTY(processorLocation processor LOCATION)

+ 52 - 0
lib2/CMakeLists.txt

@@ -0,0 +1,52 @@
+################################################################################
+#    Copyright (C) 2011 HPCC Systems.
+#
+#    All rights reserved. This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program 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 Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+################################################################################
+
+cmake_minimum_required(VERSION 2.8)
+PROJECT(lib2)
+
+if (APPLE)
+    set(DYLIBS ${ICU_LIBRARIES})
+    set(DYLIBS ${DYLIBS} ${BOOST_REGEX_LIBRARIES})
+    set(DYLIBS ${DYLIBS} ${XALAN_LIBRARIES})
+    set(DYLIBS ${DYLIBS} ${XERCES_LIBRARIES})
+    
+    foreach(dylib ${DYLIBS})
+        get_filename_component(dylib_path ${dylib} REALPATH)
+        get_filename_component(dylib_name_ext ${dylib_path} NAME)
+
+        set(fixupCommand "${fixupCommand}\r\nexecute_process(COMMAND install_name_tool -change \"${dylib_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" \${file})")
+
+        #HACK HACK - Should be able resolve alias's to alias's correctly?
+        string(REPLACE ".28.0.dylib" ".28.dylib" dylib_28_path "${dylib_path}")
+        if (NOT "${dylib_28_path}" STREQUAL "${dylib_path}")
+            set(fixupCommand "${fixupCommand}\r\nexecute_process(COMMAND install_name_tool -change \"${dylib_28_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" \${file})")
+        endif ()
+
+        string(REPLACE ".48.1.dylib" ".48.dylib" dylib_48_path "${dylib_path}")
+        if (NOT "${dylib_48_path}" STREQUAL "${dylib_path}")
+            set(fixupCommand "${fixupCommand}\r\nexecute_process(COMMAND install_name_tool -change \"${dylib_48_path}\" \"@loader_path/../lib2/${dylib_name_ext}\" \${file})")
+        endif ()
+
+        install(PROGRAMS "${dylib_path}" DESTINATION "${OSSDIR}/lib2")
+        install(CODE "
+            file(GLOB files \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OSSDIR}/bin/*\" \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${OSSDIR}/lib/*.dylib\")
+            foreach(file \${files})
+              ${fixupCommand}
+            endforeach ()
+        ")
+    endforeach(dylib)
+endif()

+ 1 - 1
plugins/dataconnectors/hdfsconnector/CMakeLists.txt

@@ -32,7 +32,7 @@ add_subdirectory (ecl)
 					${JAVA_INCLUDE_PATH2}
 					${JAVA_INCLUDE_PATH2}
 					${LIBHDFS_INCLUDE_DIR}	)
 					${LIBHDFS_INCLUDE_DIR}	)
 
 
-	add_executable( hdfsconnector ${SRC} )
+	HPCC_ADD_EXECUTABLE( hdfsconnector ${SRC} )
 
 
 	set ( INSTALLDIR "${OSSDIR}/bin")
 	set ( INSTALLDIR "${OSSDIR}/bin")
 	Install ( TARGETS hdfsconnector DESTINATION ${INSTALLDIR} COMPONENT Runtime)
 	Install ( TARGETS hdfsconnector DESTINATION ${INSTALLDIR} COMPONENT Runtime)

+ 3 - 19
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/ECLEngine.java

@@ -84,16 +84,10 @@ public class ECLEngine
 
 
 			System.out.println("WSECL:executeSelect: " + urlString);
 			System.out.println("WSECL:executeSelect: " + urlString);
 
 
-			// Send data
 			long startTime = System.currentTimeMillis();
 			long startTime = System.currentTimeMillis();
 
 
 			URL url = new URL(urlString);
 			URL url = new URL(urlString);
-			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
-			conn.setInstanceFollowRedirects(false);
-			conn.setRequestProperty("Authorization", basicAuth);
-			conn.setRequestMethod("GET");
-			conn.setDoOutput(true);
-			conn.setDoInput(true);
+			HttpURLConnection conn = dbMetadata.createHPCCESPConnection(url);
 
 
 			return parse(conn.getInputStream(),startTime);
 			return parse(conn.getInputStream(),startTime);
 		}
 		}
@@ -714,12 +708,7 @@ public class ECLEngine
 			long startTime = System.currentTimeMillis();
 			long startTime = System.currentTimeMillis();
 
 
 			URL url = new URL(urlString);
 			URL url = new URL(urlString);
-			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
-			conn.setInstanceFollowRedirects(false);
-			conn.setRequestProperty("Authorization", basicAuth);
-			conn.setRequestMethod("GET");
-			conn.setDoOutput(true);
-			conn.setDoInput(true);
+			HttpURLConnection conn = dbMetadata.createHPCCESPConnection(url);
 
 
 			OutputStreamWriter wr = new OutputStreamWriter(	conn.getOutputStream());
 			OutputStreamWriter wr = new OutputStreamWriter(	conn.getOutputStream());
 			wr.write(sb.toString());
 			wr.write(sb.toString());
@@ -782,12 +771,7 @@ public class ECLEngine
 			long startTime = System.currentTimeMillis();
 			long startTime = System.currentTimeMillis();
 			// Send data
 			// Send data
 			URL url = new URL(urlString);
 			URL url = new URL(urlString);
-			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
-			conn.setInstanceFollowRedirects(false);
-			conn.setRequestProperty("Authorization", basicAuth);
-			conn.setRequestMethod("GET");
-			conn.setDoOutput(true);
-			conn.setDoInput(true);
+			HttpURLConnection conn = dbMetadata.createHPCCESPConnection(url);
 
 
 			OutputStreamWriter wr = new OutputStreamWriter(	conn.getOutputStream());
 			OutputStreamWriter wr = new OutputStreamWriter(	conn.getOutputStream());
 			wr.write(sb.toString());
 			wr.write(sb.toString());

+ 6 - 53
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/HPCCConnection.java

@@ -31,9 +31,10 @@ public class HPCCConnection implements Connection
 	public static final String SERVERADDRESSDEFAULT = "localhost";
 	public static final String SERVERADDRESSDEFAULT = "localhost";
 	public static final String WSECLWATCHPORTDEFAULT = "8010";
 	public static final String WSECLWATCHPORTDEFAULT = "8010";
 	public static final String WSECLPORTDEFAULT = "8002";
 	public static final String WSECLPORTDEFAULT = "8002";
-	public static final String WSECLDIRECTPORTDEFAULT = "8008";
+	public static final String WSECLDIRECTPORTDEFAULT = "8010";
 	public static final int FETCHPAGESIZEDEFAULT = 100;
 	public static final int FETCHPAGESIZEDEFAULT = 100;
 	public static final String LAZYLOADDEFAULT = "true";
 	public static final String LAZYLOADDEFAULT = "true";
+	public static final int CONNECTTIMEOUTMILDEFAULT = 1000;
 
 
     private boolean closed;
     private boolean closed;
     private HPCCDatabaseMetaData metadata;
     private HPCCDatabaseMetaData metadata;
@@ -87,6 +88,9 @@ public class HPCCConnection implements Connection
 		if (!this.props.containsKey("PageSize") || !HPCCJDBCUtils.isNumeric(this.props.getProperty("PageSize")))
 		if (!this.props.containsKey("PageSize") || !HPCCJDBCUtils.isNumeric(this.props.getProperty("PageSize")))
 			this.props.setProperty("PageSize", String.valueOf(FETCHPAGESIZEDEFAULT));
 			this.props.setProperty("PageSize", String.valueOf(FETCHPAGESIZEDEFAULT));
 
 
+		if (!this.props.containsKey("ConnectTimeoutMilli") || !HPCCJDBCUtils.isNumeric(this.props.getProperty("ConnectTimeoutMilli")))
+			this.props.setProperty("ConnectTimeoutMilli", String.valueOf(CONNECTTIMEOUTMILDEFAULT));
+
 		boolean setdefaultreslim = false;
 		boolean setdefaultreslim = false;
 		if (this.props.containsKey("EclResultLimit"))
 		if (this.props.containsKey("EclResultLimit"))
 		{
 		{
@@ -164,257 +168,206 @@ public class HPCCConnection implements Connection
         this.metadata = metadata;
         this.metadata = metadata;
     }
     }
 
 
-
     public Statement createStatement() throws SQLException {
     public Statement createStatement() throws SQLException {
         return new HPCCPreparedStatement(this, null);
         return new HPCCPreparedStatement(this, null);
     }
     }
 
 
-
     public PreparedStatement prepareStatement(String query) throws SQLException {
     public PreparedStatement prepareStatement(String query) throws SQLException {
         return new HPCCPreparedStatement(this, query);
         return new HPCCPreparedStatement(this, query);
     }
     }
 
 
-
     public CallableStatement prepareCall(String sql) throws SQLException {
     public CallableStatement prepareCall(String sql) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareCall(string sql) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: prepareCall(string sql) Not supported yet.");
     }
     }
 
 
-
     public String nativeSQL(String sql) throws SQLException {
     public String nativeSQL(String sql) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: nativeSQL(string sql) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: nativeSQL(string sql) Not supported yet.");
     }
     }
 
 
-
     public void setAutoCommit(boolean autoCommit) throws SQLException {
     public void setAutoCommit(boolean autoCommit) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setAutoCommit(boolean autoCommit) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: setAutoCommit(boolean autoCommit) Not supported yet.");
     }
     }
 
 
-
     public boolean getAutoCommit() throws SQLException {
     public boolean getAutoCommit() throws SQLException {
         return true;
         return true;
     }
     }
 
 
-
     public void commit() throws SQLException {
     public void commit() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: commit Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: commit Not supported yet.");
     }
     }
 
 
-
     public void rollback() throws SQLException {
     public void rollback() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: rollback Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: rollback Not supported yet.");
     }
     }
 
 
-
     public void close() throws SQLException {
     public void close() throws SQLException {
         closed = true;
         closed = true;
     }
     }
 
 
-
     public boolean isClosed() throws SQLException {
     public boolean isClosed() throws SQLException {
         return closed;
         return closed;
     }
     }
 
 
-
     public DatabaseMetaData getMetaData() throws SQLException {
     public DatabaseMetaData getMetaData() throws SQLException {
         return metadata;
         return metadata;
     }
     }
 
 
-
     public void setReadOnly(boolean readOnly) throws SQLException {
     public void setReadOnly(boolean readOnly) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setReadOnly Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: setReadOnly Not supported yet.");
     }
     }
 
 
-
     public boolean isReadOnly() throws SQLException {
     public boolean isReadOnly() throws SQLException {
         return true;
         return true;
     }
     }
 
 
-
     public void setCatalog(String catalog) throws SQLException {
     public void setCatalog(String catalog) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setCatalog Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: setCatalog Not supported yet.");
     }
     }
 
 
-
     public String getCatalog() throws SQLException
     public String getCatalog() throws SQLException
     {
     {
-    //    throw new UnsupportedOperationException("EclConnection: getCatalog Not supported yet.");
-    	return "myroxie";
+    	return props.getProperty("Cluster", CLUSTERDEFAULT);
     }
     }
 
 
-
     public void setTransactionIsolation(int level) throws SQLException {
     public void setTransactionIsolation(int level) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: settransactionisolation Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: settransactionisolation Not supported yet.");
     }
     }
 
 
-
     public int getTransactionIsolation() throws SQLException {
     public int getTransactionIsolation() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: getTransactionIsolation Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: getTransactionIsolation Not supported yet.");
     }
     }
 
 
-
     public SQLWarning getWarnings() throws SQLException {
     public SQLWarning getWarnings() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: getWarnings Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: getWarnings Not supported yet.");
     }
     }
 
 
-
     public void clearWarnings() throws SQLException {
     public void clearWarnings() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: clearWarnings Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: clearWarnings Not supported yet.");
     }
     }
 
 
-
     public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
     public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
     	System.out.println("##Statement EclConnection::createStatement(resulttype, resultsetcon)##");
     	System.out.println("##Statement EclConnection::createStatement(resulttype, resultsetcon)##");
         return new HPCCPreparedStatement(this, null);
         return new HPCCPreparedStatement(this, null);
     }
     }
 
 
-
     public PreparedStatement prepareStatement(String query, int resultSetType, int resultSetConcurrency) throws SQLException {
     public PreparedStatement prepareStatement(String query, int resultSetType, int resultSetConcurrency) throws SQLException {
     	System.out.println("##EclConnection::createStatement("+ query +", resultsetype, resultsetcon)##");
     	System.out.println("##EclConnection::createStatement("+ query +", resultsetype, resultsetcon)##");
         return new HPCCPreparedStatement(this, query);
         return new HPCCPreparedStatement(this, query);
     }
     }
 
 
-
     public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
     public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareCall(String sql, int resultSetType, int resultSetConcurrency) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: prepareCall(String sql, int resultSetType, int resultSetConcurrency) Not supported yet.");
     }
     }
 
 
-
     public Map<String, Class<?>> getTypeMap() throws SQLException {
     public Map<String, Class<?>> getTypeMap() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: getTypeMap Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: getTypeMap Not supported yet.");
     }
     }
 
 
-
     public void setTypeMap(Map<String, Class<?>> map) throws SQLException {
     public void setTypeMap(Map<String, Class<?>> map) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setTypeMap Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: setTypeMap Not supported yet.");
     }
     }
 
 
-
     public void setHoldability(int holdability) throws SQLException {
     public void setHoldability(int holdability) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setHoldability Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: setHoldability Not supported yet.");
     }
     }
 
 
-
     public int getHoldability() throws SQLException {
     public int getHoldability() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: getHoldability Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: getHoldability Not supported yet.");
     }
     }
 
 
-
     public Savepoint setSavepoint() throws SQLException {
     public Savepoint setSavepoint() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setSavepoint Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: setSavepoint Not supported yet.");
     }
     }
 
 
-
     public Savepoint setSavepoint(String name) throws SQLException {
     public Savepoint setSavepoint(String name) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: setSavepoint Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: setSavepoint Not supported yet.");
     }
     }
 
 
-
     public void rollback(Savepoint savepoint) throws SQLException {
     public void rollback(Savepoint savepoint) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: rollback Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: rollback Not supported yet.");
     }
     }
 
 
-
     public void releaseSavepoint(Savepoint savepoint) throws SQLException {
     public void releaseSavepoint(Savepoint savepoint) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: releaseSavepoint Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: releaseSavepoint Not supported yet.");
     }
     }
 
 
-
     public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
     public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createStatement Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: createStatement Not supported yet.");
     }
     }
 
 
-
     public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
     public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) Not supported yet.");
     }
     }
 
 
-
     public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
     public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) Not supported yet.");
     }
     }
 
 
-
     public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException {
     public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareStatement(String sql, int autoGeneratedKeys) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: prepareStatement(String sql, int autoGeneratedKeys) Not supported yet.");
     }
     }
 
 
-
     public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException {
     public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: prepareStatement(String sql, int[] columnIndexes) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: prepareStatement(String sql, int[] columnIndexes) Not supported yet.");
     }
     }
 
 
-
     public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException {
     public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException {
         throw new UnsupportedOperationException("EclConnection:  prepareStatement(String sql, String[] columnNames) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection:  prepareStatement(String sql, String[] columnNames) Not supported yet.");
     }
     }
 
 
-
     public Clob createClob() throws SQLException {
     public Clob createClob() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createClob Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: createClob Not supported yet.");
     }
     }
 
 
-
     public Blob createBlob() throws SQLException {
     public Blob createBlob() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createBlob Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: createBlob Not supported yet.");
     }
     }
 
 
-
     public NClob createNClob() throws SQLException {
     public NClob createNClob() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createNClob Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: createNClob Not supported yet.");
     }
     }
 
 
-
     public SQLXML createSQLXML() throws SQLException {
     public SQLXML createSQLXML() throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createSQLXML Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: createSQLXML Not supported yet.");
     }
     }
 
 
-
     public boolean isValid(int timeout) throws SQLException {
     public boolean isValid(int timeout) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: isValid Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: isValid Not supported yet.");
     }
     }
 
 
-
     public void setClientInfo(String name, String value) throws SQLClientInfoException {
     public void setClientInfo(String name, String value) throws SQLClientInfoException {
     	System.out.println("ECLCONNECTION SETCLIENTINFO");
     	System.out.println("ECLCONNECTION SETCLIENTINFO");
     	clientInfo.put(name, value);
     	clientInfo.put(name, value);
     }
     }
 
 
-
     public void setClientInfo(Properties properties) throws SQLClientInfoException {
     public void setClientInfo(Properties properties) throws SQLClientInfoException {
     	System.out.println("ECLCONNECTION SETCLIENTINFO");
     	System.out.println("ECLCONNECTION SETCLIENTINFO");
     	clientInfo = properties;
     	clientInfo = properties;
     }
     }
 
 
-
     public String getClientInfo(String name) throws SQLException {
     public String getClientInfo(String name) throws SQLException {
     	System.out.println("ECLCONNECTION GETCLIENTINFO");
     	System.out.println("ECLCONNECTION GETCLIENTINFO");
     	return (String)clientInfo.getProperty(name);
     	return (String)clientInfo.getProperty(name);
     }
     }
 
 
-
     public Properties getClientInfo() throws SQLException {
     public Properties getClientInfo() throws SQLException {
     	System.out.println("ECLCONNECTION GETCLIENTINFO");
     	System.out.println("ECLCONNECTION GETCLIENTINFO");
     	return clientInfo;
     	return clientInfo;
     }
     }
 
 
-
     public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
     public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createArrayOf(String typeName, Object[] elements) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: createArrayOf(String typeName, Object[] elements) Not supported yet.");
     }
     }
 
 
-
     public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
     public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: createStruct(String typeName, Object[] attributes)Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: createStruct(String typeName, Object[] attributes)Not supported yet.");
     }
     }
 
 
-
     public <T> T unwrap(Class<T> iface) throws SQLException {
     public <T> T unwrap(Class<T> iface) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: unwrap(Class<T> iface) Not supported yet.");
         throw new UnsupportedOperationException("EclConnection: unwrap(Class<T> iface) Not supported yet.");
     }
     }
 
 
-
     public boolean isWrapperFor(Class<?> iface) throws SQLException {
     public boolean isWrapperFor(Class<?> iface) throws SQLException {
         throw new UnsupportedOperationException("EclConnection: isWrapperFor(Class<?> iface) sNot supported yet.");
         throw new UnsupportedOperationException("EclConnection: isWrapperFor(Class<?> iface) sNot supported yet.");
     }
     }
-
 }
 }

+ 29 - 75
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/jdbcdriver/HPCCDatabaseMetaData.java

@@ -68,6 +68,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 	private String UserName;
 	private String UserName;
 	private boolean lazyLoad;
 	private boolean lazyLoad;
 	private int pageSize;
 	private int pageSize;
+	private	int	connectTimoutMillis;
 
 
 	private DocumentBuilderFactory dbf;
 	private DocumentBuilderFactory dbf;
 
 
@@ -86,6 +87,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 		this.basicAuth = props.getProperty("BasicAuth", HPCCConnection.createBasicAuth(this.UserName, props.getProperty("password", "")));
 		this.basicAuth = props.getProperty("BasicAuth", HPCCConnection.createBasicAuth(this.UserName, props.getProperty("password", "")));
 		this.lazyLoad = Boolean.parseBoolean(props.getProperty("LazyLoad", HPCCConnection.LAZYLOADDEFAULT));
 		this.lazyLoad = Boolean.parseBoolean(props.getProperty("LazyLoad", HPCCConnection.LAZYLOADDEFAULT));
 		this.pageSize = HPCCJDBCUtils.stringToInt(props.getProperty("PageSize", String.valueOf(HPCCConnection.FETCHPAGESIZEDEFAULT)), HPCCConnection.FETCHPAGESIZEDEFAULT);
 		this.pageSize = HPCCJDBCUtils.stringToInt(props.getProperty("PageSize", String.valueOf(HPCCConnection.FETCHPAGESIZEDEFAULT)), HPCCConnection.FETCHPAGESIZEDEFAULT);
+		this.connectTimoutMillis = HPCCJDBCUtils.stringToInt(props.getProperty("ConnectTimeoutMilli",""), HPCCConnection.CONNECTTIMEOUTMILDEFAULT);
 
 
 		System.out.println("EclDatabaseMetaData ServerAddress: " + serverAddress + " Cluster: " + targetcluster + " eclwatch: " + wseclwatchaddress +":"+  wseclwatchport);
 		System.out.println("EclDatabaseMetaData ServerAddress: " + serverAddress + " Cluster: " + targetcluster + " eclwatch: " + wseclwatchaddress +":"+  wseclwatchport);
 
 
@@ -1890,12 +1892,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 
 
 				//now request the schema for each roxy query
 				//now request the schema for each roxy query
 				URL queryschema = new URL(filedetailUrl);
 				URL queryschema = new URL(filedetailUrl);
-				HttpURLConnection queryschemaconnection = (HttpURLConnection)queryschema.openConnection();
-				queryschemaconnection.setInstanceFollowRedirects(false);
-				queryschemaconnection.setRequestProperty("Authorization", basicAuth);
-				queryschemaconnection.setRequestMethod("GET");
-				queryschemaconnection.setDoOutput(true);
-				queryschemaconnection.setDoInput(true);
+				HttpURLConnection queryschemaconnection = createHPCCESPConnection(queryschema);
 
 
 				InputStream schema = queryschemaconnection.getInputStream();
 				InputStream schema = queryschemaconnection.getInputStream();
 				Document dom2 = db.parse(schema);
 				Document dom2 = db.parse(schema);
@@ -1918,12 +1915,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 
 
 					//now request the schema for each roxy query
 					//now request the schema for each roxy query
 					URL queryfiledata = new URL(openfiledetailUrl);
 					URL queryfiledata = new URL(openfiledetailUrl);
-					HttpURLConnection queryfiledataconnection = (HttpURLConnection)queryfiledata.openConnection();
-					queryfiledataconnection.setInstanceFollowRedirects(false);
-					queryfiledataconnection.setRequestProperty("Authorization", basicAuth);
-					queryfiledataconnection.setRequestMethod("GET");
-					queryfiledataconnection.setDoOutput(true);
-					queryfiledataconnection.setDoInput(true);
+					HttpURLConnection queryfiledataconnection = createHPCCESPConnection(queryfiledata);
 
 
 					InputStream filesearchinfo = queryfiledataconnection.getInputStream();
 					InputStream filesearchinfo = queryfiledataconnection.getInputStream();
 					Document dom3 = db.parse(filesearchinfo);
 					Document dom3 = db.parse(filesearchinfo);
@@ -2178,14 +2170,8 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 					filename +
 					filename +
 					"&rawxml_";
 					"&rawxml_";
 
 
-			URL dfuLogicalFilesURL;
-			dfuLogicalFilesURL = new URL(urlString);
-
-			HttpURLConnection dfulogfilesConn = (HttpURLConnection)dfuLogicalFilesURL.openConnection();
-			dfulogfilesConn.setRequestProperty("Authorization", basicAuth);
-			dfulogfilesConn.setRequestMethod("GET");
-			dfulogfilesConn.setDoOutput(true);
-			dfulogfilesConn.setDoInput(true);
+			URL dfuLogicalFilesURL = new URL(urlString);
+			HttpURLConnection dfulogfilesConn = createHPCCESPConnection(dfuLogicalFilesURL);
 
 
 			isSuccess = parseDFULogicalFiles(dfulogfilesConn.getInputStream(), false) > 0 ? true : false;
 			isSuccess = parseDFULogicalFiles(dfulogfilesConn.getInputStream(), false) > 0 ? true : false;
 		}
 		}
@@ -2233,16 +2219,8 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 					"&FirstN=" +
 					"&FirstN=" +
 					pageSize;
 					pageSize;
 
 
-			URL dfuLogicalFilesURL;
-			dfuLogicalFilesURL = new URL(urlString);
-
-			HttpURLConnection dfulogfilesConn = (HttpURLConnection)dfuLogicalFilesURL.openConnection();
-			dfulogfilesConn.setInstanceFollowRedirects(false);
-			System.out.println("Setting auth: " + basicAuth);
-			dfulogfilesConn.setRequestProperty("Authorization", basicAuth);
-			dfulogfilesConn.setRequestMethod("GET");
-			dfulogfilesConn.setDoOutput(true);
-			dfulogfilesConn.setDoInput(true);
+			URL dfuLogicalFilesURL = new URL(urlString);
+			HttpURLConnection dfulogfilesConn = createHPCCESPConnection(dfuLogicalFilesURL);
 
 
 			isSuccess = parseDFULogicalFiles(dfulogfilesConn.getInputStream(), true) > 0 ? true : false;
 			isSuccess = parseDFULogicalFiles(dfulogfilesConn.getInputStream(), true) > 0 ? true : false;
 		}
 		}
@@ -2326,12 +2304,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 
 
 				//now request the schema for each hpcc query
 				//now request the schema for each hpcc query
 				URL queryschema = new URL(queryinfourl);
 				URL queryschema = new URL(queryinfourl);
-				HttpURLConnection queryschemaconnection = (HttpURLConnection)queryschema.openConnection();
-				queryschemaconnection.setInstanceFollowRedirects(false);
-				queryschemaconnection.setRequestProperty("Authorization", basicAuth);
-				queryschemaconnection.setRequestMethod("GET");
-				queryschemaconnection.setDoOutput(true);
-				queryschemaconnection.setDoInput(true);
+				HttpURLConnection queryschemaconnection = createHPCCESPConnection(queryschema);
 
 
 				InputStream schema = queryschemaconnection.getInputStream();
 				InputStream schema = queryschemaconnection.getInputStream();
 
 
@@ -2389,15 +2362,8 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 								"&FilterType=Name" +
 								"&FilterType=Name" +
 								"&rawxml_";
 								"&rawxml_";
 
 
-			URL querysetURL;
-			querysetURL = new URL(urlString);
-
-			HttpURLConnection querysetconnection = (HttpURLConnection)querysetURL.openConnection();
-			querysetconnection.setInstanceFollowRedirects(false);
-			querysetconnection.setRequestProperty("Authorization", basicAuth);
-			querysetconnection.setRequestMethod("GET");
-			querysetconnection.setDoOutput(true);
-			querysetconnection.setDoInput(true);
+			URL querysetURL = new URL(urlString);
+			HttpURLConnection querysetconnection = createHPCCESPConnection(querysetURL);
 
 
 			InputStream xml = querysetconnection.getInputStream();
 			InputStream xml = querysetconnection.getInputStream();
 
 
@@ -2438,15 +2404,8 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 									"/WsWorkunits/WUQuerysetDetails?QuerySetName=" +
 									"/WsWorkunits/WUQuerysetDetails?QuerySetName=" +
 									querysets.get(z) + "&rawxml_";
 									querysets.get(z) + "&rawxml_";
 
 
-				URL querysetURL;
-				querysetURL = new URL(urlString);
-
-				HttpURLConnection querysetconnection = (HttpURLConnection)querysetURL.openConnection();
-				querysetconnection.setInstanceFollowRedirects(false);
-				querysetconnection.setRequestProperty("Authorization", basicAuth);
-				querysetconnection.setRequestMethod("GET");
-				querysetconnection.setDoOutput(true);
-				querysetconnection.setDoInput(true);
+				URL querysetURL = new URL(urlString);
+				HttpURLConnection querysetconnection = createHPCCESPConnection(querysetURL);
 
 
 				InputStream xml = querysetconnection.getInputStream();
 				InputStream xml = querysetconnection.getInputStream();
 
 
@@ -2477,13 +2436,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 			String urlString = "http://" + wseclwatchaddress + ":" + wseclwatchport + "/WsWorkunits/WUQuerysets?rawxml_";
 			String urlString = "http://" + wseclwatchaddress + ":" + wseclwatchport + "/WsWorkunits/WUQuerysets?rawxml_";
 
 
 			URL cluserInfoURL = new URL(urlString);
 			URL cluserInfoURL = new URL(urlString);
-
-			HttpURLConnection clusterInfoConnection = (HttpURLConnection)cluserInfoURL.openConnection();
-			clusterInfoConnection.setInstanceFollowRedirects(false);
-			clusterInfoConnection.setRequestProperty("Authorization", basicAuth);
-			clusterInfoConnection.setRequestMethod("GET");
-			clusterInfoConnection.setDoOutput(true);
-			clusterInfoConnection.setDoInput(true);
+			HttpURLConnection clusterInfoConnection = createHPCCESPConnection(cluserInfoURL);
 
 
 			InputStream xml = clusterInfoConnection.getInputStream();
 			InputStream xml = clusterInfoConnection.getInputStream();
 
 
@@ -2523,13 +2476,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 			String urlString = "http://" + wseclwatchaddress + ":" + wseclwatchport + "/WsTopology/TpTargetClusterQuery?Type=ROOT&rawxml_&ShowDetails=0";
 			String urlString = "http://" + wseclwatchaddress + ":" + wseclwatchport + "/WsTopology/TpTargetClusterQuery?Type=ROOT&rawxml_&ShowDetails=0";
 
 
 			URL cluserInfoURL = new URL(urlString);
 			URL cluserInfoURL = new URL(urlString);
-
-			HttpURLConnection clusterInfoConnection = (HttpURLConnection)cluserInfoURL.openConnection();
-			clusterInfoConnection.setInstanceFollowRedirects(false);
-			clusterInfoConnection.setRequestProperty("Authorization", basicAuth);
-			clusterInfoConnection.setRequestMethod("GET");
-			clusterInfoConnection.setDoOutput(true);
-			clusterInfoConnection.setDoInput(true);
+			HttpURLConnection clusterInfoConnection = createHPCCESPConnection(cluserInfoURL);
 
 
 			InputStream xml = clusterInfoConnection.getInputStream();
 			InputStream xml = clusterInfoConnection.getInputStream();
 
 
@@ -2569,13 +2516,7 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 			String urlString = "http://" + wseclwatchaddress + ":" + wseclwatchport + "/WsSMC/Activity?rawxml_";
 			String urlString = "http://" + wseclwatchaddress + ":" + wseclwatchport + "/WsSMC/Activity?rawxml_";
 
 
 			URL querysetURL = new URL(urlString);
 			URL querysetURL = new URL(urlString);
-
-			HttpURLConnection querysetconnection = (HttpURLConnection)querysetURL.openConnection();
-			querysetconnection.setInstanceFollowRedirects(false);
-			querysetconnection.setRequestProperty("Authorization", basicAuth);
-			querysetconnection.setRequestMethod("GET");
-			querysetconnection.setDoOutput(true);
-			querysetconnection.setDoInput(true);
+			HttpURLConnection querysetconnection = createHPCCESPConnection(querysetURL);
 
 
 			InputStream xml = querysetconnection.getInputStream();
 			InputStream xml = querysetconnection.getInputStream();
 
 
@@ -2911,4 +2852,17 @@ public class HPCCDatabaseMetaData implements DatabaseMetaData {
 
 
 		return file;
 		return file;
 	}
 	}
+
+	protected HttpURLConnection createHPCCESPConnection(URL theurl) throws IOException
+	{
+		HttpURLConnection conn = (HttpURLConnection)theurl.openConnection();
+		conn.setInstanceFollowRedirects(false);
+		conn.setRequestProperty("Authorization", basicAuth);
+		conn.setRequestMethod("GET");
+		conn.setDoOutput(true);
+		conn.setDoInput(true);
+		conn.setConnectTimeout(connectTimoutMillis);
+
+		return conn;
+	}
 }
 }

+ 2 - 1
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/test/jdbcdriver/HPCCDriverTest.java

@@ -550,7 +550,8 @@ public class HPCCDriverTest
 							threadsrunning = thrd.isRunning() || threadsrunning;
 							threadsrunning = thrd.isRunning() || threadsrunning;
 						}
 						}
 						Thread.sleep(250);
 						Thread.sleep(250);
-					} while (threadsrunning);
+					}
+					while (threadsrunning);
 
 
 					for (HPCCDriverTestThread thrd : runnables)
 					for (HPCCDriverTestThread thrd : runnables)
 					{
 					{

+ 6 - 3
plugins/dbconnectors/hpccjdbc/src/com/hpccsystems/test/jdbcdriver/HPCCDriverTestThread.java

@@ -40,12 +40,15 @@ public class HPCCDriverTestThread extends Thread
 
 
 			HPCCResultSet qrs = (HPCCResultSet)((HPCCPreparedStatement)prepstatement).executeQuery();
 			HPCCResultSet qrs = (HPCCResultSet)((HPCCPreparedStatement)prepstatement).executeQuery();
 			HPCCDriverTest.printOutResultSet(qrs, Thread.currentThread().getId());
 			HPCCDriverTest.printOutResultSet(qrs, Thread.currentThread().getId());
-			running = false;
 		}
 		}
-		catch (SQLException e)
+		catch (Exception e)
 		{
 		{
-			success = false;
 			e.printStackTrace();
 			e.printStackTrace();
+			success = false;
+		}
+		finally
+		{
+			running = false;
 		}
 		}
 	}
 	}
 
 

+ 90 - 26
plugins/unicodelib/unicodelib.cpp

@@ -30,7 +30,7 @@
 #include "unicode/rbbi.h"
 #include "unicode/rbbi.h"
 #include "../stringlib/wildmatch.tpp"
 #include "../stringlib/wildmatch.tpp"
 
 
-#define UNICODELIB_VERSION "UNICODELIB 1.1.05"
+#define UNICODELIB_VERSION "UNICODELIB 1.1.06"
 
 
 UChar32 const u32comma = ',';
 UChar32 const u32comma = ',';
 UChar32 const u32space = ' ';
 UChar32 const u32space = ' ';
@@ -91,6 +91,7 @@ static const char * compatibleVersions[] = {
     "UNICODELIB 1.1.02", 
     "UNICODELIB 1.1.02", 
     "UNICODELIB 1.1.03", 
     "UNICODELIB 1.1.03", 
     "UNICODELIB 1.1.04", 
     "UNICODELIB 1.1.04", 
+    "UNICODELIB 1.1.05",
     NULL };
     NULL };
 
 
 UNICODELIB_API bool getECLPluginDefinition(ECLPluginDefinitionBlock *pb) 
 UNICODELIB_API bool getECLPluginDefinition(ECLPluginDefinitionBlock *pb) 
@@ -277,6 +278,7 @@ inline unsigned char min3(unsigned char a, unsigned char b, unsigned char c)
     return (min<c)? min:c;
     return (min<c)? min:c;
 }
 }
 
 
+#define DISTANCE_ON_ERROR 999
 class CEList
 class CEList
 {
 {
 private:
 private:
@@ -284,8 +286,10 @@ private:
     uint32_t* ces_;
     uint32_t* ces_;
     uint32_t  length_;
     uint32_t  length_;
     uint32_t  capacity_;
     uint32_t  capacity_;
-    inline void doCreateCEList(RuleBasedCollator& rbc, UErrorCode& status) {
-        if (U_FAILURE(status)) { return; }
+    bool invalid;
+
+    void doCreateCEList(RuleBasedCollator& rbc) {
+        UErrorCode status = U_ZERO_ERROR;
         CollationElementIterator*  ceIterator = rbc.createCollationElementIterator( ustring_ );
         CollationElementIterator*  ceIterator = rbc.createCollationElementIterator( ustring_ );
         if (!capacity_) {
         if (!capacity_) {
             capacity_ = ustring_.length();
             capacity_ = ustring_.length();
@@ -299,15 +303,14 @@ private:
             ces_[length_++] = ce;
             ces_[length_++] = ce;
         } while (ce != CollationElementIterator::NULLORDER); 
         } while (ce != CollationElementIterator::NULLORDER); 
         delete ceIterator;
         delete ceIterator;
-        if (U_FAILURE(status)) { length_ = 0; capacity_ = 0; }
+        if (U_FAILURE(status)) invalid = true;
     }
     }
 
 
 public:
 public:
-    CEList(RuleBasedCollator& rbc, const UnicodeString & source, UErrorCode& status, uint32_t capacity=0) 
-        : length_(0), capacity_(capacity), ustring_(source)
+    CEList(RuleBasedCollator& rbc, const UnicodeString & source, uint32_t capacity=0)
+        : length_(0), capacity_(capacity), ustring_(source), invalid(false)
     {
     {
-        //doTrimRight(ustring_);
-        doCreateCEList(rbc, status);
+        doCreateCEList(rbc);
     }
     }
 
 
     ~CEList()
     ~CEList()
@@ -322,11 +325,12 @@ public:
 
 
     uint32_t length() { return length_;}
     uint32_t length() { return length_;}
     uint32_t capacity() {return capacity_;}
     uint32_t capacity() {return capacity_;}
+    inline bool isInvalid() const { return invalid; }
 };
 };
 
 
 inline unsigned mask(unsigned x) { return x & 1; }
 inline unsigned mask(unsigned x) { return x & 1; }
 
 
-unsigned unicodeEditDistanceV2(UnicodeString & left, UnicodeString & right, RuleBasedCollator& rbc, UErrorCode &status)
+unsigned unicodeEditDistanceV2(UnicodeString & left, UnicodeString & right, RuleBasedCollator& rbc)
 {
 {
     unsigned char i, j;
     unsigned char i, j;
 
 
@@ -348,8 +352,11 @@ unsigned unicodeEditDistanceV2(UnicodeString & left, UnicodeString & right, Rule
     if (rightLen == 0)
     if (rightLen == 0)
         return leftLen;
         return leftLen;
 
 
-    CEList   leftCEs(rbc, left, status, leftLen);
-    CEList   rightCEs(rbc, right, status, rightLen);
+    CEList   leftCEs(rbc, left, leftLen);
+    CEList   rightCEs(rbc, right, rightLen);
+    if (leftCEs.isInvalid() || rightCEs.isInvalid())
+        return DISTANCE_ON_ERROR;
+
     leftLen = leftCEs.length();
     leftLen = leftCEs.length();
     rightLen = rightCEs.length();
     rightLen = rightCEs.length();
 
 
@@ -394,7 +401,7 @@ unsigned unicodeEditDistanceV2(UnicodeString & left, UnicodeString & right, Rule
 // * special case edit1 - you could use variables for the 6 interesting array elements, and get
 // * special case edit1 - you could use variables for the 6 interesting array elements, and get
 //   rid of the array completely.  You could also unwind the first (and last iterations).
 //   rid of the array completely.  You could also unwind the first (and last iterations).
 // * I suspect the early exit condition could be improved depending the lengths of the strings.
 // * I suspect the early exit condition could be improved depending the lengths of the strings.
-unsigned unicodeEditDistanceV3(UnicodeString & left, UnicodeString & right, unsigned radius, RuleBasedCollator& rbc, UErrorCode &status)
+unsigned unicodeEditDistanceV3(UnicodeString & left, UnicodeString & right, unsigned radius, RuleBasedCollator& rbc)
 {
 {
     if (radius >= 255)
     if (radius >= 255)
         return 255;
         return 255;
@@ -422,8 +429,8 @@ unsigned unicodeEditDistanceV3(UnicodeString & left, UnicodeString & right, unsi
     if (rightLen == 0)
     if (rightLen == 0)
         return leftLen;
         return leftLen;
 
 
-    CEList   leftCEs(rbc, left, status, leftLen);
-    CEList   rightCEs(rbc, right, status, rightLen);
+    CEList   leftCEs(rbc, left, leftLen);
+    CEList   rightCEs(rbc, right, rightLen);
     leftLen = leftCEs.length();
     leftLen = leftCEs.length();
     rightLen = rightCEs.length();
     rightLen = rightCEs.length();
 
 
@@ -1012,36 +1019,93 @@ UNICODELIB_API void UNICODELIB_CALL ulUnicodeCleanAccents(unsigned & tgtLen, UCh
     source.extract(0, tgtLen, tgt);
     source.extract(0, tgtLen, tgt);
 }
 }
 
 
-UNICODELIB_API unsigned UNICODELIB_CALL ulUnicodeLocaleEditDistance(unsigned leftLen, UChar const * left, unsigned rightLen, UChar const * right, char const * localename)
+
+
+static RuleBasedCollator * createRBCollator(const char * localename)
 {
 {
     UErrorCode status = U_ZERO_ERROR;
     UErrorCode status = U_ZERO_ERROR;
     Locale locale(localename);
     Locale locale(localename);
-
-    RuleBasedCollator* rbc = (RuleBasedCollator*)RuleBasedCollator::createInstance(locale, status);
+    RuleBasedCollator * rbc = (RuleBasedCollator *)RuleBasedCollator::createInstance(locale, status);
     rbc->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
     rbc->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
+    if (U_FAILURE(status))
+    {
+        delete rbc;
+        return NULL;
+    }
+    return rbc;
+}
+
+class RBCLocale
+{
+public:
+    RBCLocale(char const * _locale) : locale(_locale)
+    {
+        rbc = createRBCollator(locale);
+    }
+    ~RBCLocale()
+    {
+        delete rbc;
+    }
+    RuleBasedCollator * queryCollator() const { return rbc; }
+private:
+    StringAttr locale;
+    RuleBasedCollator * rbc;
+};
+
+typedef MapStringTo<RBCLocale, char const *> MapStrToRBC;
+static MapStrToRBC * localeMap;
+static CriticalSection localeCrit;
+MODULE_INIT(INIT_PRIORITY_STANDARD)
+{
+    return true;
+}
+MODULE_EXIT()
+{
+    delete localeMap;
+    localeMap = NULL;
+}
+
+static RuleBasedCollator * queryRBCollator(const char * localename)
+{
+    if (!localename) localename = "";
+    CriticalBlock b(localeCrit);
+    if (!localeMap)
+        localeMap = new MapStrToRBC;
+    RBCLocale * loc = localeMap->getValue(localename);
+    if(!loc)
+    {
+        //MORE: ECLRTL calls rtlGetNormalizedUnicodeLocaleName().  Should this be happening here?
+        const char * normalizedlocale = localename;
+        localeMap->setValue(localename, normalizedlocale);
+        loc = localeMap->getValue(localename);
+    }
+    return loc->queryCollator();
+}
+
+UNICODELIB_API unsigned UNICODELIB_CALL ulUnicodeLocaleEditDistance(unsigned leftLen, UChar const * left, unsigned rightLen, UChar const * right, char const * localename)
+{
+    RuleBasedCollator* rbc = queryRBCollator(localename);
+    if (!rbc)
+        return DISTANCE_ON_ERROR;
 
 
     UnicodeString uLeft(left, leftLen);
     UnicodeString uLeft(left, leftLen);
     UnicodeString uRight(right, rightLen);
     UnicodeString uRight(right, rightLen);
 
 
-    unsigned distance = nsUnicodelib::unicodeEditDistanceV2(uLeft, uRight, *rbc, status);
-    delete rbc;
+    unsigned distance = nsUnicodelib::unicodeEditDistanceV2(uLeft, uRight, *rbc);
     return distance;
     return distance;
 }
 }
 
 
 
 
 UNICODELIB_API bool UNICODELIB_CALL ulUnicodeLocaleEditDistanceWithinRadius(unsigned leftLen, UChar const * left, unsigned rightLen, UChar const * right, unsigned radius, char const * localename)
 UNICODELIB_API bool UNICODELIB_CALL ulUnicodeLocaleEditDistanceWithinRadius(unsigned leftLen, UChar const * left, unsigned rightLen, UChar const * right, unsigned radius, char const * localename)
 {
 {
-    UErrorCode status = U_ZERO_ERROR;
-    Locale locale(localename);
-
-    RuleBasedCollator* rbc = (RuleBasedCollator*)RuleBasedCollator::createInstance(locale, status);
-    rbc->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status);
+    RuleBasedCollator* rbc = queryRBCollator(localename);
+    if (!rbc)
+        return false;
 
 
     UnicodeString uLeft(left, leftLen);
     UnicodeString uLeft(left, leftLen);
     UnicodeString uRight(right, rightLen);
     UnicodeString uRight(right, rightLen);
 
 
-    unsigned distance = nsUnicodelib::unicodeEditDistanceV3(uLeft, uRight, radius, *rbc, status);
-    delete rbc;
+    unsigned distance = nsUnicodelib::unicodeEditDistanceV3(uLeft, uRight, radius, *rbc);
     return distance <= radius;
     return distance <= radius;
 }
 }
 
 

+ 1 - 1
roxie/roxie/CMakeLists.txt

@@ -53,7 +53,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 endif()
 
 
-add_executable ( roxie ${SRCS} )
+HPCC_ADD_EXECUTABLE ( roxie ${SRCS} )
 install ( TARGETS roxie DESTINATION ${OSSDIR}/bin )
 install ( TARGETS roxie DESTINATION ${OSSDIR}/bin )
 
 
 target_link_libraries ( roxie
 target_link_libraries ( roxie

+ 1 - 1
roxie/roxieclienttest/CMakeLists.txt

@@ -36,7 +36,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( roxieclienttest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( roxieclienttest ${SRCS} )
 target_link_libraries ( roxieclienttest 
 target_link_libraries ( roxieclienttest 
          jlib
          jlib
          roxieclient 
          roxieclient 

+ 1 - 1
roxie/roxiepipe/CMakeLists.txt

@@ -38,7 +38,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( roxiepipe ${SRCS} )
+HPCC_ADD_EXECUTABLE ( roxiepipe ${SRCS} )
 install ( TARGETS roxiepipe DESTINATION ${OSSDIR}/bin )
 install ( TARGETS roxiepipe DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( roxiepipe
 target_link_libraries ( roxiepipe
          jlib
          jlib

+ 1 - 1
roxie/udplib/udptransport.cmake

@@ -39,7 +39,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 ADD_DEFINITIONS ( -D_CONSOLE )
 
 
-add_executable ( udptransport ${SRCS} )
+HPCC_ADD_EXECUTABLE ( udptransport ${SRCS} )
 #install ( TARGETS udptransport DESTINATION ${OSSDIR}/bin )
 #install ( TARGETS udptransport DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( udptransport 
 target_link_libraries ( udptransport 
          jlib
          jlib

+ 1 - 1
services/runagent/frunagent.cmake

@@ -46,7 +46,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -D_CONSOLE )
 ADD_DEFINITIONS ( -D_CONSOLE )
 
 
-add_executable ( frunagent ${SRCS} )
+HPCC_ADD_EXECUTABLE ( frunagent ${SRCS} )
 install ( TARGETS frunagent DESTINATION ${OSSDIR}/bin )
 install ( TARGETS frunagent DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( frunagent 
 target_link_libraries ( frunagent 
          jlib
          jlib

+ 1 - 1
services/runagent/frunssh.cmake

@@ -39,7 +39,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -D_CONSOLE -DRMTSSH_LOCAL)
 ADD_DEFINITIONS ( -D_CONSOLE -DRMTSSH_LOCAL)
 
 
-add_executable ( frunssh ${SRCS} )
+HPCC_ADD_EXECUTABLE ( frunssh ${SRCS} )
 install ( TARGETS frunssh DESTINATION ${OSSDIR}/bin )
 install ( TARGETS frunssh DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( frunssh 
 target_link_libraries ( frunssh 
          jlib 
          jlib 

+ 1 - 1
system/mp/test/CMakeLists.txt

@@ -39,7 +39,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( mptest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( mptest ${SRCS} )
 target_link_libraries ( mptest 
 target_link_libraries ( mptest 
          jlib
          jlib
          mp 
          mp 

+ 1 - 1
system/security/test/ldapsecuritytest/CMakeLists.txt

@@ -39,7 +39,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( ldapsecuritytest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( ldapsecuritytest ${SRCS} )
 target_link_libraries ( ldapsecuritytest 
 target_link_libraries ( ldapsecuritytest 
          jlib
          jlib
          LdapSecurity 
          LdapSecurity 

+ 1 - 1
system/security/test/myssl/CMakeLists.txt

@@ -38,7 +38,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( myssl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( myssl ${SRCS} )
 install ( TARGETS myssl DESTINATION ${OSSDIR}/bin )
 install ( TARGETS myssl DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( myssl 
 target_link_libraries ( myssl 
          jlib
          jlib

+ 1 - 1
system/xmllibtest/CMakeLists.txt

@@ -42,7 +42,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( xmllibtest ${SRCS} )
+HPCC_ADD_EXECUTABLE ( xmllibtest ${SRCS} )
 add_dependencies ( xmllibtest xmllib )
 add_dependencies ( xmllibtest xmllib )
 install ( TARGETS xmllibtest DESTINATION ${OSSDIR}/bin )
 install ( TARGETS xmllibtest DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( xmllibtest
 target_link_libraries ( xmllibtest

File diff suppressed because it is too large
+ 1293 - 0
testing/ecl/key/prefixjoinu.xml


+ 691 - 0
testing/ecl/prefixjoinu.ecl

@@ -0,0 +1,691 @@
+/*##############################################################################
+
+    Copyright (C) 2011 HPCC Systems.
+
+    All rights reserved. This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as
+    published by the Free Software Foundation, either version 3 of the
+    License, or (at your option) any later version.
+
+    This program 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 Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+############################################################################## */
+
+
+// limited prefix match join tests
+
+recL := record
+  UNICODE11      name;
+  unsigned  val;
+END;
+
+recR := record
+  UNICODE    name {MAXLENGTH(12)};
+  unsigned2     val;
+END;
+
+recB := record
+  VARUNICODE name {MAXLENGTH(12)};
+  unsigned  val;
+END;
+
+
+recO := record
+  UNICODE10  lname;
+  UNICODE11  rname;
+END;
+
+
+dsL := DATASET([
+  {'BABAK',1},
+  {'BABY',2},
+  {'BARBARB',3},
+  {'BEBO',4}
+], recL);
+
+dsR := DATASET([
+  {'BABARA',5},
+  {'BABATUNDE',6},
+  {'BABETTE',7},
+  {'BABS',8},
+  {'BARBAR',9},
+  {'BARBARBA',10},
+  {'BARBARBO',11},
+  {'BARBER',12},
+  {'BETTY',13}
+], recR);
+
+
+dsBritney := DATASET([
+{ 'britney' ,1 },
+{ 'brittany',2 },
+{ 'brittney',3 },
+{ 'britany',4 },
+{ 'britny',5 },
+{ 'briteny',6 },
+{ 'britteny',7 },
+{ 'briney',8 },
+{ 'brittny',9 },
+{ 'brintey',10 },
+{ 'britanny',11 },
+{ 'britiny',12 },
+{ 'britnet',13 },
+{ 'britiney',14 },
+{ 'britaney',15 },
+{ 'britnay',16 },
+{ 'brithney',17 },
+{ 'brtiney',18 },
+{ 'birtney',19 },
+{ 'brintney',20 },
+{ 'briteney',21 },
+{ 'bitney',22 },
+{ 'brinty',23 },
+{ 'brittaney',24 },
+{ 'brittnay',25 },
+{ 'britey',26 },
+{ 'brittiny',27 },
+{ 'brtney',28 },
+{ 'bretney',29 },
+{ 'britneys',30 },
+{ 'britne',31 },
+{ 'brytney',32 },
+{ 'breatney',33 },
+{ 'britiany',34 },
+{ 'britnney',35 },
+{ 'britnry',36 },
+{ 'breatny',37 },
+{ 'brittiney',38 },
+{ 'britty',39 },
+{ 'brotney',40 },
+{ 'brutney',41 },
+{ 'britteney',42 },
+{ 'briyney',43 },
+{ 'bittany',44 },
+{ 'bridney',45 },
+{ 'britainy',46 },
+{ 'britmey',47 },
+{ 'brietney',48 },
+{ 'brithny',49 },
+{ 'britni',50 },
+{ 'brittant',51 },
+{ 'bittney',52 },
+{ 'brithey',53 },
+{ 'brittiany',54 },
+{ 'btitney',55 },
+{ 'brietny',56 },
+{ 'brinety',57 },
+{ 'brintny',58 },
+{ 'britnie',59 },
+{ 'brittey',60 },
+{ 'brittnet',61 },
+{ 'brity',62 },
+{ 'ritney',63 },
+{ 'bretny',64 },
+{ 'britnany',65 },
+{ 'brinteny',66 },
+{ 'brittainy',67 },
+{ 'pritney',68 },
+{ 'brintany',69 },
+{ 'britnery',70 },
+{ 'briitney',71 },
+{ 'britinay',72 },
+{ 'britneay',73 },
+{ 'britner',74 },
+{ 'britneys',75 },
+{ 'britnye',76 },
+{ 'britt',77 },
+{ 'brttany',78 },
+{ 'bitany',79 },
+{ 'briny',80 },
+{ 'brirney',81 },
+{ 'britant',82 },
+{ 'britnety',83 },
+{ 'brittanny',84 },
+{ 'brttney',85 },
+{ 'birttany',86 },
+{ 'brittani',87 },
+{ 'brityney',88 },
+{ 'brtitney',89 },
+{ 'brienty',90 },
+{ 'brritney',91 },
+{ 'bbritney',92 },
+{ 'briitany',93 },
+{ 'britanney',94 },
+{ 'briterny',95 },
+{ 'britneey',96 },
+{ 'britnei',97 },
+{ 'britniy',98 },
+{ 'britbey',99 },
+{ 'britneu',100 },
+{ 'britent',101 },
+{ 'brittnany',102 },
+{ 'britttany',103 },
+{ 'btiney',104 },
+{ 'birttney',105 },
+{ 'breitney',106 },
+{ 'brinity',107 },
+{ 'britenay',108 },
+{ 'britneyt',109 },
+{ 'brittan',110 },
+{ 'brittne',111 },
+{ 'btittany',112 },
+{ 'beitney',113 },
+{ 'birteny',114 },
+{ 'brightney',115 },
+{ 'brintiny',116 },
+{ 'britanty',117 },
+{ 'britenny',118 },
+{ 'britini',119 },
+{ 'britnwy',120 },
+{ 'brittni',121 },
+{ 'brittnie',122 },
+{ 'biritney',123 },
+{ 'birtany',124 },
+{ 'biteny',125 },
+{ 'bratney',126 },
+{ 'britani',127 },
+{ 'britanie',128 },
+{ 'briteany',129 },
+{ 'brittay',130 },
+{ 'brittinay',131 },
+{ 'brtany',132 },
+{ 'brtiany',133 },
+{ 'birney',134 },
+{ 'brirtney',135 },
+{ 'britnaey',136 },
+{ 'britnee',137 },
+{ 'britony',138 },
+{ 'brittanty',139 },
+{ 'britttney',140 },
+{ 'birtny',141 },
+{ 'brieny',142 },
+{ 'brintty',143 },
+{ 'brithy',144 },
+{ 'brittanie',145 },
+{ 'brinney',146 },
+{ 'briten',147 },
+{ 'briterney',148 },
+{ 'britheny',149 },
+{ 'britneny',150 },
+{ 'brittamy',151 },
+{ 'brittmey',152 },
+{ 'brytnei',153 },
+{ 'btirney',154 },
+{ 'rittney',155 },
+{ 'brinet',156 },
+{ 'britneyy',157 },
+{ 'britten',158 },
+{ 'beritney',159 },
+{ 'bretiny',160 },
+{ 'briatny',161 },
+{ 'brieney',162 },
+{ 'brinany',163 },
+{ 'britaany',164 },
+{ 'britan',165 },
+{ 'britine',166 },
+{ 'britnea',167 },
+{ 'britnes',168 },
+{ 'britnez',169 },
+{ 'britnny',170 },
+{ 'brittenay',171 },
+{ 'brittneys',172 },
+{ 'brittony',173 },
+{ 'brteny',174 },
+{ 'btitany',175 },
+{ 'btittney',176 },
+{ 'btriney',177 },
+{ 'btritney',178 },
+{ 'rittany',179 },
+{ 'braitney',180 },
+{ 'brettney',181 },
+{ 'britamy',182 },
+{ 'britery',183 },
+{ 'britnary',184 },
+{ 'brittent',185 },
+{ 'bruttney',186 },
+{ 'pritny',187 },
+{ 'bitaney',188 },
+{ 'brenty',189 },
+{ 'bristney',190 },
+{ 'britay',191 },
+{ 'britinny',192 },
+{ 'brittaany',193 },
+{ 'brittanys',194 },
+{ 'brittini',195 },
+{ 'brittniy',196 },
+{ 'brtieny',197 },
+{ 'brutany',198 },
+{ 'bitteny',199 },
+{ 'brinttany',200 },
+{ 'britanay',201 },
+{ 'britinany',202 },
+{ 'britn',203 },
+{ 'britnew',204 },
+{ 'britneyn',205 },
+{ 'britrney',206 },
+{ 'brtiny',207 },
+{ 'brtittney',208 },
+{ 'brtny',209 },
+{ 'brytny',210 },
+{ 'rbitney',211 },
+{ 'birtiny',212 },
+{ 'bithney',213 },
+{ 'brattany',214 },
+{ 'breitny',215 },
+{ 'breteny',216 },
+{ 'brightny',217 },
+{ 'brintay',218 },
+{ 'brinttey',219 },
+{ 'briotney',220 },
+{ 'britanys',221 },
+{ 'britley',222 },
+{ 'britneyb',223 },
+{ 'britnrey',224 },
+{ 'britnty',225 },
+{ 'brittner',226 },
+{ 'brottany',227 },
+{ 'baritney',228 },
+{ 'birntey',229 },
+{ 'biteney',230 },
+{ 'bitiny',231 },
+{ 'breateny',232 },
+{ 'brianty',233 },
+{ 'brintye',234 },
+{ 'britianny',235 },
+{ 'britly',236 },
+{ 'britnej',237 },
+{ 'britneyu',238 },
+{ 'britniey',239 },
+{ 'britnnay',240 },
+{ 'brittian',241 },
+{ 'briyny',242 },
+{ 'brrittany',243 },
+{ 'brttiney',244 },
+{ 'btiteny',245 },
+{ 'btrittany',246 },
+{ 'beritny',247 },
+{ 'bhritney',248 },
+{ 'birthney',249 },
+{ 'breathney',250 },
+{ 'breaty',251 },
+{ 'bretany',252 },
+{ 'briatany',253 },
+{ 'brint',254 },
+{ 'britenney',255 },
+{ 'britian',256 },
+{ 'britinty',257 },
+{ 'brititney',258 },
+{ 'britnsy',259 },
+{ 'britrey',260 },
+{ 'britsny',261 },
+{ 'brittine',262 },
+{ 'brittnry',263 },
+{ 'brittsny',264 },
+{ 'brtanny',265 },
+{ 'brtittany',266 },
+{ 'bruttany',267 },
+{ 'brytany',268 },
+{ 'btitny',269 },
+{ 'pretny',270 },
+{ 'ritany',271 },
+{ 'bbritany',272 },
+{ 'bbrittney',273 },
+{ 'biitney',274 },
+{ 'bitny',275 },
+{ 'breathny',276 },
+{ 'breney',277 },
+{ 'brethney',278 },
+{ 'brettny',279 },
+{ 'bridny',280 },
+{ 'brigney',281 },
+{ 'briittney',282 },
+{ 'brinaty',283 },
+{ 'brinay',284 },
+{ 'brinetty',285 },
+{ 'brinitty',286 },
+{ 'brinny',287 },
+{ 'brintery',288 },
+{ 'britary',289 },
+{ 'britbney',290 },
+{ 'brithany',291 },
+{ 'britieny',292 },
+{ 'britiey',293 },
+{ 'britnt',294 },
+{ 'britnys',295 },
+{ 'britrny',296 },
+{ 'brittenny',297 },
+{ 'brittnee',298 },
+{ 'brittnt',299 },
+{ 'brney',300 },
+{ 'broitney',301 },
+{ 'brotny',302 },
+{ 'bruteny',303 },
+{ 'btiyney',304 },
+{ 'btrittney',305 },
+{ 'gritney',306 },
+{ 'spritney',307 },
+{ 'bittny',308 },
+{ 'bnritney',309 },
+{ 'brandy',310 },
+{ 'brbritney',311 },
+{ 'breatiny',312 },
+{ 'breetney',313 },
+{ 'bretiney',314 },
+{ 'brfitney',315 },
+{ 'briattany',316 },
+{ 'brieteny',317 },
+{ 'briety',318 },
+{ 'briitny',319 },
+{ 'briittany',320 },
+{ 'brinie',321 },
+{ 'brinteney',322 },
+{ 'brintne',323 },
+{ 'britaby',324 },
+{ 'britaey',325 },
+{ 'britainey',326 },
+{ 'britinie',327 },
+{ 'britinney',328 },
+{ 'britmney',329 },
+{ 'britnear',330 },
+{ 'britnel',331 },
+{ 'britneuy',332 },
+{ 'britnewy',333 },
+{ 'britnmey',334 },
+{ 'brittaby',335 },
+{ 'brittery',336 },
+{ 'britthey',337 },
+{ 'brittnaey',338 },
+{ 'brittnat',339 },
+{ 'brittneny',340 },
+{ 'brittnye',341 },
+{ 'brittteny',342 },
+{ 'briutney',343 },
+{ 'briyeny',344 },
+{ 'brnity',345 },
+{ 'brtteny',346 },
+{ 'brttiany',347 },
+{ 'bryney',348 },
+{ 'brythney',349 },
+{ 'brytne',350 },
+{ 'brytni',351 },
+{ 'brytnie',352 },
+{ 'bvritney',353 },
+{ 'dritney',354 },
+{ 'priteny',355 },
+{ 'beittany',356 },
+{ 'bichney',357 },
+{ 'biritny',358 },
+{ 'birnety',359 },
+{ 'birny',360 },
+{ 'birteney',361 },
+{ 'birthny',362 },
+{ 'birtiney',363 },
+{ 'birtteny',364 },
+{ 'birttny',365 },
+{ 'bitanny',366 },
+{ 'bitheay',367 },
+{ 'bithey',368 },
+{ 'bitrney',369 },
+{ 'breinty',370 },
+{ 'brethny',371 },
+{ 'bretne',372 },
+{ 'bretniy',373 },
+{ 'brettine',374 },
+{ 'brighty',375 },
+{ 'brihney',376 },
+{ 'brihtney',377 },
+{ 'briiney',378 },
+{ 'briitnay',379 },
+{ 'brineny',380 },
+{ 'brinte',381 },
+{ 'brintiney',382 },
+{ 'brintneey',383 },
+{ 'brinttney',384 },
+{ 'brirany',385 },
+{ 'brirtny',386 },
+{ 'brisney',387 },
+{ 'britainny',388 },
+{ 'britaniy',389 },
+{ 'britanu',390 },
+{ 'britanyy',391 },
+{ 'britatny',392 },
+{ 'britdney',393 },
+{ 'britemy',394 },
+{ 'britenty',395 },
+{ 'brither',396 },
+{ 'brithne',397 },
+{ 'brititany',398 },
+{ 'brititny',399 },
+{ 'britiy',400 },
+{ 'britmeny',401 },
+{ 'britneeey',402 },
+{ 'britnehy',403 },
+{ 'britnely',404 },
+{ 'britnesy',405 },
+{ 'britnetty',406 },
+{ 'britnex',407 },
+{ 'britneyxxx',408 },
+{ 'britnity',409 },
+{ 'britntey',410 },
+{ 'britnyey',411 },
+{ 'britterny',412 },
+{ 'brittneey',413 },
+{ 'brittnney',414 },
+{ 'brittnyey',415 },
+{ 'brityen',416 },
+{ 'briytney',417 },
+{ 'brltney',418 },
+{ 'broteny',419 },
+{ 'brtaney',420 },
+{ 'brtiiany',421 },
+{ 'brtinay',422 },
+{ 'brtinney',423 },
+{ 'brtitany',424 },
+{ 'brtiteny',425 },
+{ 'brtnet',426 },
+{ 'brytiny',427 },
+{ 'btney',428 },
+{ 'drittney',429 },
+{ 'pretney',430 },
+{ 'rbritney',431 },
+{ 'barittany',432 },
+{ 'bbbritney',433 },
+{ 'bbitney',434 },
+{ 'bbritny',435 },
+{ 'bbrittany',436 },
+{ 'beitany',437 },
+{ 'beitny',438 },
+{ 'bertney',439 },
+{ 'bertny',440 },
+{ 'betney',441 },
+{ 'betny',442 },
+{ 'bhriney',443 },
+{ 'biney',444 },
+{ 'bintey',445 },
+{ 'biretny',446 },
+{ 'biritany',447 },
+{ 'birittany',448 },
+{ 'birittny',449 },
+{ 'birnty',450 },
+{ 'birtey',451 },
+{ 'birtheny',452 },
+{ 'birtieny',453 },
+{ 'birtnay',454 },
+{ 'birtnet',455 },
+{ 'bitnet',456 },
+{ 'bitttany',457 },
+{ 'bnrittany',458 },
+{ 'bntney',459 },
+{ 'bpitney',460 },
+{ 'brandi',461 },
+{ 'brattney',462 },
+{ 'breanty',463 },
+{ 'breany',464 },
+{ 'breittany',465 },
+{ 'brently',466 },
+{ 'brentney',467 },
+{ 'brethany',468 },
+{ 'brethine',469 },
+{ 'bretnty',470 },
+{ 'bretty',471 },
+{ 'brianey',472 },
+{ 'briatney',473 },
+{ 'brickney',474 },
+{ 'bridnea',475 },
+{ 'brieatney',476 },
+{ 'brientny',477 },
+{ 'brietnet',478 },
+{ 'briettny',479 },
+{ 'briey',480 },
+{ 'brighney',481 },
+{ 'brigtney',482 },
+{ 'brigtny',483 },
+{ 'briiny',484 },
+{ 'brindey',485 },
+{ 'brindy',486 },
+{ 'bringney',487 },
+{ 'brininy',488 },
+{ 'brinitey',489 },
+{ 'brinsley',490 },
+{ 'brinthey',491 },
+{ 'brinthy',492 },
+{ 'brintiy',493 },
+{ 'brintneys',494 },
+{ 'brintry',495 },
+{ 'brinyey',496 },
+{ 'briottany',497 },
+{ 'brirrany',498 },
+{ 'brirreny',499 },
+{ 'brirtany',500 },
+{ 'brirttany',501 },
+{ 'brirttney',502 },
+{ 'britain',503 },
+{ 'britane',504 },
+{ 'britaneny',505 },
+{ 'britania',506 },
+{ 'britann',507 },
+{ 'britanna',508 },
+{ 'britannie',509 },
+{ 'britannt',510 },
+{ 'britannu',511 },
+{ 'britanyl',512 },
+{ 'britanyt',513 },
+{ 'briteeny',514 },
+{ 'britenany',515 },
+{ 'britenet',516 },
+{ 'briteniy',517 },
+{ 'britenys',518 },
+{ 'britianey',519 },
+{ 'britin',520 },
+{ 'britinary',521 },
+{ 'britmy',522 },
+{ 'britnaney',523 },
+{ 'britnat',524 },
+{ 'britnbey',525 },
+{ 'britndy',526 },
+{ 'britneh',527 },
+{ 'britneney',528 },
+{ 'britney6',529 },
+{ 'britneye',530 },
+{ 'britneyh',531 },
+{ 'britneym',532 },
+{ 'britneyyy',533 },
+{ 'britnhey',534 },
+{ 'britnjey',535 },
+{ 'britnne',536 },
+{ 'britnu',537 },
+{ 'britoney',538 },
+{ 'britrany',539 },
+{ 'britreny',540 },
+{ 'britry',541 },
+{ 'britsany',542 },
+{ 'brittanay',543 },
+{ 'brittang',544 },
+{ 'brittans',545 },
+{ 'brittanyh',546 },
+{ 'brittanyn',547 },
+{ 'brittanys',548 },
+{ 'brittanyt',549 },
+{ 'brittanyy',550 },
+{ 'brittary',551 },
+{ 'brittenie',552 },
+{ 'brittenty',553 },
+{ 'brittinney',554 },
+{ 'brittley',555 },
+{ 'brittn',556 },
+{ 'brittnery',557 },
+{ 'brittnety',558 },
+{ 'brittneys',559 },
+{ 'brittneyu',560 },
+{ 'brittnsey',561 },
+{ 'britttaney',562 },
+{ 'britttny',563 },
+{ 'brittyney',564 },
+{ 'brityne',565 },
+{ 'briyany',566 },
+{ 'brlttney',567 },
+{ 'brotaney',568 },
+{ 'brotany',569 },
+{ 'brottney',570 },
+{ 'brriney',571 },
+{ 'brrittney',572 },
+{ 'brrtney',573 },
+{ 'brthney',574 },
+{ 'brtianny',575 },
+{ 'brtineys',576 },
+{ 'brtittny',577 },
+{ 'brttiny',578 },
+{ 'brtttany',579 },
+{ 'brydney',580 },
+{ 'brynty',581 },
+{ 'brythey',582 },
+{ 'bryttney',583 },
+{ 'btiany',584 },
+{ 'btirtney',585 },
+{ 'btitiney',586 },
+{ 'btittny',587 },
+{ 'btritany',588 },
+{ 'buttney',589 },
+{ 'grittney',590 },
+{ 'hrittney',591 },     // equal excluded
+{ 'hrittney',592 },
+{ 'hrittney',593 },
+{ 'hrittney',594 },
+{ 'hrittney',595 },
+{ 'irittney',596 },             // equal included
+{ 'irittney',597 },
+{ 'irittney',598 },
+{ 'irittney',599 },
+{ 'prietny', 600 },
+{ 'pritany', 601 },
+{ 'prittany',602 }
+], recB);
+
+
+
+recO T(recL l,recR r) := TRANSFORM
+  self.lname := l.name;
+  self.rname := r.name;
+END;
+
+recO TB(recB l,recB r) := TRANSFORM
+  self.lname := l.name;
+  self.rname := r.name;
+END;
+
+sdsL := SORT(DISTRIBUTE(dsBritney(val<200),0),val,local) : Stored('TempL');
+sdsR := SORT(DISTRIBUTE(dsBritney(val>=200),0),val,local) : Stored('TempR');
+sdsS := SORT(DISTRIBUTE(dsBritney,0),val,local) : Stored('TempS');
+
+JT := JOIN(DISTRIBUTE(dsL,0),DISTRIBUTE(dsR,0),left.name[1..*]=right.name[1..*] and left.val<=right.val,T(LEFT,RIGHT), ATMOST(left.name[1..*]=right.name[1..*],3), LOCAL);
+JTB := JOIN(sdsL,sdsR,left.name[1..*]=right.name[1..*] and left.val<=right.val,TB(LEFT,RIGHT), ATMOST(left.name[1..*]=right.name[1..*],4), LOCAL);
+JTBS := JOIN(sdsS,sdsS,left.name[1..*]=right.name[1..*] and left.val<=right.val,TB(LEFT,RIGHT), ATMOST(left.name[1..*]=right.name[1..*],4), LOCAL);
+
+OUTPUT(JT);
+OUTPUT(JTB);
+OUTPUT(JTBS);

+ 1 - 1
thorlcr/master/CMakeLists.txt

@@ -65,7 +65,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 endif()
 
 
-add_executable ( thormaster_lcr ${SRCS} )
+HPCC_ADD_EXECUTABLE ( thormaster_lcr ${SRCS} )
 install ( TARGETS thormaster_lcr DESTINATION ${OSSDIR}/bin )
 install ( TARGETS thormaster_lcr DESTINATION ${OSSDIR}/bin )
 target_link_libraries (  thormaster_lcr 
 target_link_libraries (  thormaster_lcr 
          jlib
          jlib

+ 1 - 1
thorlcr/slave/CMakeLists.txt

@@ -63,7 +63,7 @@ if (WIN32)
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
     set (CMAKE_EXE_LINKER_FLAGS "/STACK:65536 ${CMAKE_EXE_LINKER_FLAGS}")
 endif()
 endif()
 
 
-add_executable ( thorslave_lcr ${SRCS} )
+HPCC_ADD_EXECUTABLE ( thorslave_lcr ${SRCS} )
 install ( TARGETS thorslave_lcr DESTINATION ${OSSDIR}/bin )
 install ( TARGETS thorslave_lcr DESTINATION ${OSSDIR}/bin )
 target_link_libraries (  thorslave_lcr 
 target_link_libraries (  thorslave_lcr 
          jlib
          jlib

+ 1 - 1
tools/backupnode/CMakeLists.txt

@@ -41,7 +41,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( backupnode ${SRCS} )
+HPCC_ADD_EXECUTABLE ( backupnode ${SRCS} )
 install ( TARGETS backupnode DESTINATION ${OSSDIR}/bin )
 install ( TARGETS backupnode DESTINATION ${OSSDIR}/bin )
 
 
 target_link_libraries (  backupnode 
 target_link_libraries (  backupnode 

+ 1 - 1
tools/combine/CMakeLists.txt

@@ -38,7 +38,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( combine ${SRCS} )
+HPCC_ADD_EXECUTABLE ( combine ${SRCS} )
 install ( TARGETS combine DESTINATION ${OSSDIR}/bin )
 install ( TARGETS combine DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( combine
 target_link_libraries ( combine
          jlib
          jlib

+ 1 - 1
tools/copyexp/CMakeLists.txt

@@ -37,7 +37,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( copyexp ${SRCS} )
+HPCC_ADD_EXECUTABLE ( copyexp ${SRCS} )
 install ( TARGETS copyexp DESTINATION ${OSSDIR}/bin )
 install ( TARGETS copyexp DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( copyexp
 target_link_libraries ( copyexp
          jlib 
          jlib 

+ 1 - 1
tools/dumpkey/CMakeLists.txt

@@ -39,7 +39,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( dumpkey ${SRCS} )
+HPCC_ADD_EXECUTABLE ( dumpkey ${SRCS} )
 install ( TARGETS dumpkey DESTINATION ${OSSDIR}/bin )
 install ( TARGETS dumpkey DESTINATION ${OSSDIR}/bin )
 
 
 target_link_libraries ( dumpkey 
 target_link_libraries ( dumpkey 

+ 1 - 1
tools/esdl/CMakeLists.txt

@@ -52,6 +52,6 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE -O0 )
 ADD_DEFINITIONS( -D_CONSOLE -O0 )
 
 
-add_executable ( esdl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( esdl ${SRCS} )
 #install ( TARGETS esdl DESTINATION ${OSSDIR}/bin )
 #install ( TARGETS esdl DESTINATION ${OSSDIR}/bin )
 
 

+ 1 - 1
tools/esdl/esdl.cmake

@@ -45,7 +45,7 @@ add_custom_command ( OUTPUT esdllex.cpp
 
 
 set ( SRCS esdlgram.cpp esdllex.cpp main.cpp esdlcomp.cpp esdl_utils.cpp )
 set ( SRCS esdlgram.cpp esdllex.cpp main.cpp esdlcomp.cpp esdl_utils.cpp )
 # esdlgram.y esdllex.l main.cpp esdlcomp.cpp esdl_utils.cpp 
 # esdlgram.y esdllex.l main.cpp esdlcomp.cpp esdl_utils.cpp 
-add_executable ( esdl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( esdl ${SRCS} )
 install ( TARGETS esdl DESTINATION ${OSSDIR}/bin )
 install ( TARGETS esdl DESTINATION ${OSSDIR}/bin )
 #add_dependencies ( esdl esdlgram.cpp esdlgram.h esdllex.cpp )
 #add_dependencies ( esdl esdlgram.cpp esdlgram.h esdllex.cpp )
 
 

+ 1 - 1
tools/fcached/CMakeLists.txt

@@ -38,7 +38,7 @@ ADD_DEFINITIONS( -DMODULE_PRIORITY=1 -D_CONSOLE )
 
 
 set ( SRCS fcached.cpp )
 set ( SRCS fcached.cpp )
 
 
-add_executable ( fcached ${SRCS} )
+HPCC_ADD_EXECUTABLE ( fcached ${SRCS} )
 install ( TARGETS fcached DESTINATION ${OSSDIR}/bin )
 install ( TARGETS fcached DESTINATION ${OSSDIR}/bin )
 
 
 
 

+ 1 - 1
tools/genht/CMakeLists.txt

@@ -38,7 +38,7 @@ include_directories (
 
 
 ADD_DEFINITIONS( -D_CONSOLE )
 ADD_DEFINITIONS( -D_CONSOLE )
 
 
-add_executable ( genht ${SRCS} )
+HPCC_ADD_EXECUTABLE ( genht ${SRCS} )
 target_link_libraries ( genht
 target_link_libraries ( genht
         jlib 
         jlib 
     )
     )

+ 1 - 1
tools/hidl/CMakeLists.txt

@@ -52,5 +52,5 @@ include_directories (
 set_source_files_properties (${CMAKE_CURRENT_BINARY_DIR}/hidlgram.cpp PROPERTIES COMPILE_FLAGS -fno-strict-aliasing)
 set_source_files_properties (${CMAKE_CURRENT_BINARY_DIR}/hidlgram.cpp PROPERTIES COMPILE_FLAGS -fno-strict-aliasing)
 
 
 ADD_DEFINITIONS( -D_CONSOLE)
 ADD_DEFINITIONS( -D_CONSOLE)
-add_executable ( hidl ${SRCS} )
+HPCC_ADD_EXECUTABLE ( hidl ${SRCS} )
 #install ( TARGETS hidl DESTINATION ${OSSDIR}/bin )
 #install ( TARGETS hidl DESTINATION ${OSSDIR}/bin )

+ 1 - 1
tools/keydiff/keydiff.cmake

@@ -39,7 +39,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -DNO_SYBASE -D_CONSOLE )
 ADD_DEFINITIONS ( -DNO_SYBASE -D_CONSOLE )
 
 
-add_executable ( keydiff ${SRCS} )
+HPCC_ADD_EXECUTABLE ( keydiff ${SRCS} )
 install ( TARGETS keydiff DESTINATION ${OSSDIR}/bin )
 install ( TARGETS keydiff DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( keydiff 
 target_link_libraries ( keydiff 
          jlib
          jlib

+ 1 - 1
tools/keydiff/keypatch.cmake

@@ -41,7 +41,7 @@ include_directories (
 
 
 ADD_DEFINITIONS ( -DNO_SYBASE -D_CONSOLE )
 ADD_DEFINITIONS ( -DNO_SYBASE -D_CONSOLE )
 
 
-add_executable ( keypatch ${SRCS} )
+HPCC_ADD_EXECUTABLE ( keypatch ${SRCS} )
 install ( TARGETS keypatch DESTINATION ${OSSDIR}/bin )
 install ( TARGETS keypatch DESTINATION ${OSSDIR}/bin )
 target_link_libraries ( keypatch 
 target_link_libraries ( keypatch 
          jlib
          jlib

+ 1 - 1
tools/pskill/CMakeLists.txt

@@ -26,6 +26,6 @@ project( pstart )
 
 
 if (WIN32)
 if (WIN32)
     include_directories (../../system/win32)
     include_directories (../../system/win32)
-    add_executable ( pskill main.cpp )
+    HPCC_ADD_EXECUTABLE ( pskill main.cpp )
     target_link_libraries ( pskill psapi.lib)
     target_link_libraries ( pskill psapi.lib)
 endif ()
 endif ()

+ 1 - 1
tools/pstart/CMakeLists.txt

@@ -26,5 +26,5 @@ project( pstart )
 
 
 if (WIN32)
 if (WIN32)
     include_directories (../../system/win32)
     include_directories (../../system/win32)
-    add_executable ( pstart main.cpp )
+    HPCC_ADD_EXECUTABLE ( pstart main.cpp )
 endif ()
 endif ()

+ 0 - 0
tools/start-stop-daemon/CMakeLists.txt


Some files were not shown because too many files changed in this diff