UltraLite new features

UltraLite 8.0 introduces the following new features:

Security
  • User authentication   In previous releases, UltraLite databases had no user authentication mechanism to govern access. In this release, a built-in user authentication mechanism is provided. Unlike user IDs for most relational database management systems, the UltraLite user IDs do not imply any ownership of tables and other database objects.

  • Database encryption   You can improve the security of your data by encrypting your database. Two methods are supplied.

  • Strong encryption   The database can be encrypted using a strong encryption algorithm for maximum security. There is a performance penalty to pay for this security. The encryption is key-based and uses the AES 128-bit algorithm.

  • Database obfuscation   You can improve the security of your data by obfuscating the database. Without obfuscation, the data in the database is viewable using a tool such as a hex editor. Obfuscation prevents casual attempts at viewing data but does not offer the watertight protection of strong encryption. Obfuscation does not have the performance penalty that strong encryption carries.

    For more information, see Securing UltraLite databases.

  • Secure synchronization for UltraLite Java applications   Secure synchronization using Certicom transport-layer security was previously available only from C/C++ UltraLite applications. It is now available from UltraLite Java applications.

Synchronization
  • ActiveSync synchronization   UltraLite applications on Windows CE devices can use ActiveSync to synchronize.

    For more information, see Adding ActiveSync synchronization to your application.

  • More flexible synchronization   Several new features have been added to enable more efficient and flexible selection of data to synchronize:

    • You can use publications to partition your data into different sets, which can be synchronized separately. This permits the efficient synchronization of time-sensitive data, perhaps over slow connection links, while other data can be synchronized at a more convenient time.
    • Download-only synchronization permits you to add read-only tables to your UltraLite database, and to synchronize them efficiently using a download-only synchronization.
    • You can mark a table to be synchronized each time, whether or not the data in the table has changed. This feature allows you to maintain user-configurable information on the UltraLite client that controls synchronization.

  • Global autoincrement default column values   This feature provides a straightforward way of maintaining primary key uniqueness in a synchronizing database.

    For more information, see Overriding partition sizes for autoincremented columns.

  • Additional control for UltraLite generator   New command line options have been added for the ulgen and sqlpp executables:

    • Script version   You can associate a script version with generated synchronization scripts.

    • Log query execution plans   The query execution plans for generated queries can be exported and displayed in Interactive SQL.

  • Error reporting   The stream_error field on the ul_synch_info structure can be used to determine the cause of synchronization errors.

    For more information, see Stream Error synchronization parameter.

Database management
  • Re-use of existing databases   In previous releases of UltraLite, any change to a database application required a rebuild and synchronization of the database. With this release, you can continue to use an UltraLite database with a new version of your application as long as the database schema does not change. Changes to queries do not of themselves require a new database, unless they reference new columns and so change the schema of the generated database.

  • Database defragmentation   The UltraLite store is designed to efficiently reuse free space, so that explicit defragmentation is not required under normal circumstances. For applications with extremely strict space requirements, an explicit defragmentation function is provided.

  • Choice of page size   You can choose to use 2 KB page sizes as an alternative to the default 4 KB pages.

Development features
  • CodeWarrior 7 support   The UltraLite plug-in for CodeWarrior now supports CodeWarrior version 7.

  • eMbedded Visual C++   Development using this tool is supported, and an eMbedded Visual C++ project is supplied for the CustDB sample application.

  • Palm OS 4.0 and file-based data storage   UltraLite now supports version 4.0 of the Palm Computing Platform. Beginning with Palm 4.0, a variety of secondary storage schemes is introduced. You can use a file-based UltraLite data store on an expansion card for a Palm 4.0 device.

  • Improved synchronization for Palm Computing Platform   A new and simplified synchronization mechanism for HotSync and ScoutSync synchronization on the Palm Computing Platform has several benefits over previous synchronization mechanisms:

    • Launch and exit times are fast.
    • No extra storage is required on the Palm device during synchronization.
    • The application can be synchronized several times without launching.
    • No stream parameter needs to be specified.

    The ULPalmDBStream and ULConduitStream functions are deprecated.

    For more information, see Adding HotSync synchronization to Palm applications.

  • Easier deployment on the Palm Computing Platform   You can deploy initial copies of the UltraLite database to your end users so that the first synchronization does not have to download an initial copy of the data for each user.

    For more information, see Deploying Palm applications.

  • Improved handling of Palm segments   When developing for the Palm Computing Platform, application code must be divided into segments of limited size.

    The segmentation method provided in earlier versions of the software allowed no user control over the segmentation of the UltraLite generated code, and tended to assign too many segments (which could degrade performance). A new mechanism generates fewer segments and provides customers with control over the assignment of segments.

  • LONG values in embedded SQL   You can use host variables for long values (between 32 KB and 64 KB) using the DECL_LONGVARCHAR and DECL_LONGBINARY.

  • Analyzer hooks in the reference database   The UltraLite generator now invokes stored procedures before and after the analysis process.

  • Execution plan information   The UltraLite generator can now output the access plan to be used for queries in UltraLite applications. Also, you can view the execution plan that would be used for UltraLite from Interactive SQL.

  • Script version control   You can specify the script version to be used for synchronization on the UltraLite generator command line.

  • Additional SQL and API features   The following features are now available to UltraLite applications.

    • @@identity supported   The @@identity global variable is now supported by UltraLite. This feature is useful in the context of global autoincrement default column values. In the C++ API, use the ULConnection::GetLastIdentity() method.

    • Number of rows in a table   From the C++ API programming interface you can determine the number of rows in a table using the ULTable::GetRowCount() method. Embedded SQL users continue to use the SELECT COUNT(*) FROM table-name statement.

    • Delete all rows in a table   From the C++ API programming interface you can delete all rows in a table using the ULTable::DeleteAllRows() method. Embedded SQL users continue to use the DELETE FROM table-name statement.

    • Number of rows affected   From embedded SQL you can determine the number of rows affected by the last INSERT, UPDATE, or DELETE statement using the SQLCOUNT macro.

    • Number of rows to be uploaded   You can determine the number of rows that need to be synchronized.

      For more information, see ULCountUploadRows function.

    • Last download time   You can obtain the last download time of a publication from the UltraLite application.

      For more information, see ULGetLastDownloadTime function.

    • Additional cursor operations   The ULTable class of the C++ API has additional methods (FindFirst, FindNext, FindPrevious, FindLast) to locate rows in a result set.

    • Queries from DUMMY system table   Queries of the form SELECT ... FROM DUMMY are now supported.

    • Updating multiple tables   Cursors over multiple tables can now accept updates that modify more than one table.

    • Improved LONG data type handling for embedded SQL   The DECL_LONGVARCHAR and DECL_LONGBINARY host variable types can be used to send or retrieve data over 32 KB in a single operation.

      For more information, see Data types in embedded SQL.