In the following, change log entries for the managed software packages are shown
|cego||22.09.2019||2.45.7||Added method CegoBTreeNode::verifyLeafFull for full btree verification in a sense, that each btree value is compared with the corresponding table data entry via datapointer reference|
|cego||22.09.2019||2.45.7||Fix in CegoSelect::setVIewCond, a view condition id has to be calculated which is later used for getQueryId(). Otherwise, wrong query cache entries are used in case of views with outer conditions|
|cego||04.08.2019||2.45.6||Added command line option --fsync to enable physical disk synchronisation for logging and checkpointing. This options slows down database significantly but ensures consistent data in case of an operating system crash|
|lfcbase||04.08.2019||1.14.2||In configure.ac added check for darwin. This is required, since for File::flush implemention, darwin rather requires a fcntl call with option F_FULLFSYNC instead of fsync ( see OSX man page for fsync )|
|lfcbase||14.07.2019||1.14.1||Adaptions made for clean mingw compiles|
|cego||13.07.2019||2.45.5||In CegoClient, added input data check via File::hasData ( available with lfcbase 1.14.0 ). Now, pipe input is autodetected, so the command line argument "--pipe" has been removed|
|lfcbase||13.07.2019||1.14.0||Added File::hasData method to check for available input data from file descriptor ( implemented with POSIX poll function )|
|cego||12.07.2019||2.45.4||Code cleanup to avoid warnings with -Wswitch-enum|
|dragon||12.07.2019||1.5.3||Small cosmetic patch in CPlusGenerator parse method. Instead of default, NULLACTION case has been added to avoid compile warnings with -Wswitch-enum|
|cego||11.07.2019||2.45.3||Release build verified for MinGW|
|cego||11.07.2019||2.45.3||Fix in CegoFieldValue::fastComp, the castTo method calls for t1 and t2 have to be switched, since first ist has to be checked to cast to native btree datatype ( used in CegoBTreeCursor::traceLog, inRange and fullMatch )
create table t1 ( a int, d datetime); create btree b1 on t1(b); select a from t1 where b = '12.07.2019'; -- should be casted from string to datetime
|cego||09.07.2019||2.45.2||Fix in CegoQuery::execute for INSERTBYSELECT_QUERY case. Since the selected tuples are clustered ( MAX_CLUSTERED_INSERT) we have to create a local copy for the corresponding field values. Otherwise, tuple information could be invalidated by relocated buffer pool pages|
|cegobridge||09.07.2019||1.5.3||MySQL SET lines are no more parsed. instead, the scanner ignores these lines|
|cego||07.07.2019||2.45.1||Treated alias insert queries with empty schema, e.g.
insert into a1 values ( 1, 'XXX');
|cego||06.07.2019||2.45.1||Some patches added for alias management to allow alias defintions as a subset of the original table, e.g.
create table t1 ( a int, b string(10), c string(30)) create alias a1 on t1 ( a as ax, b as bx);This has required some fixes in CegoAliasObject::mapSchema and CegoQueryHelper::mapFLA
|cegobridge||06.07.2019||1.5.2||Fix in MySQLAction::storeAttrColumn, _defaultOptString.length() and _nullOptString.length() must be compared greater 1 ( not 0 )|
|cego||02.07.2019||2.45.0||Added trigger and alias object handling to CegoXPorter binary export and import|
|cego||02.07.2019||2.45.0||Added alias and trigger xml export and import feature ( trigger xport was still not implemented ) Fix in CegoDbThread::loadObjects for trigger reload, instead of triggerList.Next(), triggerList.First() was called, which result in an infinite loop in case of existing trigger objects|
|cegojdbc||01.07.2019||1.9.6||Support for cego-2.45 added. Fix in CegoFixed::toString, zero concatenation must be done from left, otherwise wrong conversion for low values occurs ( e.g. 22.03 is printed as 22.30 )|
|cego||30.06.2019||2.45.0||More work on table alias handling. Now works with more sophisticated select queries ( e.g. select ax from a1 aa where aa.ax = 1; ) For this, some fixes had to be done in CegoContentObject, since the the table alias attribute ( _tabAlias ) was not setup in constructor and other methods|
|cego||29.06.2019||2.45.0||Basic alias mapping for select works
Here comes a sample SQL script
drop if exists table t1; list alias; desc alias a1; drop if exists alias a1; create table t1 ( a int, b string(30)); create alias a1 on t1 ( a as ax, b as bx ); insert into a1 ( ax, bx ) values ( 1, 'XXX'); insert into a1 ( ax, bx ) values ( 2, 'YYY'); insert into a1 ( ax, bx ) values ( 3, 'ZZZ'); select ax from a1;
|cego||27.06.2019||2.45.0||Added alias mapping for insert, update and delete queries ( CegoQueryHelper::mapAliasPredicate still to implement )|
|cego||27.06.2019||2.45.0||In CegoDistManager::registerObjects, added registration for fkey, check, trigger and alias|
|cego||26.06.2019||2.45.0||Implemented base semantic actions for creating, listing and describe alias objects ( still no usage )|
|cego||25.06.2019||2.45.0||Added classes CegoAliasObject and CegoAttrAlias for table alias handling|
|cego||25.06.2019||2.45.0||Added table alias feature to grammar definition. Table aliases allow alternate table name and attribute name definitions for a table ( create alias ... )|
|cegobridge||22.06.2019||1.5.1||Added stored procedure grammar defintions to MySQLParser.def. Semantic actions still not implemented|
|cegobridge||21.06.2019||1.5.1||In MySQLAction::storeKey, changed btreename to
|cegobridge||21.06.2019||1.5.1||Actived append mode in CegoBridge::main, which speeds up import performance significantly|
|cegobridge||21.06.2019||1.5.1||Added MySQL type support for type date and type bigint|
|cego||17.05.2019||2.44.14||Some improved exception handling in CegoTableManager::checkIntegrity ( more detail information about violated object )|
|cego||15.05.2019||2.44.14||Code cleanup CegoTableManager, drop/create/alter operations inside a transaction no more allowed|
|cego||12.05.2019||2.44.13||Version passed checkCrashRecovery with the following parameters
NUMRUN=100 DOTRANSACTION=-dotransaction ARANGE=10000 AINTERVAL=500 ACOUNT=30000 PRIMARY=primary POOLSIZE=191All relevant checkpoint situations have been observed over all run
|cego||12.05.2019||2.44.13||Introduced CegoBufferPool::getCPCount() to return to current checkpoint count. This method is used by CegoTableManager, CegoObjectManager and CegoTransactionManager to decide, if a consitency checkpoint is required|
|cego||12.05.2019||2.44.13||Fix in CegoBTreeManager::checkDuplicate, the check for uflag ( returned CegoBTreeNode::valueExists ) to check for high value is not enough if, entries have been deleted from node.
Instead, all subsequent pages have to be checked until a value higher is found
|cego||11.05.2019||2.44.13||Further recovery fix in CegoTableManager::insertDataTable
In case of an insert exception ( e.g. duplicate pkey ), a checkpoint is forced now after deleteData to ensure file consistency
In CegoObjectManager::insertPageData a second checkpoint is forced after data copy, if a previous checkpoint has occured. Otherwise this insert might be ignored during recovery because of lower LSN
|cego||10.05.2019||2.44.12||In CegoTableManager::deleteDataTable, moved the LSN allocation at the end. If checkpoint occcurs during delete operation, the sync LSN might be higher and the delete operation is not recovered|
|cego||10.05.2019||2.44.12||Several fixes and improvements regarding crash recovery
|cego||09.05.2019||2.44.11||Fix in CegoRecovery:::recoverCurrentTransactionLog, for LOGREC_INSERT and LOGREC_DELETE, the corresponding index have to be invalidated with CegoTableManager::invalidateIndexForTable. This logic was already implemented but removed in context of more sophisticated transaction handling ( patch 2.39.11 and around )|
|cego||08.05.2019||2.44.11||Small fix in CegoObjectCursor constructor, changed _isEOC = false to _isEOC = ( pageId == 0 ). This causes getFirst to return false in case of truncated objects ( can occur for RBSEG objects )|
|cegojdbc||05.05.2019||1.9.5||Added driver support for cego version 2.44|
|cego||04.05.2019||2.44.10||Fix in CegoAction::readChain() to support "\r" escape character Fix in CegoBTreeCursor::getFirst, in case of pAttrCond = 0, getNext has to be called if current leaf page is empty, otherwise cursor trace is incomplete ( just used for CegoDistManager::verifyTable|
|cego||04.05.2019||2.44.10||Fix in CegoBTreeNode::getChildPage, parameter traceMin has been introduced, which is needed to trace btree with CegoBTreeManager::deleteBTree. Otherwise, it might happen that btree entries are not found ( occurs just for non-unique btree objects )|
|cego||03.05.2019||2.44.10||Modified rc script to check for configured tablesets to be online ( via cgadm ) This requires additional configuration parameters in rc.conf|
|lfcbase||02.05.2019||1.13.1||Stability patch in Datetime::asChain methods. The result of localtime is checked for null pointer ( may occur in case of very large long values, for which the instance has been created ) and in this case, an exception is thrown|
|cego||02.05.2019||2.44.9||Removed legacy method CegoAggregation::setInit/isInit|
|cego||02.05.2019||2.44.9||Fix in CegoQueryHelper::aggregateTuple, since the field value reference for aggregation field value might be no more valid during the aggregation run, a local copy is created via CegoFieldValue::getLocalCopy.|
|cego||27.04.2019||2.44.8||Added method CegoClient::treateEscape to handle escacpe charaters in command strings for interactive and batch mode ( newline, carriage return und tab )|
|cego||27.04.2019||2.44.8||Further optimization in CegoFunction::getReturnTypeLen, if the length argument in left, right substr function is a constant, this value is used for schema definition, otherwise the length of the source is used.
select left(a,3) from t1 => length 3 is used for schema select left(a,b) from t1 => definition of a is used for schemaFurther ptimization done in CegoSelect and CegoAction for schema evaluation.
|cego||26.04.2019||2.44.7||In CegoSelect::evalSelection, optimization provided in a way, that schema is not evaluated explizit anymore. Rather the previous analysed schema ( prepare method, _evalSchema ) is used. Since for dynamic field length, the resulting schema must be estiamated, this approach is ok.|
|cego||25.04.2019||2.44.7||Fix added in CegoFunction::getReturnTypeLen, evalFieldValue for expression values could fail, since FLA ist still not set up. For this case, now the cont value RETVAL_LEN is returned as an estimation.|
|cego||23.04.2019||2.44.6||Added some code cleanup and additional checks ( check082 and check083 )|
|cego||22.04.2019||2.44.5||Added fix in CegoAttrComp::setup, _posSetup variable was not setup correctly for case BTWN / VALUE2VALUE which might lead to invalid join array access.|
|cego||22.04.2019||2.44.4||Added fix in CegoExpr::evalField and CegoTerm::evalField to provide correct result type. This is required for fastserial protocol usage.
Also added fix in CegoFieldValue::operators +-*/ to cast to the largest value
|cego||22.04.2019||2.44.3||Optimization added in CegoBufferPool::bufferFix. If there is no available slot in the bufferpool, a checkpoint is forced for the corresponding tableset ( already implemented ). Now if still no available slot, we force checkpoint for all other online tableset of the database. This might be useful, if the bufferpool is heavily occupied by other tablesets with dirty pages.|
|cego||21.04.2019||2.44.2||Fix in CegoTableManager::deleteDataTable, before resolving external table references via evalExtTableReferences, the subquery must be prepared, to resolve local attributes first|
|cego||21.04.2019||2.44.1||In CegoFIleHandler, introduced read only mode, which is used for tableset export|
|cego||21.04.2019||2.44.1||For connection pools ( db, admin, lock ) added a check for max connection queue length ( CegoDefs::NETMNG_MAXQUEUELEN ) to protect against port penetration|
|cego||20.04.2019||2.44.0||Compile successful on mingw|
|lfcbase||20.04.2019||1.13.0||Compile succesful for mingw|
|cego||19.04.2019||2.44.0||Added authorization for log connection via dedicated loguser.
The log user is setup via cgadm with "set loguser
|cego||19.04.2019||2.44.0||In CegoDbThreadPool, CegoAdminThreadPool and CegoLogThreadPool, pHandle variable was not initialized ( to zero ). This might cause a crash of the system in case of heavy request penetration or other net exception.|
|cego||19.04.2019||2.44.0||Added logging of incoming connection source information. This requires lfcbase-1.13.0, since ip source information has just been added to NetHandler class|
|lfcbase||19.04.2019||1.13.0||Added ip source information to NetHandler class, which is provided via Net::nextRequest.|
|cego||07.03.2019||2.43.4||Added fix in CegoSelect::getSchema, In case of union selects, the schema fields have to be checked for type compatibilty. For const null values in expression list, the schema is adapted to the appropriate type in deeper unions. This is required, since the schema types must be consistenst for the whole row set.|
|cego||20.02.2019||2.43.3||Fix in CegoAttrCond::asConjunctionList, CegoExpr and CegoDistCursor to treat external expression references ( setting up for view objects in selection tableset ). The FLA for the external predicate expressions has to be setup by CegoExpr::setExternalFieldArrayList. Otherwise the FLA for the external expressions might be overwritten by the nested view object which leads to unknown attribute errors. As a sample to reproduce this problem check080 has been added.|
|cegojdbc||29.01.2019||1.9.4||Patch added in CegoDataRow, the byte buffer has to be reminded, to allow multiple calls for CegoResultSet.getInt/getLong/etc.|
|cego||24.01.2019||2.43.2||Some code cleanup in CegoRecoveryManager|
|cego||21.01.2019||2.43.1||Sync patches in CegoBufferPool:writeCheckPoint to keep database konsistent in several crash cases. The patches habe been checkd with the samples/chkdb/checkRandomCrash Script for about 1000 crashes and recoveries.|
|cegojdbc||15.01.2019||1.9.3||Added compatibility check for cego version 2.43. Since there not have been made any protocol changes, the driver already works with cego version 2.43.x|
|cego||12.01.2019||2.43.0||Adapt cego rc file to support cpdump and cleanup tableset start options|
|cego||12.01.2019||2.43.0||Introduced checkpoint dump option.
With this option enabled at tableset startup time, first a dump of the dirty buffer pool pages is written. If written completely, the dump file is commited ( renamed ) and the recorded pages are physically written to the data file.
This option avoids inconsistent data file in case of a system crash during the checkpoint procedure. After system crash, the dump file is checked and if commited, the dumped pages are written again to the data files. This operation is idempotent and so can be repeated several times until the dump has been completely written to datafiles and is removed then.
|lfcbase||07.01.2019||1.12.7||Small patch in ShmTest.cc to avoid seg fault for MinGW "make check" ( Shared Memory is just dummy implementation for MinGW )|
|cego||05.01.2019||2.42.17||Improvement for datafile cleanup added. For this, method CegoTableManager::cleanTableSet has been introduced which traces through all relevant database objects and marks allocated pages ( CegoFileHandler::commitPageEntry ). In case of a bitmap diff, the commited bitmap is written to the datafile.
This method allows a complete cleanup of data files after a crash where no allocation leaks result anymore.
The method has been proven with crashCheckAndRecovery
|cego||04.01.2019||2.42.17||Further code cleanup in CegoFileHandler, Changed fixStat type from int to unsigned and size calculation for bitmap handling consequently to unsigned|
|lfcbase||04.01.2019||1.12.6||Introduction of constructor Chain(unsigned) and method asUnsigned|
|cego||02.01.2019||2.42.16||Code cleanup to compile warning free with -Wall|
|lfcxml||02.01.2019||1.2.10||Changed generated XML parser code to virtual destructor|
|dragon||02.01.2019||1.5.2||Small code cleanup for clean compile -Wall. Changed to code generation with virtual destructor|
|lfcbase||02.01.2019||1.12.5||Code cleanup done with elimination of all warning thrown by -Wall|
|cego||02.01.2019||2.42.15||Small improvement in CegoBufferPool / CegoFileHandler for page backup handling ( consolidation if isPageBackup and isPageMarked to needPageBackup ). This should improve checkpoint performance|
|cego||01.01.2019||2.42.15||Introduced CegoBufferPool::optimizePool method. This method analyses the bufferppol and if possible, relocates often used pages page entries to its optimal position ( pageIndex = hashId ). This may result in paging out of other pages with lower fixstat values. The method is called during every checkpoint.|
|cego||29.12.2018||2.42.14||Quality check with 1000 loops in checkCrashAndRecovery performed successful ( for redo logfile size = 10000000, simple case, no transaction checkpoint split )|
|cego||29.12.2018||2.42.14||Added CegoTableManager::resetTemp & friends methods to perform a reset of the temp space after starting a tableset. This ensures, that allocation leaks caused by a system crash are removed|
|cego||29.12.2018||2.42.14||Redesign of CegoBTreeNode::valueExists compare handling. In some transactional cases, the old logic did not reach valid entries. For this a specific search down / search up inside the tree node has bee added.|
|cego||28.12.2018||2.42.14||More investigation with checkCrashAndRecovery. As a result, tastep information is now also stored in log entries ( CegoLogRecord ). This is required, to decide about the visibility of table data during recovery for open transaction. This is ugly stuff ...
Normally, this is a minor change to version 2.43.x since format of log files is incompatible now. But there is now impact for normal operation ( just in case of crash or backup recoveries ). So I leave the version to 2.42.14
|cego||27.12.2018||2.42.14||More checks with checkCrashAndRecovery using larger transaction sizes. This lead to a transaction handling bug in CegoBtreeNode::isTupleVisible, tuple state must be NOT in state OBSOLETE to be visible.
Otherwise, the small script breaks :
start transaction; insert into t1 values ( 1, 'XXX'); update t1 set b = 'FFF' where a = 1; -- here comes a duplicate error commit;
|cego||26.12.2018||2.42.13||Several fixes added for recovery procedure. LOGREC_DELETE_COMMIT and LOGREC_UPDATE_COMMIT log message types have been removed, index rebuild is done at the end of recovery. This must be done, otherwise in case of open transactions, btree references might be corrupted.
This whole recovery process has been tested and verified with a powerful script ( samples/chkdb/checkCrashAndRecovery ), which generates random insert/update/delete operations on a table in transactional chunks ( using cgblow --mode=arb2 ) and the daemon is crashed and restarted. The table content before and after crash is compared then. The recovery procedure seems to be stable now.
|cego||24.12.2018||2.42.12||Changed CegoBufferPool::bufferRelease in a way, that frees pages are just saved in a list. the pages are deleted from datafile if the next checkpoint is reached ( writeCheckPoint method ). This ensures transaction save handling also for clob recovery operations.|
|cego||28.11.2018||2.42.11||Remwork of CegoTableManager::dropObjectSynced method. Cleanup of implementation in a sense the useObject / unuseObject is consequently moved this level ( was not for procedures and views ). Also fixed issue of missing pDBMng->removeObject call|
|cego||20.11.2018||2.42.10||More restrictive checks for drop table with referenced foreign key added. Now it is not allowed to drop a table with existing key reference ( except self refering tables )|
|cego||19.11.2018||2.42.10||Added truncate command for truncating table object. Redesign also done for dropTable method in terms of log messages. Now one single log message in created for dropping a table ( instead of dedicated messages for each corresponding object like index, key, check, et )|
|lfcxml||12.11.2018||1.2.9||Added missing includes string.h and stdlib.h in Element.cc and xmltext.cc required for clean Linux compile|
|cego||10.11.2018||2.42.9||Fix in CegoDistManager::createLocalDataTable, exception catched if primary could not be created and data table is removed in this case
Some method redesign in CegoBTreeManager and CegoBTreeNode for better handling of unique btrees. CegoBTreeNode::getChildPage now returns the upper page, for this also the method CegoBTreeValue::iEqualHigher has been introduced. Duplicates are checked with new introduced method CegoBTreeNode::checkDuplicate
|cego||07.11.2018||2.42.8||Some improvements added regarding procedure exception handling|
|cego||06.11.2018||2.42.8||restrictions added for lock Table / unlock table command ( in CegoDatabaseManager::unuseObject ) to ensure, that unlock operations are just valid, if the corresponding table is locked by the calling thread|
|cego||06.11.2018||2.42.7||Adaptions made in CegoXPorter for new memory outstream mng in lfcxml 1.2.8|
|lfcxml||06.11.2018||1.2.8||Changed memory management for outStream handle in Element ( is done by producer now )|
|lfcxml||04.11.2018||1.2.7||Patch in XMLSuite to treat CDATA handling in a better way. The detection of CDATA endtoken ( "]]>" ) was not handled correctly, if moreData has to be called during read the endtoken.
To handle this, a lookahead has been introduced and as a consequence, the XML grammar has been modified ( read of endtoken is completely done by scanner, no more grammar symbols are needed anymore )
|cego||02.11.2018||2.42.6||Small optimizsation done in CegoBTreeCursor. Instead of using releaseDataPtrUnlocked and claimDataPtrUnlocked method, now the combined method releaseAndClaimDataPtrUnlocked is used. In case of traversing tuples which are located in the same page, this avoids bufferFix / bufferUnfix operations, since the requested pageId is already fixed ( the releaseAndClaim method has also been modified for this )|
|cego||01.11.2018||2.42.5||Add avgFixTry attribute to bufferpool information to indicate the average number of fix tries|
|cego||01.11.2018||2.43.0||Recognized a fatal design issue with new primary key design : since the tuple data store within primary key has no static data pointer anymore, there no efficient and trivial way to handle further index object on this data. Actually, I have no idea how to deal with this issue, so I stopped progress of this version. Detected bugs ( detect duplicated primary in btree nodes and small issue in CegoXPorter ) are fixed with version 2.42.5|
|cego||28.10.2018||2.43.0||XML and binary export/import with new primary key structure works now|
|cego||27.10.2018||2.43.0||Primary key adaptions made for CegoXPorter.
Old XML format still can be imported ( primary key handling ) but NOT binary/plain export files
|cego||27.10.2018||2.43.0||Fix added to CegoBTreeNode::getChildPage. For unique trees and primary trees, just the leaf nodes have been checked. Also the tree nodes have to be checked for duplicates, otherwise, duplicate entries may occur.|
|cego||27.10.2018||2.43.0||Implementation of CegoTableManager::createPrimaryKey added. This methods converts an existing table to a btree table ith primary key. The syntax for primary key creation has been changed ( Now : alter table xxx add primary key ( x, y, z ) )|
|cego||25.10.2018||2.43.0||More work on CegoBTreeManager and friends to complete insert for primary btree values ( split node )
Extension for CegoBTreeCursor to support traversation of tables with primary key. Logic basically works !
|cego||23.10.2018||2.43.0||CegoBTreeManager and friends have been adapted for primary key handling. Inserting primary btree values basically works with first leaf page|
|cego||21.10.2018||2.43.0||Started with alternate primary key implementation. In this sense, the primary key stores the complete tuple data ( instead of datapointers to records in a table object ). In case of index traces, this avoids several bufferfix/bufferunfix operations and should result in a better database performance.
Still pretty much work ahead ...
|cego||20.10.2018||2.42.5||Small optimization in CegoBufferPool::bufferFix, in step 1, the pool is locked not outside the loop over numtries. This decreased locking granularity but avoids some lock operation and should improve bufferpool performance|
|lfcbase||20.10.2018||1.12.4||Fix in NanoTimer, changed return value for getSum method to unsigned long long|
|cego||15.10.2018||2.42.4||Fix in CegoAction::execListCounter, changed scheme type to LONG_TYPE, which is important for fastserial protocol|
|lfcbase||15.10.2018||1.12.3||In basecheck/ChainTest, the visibelLength Test has been disabled for MinGW compiles since setlocale seems to be broken in MinGW|
|cego||14.10.2018||2.42.3||Lock timeout definitions have been increased from 10000 to 30000 ms. ( CegoDefs.h )|
|cego||13.10.2018||2.42.3||In samples/rc/cego startscript added cego_protocol parameter to support fastserial mode|
|cego||13.10.2018||2.42.2||Fix in CegoAction::formatTableInfo, the field types for schema attributes PAGES and RELEVANCE have to changed to INT_TYPE, for fastserial protocol this is important|
|cego||01.10.2018||2.42.1||Post note : This patch contains a fix for datetime value encoding/decoding in CegoFieldValue. It still was done with 4 byte ( since version 2.40.0, cego uses 8 byte datetime length )|
|cegojdbc||01.10.2018||1.9.2||Completed data type handling in CegoDataRow|
|cego||29.09.2018||2.42.1||Fix in CegoTableManager::alterDataTable, for case RENAME, the schema is checked for already existing attribute name|
|cegojdbc||29.09.2018||1.9.2||Completed data type handling in CegoDataRow::valueAsString|
|cegojdbc||25.09.2018||1.9.1||Set TCP_NODELAY flag for sockets in CegoNet.java ( via Socket.setTcpNoDelay(true). Disabling the Nagle's algorithm leads to a much better network performance, since the latencies for any response packets is reduced significantly. ( For scenarios with heavy parallel load with many sustained queries, I observed speedup up to 3 or 4 times faster )|
|cegobridge||23.09.2018||1.5.0||Added support for fastserial protocol|
|cegodbd||23.09.2018||1.5.0||Added support for fastserial protocol|
|cego||21.09.2018||2.42.0||Fix in CegoDbThread::serveRequest, case GETBLOB and GETCLOB, the clobref still was not treated there, which lead to corrupted lob results if, the lob service is used ( normally via JDBC with the ResultSet.getBlob/getClob methods )|
|cego||20.09.2018||2.42.0||Small protocol modifications also made for serial protocol ( cego type id is now transfered to client ) which incompatibles serial protocol with earlier versions ( < 2.42.x )|
|cegojdbc||20.09.2018||1.9.0||Add support for fastserial protocol.|
|cego||19.09.2018||2.42.0||Added new network protocol fastserial for improved transfer performance from db client to db server ( and vice versa ). The fastserial protocal ist based on the native serial protocol but is no more plain ASCII/UTF. Instead field length information is transferred as plain integers. In this sense, the protocol is machine dependent.|
|cego||17.09.2018||2.41.7||Performance improvement in CegoQueryHelper::decodeFVL, changed to a more efficient way to setup field values|
|cego||17.09.2018||2.41.7||Performance improvement in CegoSelect::evalSelection, in case of aggregations and grouping, the field value is already setup by getFieldList method, so no need to iterate through pJoinBuf|
|cego||16.09.2018||2.41.6||Performance optimization in CegoObjectManager, changed CegoObjectManager::claimDataPtrUnlocked to return void, the CegoBufferPage is returned as a reference parameter, this avoid copy operation for the buffer page variable|
|cego||16.09.2018||2.41.6||Removed unused CegoFieldValue variables in CegoBTreeCursor methods inRange / fullMatch. This may impact cursor performance, since this methods are heavily called.|
|cego||15.09.2018||2.41.6||Optimization done in CegoTableManager::getClobs/getBlobs, lobList parameter changed to reference instead of returning the lobList. This avoids copy operation of the lobList during insert or update which might be pretty expensive|
|cego||14.09.2018||2.41.6||Fix/optimization in CegoBTreeValue, the static array _idxArray was removed. Instead, memory is allocated dynamically, when used ( just, if method valueFromSchema is called in btree insert case ). This should improve performance for btree cursor, since, no memory must be stacked, if a btree value variable is declared|
|cego||14.09.2018||2.41.6||Several code optimizations regarding method parameter handling ( rather try to use reference instead of return copy, e.g. changed CegoExpr::getFieldList and friends|
|cego||03.09.2018||2.41.5||Fix in CegoAttrCond::setup(ListT
drop if exists table t1; create table t1 ( a int, b string(10), c string(10)); insert into t1 values ( 1, 'W0001', '001'); insert into t1 values ( 1, 'W0001', '003'); insert into t1 values ( 1, 'W0138', '002'); insert into t1 values ( 1, 'W0138', '001'); select * from t1 tx where exists ( select * from t1 ty where tx.a = ty.a and tx.c = ty.c and ty.b = 'W0001' ) and tx.b = 'W0138';With the patch, result is
+-----------+-----------+-----------+ | tx | tx | tx | | a | b | c | +-----------+-----------+-----------+ | 1 | W0138 | 001 | +-----------+-----------+-----------+
|cego||31.08.2018||2.41.4||Added database functions blobref and clobref to indicate the amount of lob references for a given lob|
|cego||30.08.2018||2.41.4||Fix in CegoDbThread::serveRequest, case PUTBLOB and PUTCLOB, the blobRef/blobSize setup was not handled correctly here|
|lfcbase||30.08.2018||1.12.2||Fix in basecheck/DateTimeTest. Added an #ifdef MINGW32 for datetime values beyond 2040|
|cego||30.08.2018||2.41.3||Fix in CegoFactor::checkLob, the method implementation was still not complete. This might lead to problems during crash recovery of update operations|
|dragon||30.07.2018||1.5.1||Fix in src/Main.cc and samples/gxmain-master.cc. Include of stdlib.h added, since this is needed for Linux compiles ( exit function )
In GoLangGenerator.cc scanner code was added to complete scanner state machine ( there still was missing some code for transition jumps )
|dragon||26.07.2018||1.5.0||Added code generation for GoLang. GoCode is generated, compiles and basically works Still some cleanup stuff required|
|cego||29.06.2018||2.42.2||Improvement for join optimizer in CegoSelect::consolidateConjunctionList. With the new introduced method CegoQueryHelper::checkIndexForPredicate the conjunction list elements are checked. This leads to a better join order, where index related predicates are evaluated first.|
|cego||18.06.2018||2.41.1||Performance optimization for bulk insert ( insert into t1 values ( 1, 'XX'),(2,'YY'),... ) Just with the last inserted tuple, the online redo logs are flushed to disk. For the the method paramter flushLog has been introduced for several methods ( CegoLogManager::logAction, CegoBufferBool::logIt, CegoTableManager::insertDataTable )|
|cego||16.06.2018||2.41.0||Modified lob handling in a way, that references to lobs are managed. This avoids expensive lob copy operations in case of update queries with lob values.
Since the lob reference counter is stored inside the lob, this incompatibles the datafile format with previous versions. In case of a tableset with lob values, an export and import is required for this version
Also lob recovery handling for update operations is fixed in this version ( CegoQueryHelper::encodeUpdRec and CegoQueryHelper::decodeUpdRec )
|cego||14.06.2018||2.40.14||Patch in CegoProcedure::execute to treat cast from string to clob. For this the method parameters had to be expanded to provide TableManager and TableSetID which is required, to add a clob ( in case of a string to clob cast )|
|cego||13.06.2018||2.40.13||Fix in CegoDistCursor, class variable _useCache was not initialized, might lead to poor cursor performance, since the table data is cached although cache not enabled. Performance improvement for insert query. In case of array insert ( insert into t1 values ( 1, 'XX'), (2, 'YY'), (3, 'ZZ') ... ) insert operations are handled in a more efficient way|
|cego||12.06.2018||2.40.12||Modification for transaction handling in CegoDistManager::deleteLocalDataTable. Now the delete operation is executed inside a single transaction ( for any performance in the past, nested transactions had been executed in CegoTableManager::deleteDataTableEntrySynced, which leads to very poor delete performance )|
|cegojdbc||09.06.2018||1.8.3||Fixes in CegoSerialTokenizer for correct Umlauthandling.For this, the source string is converted to a byte array, since just in the array, the correct token positions can be detected ( Java treats umlaute as single characters )|
|cego||08.06.2018||2.40.11||Fix in CegoBTreeNode::operator = , _entrySize was not copied. This might lead to btree build problems|
|cego||08.06.2018||2.40.11||Fix in CegoBTreeNode::operator = , _entrySize was not copied. This might lead to btree build problems|
|cego||03.06.2018||2.40.10||In CegoFieldValue, small performance improvements for compare methods ( isEqual, isLess, isMore ... ) are made|
|cego||01.06.2018||2.40.9||In CegoFieldValue::fastComp for type VARCHAR now memcmp is used rather than strcmp. For type DATETIME, the compare is directly done on field pointers ( instead of copying to local unsigned long long variables )|
|cego||01.06.2018||2.40.9||Performance improvement in CegoAttrComp / CegoAttrCond classes. In the CegoAttrComp::setup method, the field value position is now also cached. So for subsequent method calls, the cached field array position is used instead of searching the position by looping through the array.|
|cego||25.05.2018||2.40.8||Modification of tableinfo information. Just object information is returned now without size information for each object. For large table configurations, this avoids response delay. To get size information, the command tablesize has been introduced. In this sense, tableinfo output is a subset of tablesize output.|
|cego||23.05.2018||2.40.7||Further performance improvement for advanced select queries.
In CegoSelect, the attribute cache in not cleared anymore. This assumes to setup the the FLA structure with CegoExpr::setFieldListArray method. For this, the CegoExpr::evalField method had to be modified, since CegoSelect::getSchema had set up field list array with a different structure. Now the field information is given as an argument to getField, so the field list array has not to be set up.
It has been observed, that for sophisticated queries the performance improvement can be up to 30% depending on the number of join fields and joined tables.
|cego||15.05.2018||2.40.6||Patch added for inner/outer joins with null condition in where clause ( e.g. select t1.a, t2.d from t1 left outer join t2 on t1.a = t2.c where t2.d is null ). The where condition has to be evaluated out of join, otherwise the may lead to wrong results. For this reason, n CegoDistCursor::joinSetup, the _innerCond and _outerCond variables are set to empty now in case of inner/outer join.|
|cego||11.05.2018||2.40.5||Small optimization for inner joins added. In CegoDistCursor::distSetup, _doEval is set to false, if the join type is inner join. For any outer joins, the evaluation is still required|
|cego||08.05.2018||2.40.4||Performance patch in CegoBTreeCursor::getFirst added. Instead of tracing each value in the first leaf node to find the entry point, this is now done by a binary search. This reduces search efforts from O(n) to O(log(n)) where n is the number of maximum index entries per btree leaf node.
This might reduce query execution time for complex joins with extensive use of btree cursors
|cego||06.05.2018||2.40.3||Perormance patch in CegoBTreeCursor::traceLow / fullMatch / inRange methods. Instead of creating the field value as a local copy, the value reference from the btree value is used. This speeds up btree cursor trace performance about 20% faster|
|cego||02.05.2018||2.40.2||Improved version of CegoQueryHelper::decodeFVL, the assumption is, that column ids are coming in an increased order in field value list. So we do not need to loop over fvl to find the corresponding column id. Rather we iterate together with decoding buffer to perform decoding in O(n) ( instead of O(n*m) ) where n = number of matched rows and m number of columns in table|
|cegojdbc||30.04.2018||1.8.2||Improvement in class CegoNet::receiveDoc, If the message buffer exceeds, instead of an exception now the message buffer is reallocated. This avoids any definition dependency between database server and JDBC driver to correlate the appropriate buffer sizes.|
|cego||28.04.2018||2.40.1||New definitions in CegoDefs
#define NETMNG_MAXTUPLECOUNT 3000 #define NETMNG_MAXBYTECOUNT 10000000Introdduction max maxByteCount allowed to increase MAXTUPLECOUNT, which should result in a better network performance. MAXTUPLECOUNT is still need for XML protocol ( legacy reason )
|cego||28.04.2018||2.40.1||In CegoOutput, extended setDbHandle method to parameter maxBytePerMsg. In CegoDbHandler introduced method numCollected. So now also the amount of collected bytes is counted and is limited to a defined value per network message|
|cegojdbc||27.04.2018||1.8.1||Patch in CegoSerialTokenizer::nextToken , _pos has to be checked for less than _stream.length in while loop|
|lfcbase||26.04.2018||1.12.1||Patch in File::flush for MinGW64, fsync functions seems not to be supported for MinGW64, so we flush stays empty|
|cegojdbc||25.04.2018||1.8.0||Version released ( supports cego 2.40.0 )|
|cego||25.04.2018||2.40.0||Version released. Please note, that this version is incompatible to previous versions in terms of datafile format and serial network protocol. A complete database export/import ( xml or sql dump ) is required for update. Futhermore lfcbase-1.12.0 base library is required.|
|cego||25.04.2018||2.40.0||Performance patch in CegoTableManager::putClobData/puBlobData. The getNewFilePage method now is called with doAppend = true. In case of large filled database, clob import performance was pretty poor|
|cegojdbc||24.04.2018||1.8.0||Support added for cego version 2.40.0|
|cego||24.04.2018||2.40.0||Performance patch for CegoSerial class added. Now the token length is given to avoid any escape character handling. Please note, that this patch is incompatible to cego versions before 2.40|
|lfcbase||24.04.2018||1.12.0||Added Tokenizer::rawRead method to read a given number of bytes raw from the token stream|
|cego||23.04.2018||2.40.0||Support for lfcbase-1.12.0 API added. Please note, that this version is incompatible to previous database files. An XML export or SQL dump before update is required to be able to restore the database after upgrade|
|lfcbase||23.04.2018||1.12.0||Changed Datetime API, instead of provide asInt method, now the more advanced asLong method is implemented to handle 64 bit datetime values ( 2040 and beyond )|
|cego||19.04.2018||2.39.16||Fix in CegoObjectManager::insertPageData, new data entry is checked now for maximum available space in page. This is done, if a new data page has to be allocated and the data entry still fits not into page|
|cego||19.04.2018||2.39.16||Added File::flush method to CegoLogManager and CegoFileHandler to synchronize log data and datafile data to disk|
|lfcbase||19.04.2018||1.11.9||Introduced new method File::flush to force synchronization of data to disk|
|cego||10.04.2018||2.39.15||Fix in dbcheck/expimpcheck, test plan was not set up correctly
In CegoXPorter and CegoExpImpStream, row export information was added again to indicate overall row export for each table
Fix added in CegoDbThread::serveRequest ( GETBLOB and GETCLOB case ) and CegoTableManager::getBlobData / getClobData chunkSize calculation. The existing calculation did not treat every boundary case.
|cego||09.04.2018||2.39.14||Fix in CegoXPorter::writeRow and CegoXPorter::readRow for binary export and import of tables containing lob null values. lob null values must be identified by colLen unsigned long long = 0 instead of integer = 0|
|cego||09.04.2018||2.39.14||Fix in CegoXPorter::writeRow and CegoXPorter::readRow for binary export and import of tables containing lob null values. lob null values must be identified by colLen unsigned long long = 0 instead of integer = 0|
|cego||07.04.2018||2.39.13||Fixes in CegoLogManager, CegoRecoveryManager, CegoDistManager and CegoTableManager for LSN handling. Instead of saving the next LSN, now the current written LSN is recorded in CegoLogManager. This seems to be more natural, since a lot of methods set up the LSN to a value + 1. Also this fixes a mismatch between commited lsn and current lsn, which leads to a tableset recovery during startup in any case ( occured with version 2.39.9 )|
|cego||07.04.2018||2.39.13||Introduced CegoTransactionManager::getCrashAffectedTables method. In case of a crash recovery, all transaction affected tables have to be analysed for index objects. Before finishing transactions, the index objects have to be invalidated ( since they might be corrupted ) and after completion of transactions they have to be recreated. This is done now in CegoTableManager::finishOpenTransaction|
|lfcbase||06.04.2018||1.11.8||Extensions made for Chain::toLower and Chain::toUpper methods. To treat multi character strings, a conversion is made to wide characters using mbstowcs libc function. case conversion now is done with towupper / towlower wide character function. Strings are then converted back to multicharacters using wcstombs function.
This allows upper/lower case conversion now for Umlaute ( öüä ) which have actually not been treated
|cego||05.04.2018||2.39.12||Patch in CegoClient to catch format exceptions like "Invalid datetime string <0> for format <%d.%m.%Y %H:%M:%S>". This may happen, if on server side bad union selects are defined like
create view v1 as select a as a, b as b from t1 union all select a as a, 0 as b from t2;where b is a datetime data type. In this case, bad formatted strings are occured on client side, which are catched now.
|cego||05.04.2018||2.39.12||Patch in CegoDatabaseManager::useObject to support lock delay values > 1 sec. The DBM_LOCKDELAY value in CegoDefs has now increased to 2500 msec. In some cases for heavy updates ( e.g. clob updates ) this might be useful to avoid ugly exclusive lock delay messages in database log file|
|cego||04.04.2018||2.39.12||Fix in CegoTableManager::updateTuple, if the update fails ( this might happen, if another transaction actually updates the corresponding tuple ), any allocated lob values are freed now. Otherwise the for the lob values are data pages allocated with no more references|
|cego||31.03.2018||2.39.10||Improvements were made for log handling, the logIt method was moved from CegoTableManager to CegoBufferPool. This allows a more adequate locking of the logging actions. For this the tsLock array has been removed from CegoTableManager and lmLock array has been set up in CegoBufferPool. Since checkpoint writing occurs in CegoBufferPool ( which is also relevant for loging operations ), the logging method is now part of CegoBufferPool.
The logAction method in CegoLogManager has also been improved in a way, that a log buffer is not allocated for each logging operation anymore. Instead, a logBuf array has been defined for all tablesets and the logBuf is reallocated, if the current logging record exceeds the log buffer.
|cego||29.03.2018||2.39.9||Added fixes for recovery procedure in CegoTableManager. Now the LSN is allocated at the beginning of critical operation to avoid double operations in case of a forced checkpoint.
For this the CegoLogManager::nextLSN method has been introduced. Now it is no more ensured that the log is written with increasing LSN, so some logical parts of the recovery procedure in CegoRecoveryManager has been changed.
In CegoBufferPool, the writeCheckPoint method still returned int value. This has been changed to unsigned long long
|cegojdbc||22.03.2018||1.7.9||Improvements for clob handling ( put clob to database )|
|lfcbase||18.03.2018||1.11.7||Additional fix to this release : Added regfree call to Matcher destructor. Missing this call seems to cause a small memory leak|
|cego||18.03.2018||2.39.8||Fix for memory leak in CegoPredDesc, pMatcher has not been cleaned up|
|lfcbase||18.03.2018||1.11.7||Fix for memory leak in TreeT and AVLTreeT. The = operator implementation did not empty the tree before copy.|
|cego||09.03.2018||2.39.7||Fix in CegoRecoveryManager::recoverCurrentTransactionLog for the INSERT case. For the blob/clob handling, the lobREf values have not been set up correctly. This might lead to problems for table recovery with more than one lob row ( e.g. table t1 ( a blob , b clob )|
|cegojdbc||08.03.2018||1.7.8||Fix in CegoNet.closeSession, disconnect method call was added to close finally the socket descriptor. Otherwise this may lead to socket leaks with the error message "too many open sockets"|
|cego||07.03.2018||2.39.6||Some clob related fixes in CegoQueryHelper::decodeNativeFVL / decodeFVL which relevant for recovery handling|
|cego||07.03.2018||2.39.6||Fix in CegoTableManager::deleteDataTable, pBlock has to be checked for null value, otherwise crash recovery might crash. ( bug came with 2.39.0 to check for pBlock->getTriggerValueList )|
|cegojdbc||06.03.2018||1.7.7||Fix in CegoNet.getClob, the full msgSize has to put to setBytes method, otherwise large are getting corrupted in case of multiple message chunks|
|cego||06.03.2018||2.39.5||Bug fix in CegoAction::reallocateStringBuf, in the memcpy call, just the previous stringBufLen has to be copied ( _stringBufLen - MAXSTRINGLEN ). This bug might lead to seg fault in case of large parser input ( e.g. clob strings )|
|cego||06.03.2018||2.39.5||In CegoQuery for insert and insert-by-select case, allocated blob and clob data ( by CegoQueryHelper::prepareFieldValue ) is cleaned now if any exception occurs|
|cegojdbc||05.03.2018||1.7.6||Fix in CegoClob method setBytes, The copy operation was not correctly done|
|cego||05.03.2018||2.39.4||Small bug fix in CegoDistManager, which came up with version 2.39.0. In method deleteLocalDataTable, the variable delCount was declared two times, which lead to a result of 0 tuples deleted in any case|
|cego||02.03.2018||2.39.3||Small improvement in CegoDbThreadPool. For a better db thread load value calculation, the request queue is no more locked while no incoming requests. Instead the QUEUEDELAY parameter has been increased to a default value of 200 msec to reduce db thread cpu load while idle. Now the db thread have a good chance to report idle time to the db thread pool|
|cego||02.03.2018||2.39.3||Some boring code cleanup done|
|cego||02.03.2018||2.39.3||In CegoQuery::execute, changed order for setBlock and setFieldListArray for INSERT_QUERY case|
|cegobridge||01.03.2018||1.4.0||Adaptions for cego-2.39|
|cego||01.03.2018||2.39.2||Fix in CegoTableManager::updateTuple, while setting up expression list, field list array must be setup BEFORE block ist set, since field list is needed by block setup ( in case of subqueries for prepare )|
|cegojdbc||28.02.2018||1.7.5||Added implementation for several clob relevant methods and like ResultSet.getClob, Clob.getCharacterStream and others|
|cego||27.02.2018||2.39.1||Fix in CegoQueryHelper::encodeFVL, for blob/clob values lists, the corresponding index variables ( blobidx/clobidx ) have not been increaed while encoding lob data. This might lead to invalid results and seg faults in case of multiple lobs values in one insert/update operation.|
|cegojdbc||26.02.2018||1.7.4||Consolidation of methodes CegoNet::connect and CegoNet::requestSession. This is just an small optimization for connection establishment|
|cego||25.02.2018||2.39.0||Trigger implementation basically completed|
|cego||24.02.2018||2.39.0||Trigger feature basically works for on insert. Some expansions for triggerValueList handling have to be done in CegoProcBlock class. This is for refering to ( insert ) values from the triggering statement|
|cego||24.02.2018||2.39.0||Initial trigger implementation done, classes CegoTrigger and CegoTriggerObject added and integrated, Parser expansion for corresponding trigger commands done. Code compiles|
|cego||23.02.2018||2.39.0||Started with trigger implementation|
|cego||23.02.2018||2.39.0||Introduced table locking statements to set an explicit lock on a table ( e.g. for update synchronisation ). This feature replaces the "set update sync on/off" command|
|cego||22.02.2018||2.38.20||For heavy update operations on tables with btrees used embedding transactions, duplicate btree errors may occur. This is caused by not checking corresponding tuple states. To solve this problem, the following fixes have been done : - Fix in CegoTableManager::checkBTreeIntegrity : The tuple state for found entries has to be checked if state = COMMITTED - Fix in CegoBTreeNode:checkForAffected ( was checkForDeleted before ) : The tuple state has already checked for state INSERTED if, tid != dataTid|
|cegojdbc||21.02.2018||1.7.3||Improvements made regarding network IO handling. Instead of using PrintStream for socket output, now native ByteStream is used. It has been observed, that PrintStream seems to have some overhead and slows down network communication significantly. Many parallel threads writing sockets in parallel may lead to an hanging IO ( observed on SUSE Linux ) Furthermore, the P() and V() semmaphore methods in CegoNet have been removed. Instead, for the critical regions, synchronized methods are used now. At all, this patch lead to a much better driver performance, especially for linux based systems|
|cego||10.02.2018||2.38.19||Fix in dbcheck/check065.sql for union sql in view.There must be set up aliases for attributes in selection now|
|cegojdbc||02.02.2018||1.7.2||Switched to sl4j API|
|cego||30.01.2018||2.38.18||Fix in CegoSelect::prepare, expression alias in select list are checked now for union selects. Alias definition in select expression list should be identical for all select statements in union|
|cego||28.01.2018||2.38.17||Fix in CegoTableManager::createForeignKey, for empty tables, referenced attributes names have not been checked. This might lead to invalid key objects.|
|lfcbase||18.01.2018||1.11.6||Code cleanup class Net and NetHandler ( eg. changed from bind to ::bind since fpr FreeBSD 12, compile problems occured without namespace definition|
|cego||29.12.2017||2.38.16||Optimization for procedure load in CegoFunction::evalFieldValue ( case USERDEFINED ), procedure is just loaded as a dedicated instance ( via loadProcedure method ), if pMasterBlock is set. This avoids ( expensive ) dedicated load, if the procedure is still not in use by the corresponding thread. So just for recursive procedure calls, the dedicated load happens.|
|cego||26.12.2017||2.38.16||Added dbcheck/check072.sql. This implements the calculation of fibonacci numbers using stored procedures as a demonstration for massive recursive procedure calls|
|cego||21.12.2017||2.38.15||Introduced QUEUEDELAY ( in usec ) config parameter to adjust queue delay in database xml file. This allows to throttle down database response time for incoming connection requests and minimize CPU load|
|cego||21.12.2017||2.38.15||Increased NETMNG_QUEUE_DELAY to 1000000 ( 1 ms ) to minimize CPU load|
|cego||20.12.2017||2.38.14||Fix in CegoAttrCond::getIndexCond, like and no like comparisons must be filtered out for new btree cursor tracing logic|
|lfcbase||20.12.2017||1.11.5||Stability patch for strptime implementation ( MinGW only )|
|cego||19.12.2017||2.38.14||Further optimization done in CegoBTreeCursor, introduced methods traceLow and inRange to treat btree comparison in a more efficient way|
|cego||18.12.2017||2.38.13||Fixed memory lead in CegoDistManager destructor ( _pPA was not deleted )|
|cego||15.12.2017||2.38.12||Since I had some paranoia regarding btree index cursor evaluation, I made some additional tests with bigger tables, multi-dim btrees and sophisticaed queries. All result sets are identical with the results by retrieving the data without btree ( full table scan ). So all looks good with this patch :)|
|cego||14.12.2017||2.38.12||Optimization in CegoBTreeCursor::getNext. Instead of calling getNext in a recursive way, this is now done in a iterative way. This might avoid heavy stacking in case of special query constraints ( e..g multi dimensional btrees and range conditions like a > 400 and b betweeen 'AAA' and 'DDD' )|
|cego||12.12.2017||2.38.11||More rework for btree evaluation in CegoBTreeCursor|
|cego||12.12.2017||2.38.11||Small optimization in CegoAttrCond::checkIndex, removed primary flag, since this is done now by attribute ordering. This leads to full index trace match instead of trace with index support and so, additional unnecessary predicate evaluation is avoided.|
|cego||10.12.2017||2.38.10||Changed in CegoAttrCond compSet from SetT to TreeT. This is required, since we need the ordering in the set.|
|lfcbase||10.12.2017||1.11.4||Fixes in TreeT class, changed methods First, Next, isEmpty and compare operators to const|
|cego||10.12.2017||2.38.10||Fix in CegoBTreeCursor, CegoAttrCond and CegoAttrComp, for conflicting cursor conditions ( e.g. a = 4 and a < 1 ), the cursor evaluation failed, since just the primary condition was treated.
For CegoBTreeCursor, the method fullMatch has been introduced, to make an final evalution in case of multi conditions.
There was also introduced a ordering for CegoAttrComp set in CegoAttrCond to treat more constraint conditions at the beginning ( EQUAL before LESS_THAN before NOT_EQUAL and so on )
|cego||09.12.2017||2.38.10||Fix in CegoDistManager, we have to use a dedicated parser for loadView and loadProc methods. Otherwise compilation may fail in case of nested objects ( e.g. a view which references another view object)|
|cego||08.12.2017||2.38.9||Modification in CegoFunction::evalFieldValue. To allow recursive calls of user defined functions and procedures, dedicated procedure instances are created for each call. This is done by parsing the procedure text via CegoAction|
|cego||07.12.2017||2.38.8||Introduction of new functions ascii ( get ascii character for numeric value ) , ldiv and lmod ( div and mod operation for long values )|
|lfcbase||01.12.2017||1.11.3||Improvements made for dedicated strptime implementation ( pretty old stuff, found this several years ago anywhere in the net ) The function did not return null in case of unparsable date values. This code is just used for MinGW compiles since there is no implementation in the Standard C library available.|
|cego||01.12.2017||2.38.7||Fix in CegoXPorter::readTableObject, the defintion for MAXROW BUF still was defined locally and rowLen was noch checked.
Optimization in CegoFieldValue::decode, memory was allocated via malloc, rather _staticBuf should be used for performance reasons. _isLocalCopy was not set to true
|cego||29.11.2017||2.38.6||Fix in CegoFunction::getId and CegoSelect::getQueryId : with enabled query cache, the following select is cached
select nextcount(mycount);Since nextcount is a modifying operation, this is not a good idea. To avoid caching, CegoFunction now throws an Exception if nexcount / setcount function calls are detected during getQueryId. For these cases, the query id ignored for caching
|lfcbase||26.11.2017||1.11.2||More detailed exception messages for BigDecimal and BigInteger|
|cego||25.11.2017||2.38.5||Fix in CegoBTreeValue::valueFromSchema, introducded method getReservedLength to return fixed value length for type fixed and decimal. Since for decimal and fixed type just the dimension is stored in CegoField::getLength, we must define a reserved area for those types. This is done now with constant definition RESERVED_BTREE_FLOATLEN in CegoDefs.h|
|cego||23.11.2017||2.38.4||Improved ordersize calculation in CegoOrderSpace:insertTuple. Now the following formula is used :
int s = sizeof(fv); if ( fv.getLength() > STATICFIELDBUF ) s += fv.getLength(); orderEntryLen += s;The catches the base memory usage for the instance but also the dynamic allocated part
|cego||22.11.2017||2.38.3||Performance optimization done in CegoOrderSpace. Instead of storing the CegoField list for the result tuple in CegoOrderNode, just the values are stored there. The order cursor now gets the schema with the constructor and build the CegoField List in the getFirst / getNext methods. This seems a huge amount of heap space, which is dynamically allocated during the sorting procedure ( sortareasize parameter ).
Especially for large ordering result sets this saves significantly memory and improves performance.
|cego||21.11.2017||2.38.2||Fix in CegoXMLSpace::setTSSortAreaSize, changed type from int to unsigned long long, otherwise overflow may occur for large sort area size configurations|
|cego||18.11.2017||2.38.1||Fix in CegoPredDesc::decode, loop variable i for IN/NOTIN case was not initialized
Fix in CegoAction::execCheckCreate, check contraints are checked for contained subselects. subselects are ( still ) not supported since the CegoCheckOject::decode method can not provide a valid tablemanager instance ( it is called from CegoObjectManager )
|cegobridge||15.11.2017||1.3.0||Adaptions made for modified cego-2.38.0 API with extended CegoDatabaseFormatter::formatPred method ( exprList was added for new introduced select in ( expr list ) predicate )|
|cego||15.11.2017||2.38.0||Introduced predicate clause for select .. in ( expr, expr, ... ),
e.g. select * from t1 where a in ( 1, 2, 3 ); This was still not implemented but is part of standard SQL
|cego||15.11.2017||2.37.4||Fix in CegoSelect::clone, pUnionSelect was not cloned, which might lead to seg faults|
|cego||15.11.2017||2.37.3||Adaption in CegoMain to also parse comment lines in a more sophisticated way ( same as in CegoMain ), just relevant for server batch mode|
|cego||14.11.2017||2.37.3||Optimization in CegoDistCuror::joinSetup, the join predicate is now analysed in a way, that a condition list is created ( via makeCNF and createCondition methods in CegoQueryHelper ). The condition list then is analysed to achieve a better cursor condition which results in improved index usage|
|cego||13.11.2017||2.37.2||Fix in CegoClient, the new comment logic by using Tokenizer does not work ( '-' characters are detected as comment tokens ). Code replaced by using posStr chain function|
|dragon||10.11.2017||1.4.3||Changed generated Java code to abstract class with abstract methods, which have been implemented by the parser action subclass. This seems to be a cleaner modeling|
|cegojdbc||10.11.2017||1.7.1||Support added for jdom2 and simple log4j|
|cegobridge||10.11.2017||1.2.1||New generated configure script with libtool-2.4.6|
|dragon||10.11.2017||1.4.2||New generated configure script with libtool-2.4.6|
|cego||10.11.2017||2.37.1||New generated configure script with libtool-2.4.6|
|lfcxml||10.11.2017||1.2.6||New generated configure script with libtool-2.4.6|
|lfcbase||10.11.2017||1.11.1||New generated configure script with libtool-2.4.6|
|cegojdbc||08.11.2017||1.7.1||Upgrade of 3rd party jars ( JDOM-2.0.6 and log4j ( switch to slf4j ))|
|cego||07.11.2017||2.37.0||Added show parameter admin command to show all tableset independent database parameters|
|lfcbase||05.11.2017||1.11.0||Layout improvements in Pager class|
|cegobridge||05.11.2017||1.2.0||Support added for lfcbase-1.11.0|
|cegodbd||05.11.2017||1.4.0||Adaptions for support of lfcbase-1.11.0|
|cego||04.11.2017||2.37.0||Support for lfcbase-1.11.x with new Net API. The parameter maxSendLen ist still a constant in CegoDefs.h
Improvements added for CegoXMLSpace::setPerm, for existing permissions, just tableset, filter or right can be set up now,
e.g set permission p1 with right=WRITE for role1 just sets the right value for permission p1 to value WRITE, all other values are unchanged
|lfcbase||04.11.2017||1.11.0||Changed constructor for Net and NetHandler class to setup maxSendLen. Since this changes the API, minor release level has been increased|
|cego||04.11.2017||2.36.6||Improvements for cgclt, added pipe mode to read input from stdin
Now comments are allowed also after delimiter token, e.g.
create table t1(a int); -- a sample table
|cegobridge||03.11.2017||1.1.7||Added index creation statement for MySQL datatype.
Treated are primary, unique and non-unique index objects
|cego||03.11.2017||2.36.6||Error message correction in CegoSelect|
|cego||03.11.2017||2.36.5||Improvements for cgblow simulation mode added|
|lfcbase||02.11.2017||1.10.3||Value change of NetHandler::SENDLEN from 1024 to 8192 On FreeBSD based systems, the lower value lead to a poor network performance for large mesages, since subsequent send calls seem to slow down the network throughput. On OSX and Windows/MinGW64 based systems, this effect has not been observed but a sendlen of 8192 seems to be no problem also for these systems|
|cego||01.11.2017||2.36.4||Fix in CegoSelect::nextTuple, before adding an entry to the query cache, it has to be checked, if any tables from foreign tableset are referenced in the query. If so, no cache entry is made, since table changes for foreign tables are not detected.|
|cego||01.11.2017||2.36.4||Improved error messages for invalid database objects|
|cego||01.11.2017||2.36.4||Decreased shutdown delay time by reducing net delays for all thread pools and optimized mediator thread wait procedure|
|cego||01.11.2017||2.36.4||Completely removed the nologging option for import actions. Logging is disabled in any case now|
|cego||01.11.2017||2.36.4||Optimization added for log handling. During ( xml ) import, logging is completely deactivated, after import is completed, log is started again and a checkpoint is written.
Since import can be repeated in case of a system during import, nothing gets lost. Deactivating logging increases import speed and avoids side effects
|cego||31.10.2017||2.36.3||Changed recovery strategy for existing btree / avl index objects. Before creating an index object, it is checked if exists. If exists, it is dropped and recreated. This seems to be a more stable strategy, since it may occur, that index objects still exist for several reasons.|
|cego||31.10.2017||2.36.3||Fix in CegoTableManager::createBTree : we must create log entry BEFORE creating the index content, since during index build, checkpoints may occur.
The checkpoint writes the btree object already to database and if db crashes after checkpoint, the index already exists.
This causes then "btree already exists" error during recovery
|cego||31.10.2017||2.36.3||Added dbcheck/check063 to verify FLA cache handling|
|cego||30.10.2017||2.36.2||Fix in CegoFactor::setFieldListArray, the _flaCached variable has to be set to false, if _pFLA is set to a different value. Otherwise, we might refer to invalid memory, which results in core dump|
|lfcbase||29.10.2017||1.10.1||Added File class constructor to support STDIN read mode|
|cego||02.10.2017||2.36.1||Added signal handler to CegoAdmAction. Now, ( long ) running tableset export and import requests can be aborted in a controlled way via Ctrl-C command.|
|cego||30.09.2017||2.36.1||Fix in CegoXPorter, export file will be removed, if any exception occurs. So it is ensured, that the written export file is consistent and complete|
|cego||30.09.2017||2.36.1||Small fixes in CegoXPorter for CLOB handling ( was not checked for plain exports )|
|cego||29.09.2017||2.36.0||Adding missing export / import messages to CegoXPorter|
|cego||27.09.2017||2.36.0||Changed btree cache enabling syntax. Instead of a dedicated switch command ( set btree cache on / off ), the cache option now is directly given with the create btree command ( e.g. create btree b1 on t1(a) cached )|
|cego||27.09.2017||2.35.12||Improvement in CegoBufferPool::calcSegment for segid calculation.
It has been recognized, that with the current calculation ( pageid % numsegment ) not all slots can be reached for special buffer pool configurations.
The formula has been changed ( to ( pageid / numpages ) % numsegment )
|cego||26.09.2017||2.35.12||Fix in CegoTableManager::createBTree, pC object cursor has to be set to 0, otherwise in case of abortion a seg fault occurs
Changed default value for btree cache enabling to false
|cego||24.09.2017||2.35.11||Completed pointer cleanup in CegoQueryHelper::evalPredicate, added check061 to check pointer cleanup|
|cego||17.09.2017||2.35.10||Fix in CegoQueryHelper::evalPredicate, for all predicate types, the field array value has to be reset to 0, otherwise seg fault my occur since invalid references might be used|
|cego||17.09.2017||2.35.9||Fix in CegoBufferpool::writeCheckpoint, in case of an locking exception ( lockBufferPool ), the pool must be released in any case. For this the CegoLockManager::lockBufferPool and CegoLockManager::unlockBufferPool have been modified in a way, that lockBufferPool saves the current sema index ( _poolRangeLock ) which is later used for the unlocking call.|
|cego||16.09.2017||2.35.9||Timeout parameter for bufferpool lock reduced to 60 seconds.
Optimization in CegoBufferPool:bufferfix for minHashId calculation in step 2, there was an unneeded locking operation for the minhashId, which was already locked by the mail loop
|cego||12.09.2017||2.35.9||Small format fix in CegoProcCreateStmt ( missing indent )
Add header row out put for client raw mode ( attribute names )
|cego||09.09.2017||2.35.8||Bug fix in CegoDistCursor::getTuple, for the LEFTOUTER case and moreRight conditions, the right table cursor was called double time ( native and with nextRight ). The native call has to be removed since this may lead to strange effects actually just observed for mingw compiles|
|cego||09.09.2017||2.35.8||Long type correction in CegoGroupEntry ( just relevant for MINGW compiles )|
|cego||08.09.2017||2.35.7||Change in several files from type long to type long long. This seems to be irrelevant on native Linux/OSX/FreeBSD compiles but has impact for mingw compiles, since sizeof(long) != sizeof(long long)|
|cego||06.09.2017||2.35.6||Fix in CegoPredDesc for INSUB and NOTINSUB constructor + clone method. There was a confusing with the isNegated flag which has been corrected ( also in using class CegoAction ) The wrong negation might lead to wrong query result for views using subselect with in or not in subselects|
|cego||05.09.2017||2.35.5||Fix in CegoQueryHelper::aggregateTuple, in case of min-Aggregation, wrong results may occur, if null values have to be treated. Since null value handling is now treated inside CegoFieldValue, some code here was obsolete.|
|cego||02.09.2017||2.35.4||Added tuple information command tupleinfo to indicate tuple state information for a given table ( COMMITTED, INSERTED, DELETED, OBSOLETE )
Fix in CegoTransactionManager::commitTransaction and CegoTransactionManager::rollbackTransaction, in case of a crash recovery the taList does not contain any transaction entries, but the rollback segments have to be checked in any case for entries to process. Otherwise, the transaction will not be completed
|lfcxml||02.09.2017||1.2.5||Small improvement in XMLSuite::nextChar to check for non-ASCII characters|
|cego||02.09.2017||2.35.3||Fix in CegoTableManager::finishOpenTransaction, the transaction id for the corresponding tableset must be set to zero, otherwise in case of crash recovery procedures a transaction id might be active and the open transactions are not completed correctly|
|cego||25.08.2017||2.35.2||Fix for a bad patch in 2.35.1, In CegoSelect::clone also the pCache variable has to be copied ( we previously done by calling setTabSetId )|
|cego||24.08.2017||2.35.1||Fix in CegoSelect::setProcBlock, pBlock was not setup for _pPred
This might result in wrong query results within stored procedures with select statements which refer to procedure variables
Changed index recovery handling in a way, that index and btree objects are rebuild immediately instead of invalidating them. This leads to a much better recovery performance in case of expensive queries where index use is needed for fast evaluation
|cego||22.08.2017||2.35.0||Introduced simple selects, e.g. select 1, select sysdate, etc
for select queries without any object access
This might be useful for example for database connection validation queries
|cego||20.08.2017||2.34.3||The previous problem regarding query cache is a result of the new introduced select cloning. The extended query id string should solve the problem|
|cego||20.08.2017||2.34.3||Fix in CegoSelect::getId, the values of the parent join buffer have also be added to the query id string, otherwise, nested queries which references attributes to parent join buffer can not be distinguished|
|cego||19.08.2017||2.34.2||Fix in CegoDistCursor to support multiple view references in a query
( e.g. select a from v1 where exists select * from v1 ... )
In the past, this might lead to infinite loops, since just the view select reference was used. Now the reference is cloned.
The usage of clones results in several fixes for the CegoSelect::clone and underlying clone methods
|cego||16.08.2017||2.34.1||Fix in CegoDistManager::checkKey ( used for verify tableset admin commend ). Check for foreign key has been redesigned|
|cego||15.08.2017||2.34.1||Fix in CegoBTreeCursor::getFirst, _pAttrCond has to be checked for 0, otherwise a core dump may occur ( detected with verify tableset admin command )
In CegoViewObject::toChain() the view object reference string has to return complete information including the tableset. Otherwise, references to foreign tableset objects with the vie will not work correctly.
|cego||12.08.2017||2.34.0||Introduced new date function newdate with optional numeric input. If used with year and month input, this can double the speed for date construction ( no string parsing required )|
|cego||11.08.2017||2.34.0||- Use of new introduced lfcbase datetime constructor to create datetime values with numeric input ( year, month, day, hour, minute and second ) for more efficient value handling
- Fix in CegoTypeConverter::getTypeLen for LONG_TYPE values, it should be size of(long long) instead of sizeof(long). This impacts MINGW compiles, since sizeof(long) ist just 4 bytes
- Changed CegoTypeConverter methods to static
|lfcbase||11.08.2017||1.10.0||Added Datetime advanced constructor for more efficient datetime construction|
|cego||06.08.2017||2.33.23||Small fix in CegoAttrCond::operator = , compare Find result with 0 instead of false. A compile error occured for MINGW compiles|
|lfcbase||06.08.2017||1.9.8||Adoptions made in CommandExecuter and Outstream for MINGW builds|
|cego||02.08.2017||2.33.22||More fixes in CegoTableManager::keyReferenceExists and CegoTableManager::createForeignKey, there still were missing some adpotions for TableCursor::setup return code and other case handling|
|cego||29.07.2017||2.33.21||Added further constraint check in CegoTableManager::dropObjectSynced. Primary objects just allowed to be removed, if no foreign key reference exists|
|cego||28.07.2017||2.33.21||More fixes on foreign key contraint handling in CegoTableManager::checkKeyIntegrity and CegoTableManager::insertDataTable methods|
|cego||27.07.2017||2.33.21||Fix in CegoTableManager::checkKeyIntegrity. The implementation of the mehod has been completly reworked, since not all violation cases have been treated.|
|cego||22.07.2017||2.33.20||Fix in CegoDistCursor to support advanced left and right outer join queries of the form
select tx.a as xa, ty.a as ya from t1 tx left outer join t2 ty on tx.a = ty.a + 1;For this, the evaluation of the predicate has to be done in a different way to get complete row set
|cego||16.07.2017||2.33.19||Fix in CegoOrderSpace::insertTuple, for the localTuple variable, also a dedicated copy has to be allocated, otherwise it may happen that invalid tuple references ( caused be page relocation ) lead to invalid order results|
|cego||16.07.2017||2.33.19||Added performance optimization to CegoTableManager::updateTuple. The already evaluated index, key and checklist are also provided to checkIntegrity method now ( instead of retrieving the lists again ). The improves performance for updates with many tuples significantly|
|cego||11.07.2017||2.33.18||Added tablemanager parameter to CegoProcWhileStmt to catch query abort. In case of infinite while loops, this enables the db admin to abort procedure execution
Optimization for CegoFunction::SETCOUNT procedure implementation added. Now this is an atomic operation ( ( instead of calling getCounterValue previously ).
For this, also the CegoXMLSpace::setCounterValue method has been changed to return the current counter value return the current counter value
|cego||29.06.2017||2.33.17||Method cleanup in CegoSelect.cc, also some irrelevant case is treated for grouping clauses in combination with distinct operator|
|lfcbase||27.06.2017||1.9.7||Removed include socketvar.h in Net.cc and NetHandler.cc since compile error occured for FreeBSD 12|
|cego||24.06.2017||2.33.16||Fix in CegoAction::execute, missing break added after calling execListView|
|cego||23.06.2017||2.33.16||Fix in CegoQueryHelper::evalPredicate. In case of subselects, the parent join buf also has to reset after performing the subselect, otherwise invalid pointer references are still active for the next caller
Seg faults have been experienced for delete with double nested subselect conditions ( see check055 )
|cego||21.06.2017||2.33.15||Completion for admin help backup section, some commands were still missing
Improvements for procedure indent formatting. All sugar, nothing functional
|cego||03.06.2017||2.33.14||Fix for distinct handling in CegoAggreation
Fix for alias handling regarding view creates. Alias definitions are mandatory now for aggregated attribute definitions, e.g.
create view v1 as select count(*) from t1;
=> returns now
ERROR: Missing alias reference for view create
and must be written as
create view v1 as select count(*) as c from t1;
|cego||29.05.2017||2.33.13||Design modification in CegoAction for semantic action ( execXXX methods )
An analysed statement is now just executed after complete succesful parsing of the given input. This avoid protocol effects for queries like "select * from t1;;" where the query is executed but the second semicolon is detected as an parse error which also is sent to the client.
For this the new method CegoAction::execute has introduced which is ( explicitly ) called after successful CegoAction::parse
|cego||27.05.2017||2.33.12||Fix in CegoAttrComp::reset, case VALUE2VALUE still was not treated, which lead to wron index handling for between clauses with native values|
|cego||24.05.2017||2.33.11||Fix in CegoQueryHelper::evalAttrCond, comparison modulation was missing for one case whihc leads to wrong query results for comparisons like 3 < a ( constant left )
Optimization added for between clause, indexes were just used for constant values in between clause ( eg. a between 10 and 20 ) This has been expanded, that also indexes are used, if attribute references are contained ( eg. a between t2.x and t3.y )
|cego||12.05.2017||2.33.10||basecheck54 added for the previous described problem|
|cego||12.05.2017||2.33.10||Fix in CegoAttrComp::operator==
The values should NOT be compares, since they are set up by the calling CegoAttrCond::update method
Otherwise, the error "Cannot set up diff for attribute condition" occurs
The following sample produces the error
drop if exists table t1; create table t1 ( a int, b string(30)); drop if exists table t2; create table t2 ( a int, b string(30)); create btree b2 on t2(a); insert into t1 values ( 1, 'XXX'); insert into t1 values ( 2, 'YYY'); insert into t1 values ( 3, 'YYY'); insert into t1 values ( 4, 'YYY'); insert into t2 values ( 1, 'XXX'); insert into t2 values ( 2, 'YYY'); insert into t2 values ( 3, 'XXX'); insert into t2 values ( 4, 'YYY'); drop if exists procedure tproc; @ create procedure tproc ( x in int ) begin delete from t1 where b in ( select b from t2 where a = :x ); end; @ call tproc(2); call tproc(3);
|cego||10.05.2017||2.33.10||Added space character in CegoSelect::toChain after distinct keyword to avoid the following
ma > create view tview as select distinct hostname, pfcontact from ma_sysview where sysrole = 'production'; View tview created ok ( 0.001 s ) ma > select * from tview; Error : Unknown attribute field
|cego||09.05.2017||2.33.10||Fix in CegoObjectManager::createBTreeObject to avoid the following
duplicate btree entry
drop if exists table t1; create table t1 ( a int, b string(30)); create btree b1 on t1 ( a ); create unique btree b1 on t1 ( b ); -- this should result in an error drop btree b1; drop btree b1; -- at least both btrees could be droppedFor objectExists method, the value CegoObject::BTREE must be specifiy to detect the duplicates
|cego||23.04.2017||2.33.9||in CegoTableManager::getClobData added termination character to ensure clob values are terminated with 0 character|
|cego||23.04.2017||2.33.9||Small fixes for fixed value handling
Small fixes for quote escape handling in cgclt batch mode
|cego||23.04.2017||2.33.9||In CegoAction::selectionList1 added alias check for non unique alias defintions
Stored Procedure formatting improvements regarding indent handling
|cego||22.04.2017||2.33.8||Fix in CegoSelect::buildJoinConditions, the _attrPred array has to be set up. Otherwise it may occur, that the predicate is not evaluated, if it could not been evaluated by the table curser condition.
Furthermore, a setup method has been introduced for CegoAttrCond to evalute joinBuf and parentJoinBuf ( if both references occur in a condition this is needed )
|cego||20.04.2017||2.33.7||Optimization in CegoCheckpoint::checkpointReached, if interval was reduced, we set up setup the new interval|
|cego||19.04.2017||2.33.7||Fix in CegoTableManager::removeAllComp, first we have to remove from the list, the we can free the memory. On Linux system with g++, the previous sequence might lead to memory faults
Fix in CegoRecoveryManager::recoverTableSet, after regDataFiles, als registerObjects method must be called, otherwise recovery could fail in case of table view recoveries
Optimization in CegoDistManager::stopDistTableSet, the new introduced method CegoDatabaseManager::removeAllObjects is called, the ensure object cache cleaning
|cego||16.04.2017||2.33.7||Added prompt command line option to cgadm to set up specific prompt value
Adding formating improvements to CegoAdminHandler for show logmng and show backupmng commands
|lfcbase||14.04.2017||1.9.6||Small correction in OutStream, include
|cego||10.04.2017||2.33.6||Small improvements for utility scripts cgmkdb, logManager and backupManager|
|lfcbase||10.04.2017||1.9.5||Added method getErrorCode to OutStream class|
|lfcbase||09.04.2017||1.9.4||Adaptions in OutStream and CommandExecuter classes for MINGW|
|lfcbase||08.04.2017||1.9.4||Cleanup of OutStream implementation ( removed some includes, removed ifdef for MINGW|
|cego||06.04.2017||2.33.5||Check052 has been introduced to verify the previous described behaviour|
|cego||06.04.2017||2.33.5||Fix in CegoSelect and friends for query cleanup. The cleanUp method did not cleanup all field value references which might lead to invalid memory access in case of repeated view calls ( Variable pParentJoinBuf ).
Corresponding cleanUp method have been introduced or CegoExpr, CegoTerm, CegoFactor and friends.
|cego||02.04.2017||2.33.4||Fix in CegoTableManager::insertDataTable, the newRBEntry method call for the transactions manager also must be catched by the exception. Otherwise, the index might be corrupted if any exception occur ( e.g. out of temp space )|
|lfcbase||01.04.2017||1.9.3||Small fixes for Monitor and Pager class, adding missing ifdef for curses option in Pager class, replaced CGNOCURSES with LFCNOCURSES|
|cego||30.03.2017||2.33.3||Fix in CegoRecoveryManager::recoverTableSet, before calling transactionRecovery, we have to set flag setIgnoreInvalid to true. During transaction recovery phase, we must ignore invalid btrees/index objects since these objects could be invalidated but Log data integrity and consistency is ensured|
|cego||29.03.2017||2.33.2||Added implizit tableset btree and index correction to recovery procedure ( CegoRecoveryManager::recoverTableSet )|
|cego||28.03.2017||2.33.2||Small syntax for cgadm from "backup TS" to "backup tableset TS" ( conform to other tableset commands )
Fix in CegoTableManager::deleteDataTableEntryAtomic / updateDataTableSynced / beginTransaction / commitTransaction / rollbackTransaction to avoid log entries for forced transactions ( introduction of doLog flag ).
Fix in CegoTableManager:deleteDataTable to avoid object synchronisation during recovery phase ( introduction is isSynced flag ), since during recovery phase, still no objects are registered and there is no need for synchronization
|cego||27.03.2017||2.33.2||Added further admin console messages for recovery procedure. This enables the database admin to follow the recovery procedure on admin console level|
|cego||26.03.2017||2.33.1||Some cosmetic changes for backup manager handlng ( change from archmng to backupmng naming )|
|cego||24.03.2017||2.33.0||Uplift to version 2.33.0 since the backup feature changes the product specification.
Integration of new introduced lfcbase OutStream class to catch output from backup manager. This allows to indicate a more detailed output from backup manager on admin console.
|lfcbase||24.03.2017||1.9.2||Added class OutStream to catch stdout from forked programs via popen|
|cego||19.03.2017||2.32.16||Introduced archive manager, which can be triggered, to perform an online backup. Far now, online backups have to be triggered externally.
The achive manager should make backup / restore handling more convenient
|lfcbase||19.03.2017||1.9.2||Added CommandExecuter::executeStream method to catch stdout for any forked process|
|cego||18.03.2017||2.32.15||Added database verify006 to check multidimensional btrees also in combination of null value handling.|
|cego||16.03.2017||2.32.15||* Fix in CegoObjectCursor::getNext, double method call for unlockData removed. * Small grammar correction to treat distinct flag for select-star statement * Fix in CegoBTreeCursor::compValue, null values have not been handled correctly. For string values, string termination was not clean, which also might lead to wrong cursor results|
|cego||11.03.2017||2.32.14||Added check to CegoXMLSpace::addArchLog to verify, that directory for new archive location really exists|
|cego||11.03.2017||2.32.14||Added archive log management to curses based CegoAdmMon administration console|
|lfcbase||11.03.2017||1.9.1||Small fix for Monitor::showFormBox, in case of menu elements, delete key is disabled|
|cego||07.03.2017||2.32.13||- Fix in CegoBTreeValue::valueFromSchema added.
In case of multidimension btree objects, the insert of new values might fail, if string bases attributes occur at the beginning Here comes a sample :
drop if exists table t1; create table t1 ( a string(10), b string(10), c int ); insert into t1 values ( 'HUGO', 'ALPHA', 0 ); insert into t1 values ( 'HUGO', 'BETA', 0 ); insert into t1 values ( 'HUGO', 'GAMMA', 0 ); insert into t1 values ( 'HUGO', 'EPSILON', 0 ); create unique btree b1 on t1 ( a, b); -- this update will fail update t1 set c = 1;- Fix in CegoDistManager::registerObjects, registration of btree objects was still missing. This might lead to wrong results for drop if exists btree statements
|cego||06.03.2017||2.32.12||Correstion for distinct clause. With the current grammar implemention, queries with nested selects and using the distinct operator might fail.
Cego.def grammar and CegoAction implementation has been changed in way, that distinct option is just allowed at the beginning ( e.g. select distinct count(a) from t1 and NOT select count(distinct a) from t1 )
This should simplify usage, since by using the distinct clause, distinct tuples are retrieved either for plain queries or for aggregation
Confusing sample not allowed anymore : select count(distinct a), count(distinct b) from t1 ... now select distinct count(a), count(b) from t1 )
|cego||04.03.2017||2.32.11||Online index build up tested and verified. First tests with heavy insert operations ( using cgblow ) during index build went succesful.|
|cego||04.03.2017||2.32.11||Improvements for CegoAdmMon role permission handling, added remove permission option|
|cego||04.03.2017||2.32.11||Preparation of CegoObjectCursor and CegoTableManager to support online index rebuild with write access to the table.
For this, concurrent insert operations have to be performed with append =true. The ObjectCursor locks the last page until the index rebuild is finished ( method setLastPageSync )
In this way, the index can be build up in parallel, while further tuples could be appended to the table. ( just supported for btree index objects )
|cego||25.02.2017||2.32.10||Fix in CegoDistManager::stopDistTableSet, removing of btree objects from database object dictionary was still missing
In CegoTableManager::dropTableSet now also counter objects are dropped ( stored in the database xml file ).
|cego||25.02.2017||2.32.10||Added some sizing optimizations for CegoAdmMon forms|
|cego||25.02.2017||2.32.10||Fix in CegoRecoveryManager::recoverCurrentTransactionLog, added the force option to addCounter method, since counters already could be synched to xml ( not completely transaction save )|
|cego||15.02.2017||1.9.0||Added class Pager for curses based pager implementation|
|cego||15.02.2017||2.32.9||Fix in CegoTableManager::getPoolInfo, readdelay and writedelay was not calculated correctly|
|lfcbase||05.02.2017||1.9.0||Added Monitor class for ncurses based GUI utility implementation. This class provides GUI layout and event handling to simply ncurses based GUI tool implementaton.|
|cego||04.02.2017||2.32.9||Added CegoFieldValue::getDim method required for arithmetic operations on fixed values|
|cegobridge||31.01.2017||1.1.3||Fix in MySQLAction::backChar to avoid clang40 compile error|
|cego||31.01.2017||2.32.9||Include stdlib.h added in CegoNet ( still missing forLinux compiles )|
|lfcbase||28.01.2017||1.8.12||Changed methods for class Sleeper to static. Added Sleeper class test to test suite|
|cego||28.01.2017||2.32.8||Small improvements for CegoAdmMon curses based admin console|
|lfcbase||26.01.2017||1.8.12||Added include file limits.h in Chain.cc. For Linux compiles, this include is required ( definition of INT_MAX and INT_MIN )|
|cego||21.01.2017||2.32.7||Fix in CegoFileHandler::releaseFiles. _tabSetId and _isReg vars have to be set to zero/false in any case. Otherwise, it might happen that old entries are still visible and in case of a tableset recreation obsolete file handle information is provided|
|cego||18.01.2017||2.32.7||Method CegoTransactionManager::hasOpenTransaction added to check for open transaction for a spedific table. This method is called now before a table can be dropped to ensure there are no open transaction for this table.|
|cego||02.01.2017||2.32.6||Small performance improvement in CegoBufferPool::bufferFix
Instead of copying the buffer head data to a local variable via memcpy, a pointer variable is used to access the data directly
Performance improvement just a few percent ...
|cego||01.01.2017||2.32.5||Added another performance patch to CegoBTreeCursor.
The method compValue has been redesigned in a way, that comparison is prepared at cursor creation time and so could be executed in a optimized and faster way
This speeds up queries with joined tables, where the joined table is traced many times ( e.g. select count(*) from t1, t2 where t1.a = t2.a )
|cego||30.12.2016||2.32.4||Fixes and improvements for table export added
In CegoXPorter::xmlExportable, the pOutStream pointer was deleted, which lead to a core dump ( pointer is already deleted by Element )
Row counter handling and messages have been improved
|cego||30.12.2016||2.32.4||Fixes for CegoBTreeCursor added|
|cego||29.12.2016||2.32.4||Change back to memove call in CEgoBTreeNode:shiftEntries.
Copying manually and bytewise decreased performance about two times for building up btree objects. This has been observed on native POSIX ( FreeBSD 11 ) but also on MSYS64 compiles
Thanks for Deutsche Bahn to provide ( free ) internet on train, so I was able to spent this time on the analysis :)
|cego||28.12.2016||2.32.4||Improvements for CegoBTreeCursor. With the new introduced methods CegoBTreeNode::getMedPage and CegoBTreeNode::rightValue, the search for the appropriate subnode can be made with logarithmic efforts instead of linear search.
To validate this improvement, the following query has been setup for a random filled table t1
select * from t1 ta where exists ( select * from t1 tb where tb.b = ta.b );
Execution time with the improved btree cursor was two times faster than with old implementation.
|cego||26.12.2016||2.32.4||More performance improvements made for btree creation
- changed linear search efforts in CegoBTreeNode::getChildPage to logarithmic search efforts ( introduced lb /rb variable )
- Change in CegoBTreeManager::allocPage. Since for cache based creation, just a pageId must be allocated, the low level method CegoFileHandler::allocatePage is used.This avoids an unnessary bufferFix call for the new page - Introduced appendFid variable for CegoFileHandler class. In case of many managed datafiles, the last file with avaiable pages is used for the allocatePage method.
- Performance comparison to MariaDB indicates now a better scaling from 2 million rows and up ( by using cego btree cache )
|cego||25.12.2016||2.32.4||Improvement modifications for btree implementation increased build up speed for just about 3 percent. It seems, the most time is used by calling shiftEntries method, where memory is moved via memmove.
I observed, that 8k page size ( instead of 16k ) brought up some performance improvement for btree creation of about 100% ( for type string(60) with random values )
|cego||25.12.2016||2.32.4||More performance improvements in CegoBTreeManager and CegoBTreeNode, overall impact still has to be analysed
Fix in CegoTableManager added for alter table modify column, columns with existing btree or key objects can not be modified anymore
|cego||24.12.2016||2.32.4||Further improvement approach in CegoBTreeManager to increase btree creation performance. BufferPage handles have been changed from native variables to pointer handles. This should reduce page access efforts in case of enabled btree cache|
|cego||23.12.2016||2.32.3||Fix in CegoAction::insertStore and CegoAction::insertValueSpecStore; for value array inserts via network, the ack for the protocol was no satisfied ( e.g. insert into t1 values ( 1, 'XXX'),(2,'YYY'),...) which leads to a hanging database client. Since class CegoQuey was already prepared for bulk inserts, this was a simple fix, just calling execQuery via insertStore parser method just one time.|
|cego||23.12.2016||2.32.3||Code cleanup in CegoBTReeManager and CegoBTreeNode, use of static method CegoDataPointer::getEncodingLength, ( define of DPENCODINGLENGTH )|
|cego||23.12.2016||2.32.3||Fix in CegoFileHandler::CleanDataFile,pageId was not calculated correctly ( missing offset )|
|cego||21.12.2016||2.32.2||Fix in CegoTranactionManager, replaced LONG_TYPE with PAGEID_TYPE, since this is the correct type for page entries. This was detected on MinGW64 compiles (seg fault occured), since the type size differs on this platform.|
|cego||17.12.2016||2.32.1||Fixes for CegoBTreeManager::deleteBTree ( changed int type to PageIdType for page vars ) and CegoBTreeManager::insertBTree ( propValue was not setup correctly for root node propagation in some cases, which might lead to corrupt btree structure )|
|lfcbase||14.12.2016||1.8.11||Added range check to Chain::toInteger method to catch overflow exception|
|cego||13.12.2016||2.32.0||Please note : Upgrade to this version requires tableset export / import ( XML mode recommended )|
|cego||13.12.2016||2.32.0||Functional tests with SysMT successful completed|
|cegojdbc||13.12.2016||1.7.0||Adaptions for cego 2.32.0 ( clob and blob reference handling )|
|cego||12.12.2016||2.32.0||All base checks passed, but there is still a page allocation leak for table drops|
|cego||12.12.2016||2.32.0||First performance analysis indicates a speedup of about 10% for btree creation, so significant speedup for full table scans.|
|cego||11.12.2016||2.32.0||This version brings a complete redesign of low level page handling.
Instead of page references identified by fileId and pageid, a database unique pageid is used now
This results in a complete reimplemtation of several low level classes like CegoFileHandler, CegoBufferPool, Blob handling, etc. Since pages are references by a single ( 64 bit ) id now, I expect an increased performance behaviour over all database operations.
Most code modifications are done, code complies and basic functionally works ( create tableset, create table, insert table )
|cego||04.12.2016||2.31.7||Fix in CegoFieldValue for fixed value handling. In case of fixed value aggregations, the specified fixed dimension should be kept. This has been done be analysing the value dimension in the CegoFieldValue:add/sub/mu/div methods. In CegoQueryHelper::prepareFieldValue, fixed values are checked now for right dimension|
|cego||26.11.2016||2.31.6||Fix in CegoSelect::getQueyId added, for the ordering clause asc and desc ordering attributes were missing. This might lead to wrong ordering results if query caching is used|
|cego||20.11.2016||2.31.5||Changed CegoQueryHelper methods to static|
|cego||20.11.2016||2.31.5||Fix for CegoBTreeManager and friends regarding small string values ( string(1) )
Please note, that this fix invalidates btree format.
Btrees have to be recreated after this fix !
Type len check added in CegoAction for string, bigint, decimal and fixed types ( type len must be greater than 0 )
|cego||19.11.2016||2.31.4||Fix some leaks in CegoXPorter regarding file handles and memory allocation ( improved exception handling )|
|cego||13.11.2016||2.31.3||Fixed a file handle leak for datafiles and logfiles ( CegoFileHandler, CegoTableManager and CegoLogManager ) After tableset creation ( or start and stop ), file handles have not cleaned up properly. This lead to file remove problems in case of a tableset drop. This effect was detected by building and testing the MinGW64 port|
|cego||13.11.2016||2.31.2||Fix in CegoClient for escape character handling in batch mode|
|cego||13.11.2016||2.31.2||Fix in CegoClient for dumpfile generation. Default values handling corrected|
|cego||13.11.2016||2.31.2||Join optimizer fix in CegoSelect, CegoAttrCond and CegoBtreeCursor. join attributes are checkd now in a more sophisticed way, which leads to improved execution performace for advanced joins|
|cego||06.11.2016||2.31.1||Fix in CegoBTreeManager::insertBTree, in case of a duplicate exception, a bufferpool leak occured ( buffer is not unfixed ).|
|cego||18.09.2016||2.31.0||Please note : null comparison has been changed with versio 2.31.0 . All index objects containing null values must be reorganized. I recommend export and import for the complete tableset|
|cego||07.09.2016||2.31.0||Added database flag DUPLICATENULL to allow duplicate null values for unique btree objects|
|cego||18.08.2016||2.30.26||Fix in CegoFunction::evalFieldValue, for functions date2str, date2int, int2date, type casting to appropriate type has been added. Without the cast, the functions might return wrong results|
|cego||14.08.2016||2.30.25||Adaptions for CegoBlowTab to use CegoNet API|
|cego||13.08.2016||2.30.25||Completion for blob methods in CegoNet|
|cego||13.08.2016||2.30.25||Improved flow control in CegoClient ( based on ncurses )|
|cego||12.08.2016||2.30.25||Optimization in CegoClient, just high level CegoNet API methods are used now for client implementation. Missing methods have been added to CegoNet API|
|cegojdbc||11.08.2016||1.6.1||Added datetime format parameter evaluation to CegoNet ( _dtFormat )|
|cego||11.08.2016||2.30.24||Fix in CegoNet::connect, the global vars __dateTimeFormat, __currencySymbol and __decimalPoint are set up now to appropriate values|
|cego||26.07.2016||2.30.23||Added verify005.sql to dbcheck suite to verify cast operations|
|cego||26.07.2016||2.30.23||Fix in CegoClient, global vars __currencySymbol and __decimalPoint still have not been set up correctly, doen in the same way as for CegoMain on server side|
|cego||25.07.2016||2.30.22||Fixes for cast operations regarding values for type fixed|
|lfcbase||25.07.2016||1.8.10||Improvements for BigDecimal class
All values are normalized now and stored now with non trailing zeros
|cego||22.07.2016||2.30.21||Fix in CegoProcedure::execute and CegoProcedure::getRetVal In the castTo method, the type dimension was still not treated. This might lead to wrong cast results especially for fixed values|
|cego||22.07.2016||2.30.21||Fixed cgadm online help for import command, the nologging option was not documented|
|cego||20.07.2016||2.30.21||In CegoRecoveryManager, added tableset argument line argument for calling the external log manager.
This makes it more easy in the log manager code, to implement tableset dependent restore strategies
|cego||20.07.2016||2.30.20||A patch was needed in CegoBlowTab for MinGW compile. Since the functions srandom and random are ( still ) not provided, a define has added to map to srand and rand|
|cego||17.07.2016||2.30.19||The previous patch in lfcbase required a patch for CegoLogThreadPool::copyLog. Since the archfile file was not closed after trunc, the rename operation failed now. close method call was added|
|lfcbase||17.07.2016||1.8.9||Patch file File class, operator= and operator+= did not close the file descriptor after copying / appending.
This may cause a problem for subsequent method calls on the instance.
( e.g. renaming or removing )
This effect actually has just been observed for MinGW64 compiles
|cego||16.07.2016||2.30.18||Catched server termination in CegoTableManager::writeCheckpoint. If log files could not be archived, the method does not recognized server termination ( runstate = OFFLINE )|
|cego||16.07.2016||2.30.18||Improvement added dor log file shipping in CegoLogThreadPool::copyLog. The archive log file is first writte to a temporary file and if finished, is moved than to its original file name. For the tape management, this is an indication, that the file is completely written and is ready for further processing|
|lfcbase||16.07.2016||1.8.8||Added File::rename method to be able to move files via file class|
|lfcbase||15.07.2016||1.8.7||Added errno.h include to Chain module|
|lfcbase||13.07.2016||1.8.6||Some exception improvements in Chain class|
|lfcbase||13.07.2016||1.8.6||A space character was missing in exception message for date format lists|
|cego||13.07.2016||2.30.17||Fixed for point-in-time recovery, Date format handling was not done correectly|
|cego||13.07.2016||2.30.16||Elimination of BUFFERPOOLHASHKEY. The bufferpool position is now calculated based on the page offset of the corresponding datafile ( this information is provided by CegoFileHandler::getRegPageOffset )
This leads to a much better distribution and usage of the available buffer pool pages
|cego||12.07.2016||2.30.16||Fix in CegoTableManager::createBTree, the creation of the btree object must be done in a dedicated exception block, otherwise the btree object is dropped, if it already exists.|
|cego||10.07.2016||2.30.15||Reactivation of rollback segment record locks in CegoLockHandler class.
In CegoObjectManager::insertData, in case of rollback segements insert operations, the RB record lock is used instead of the system record lock. This might avoid some deadlock situations.
|lfcbase||09.07.2016||1.8.5||Added statlock mutex in ThreadLock class for protecting staistic counters. It seems, increment and decrement operators on atomic values are no more thread safe ( Once it was, but I guess this is a compiler issue )
Since the lock statistics can be disabled for production mode, there is not performance impact caused by the additional mutex calls
|cego||09.07.2016||2.30.15||Added update sync mode. With this mode, the user can decide, if an update or delete should be blocked until another concurrent transaction is finished or return immediatly without updating concurrent affected tuples|
|cego||09.07.2016||2.30.15||Made __dateFormatList in CegoMain threadsafe
For the point-in-time recovery timestamp format, now the server defined format is used ( variable CGPITFORMAT is obsolete )
|cego||07.07.2016||2.30.14||Fix in CegoBufferPool::poolINfo, the spread rate calculation was not done correctly|
|cego||03.07.2016||2.30.13||Cast handling in CegoFieldValue::castTo completed.
This allows an any to any value casting, except lob values and some unsupported datetime casts ( e.g. bool to datetime really makes no sense )
|lfcbase||30.06.2016||1.8.4||Improved exception handling in class Chain for type conversion methods|
|cego||30.06.2016||2.30.13||Added more cast cases to CegoField::castTo, still not completed|
|cego||29.06.2016||2.30.13||Improvement for hash calculation in CegoBufferPool::calcSegement. For a better page spreading, the segment calculation was changed to a more linear approach|
|cego||27.06.2016||2.30.13||Added alter table modify command just for default values.
alter table t1 modify column a default 42;
|cego||26.06.2016||2.30.12||Added cast improvements to CegoFieldValue::castTo method, which are also checked now with check050|
|cego||26.06.2016||2.30.12||Evaluation of locale to find out decimal point character.
E.g. for english locales this is ., for german this is ,.
The character is used for float value handling in CegoFieldValue methods.
For default value handling in alter table statements, the cast methods are also called now. check050 has been added to verify this feature.
|cego||22.06.2016||2.30.11||Fix in CegoRecoveryManager::recoverTableSet, the lsn was incremented which lead to leaks in the transaction log. This could result in an incomplete recovery procedure|
|cego||21.06.2016||2.30.11||Improvements for tableset recovery, external log manage fiel is checked in CegoAdminThread::medRecover before restore procedure is started.|
|cego||18.06.2016||2.30.10||Fix in CegoLogManager::logAction, if online redo log is full, the current log entry has to be written anyway, otherwise a checkpoint is written and subsequent logAction call in CegoTableManager::logIt might lead to duplicate entries in case of a crash recovery|
|cego||17.06.2016||2.30.9||Fixes for query and table cache added ( addEntry method was still not clean )|
|cego||17.06.2016||2.30.9||Added tableset runstate CHECKPOINT to be set during a tableset checkpoint is performed.
Since this is a critical section in terms of data consistency, no system crash should occur while writing a checkpoint.
If so, the tableset now is marked with status CHECKPOINT and cannot be used anymore ( tableset recovery from backup required )
|cego||17.06.2016||2.30.9||Added tableset runstate CHECKPOINT to be set during a tableset checkpoint is performed.
Since this is a critical section in terms of data consistency, no system crash should occur while writing a checkpoint.
If so, the tableset now is marked with status CHECKPOINT and cannot be used anymore ( tableset recovery from backup required )
|cego||16.06.2016||2.30.9||Patch in CegoDistManager::startTableSet, before starting redo log file recovery, the tableset state has to be set to RECOVERY
Otherwise, occupied redo logs are not archived by the log manager.
This problem might occur in case of a crash recovery with archive mode set to ON
|cego||16.06.2016||2.30.9||Patch in CegoQueryCache and CegoTableCache ( for each method addEntry )
The usedSize calculation was not done correctly for replaces entries
|cego||15.06.2016||2.30.8||Added table and cache used size information to show tableset admin command
This indicates the amount of memory, which is already allocated for cached data
|cego||14.06.2016||2.30.8||Added synrchonization for query and table cache handling.
The lack of synchronization migth lead to core dumps, if a cache entry is freed but also be used by a query
So before cache cleanup, it has to be checked,
if the corresponding cache entry is still in use
If so, it has to be wait, until the cache is clean. For both caches ( query and table), the similar logic is used
|cego||12.06.2016||2.30.8||Added improvement for query cache handling
If a stored function, which are used in the cached query, was modified, the cache entry will be invalidated
For this, the CegoSelect::getTableList method was changed to CegoSelect::getObjectList and also the used functions are evaluated and added to this list.
|sysmt||12.06.2016||5.5.9||Adapted sysmtexp and sysmtimp X-port utilities for current schema definition|
|cego||12.06.2016||2.30.8||Cache cleanup in CegoQuery class is performed now AFTER the modifying action.Otherwise, it may appear, that a cache entry is made after cache cleanup but also before the modifying action.
This may lead to wrong results retrieved from obsolete query cache
|cego||11.06.2016||2.30.7||Introduced cego web specials to discuss specific database issues|
|cego||11.06.2016||2.30.7||Fixed memory leak in CegoSelect::nextTuple. Since the querycache is allocated by the CegoQueryCache instance, the pCacheList variable has to be freed after calling the addEntry method. Actually, the logic is not very smart, since the cache element is build up two times ....|
|cego||03.06.2016||2.30.6||The following query may cause a core dump
create table t1(a string(100)); insert into t1 values ( 'Hugo Habicht'); insert into t1 values ( 'Kim Kaiser'); select substr(a, 1, getpos(a, ' ')) from t1;For return value length evaluation, the method CegoFieldValue::asInteger is called on a null value which causes the dump. A fix has been added, so the method returns a value of 0 in case of null values.
|cego||15.05.2016||2.30.5||Code optimizations tested. The performance improvements on subselects are achieved as expected. Strike !|
|cego||15.05.2016||2.30.5||Code optimization for join buffer handling. Now a double pointer list is used to just keep references on CegoField lists. This should avoid expensive memory copies in case of creating parent join buffers for sub selects. This modification had impact on many parts in the code and first must be tested intensive|
|cego||12.05.2016||2.30.4||More work on code format cleanup|
|lfcbase||12.05.2016||1.8.3||More work on code format cleanup|
|lfcxml||12.05.2016||1.2.4||More work on code format cleanup|
|lfcbase||10.05.2016||1.8.3||More work on code format cleanup, 29 files to go ...|
|lfcbase||07.05.2016||1.8.3||update of config.guess to timestamp='2016-04-02'|
|lfcxml||07.05.2016||1.2.4||Code format cleanup, update of config.guess to timestamp='2016-04-02'|
|lfcbase||07.05.2016||1.8.3||Code format cleanup, updated config.guess to timestamp='2013-06-10'|
|cego||07.05.2016||2.30.4||Updated config.guess to timestamp='2016-04-02'|
|cego||07.05.2016||2.30.4||More work on code format cleanup. Still 80 modules ahead ...|
|cego||05.05.2016||2.30.4||Fix in CegoAdmMon, CGNOMONITOR definition was fixed defined ( should be defined via configure )|
|cego||05.05.2016||2.30.4||More work on code format cleanup|
|cego||01.05.2016||2.30.4||Code format cleanup fixes, elimination of obsolete commented code, no logical changes|
|cego||07.04.2016||2.30.3||Fix in CegoBufferPool::bufferFix. Small leak, since last page for each pool segment never could be used ( hashId calculation )|
|cego||06.04.2016||2.30.3||Cosmetic syntax change for set permission and remove permission admin command|
|cego||06.04.2016||2.30.3||Small information fix for query cache information in show tableset admin command|
|lfcbase||06.04.2016||1.8.2||Error message fix for Datetime constructor ( format strings are enclosed in brackets )|
|cego||03.04.2016||2.30.2||Changed default protocol from xml to serial. Date format handling completely implemented|
|cego||03.04.2016||2.30.2||Fixes for date format handling. The format string whihc is specified for the server is also used now for client formatting. This results in some network protocol fixes for serial but also xml network protocol.|
|cego||30.03.2016||2.30.0||- Fix in CegoDistCursor for quey plan calculation ( join objects )
- Fix in CegoAdminThreadPool and CegoLogThreadPool for thread load calculation - Major change for tablecache and querycache management, for both dedicated tableset entries are managed. Cache enabling, cache size and num entries can be controlled now on tableset level.
|cego||13.03.2016||2.29.4||Fix in CegoAction and CegoDbHandler to handle query abort requests correctly ( initiated by cgadm via abort db thread command )|
|cego||06.03.2016||2.29.3||Fixes for table and query cache handling|
|cego||04.03.2016||2.29.3||Fix in CegoDistManager::dropDistObject, table and query cache have been checked for cleanup, if a table is dropped|
|cego||01.03.2016||2.29.3||Fix in CegoQuery.cc, added table and query cache cleanup for alter and rename queries|
|lfcbase||25.02.2016||1.8.0||Fix in Chain for truncleft, truncRight and cutTrailing. In case of single character strings, the methods might return wrong results.|
|cego||25.02.2016||2.29.3||Fix in CegoClient to parse multi line statements correctly.
Further multi line merge token ( \ ) has been added to merge long string or clob values.
Now the following statements are possible
insert into t1 values ( 1, 'this is\ a multi line \ message \ with four lines');
|lfcbase||21.02.2016||1.8.0||Started with implementation of TextIndex class ( utility class for full text index creation )|
|cego||15.02.2016||2.29.2||Added include of string.h in CegoAction.c ( compile error occured on Suse Linux )|
|cegojdbc||05.02.2016||1.6.0||Version released ( clob ready, but still unimplemented clob methods)|
|cego||05.02.2016||2.29.1||Modification in cgclt for raw mode, Now just plain data is listed, with the command line option --raw=X, a separator token can be setup as a column separator|
|lfcbase||02.02.2016||1.7.2||Memory leak fixed in File::readLine|
|cego||02.02.2016||2.29.1||Very long strings are handled now in CegoAction and CegoClient to also parse large clob values|
|cego||01.02.2016||2.29.0||More work on lob handling. A fix was done for update operations on lob values in CegoTableManager::updateTuple method. Before updating the tuple, all lob references must be cloned, otherwise in case of untouched lobs, references are invalid. This approach is brute force, better would be, to stay on the untouched lob references. But in terms of transaction and recovery handling, this is not trivial|
|cego||31.01.2016||2.29.0||Required network protocol expansions done for clob handling ( putclob, getclob, delclob )|
|cego||30.01.2016||2.29.0||Basic clob handling works|
|cego||30.01.2016||2.29.0||Started with clob datatype implementation|
|cego||30.01.2016||2.29.0||Fix in CegoSelect constructor, _cacheEnabled var was not initialized in the decoding constructor, which might lead to core dumps in case of recovery of complex with enabled querycache Fix in CegoAdminThread constructor, disableAuth method for TableManger called, otherwise tableset recovery might fail with auth error|
|lfcbase||17.01.2016||1.7.1||Fix in Datetime.cc, added include config.h, otherwiese the local implementation of strptime ist used. This should just be done, if the system API does not provide this call ( e.g. MINGW ) .|
|cegobridge||12.01.2016||1.1.2||Version released ( version sync )|
|cegobridge||12.01.2016||1.1.1||Version released ( with improvements for make environment )|
|lfcxml||12.01.2016||1.2.3||Version released ( just a small patch in xmltest/Makefile.am )|
|cegobridge||11.01.2016||1.1.1||Patch in MySQLFormatter.cc to adapt enumeration change in CegoObject::ObjectType
Adaptions in configure.ac
|cego||03.01.2016||2.28.3||Version released ( also with fix in configure.ac as same as for lfcxml and dragon )|
|dragon||03.01.2016||1.4.1||Patch in configure.ac just relevant for FreeBSD compiles, since for configure /bin/sh is used, which cannot handle LDFLAGS+= " $LFC_LIBS" assignment. Instead LDFLAGS="$LDFLAGS $LFC_LIBS" is used now Version released|
|lfcxml||03.01.2016||1.2.2||Patch in configure.ac just relevant for FreeBSD compiles, since for configure /bin/sh is used, which cannot handle LDFLAGS+= " $LFC_LIBS" assignment. Instead LDFLAGS="$LDFLAGS $LFC_LIBS" is used now
|cego||03.01.2016||2.28.3||Since it is not enough jut checking the tuple header info for update deletes, a record locking has to be added to avoid duplicates.
In this sense, record locking for setTupleInfo method call ( used in CegoTableManager and CegoTransactionManager ) was added. For this, the lockRecord and unlockRecord method have been reactivated in CegoLockManager class.
This lock avoids, that in case of concurrent tuple updates duplicate tuples are produced by an update.
|dragon||02.01.2016||1.4.0||Version released ( adaptions for mingw build )|
|cego||02.01.2016||2.28.2||Fix in CegoTableManager::deleteDataTable ( renamed to deleteDataTableEntry )
Since we allow now parallel updates, the method must check if the target tuple has already been touched by another transaction. Otherwise, invalid double entries could occur in case of concurrent updates on the same tuple.
If a concurrent transaction is detected, the method returns false. This return value is used by the updateTuple method to decide, if the subsequent insert operation must be performed.
|cego||02.01.2016||2.28.2||Several changes from type int to type unsigned long long|
|cego||31.12.2015||2.28.1||Fix in configure.ac to set up library path for lfcbase and lfcxml in a right way|
|lfcxml||31.12.2015||1.2.1||Fix in configure.ac to the up path for lfc base library in a right way|
|cego||28.12.2015||2.28.0||Change index objectype to btree, avl index objects must be created now explicit using the new introduced avltree object type|
|cego||28.12.2015||2.28.0||Please note, that this version make datafiles from older versions incompatible.
An upgrade requires a xml tableset export of existing data and a restore after succesful upgrade
This version also contains many code cleanup fixes and some fixes for btree handling.
|cego||26.12.2015||2.28.0||Fix in CegoTableManager::createBTree, in case of an exception during build up, the allocated have to be cleanup up. For this the a rollback method was introduced in class CegoBTreeManager.
Fix in CegoTableCursor, invalid btree objects have not been ignored
|cego||26.12.2015||2.28.0||Many adapations to make cego full 64bit ready also in combination with MSYS2 / MINGW64. This resulted in change of many variables from type long to type unsigned long long (type long is just 32 bit for Windows )
With an appropriate MSYS2 / MINGW64 installation, cego compiles proper and runs stable now.
Many thanks to the MSYS/MINGW developers for their amazing work !
|lfcbase||26.12.2015||1.7.0||Adaptions made for build with msys2 / mingw64. Many windows specific stuff could be eliminated, since mingw64 provides better POSIX support ( e.g. pthreads, timer functions .. )|
|cego||18.12.2015||2.27.4||Full time table scan performance for 2 mio tuples is now
CGCLT > select count(*) from t1; +-----------+ | AGGR | | count(*) | +-----------+ | 2000000 | +-----------+ 1 tuples ok ( 0.293 s )
|cego||18.12.2015||2.27.4||Added performance fix for CegoQueryHelper::decodeFVL, since the tuple context information is already from the method called, the tid, tastep and ts parameters have been remove from this method. This saves some decoding time|
|cego||16.12.2015||2.27.3||Fix in CegoSelect::CegoSelect, the pCacheList variable was not initialized to 0 for all constructors. In case of system table selects, the variable might be undefined which might lead to segmetation faults.|
|cego||16.12.2015||2.27.3||Changed synchronization level for btree creation. So the base table can also be accessed while btree is created ( During creation btree status is invalid )
This also allows to perform on online btree reorganization, since a new btree can be build up in parallel
|cego||15.12.2015||2.27.3||Fix in CegoSystemObject::createSystemSpace, id values for bustat table must start with id 1 instead of id 0, otherwise, bustat information retrievel fails or may result in a core dump ( select * from $bustat )|
|cego||12.12.2015||2.27.2||Fix for system tables in CegoAttrDesc::evalReferences, for system tables the evalTableReferences method has to be called, otherwise attributes for system tables can not be accessed|
|cego||11.12.2015||2.27.2||Add dbCheck for Fetch & Cache ( check047 ), all base checks are run now with querycache ON and OFF|
|cego||11.12.2015||2.27.2||Fix in CegoSelect::nextTuple, the cache schema was not set up properly, if nextTuple was just called with empty jfl. This happens in case of procedure cursors, ( CegoProcFetch ), where the field value list is for all method calls empty|
|cego||11.12.2015||2.27.2||Fix for CegoExpr::getAggregationList(), missing break operations in switch block. This bug might lead to error messages regarding aggregation queries like
CGCLT > select sum(a) + 0 from t1; Error : Invalid expression sum(t1.a) + 0 for aggregation
|cego||10.12.2015||2.27.2||Modification for admin command set tsroot. Also the base path for all defined datafiles is set now to new tsroot|
|cego||09.12.2015||2.27.1||Fix in CegoBTreeCursor and CegoBTreeManager. Several conditons have been changed from
fileId && pageIdto
fileId || pageId. This bug may results in invalid btree objects in case of btree spawn over several datafiles ( the pageId might be 0 in the next file )
|cego||06.12.2015||2.27.1||Fix in CegoGroupSpace::insertTuple, the grouping tuple has to be search using getTableAlias instead of getTableName, otherwise the following query returns wrong results
select count(*), a from t1 group by a; --works select count(*), a from t1 tx group by a; -- brokenA check for this has been added in dbcheck suite
|cego||05.12.2015||BTree Cache test done with 100 million tuples.
bigts > select count(*) from t1; +-----------+ | AGGR | | count(*) | +-----------+ | 100119314 | +-----------+ 1 tuples ok ( 47.803 s ) bigts > create btree b1 on t1(a); Btree b1 created ok ( 9584.849 s )In fact, this is a creation time of about 2.6 hours. It has been observed, hat without the btree cache, the creation takes about 20 hours.
|cego||04.12.2015||2.27.0||Btree Cache are working now stable, performance tests with large tree still outstanding ...|
|cego||02.12.2015||2.27.0||Introduced BTree Cache to improve build up speed of large btree objects.This feature is now basically implemented and must be still tested|
|cego||01.12.2015||2.26.16||Ugly bug fixed in CegoObjectManager::releaseDataPtrUnlocked. The logical operator && must be replaced by ||, otherwise fix leak arises|
|cego||29.11.2015||2.26.16||Fix in CegoSelect::nextTuple for query cache to avoid, that queries including system tables are cached.|
|cego||29.11.2015||2.26.16||Error message fixes in CegoXPorter|
testdb.nepustil.net> ./showSpace Total Size = 1524 GB Total Allocated = 78 GB
|cego||29.11.2015||2.26.15||Introduced bufferpool distribution rate information in show pool output. This indicates, if the buffer pool is used in a balanced way. The behaviour can be changed with the BUFFERPOOLHASHKEY parameter.
The list pool command now receives the pool information in several chunk messages. This allows to print also very large buffer pool configurations
|lfcbase||28.11.2015||1.6.7||Improvement for ListT template class. The end of the list is now stored int _listEnd variable. This improves Insert performance, since the end of the list can immediately accesed instead of tracking through the whole list until the end is reached.|
|cego||28.11.2015||2.26.15||Introduced BUFFERPOOLHASHKEY as a database tuning parameter. Based on this parameter, the corresponding bufferpool slot for a fileId, pageId tuple is calculated. Depending on the configured datafile size, it might be useful to adjust this parameter|
|cego||28.11.2015||2.26.15||Simulation runs stable now
testdb.nepustil.net> ./showSpace Total Size = 1524 GB Total Allocated = 57 GB
|lfcbase||27.11.2015||1.6.6||Patch in ThreadLock, the mutex for lock statistics has been removed, since there is no need for synchronization. Also error have not been checked for the pthread_rwlock_wrlock, which might case some deadlocks|
|cego||27.11.2015||2.26.15||Cego Terra Test started. Approach is to load about 1TB of random data through the whole stack ( via cgblow ). Actually we are running with 19 parallel processes loading concurrently 4 different tables.
Estimated date to achieve TB-Size is in about one month
testdb.nepustil.net> ./showSpace Total Size = 1524 GB Total Allocated = 35 GB
|cego||27.11.2015||2.26.15||Changed command line argument --nolockstat to --lockstat. So the default value is lockstat disabled, since this has impact to the database performance|
|cego||26.11.2015||2.26.15||Modification of hash function in CegoBufferPool to achieve a better distribution for large buffer pool configurations|
|lfcbase||24.11.2015||1.6.5||Added kill method to class Process, added SigTest check program to basecheck suite|
|lfcbase||24.11.2015||1.6.5||Improvements in test suite|
|lfcxml||18.11.2015||1.1.8||Added automake check suite to package
Small fix for XMLSuite constructor for pInStream initialization
|cego||18.11.2015||2.26.14||Added encoding implementation for CegoCaseCond to allow case conditions also for update operations like
update erp_disk set location = case when substr(wwn,20,1) = '1' then 'MD' else 'GV' end;
|lfcbase||17.11.2015||1.6.4||Fix in BigDecimal::operator < and > .. comparison was not done correctly.
Added automake check suite in baseecheck directory ( derived from samples )
|cego||17.11.2015||2.26.14||Cosmetic changes in CegoDefs, increased FILEMNG_MAXDATAFILE parameter to 5000|
|cego||15.11.2015||2.26.13||Fix in CegoAttrDesc::evalReferences. In case of join objects, the refCount was not calculated correcty, since just the join object was analysed but not the sub content object. For this, a new method was introduced ( evalTableReferences ) and in case of join object, evalReferences is called recursive for all sub content objects|
|cego||09.11.2015||2.26.12||cgsimload with 3 mio ops and 2 processes passed|
|cego||09.11.2015||2.26.12||Fix in CegoBTreeCursor::getFirst, if pAttrCond == 0 and btree is empty, the method call tries to claim a zero datapointer
Reorganization of CegoDistManager and CegoTabelManager, all methods, which are calling useObject/unuseObject are located in CegoTableManager class now.
|cego||08.11.2015||2.26.11||Added more sophisticated corruption check for btrees ( CegoBTreeManager::verfiyBTree ), which also checks for any structure corructions in all btree nodes|
|cego||08.11.2015||2.26.11||Added btree check to CegoDistManager::verifyTable|
|cego||08.11.2015||2.26.10||Added make check feature for basic and gate tests|
|cego||07.11.2015||2.26.9||Version passed concurrent load test with 10 million concurrent operations ( random insert, update and delete on one table with 2 processes )|
|cego||07.11.2015||2.26.9||Fix in CegoFileHandler::allocatePage, In case of page exceed with appendMode = true, a second try is done with appendMode = false|
|cego||07.11.2015||2.26.9||Small fix in CegoObjectManager::reorgObject, ref page id information for append mode is set to new last page id|
|cego||07.11.2015||2.26.9||Small fix in CegoSelect::filterRefs, allow expressions with constant values ( getAttrRefList= 0 ) in aggregation|
|cego||07.11.2015||2.26.9||Locking improvements for delete and update operations. All delete operations are done now via transactions ( introduced CegoTableManager::deleteDataTableAtomic ). This allows to use a shared lock as the table lock for using the table ( CegoDistManager::deleteLocalDataTable and CegoDistManager::updateLocalDataTable )
As a result, a table can be accessed in parallel during a ( long running ) delete operation on the table( e.g. delete from table). E.g. select count(*) from table will not block anymore, rather indicates the remaining number of tuples in the table.
This modification is still under investigation and must verfied ( also in combination with btree/index objects on the table )
|cego||06.11.2015||2.26.9||Fix in CegoBTreeManager::deleteBTree, the relevance value was not calculated correctly
Fix in CegoQuery, cache invalidation is done before query operations. Otherwise, if the query is aborted, an exception is thrown and the cache is not cleaned
|cego||05.11.2015||2.26.8||Small modifications on cgblow load simulation client|
|cego||05.11.2015||2.26.8||Changed locking for delete an update operations to exclusive due to concurrency prpblems with btree operations|
|cego||04.11.2015||2.26.8||Added page locking to AVLIndexManager and AVLIndexCursor|
|cego||04.11.2015||2.26.8||Improvements for locking done.Since locking is done on page level, Insert and delete operations can be done now in parallel . For this locking had to be introduced in CegoBtreeManager::insertBTree and CegoBTreeManager::deleteBTree|
|cego||01.11.2015||2.26.8||Additional note : The previous patch improves performance for about 4% ( investigated on web stats for lemke-it.com )|
|cego||01.11.2015||2.26.8||Further performance path for grouping queries in CegoGroupSpace. Since the current grouping key is stored now in the class variable _groupSchema, some expensive list copy operations could be avoided|
|cego||31.10.2015||2.26.7||Performance fix has been done for record locking. In many cases, row locking could be avoided, since an appropriate locking is ensured on data page or object level. This brings another significant performance improvement close to commercial database products|
|cego||30.10.2015||2.26.2||The previous described performance fix results in an improved performance of about 80-90% for count aggregation queries|
|cego||30.10.2015||2.26.6||Added further performance fix for aggregation queries in CegoExpr and CegoQueryHelper. The aggregation list for CegoExpr now is stored in a class variable and is just evaluated the first time, it is retrieved. In the method CegoQueryHelper::aggregateTuple, the increment calculation of the count aggregation has been changed from memcpy calls to direkt pointer arithmetic|
|cego||24.10.2015||2.26.6||Added online help for query cache and table cache in cgadm|
|lfcbase||24.10.2015||1.6.3||Performance fix in Datetime class. Changed dynamic allocation of struct tm var to static.|
|cego||23.10.2015||2.26.5||Performance improvement for nested queries ( exists select, in select) The tablecursor for the select statement is not released and reallocated for subsequent queries ( in CegoQueryHelper, the select handle is reset with argument false ) This has required a different locking strategy for the cursor object in CegoDistCursor. The cursor object has explicit to get in use, if the nextTuple method is called the first time.|
|cego||17.10.2015||2.26.4||Fix for CegoBtreeManager::insertBTree, duplicate handling did not work correctly, if CegoBTreeNode::addValue returns false ( node is full ) with a duplicate detection, we also have throw exception. Otherwise the node is split and a duplicate is added.|
|cego||17.10.2015||2.26.3||Improvements for query execution plan retrievel|
|cego||16.10.2015||2.26.3||Fix in CegoOutput for multline format ( e.g. execution plans have been cut off )|
|cego||15.10.2015||2.26.3||Performance patch in CegoTableCursor::setup. The getObjectListByTable method was called every time, when the attribute condition has been changed. Since this operation is pretty expensive, it was useful to cache the retrieved index/btree objet in a local class variables. This change results in significant query speedup for joins, where the table cursor has to be setup very often|
|cego||12.10.2015||2.26.3||Small fix in CegoAction::readChain, treating backslashes for quoteEscapeFlag=false was commented, reactivated|
|cego||11.10.2015||2.26.3||Small fix in CegoMain, Default value for csmode changed to value "ID"|
|cego||04.10.2015||2.26.2||Fix in CegoBufferPool::calcHas and CegoBufferPool::calcSegement
For large file id's the integer range for the hash key might be exceeded, which lead to wrong address calculation.
The hash key now is calculated in long based values
|cego||03.10.2015||2.26.2||Introduced server mode with same behaviour as daemon mode, but no child process is forked and server can be terminated with Ctrl-C|
|cego||03.10.2015||2.26.2||Small formatting fix in CegoOutput|
|cego||02.10.2015||2.26.1||Fix in CegoDistCursor for inner and outer joins
Inner or outer joins with additional where condition might return incorrect result set since the condition was just evaluated inside the join.
To correct this, the where condition is also checked via evalCondition method. This required also a fix in the evalCondition method.
|cego||28.09.2015||2.26.0||Added multi segment support to CegoBufferPool. Since the pool is divided now into several memory segments, this allows larger buffer pool configurations.|
|cego||26.09.2015||2.25.4||Improvements for output formatting regarding string functions ( egoFunction::getReturnTypeLen). Size of required column field size is now calculated, so the outlook looks more pretty|
|cego||24.09.2015||2.25.4||Added hints from David Binderman in CegoAction::backChar and CegoBufferPage::printPage ( changed pointer comparison to avoid -Wextra compile warnings ) Thanks !|
|cego||20.09.2015||2.25.3||Decreased default cache size values to 100k ( query + table )|
|cego||20.09.2015||2.25.3||Next fileId (CegoXMLSpace::nextFID ) calculation now analyses the existing fileId and uses the lowest available. The MAXFID attribute in the database xml file is no more used. This avoids, that file id exceeds in case of frequent creation and removement of tablesets.|
|cego||19.09.2015||2.25.3||Some format correction in CegoAdminHandler for|
|cego||18.09.2015||2.25.3||Increased parameter FILMNG_MAXDATAFILE to 10000 and TABMNG_MAXTABSET to 500|
|cego||13.09.2015||2.25.2||Optimization added in CegoDisCursor::distSetup(CegoAttrCond)
If the native table cursor could not set up either FULL or PART, the table cursor retrieved all available rows from the corresponding table
In this case, the table also can be cached to improve subsequent queries for this table. This fix is relevant for queries like select * from t1 where b like '%X%', since the like condition cannot be used by the table cursor
|cego||13.09.2015||2.25.1||Fix in CegoSelect::nextTuple : in case of rowlimit > 0, the cached entry was not added to query cache|
|cego||12.09.2015||2.25.1||Added many columns sample to base test ( create, insert and select for table with 60 columns )|
|cegobridge||10.09.2015||1.1.0||Adaptions for cego-2.25.0 API change|
|cego||30.08.2015||2.25.0||Added throw statement for stored procedures. This allows to throw exceptions on application level|
|cego||30.08.2015||2.24.4||Fix in CegoAction::execViewCreate. Views must be compiled successful now immediately after creation. Otherwise, the calculated schema is not stored correctly into dictionary.|
|cego||30.08.2015||2.24.4||Fix in CegoFactor::getId, if sysdate is used in queries, it should be resolved, otherwise query couldbe used from cache which returns invalid result|
|cego||28.08.2015||2.24.3||To improve cache performance, reduced STATICFIELDBUF defintion from 100 byte to 20 byte|
|cego||27.08.2015||2.24.2||Kurt Jaeger provided a modified scanner description to handle SQL keywords case insensitive|
|cego||27.08.2015||2.24.2||Modification for csmode, can be setup to ALL, STR ( just string compares are case sensitive ) or NONE now depending on the requirements|
|cego||26.08.2015||2.24.1||Added cleanup cache method to CegoTableCache and CegoQueryCache destructor. Improved formatting for cache list.|
|cego||21.08.2015||2.24.0||Changed CegoQueryCache from list struct to array struct to make it thread safe|
|cego||20.08.2015||2.24.0||QueryCache and TableCache are both working stable for single threaded requests. Still have to change some code in CegoQueryCache to make it threadsafe|
|cego||17.08.2015||2.24.0||TableCache implementation completed. Tests still ongoing|
|cego||09.08.2015||2.24.0||As a lower level cache option, started with TableCache implementation.|
|cego||07.08.2015||2.24.0||New version verified with SysMT. Fixes for query string generation done ( using _conjunctionList instead of _pPred to access also _viewConjunction ).|
|cego||05.08.2015||2.24.0||Added query cache info command to indicate max cache entry and max cache size|
|cego||04.08.2015||2.24.0||Several fixes on query cache implementation ( subselects still have not been handled correctly, query cleanup and reset handling ) Base check and gate are ok now|
|cego||03.08.2015||2.24.0||Another improvement for query cache. Instead of saving CegoField values in the query cache array, this has been reduced to storing CegoFieldValue values. Schema information is stored just one time for each query cache entry in the cacheSchema variable. This avoids memory consumption for the query cache.|
|cego||01.08.2015||2.24.0||Query Cache is basically working and actually meets expectations.|
|cego||01.08.2015||2.24.0||Proceed with QueryCache implementation. Basic admin functions ( show querycache, clean querycache ) working now, query content is stored to query cache|
|cego||28.07.2015||2.24.0||Started with query cache implementation|
|cego||26.07.2015||2.23.13||Documentation cleanup for Database XML description and SQL language description|
|cego||25.07.2015||2.23.13||Added gate D to gate check for checking modifying queries|
|cego||25.07.2015||2.23.12||Further patches in CegoTableManager::deleteDataTable, CegoFactor::evalReferences and CegoSelect::nextTuple for advanced query cache handling.
All patches have impact on queries of the form
delete from t1 where a in ( select ....)
|cego||25.07.2015||2.23.12||In CegoQueryHelper::evalPredicate fixed termination for INSUB- and NOTINB queries. There was no reset at the end of the evaluation, which might lead to open table cursors. In case of procedure queries, this might lead to locking problems.
Since the query is reset after evaluation, query caching is no more useful. This must be treated in an advanced way.
|cego||20.07.2015||2.23.11||Added performance patch in CegoFieldValue. Value length up to STATICFIELDBUF size ( 100 bytes ) are handled using a static byte array. This saves expensive memory allocation calls in most cases. First very rough performances analysis has shown a performance improvement of about 5-10 percent|
|cego||19.07.2015||2.23.11||The local copy logix was shifted from CegoSelect::nextGroupedTuple to CegoGroupSpace::insertTuple.
Since the buffer page invalidation effect might also occur for plain ordering queries, local copies are also created now in CegoOrderSpace::insertTuple
|cego||18.07.2015||2.23.10||Fix in CegoSelect::nextGroupedTuple.
For the grouping key values, a local copy of CegoFieldValue has to be created. Otherwise, grouping references might be invalate, which result in aborted grouping queries with strange error message ( No token available ) on client side.
For local copy creation, the CegoFieldValue::getLocalCopy method has been modified ( was not used until now ) This effect was observed in case of small buffer poolsize in combination with grouping queries on large tables. The probability of grouping key invalidation is higher then, because buffer pool pages are reloaded more often
|cego||12.07.2015||2.23.9||The added performance fix also avoid infinite query loops for non-reference conditions, e.g. select a from t1 where 1 = 1;|