ctdbCloneTable() adds new ability to clone a c-treeACE table - A new function was added to c-treeDB to clone a table. This function creates a new table with the attributes from an existing source table. This does NOT create a duplicate table -- records are not copied. The CTTable::Clone() methods was also added the to c-treeDB C++, and .NET APIs.
Result Set feature - We have introduced a Result Feature in c-treeDB. This is a smarter way to set filters based on field criteria. The result set handle is allocated (ctdbAllocateResultSet) for a specific table handle, then it is possible to add one or more criteria (ctdbAddCriteria). The criteria have a field to be checked against the table handle that owns the result set, one or two values (depending on the comparison operator) and the operator to be used. The operator can be one of: CTIX_EQ, CTIX_NE, CTIX_GT, CTIX_GE, CTIX_LE, CTIX_LT, CTIX_BET, CTIX_BET_IE, CTIX_BET_EI, CTIX_BET_EE or CTIX_NOTBET. When the result set has all the criteria added, it can be turned On/Off (ctdbResultSetOnOff) for any record handle that is allocated for the same table handle that owns the result set.
ctdbGetCtreeOWNER(VOID) - Added function to get/set the c-treeACE Owner: In Java, the garbage collector runs in a thread that is not the main application thread and this may cause c-treeACE problems due to the nature of thread handling in c-treeACE and in particular to the “owner” approach c-treeACE implements. Moreover, in c-treeDB Java there is the necessity to use or reuse a session object (or any “child” object of a session) in a different thread than the one that originally created it. To this end it is good to have a way to get and set the c-treeACE owner in a consistent way across the various supported library models.
Added timetostring formats to use 2 digits for hours - A customer noticed that ctdbTimeToString() function uses one or two digits (depending on the value) to represent the hour part, while it always uses two digits for the minutes and the seconds. The c-treeDB documentation when describing the time formats uses, for instance, HH:MM:SS saying the MM and SS are two digits while says nothing for HH. The customer would like to always use 2 digits also for the hour that would help with data exchange with our database and with reports line-up. We added new formats that enforce two digits also for the hours.
Add tables with same filenames to a c-treeDB database - A common migration scenario for c-treeDB users is to import multiple tables into a single database that share the same physical file name, even though they reside in separate directories. This is now supported with the ctdbAddTableXtd() API call. This call allows adding a table specifying both a logical and physical table name (the physical table name is the name on disk without the extension and path). The logical table name is the one then normally used for c-treeDB table operations.
Add new table create mode to indicate compressed records - We added CTCREATE_COMPRESS new table create mode to support the new data compression feature.
IDENTITY support added to c-treeDB - The following functions were added to the c-treeDB C API for working with Identity fields: ctdbSetIdentityField() to Set an Identity Field for a table; ctdbGetIdentityFieldDetails() to Retrieve the name, seed and increment of an Identity field; and ctdbGetLastIdentity() to Retrieve the last Identity value used for a table.
ALTER TABLE Add and Drop Columns supported for Partitioned Files - The ability to add and drop columns for Partitioned Files via an ALTER TABLE (either via SQL or c-treeDB) has been added. Previously an invalid argument error was returned (CTDBRET_INVARG) when attempting this operation. For very large data sets this could take time, as currently, every record is visited to update based on the new schema. In addition, if indices require a rebuild, this will require additional time.
New c-treeDB methods to retrieve partitions - Additional methods have been added to the c-treeDB.NET API CTTable class to support retrieving the first (oldest) and last (newest) partition members. These methods return the partition rawno value of the partition member, that can then be used to purge or otherwise administer the partition member directly.