An overview of SIRA_PRISE feature changes

Overview of the most important changes from the previous version, 1.4 :

  • To the types and operators system
    • Added support for BIGINT and SCALEDNUMBER types, akin to Java's BigInteger and BigDecimal types, plus the basic arithmetic and 'casting' operators for them.
    • Added explicit support for TUPLE types usable "everywhere" in the expression language. Prior, something akin to TUPLE value selectors was only supported inside the specific context of relation value selectors.
    • Added catalog relvars OPERATOR and GENERATEDOPERATOR. These document which operators are available in the expression language. The OPERATOR relvar is user-updatable for registering the user's own implemented operators.
    • Added generalized transitive closure, but currently still without the possibility of using it in database constraints.
    • Added a CHOOSE operator, which gets defined automatically for every type, and which is equivalent to the commonly known ?: ternary operator from the C family of programming languages.
    • Added relational PACK and UNPACK operators, exposing the functionality of the operator of the same name described in TDATRM and its successor, "Time and Relational Theory".
    • Added "explicit" USING<> versions of certain relational operators, as per TDATRM and its successor, "Time and Relational Theory". These USING<> versions allow the user more control over which subset of the interval-typed attributes of the arguments to a relational operation will be treated in "USING<>" or "range" mode, and how the results of such operation will be PACKed.
  • To the logical database design facilities
    • Attributes of base relvars are now allowed to be nonscalar.
    • The concept of 'logical length' has been revised. Previously, this concept did two things : (a) it determined physical encoding size in ways that had to be hardcoded in the type implementation, and (b) it provided a way to cap the 'length' of values of all attributes of types for which the notion of a 'length' made sense. The connection with physical encoding size has been removed, the connection with 'capping length' is now realized by regarding it as a specific sort of constraint, the expression of which involves an invocation of some LENGTH() operator of the corresponding signature.
  • To the physical database design facilities. The existing concepts for physical design have been completely overhauled.
    • All the previous types of storage space have been abandoned and replaced with just two new ones (one for hash-based and one for ordering-key based).
    • The separate concepts of 'index' and 'recordtype' have been mergered into a single concept of 'recordtype'. The difficult-to-deal with concept of 'tuple index' has been abandoned.
    • While previously ordering-key storage spaces allowed to store only a single record(/index) type, it is now possible to mix >1 record type in its replacement, the clustered record space, (just so long as the ordering key, which is defined at the storagespace level, can validly be applied to all those record types).
    • Space actually used by individual records is drastically reduced, owing to a revised encoding scheme for all 'text' values.
    • The net result of all this is a general increase in updating speed and a general reduction of space usage.
  • To the client package
    • The jsba, probably the most comfortable means for talking to a SIRA_PRISE server from a java program, has been extended with annotation-based facilities (not entirely unlike the popular ORM softwares)
    • All catalog changes have been reflected in the provided catalog DBObjects
    • The IRelation interface facilitates query writing in typical OO dotted notation style, e.g. "r1.join(r2)".
    • The new RelvarProxy, implementing the new IRelation interface, facilitates denoting RA expressions to be carried out on the server, in the same typical OO style.
    • The Relation class implements the new IRelation interface, so that many (not yet all) RA operations can be carried out directly on the client side, if you have the relations to do them with.
  • To core functionalities
    • Managed to achieve 100% full compliance with RM pre 6 regarding MA. Previously, the MA A := x, A := f(A); failed to behave like A := f(x). This has been remedied. And not at the expense of A := x, A := f(A), B := A; exposing B := f(x) kind of behaviour.
    • Now supports adding user-defined constraints to system-defined relvars. This allows to enforce local database design policies such as naming conventions, as well as giving the means to implement security rules about who is allowed to do DDL.
    • Previsions for running read-only transactions in "snapshot" isolation mode, using MVCC-based concurrency control.
    • A revised algorithm for temporal PACKing improves performance, and will also allow for more user control over the operation, such that PACK() operators could later explicitly be exposed in the expression language.
    • Live backups are supported. An engine control command is added that will trigger taking backups from within the engine, keeping it available in read-only mode.
  • To the web client
    • Prettified the looks of the database administration web client.
    • Help is available for its functions (former content of the user guide document), and if not, then that useless help button is not shown.
    • Made some additional engine control features available through the web client, e.g. the hotrestart and the new internal backup procedure.
  • To the demo applications
    • The birdwatcher demo application had gone broken in the course of previous releases. Revised it to install and run properly again.
  • To the test bench
    • The test scripts have been XML-ified to facilitate easier matching between a test operation and its expected result. Also, they can be run as junit tests in some development environment, provided a running server is available to connect to.