Last used Exception* number: RS0509 Version 3.016 (1.0.29): - Fix: Case #320: DBrowser's built-in backup crashed, due to the Rel DBMS 'BACKUP' command failing to find the backup generation script. Fixed. - Enhancement: The format of the sys.Version relvar has been simplified to remove the multiple version attributes and replace them with two attributes: db_version for the database format, and product_version for the release version. - Enhancement: Spelling changed from 'updateable' to 'updatable' in error messages where it appears, to be consistent with typical use. Version 3.015 (1.0.28): - Enhancement: Update to Java 19. - Enhancement: Upgraded 3rd party libraries. - Enhancement: Added more detailed startup diagnostic logging. - Enhancement: Java build uses Maven. Ant and Eclipse not required. - Fix: Bogus .rel preference key starting with \u0000 removed if present. - Fix: Recently-used database list now limited to 25 databases, to prevent startup slowdown and possible resource limit issues. - Fix: The DUP_COUNT option for external JDBC-based relvars has been fixed. Previously, it returned incorrect values. Version 3.014 (1.0.27): - Fix: Rel: Case #229: Executing the following... OPERATOR myOperator (x INTEGER, y INTEGER) RETURNS INTEGER; RETURN x + y * 2; END OPERATOR; CALL myOperator(3, 4); ...caused a fatal error. Fixed. - Fix: Rel: In some cases, INSERTing a relation into a relvar that should ignore duplicate tuples will indicate it has inserted tuples but fail to insert any. Fixed. - Enhancement: DBrowser: Command-line now provides Execute and Evaluate buttons to explicitly choose command execution or expression evaluation. - Enhancement: DBrowser: Disabled OK/Cancel buttons and provide indication of running status when restoring database in RestoreDatabaseDialog. - Enhancement: Rel: RATIONAL literals Infinity and NaN now recognised by parser. - Enhancement: DBrowser: Rel mascot image displayed on background of Rel mode when no tabs are displayed. - Enhancement: Client: AutoCloseable interface implemented on connection classes. - Enhancement: DBrowser: Simplified code in RestoreDatabaseDialog. Version 3.013 (1.0.26): - Enhancement: RelUI phased out in favour of DBrowser. DBrowser provides same interface, but significantly fewer Eclipse framework dependencies. - Enhancement: DBrowser: Export option dropped from relvar grids, as there are other, better facilities for exporting to Excel. - Enhancement: DBrowser: Under Preferences, moved alternate output display option to Display tab. - Enhancement: DBrowser: Improved handling of icon resizing via Preferences. - Enhancement: DBrowser: Preferences no longer stored in Rel application directory; now stored in user's home directory. This allows keeping preferences across Rel updates. - Enhancement: DBrowser: Now supports "remote only" mode where only connections to remote databases are possible. To enable, delete rel0*.jar (e.g. rel0000.jar), RelDBMS.jar, and RelTest.jar from lib/rel. - Enhancement: DBrowser: '+' tab now provides list of recently-used databases and means to delete entries. As a result, management entries removed from main menu. - Enhancement: DBrowser/Client: Tweaks to display of RVAs to improve readability. - Enhancement: DBrowser now provides option to create and restore a database from a backup. - Enhancement: Client library: Decoupled Server/ServerV0000 from Client to permit use of relclient.jar on its own (plus relshared.jar) to facilitate developing purely remote clients. - Enhancement: Rel: Added p LEFT JOIN q which returns TUPLE {Matched p JOIN q, Missing p NOT MATCHING q} - Enhancement: Rel: Added p RIGHT JOIN q which returns TUPLE {Matched p JOIN q, Missing q NOT MATCHING p} - Enhancement: Rel: Added p FULL JOIN q which returns TUPLE { Matched p JOIN q, MissingLeft p NOT MATCHING q, MissingRight q NOT MATCHING p } - Enhancement: Build: Module jars now generated via Ant build files; product build scripts now generate all jars. - Bug fix: DBrowser: The 'comment' visualiser in Rev now handles carriage return correctly on all platforms. - Bug fix: DBrowser: Saving a script with escape chars, e.g., \\blah, loads as \blah. Fixed. - Bug fix: DBrowser: Resizing the Rel window whilst in relvar Edit mode caused odd problems, such as the content not re- sizing, scrollbars disappearing, etc. Fixed. - Bug fix: DBrowser: Graphical editing of RVA value did not work due to failure to launch RVA editor. Fixed. - Bug fix: DBrowser/Client: Fixed TUPLE of RVA display problems. - Bug fix: Rel: parallel RENAME now supported. E.g., TUPLE {x 10, y 20, z 30} RENAME {x AS y, y AS x} works. Case #203 fixed. - Bug fix: Rel: This threw a fatal error: RELATION {TUPLE {RVA RELATION {TUPLE {K 1}}}} EXTEND {RR := RVA RANK (ASC K AS R)} Fixed. Version 3.012 (1.0.25): - Enhancement: Rel DBMS: Now provides -q command-line option to disable startup/shutdown information messages. This is intended to make it easier to implement standalone scripts that produce console output for later redirection. - Enhancement: Rel DBMS: Duplicate StringUtils class removed from ServerV0000 subproject. Now uses StringUtils from Shared subproject. - Enhancement: Rev: Advanced search available in Restrict (WHERE) operator. - Enhancement: Rev: A Comment node has been provided, to add commentary to a visual query. - Enhancement: Rel UI: Tabular displays of views, relvars, or expression evaluation results (in Rev visual query editor) now provide mechanism to search and sort the results. - Enhancement: Rel DBMS: new built-in operator SEARCH(t TUPLE{*}, regex CHAR) RETURNS BOOLEAN Returns true if any CAST_AS_CHAR(a), where a is an attribute of t, matches regex. This permits general text search of tuples, e.g., S WHERE SEARCH(TUP {*}, ".*3.*") returns any tuple in S with a '3' in some attribute value. - Bug fix: Rel UI: In command-line interface, WRITELN "blah//"; or other string with embedded comment character sequence caused syntax error, because // was treated as an expression ending in a comment rather than a statement. Fixed. Version 3.011 (1.0.24): - Enhancement: Rel UI: Opening a relvar in Edit mode now positions cursor in blank row at bottom, ready to insert. Cursor keys may be used to navigate, and Ctrl/Cmd-Cursor keys may be used to jump to top/bottom or right/left. - Enhancement: Rel DBMS: Using SAME_HEADING_AS(...) in a relation literal heading was not permitted. E.g., REL SAME_HEADING_AS(S) {} was a syntax error. It is now permitted. - Enhancement: Rel UI: Better font scaling when using alternative output display on HiDPI Windows displays. - Enhancement: Bundled JRE now version 8u161. - Enhancement: Rel DBMS and Rel Client now check for 'null' source code. - Fix. RelUI: Given: Ubuntu 16.xx or 17.xx environment. Result: Multiple GUI failures. Fixed. Note: Startup forces GTK2. Some issues remain, but at least usable... - Fix. RelUI: Given: In the relvar Edit mode, press "Go to INSERT row" button on relvar with high enough cardinality to require scrolling. Result: It was was supposed to do what Ctrl-End should also do: position the display on the blank row and put the cursor in it. It doesn't. Fix it. Fixed. Note: Ctrl/Cmd-Cursor preferred over Ctrl-End. - Fix. Rev: Given: Create an Expression and set its text to "WRITELN '&blah'". Result: The & won't show. If you change the text to "WRITELN '&&blah'", it shows &, but is treated as "WRITELN '&&blah'". Fixed. - Fix: Rel UI: Cut/copy/paste/selectAll now work consistently and are generally available where they should appear. - Fix: Rel DBMS: Given: https://reldb.org/forum/viewtopic.php?f=2&t=1527&p=2863#p2863 Result: Fatal error instead of semantic error. Fix: Now throws semantic error, plus helpful hint for fixing typical error. - Fix: Rel DBMS: Given: S GROUP {blah} AS rva Result: Java NullPointerException due to undefined attribute 'blah'. Fixed. - Fix: Rel DBMS: ABS(n) always returned a rational value, even if n was INTEGER. Fixed. Version 3.010 (1.0.23): - enhancement: Rel: Drop-down menus provided for major operations. - enhancement: Update to Berkeley Java DB version 7.5.11 - enhancement: Rel: Double-click on database tree item causes focus to be set to the contents of the tab. - enhancement: Rel DBMS: Unicode asymmetric quotes (‘ ’ “ ”) now explicitly recognised and generate a human-friendly error. - enhancement: Rel: Variable and VIEW "play" mode shows relation with improved formatting. - enhancement: Rel: Double-click now expands/contracts database tree item headings. - enhancement: Rel: CPU and memory displays now follow typical paradigm of showing usage rather than (as before) showing available. - fix: Rel DBMS: Given: COUNT {S WHERE CITY = CITY, S WHERE STATUS = STATUS} Result: Returns type mismatch error when it shouldn't. Fixed. - fix: Rel DBMS: Given: VAR TEST4 REAL RELATION {ID INTEGER, RVA RELATION {RID INTEGER, STR CHAR}} KEY {ID}; INSERT TEST4 RELATION { TUPLE {ID 1, RVA RELATION {TUPLE {RID 11, STR 'A'}, TUPLE {RID 22, STR 'E'}}} }; Execute: UPDATE TEST4 WHERE ID = 1: {UPDATE RVA WHERE RID = 22: {STR := 'blah'}}; UPDATE TEST4 WHERE ID = 1: {UPDATE RVA WHERE RID = 22: {STR := 'blah'}}; Result: TUPLE {RID 22, STR 'blah'} is incorrectly deleted. Fixed. - fix: Rel: CSS on exported HTML for tabular displays did not correctly format table heading text. Fixed. - fix: Rel: Command-line correctly detects execute vs evaluate by ignoring whitespace and comments. Version 3.009 (1.0.22): - fix: Rel DBMS: getCanonicalHostName() in setupShutdownHook() ServerV0000:org.reldb.rel.v0.interpreter.Instance no longer invoked too frequently, or in a manner that bottlenecks startup. Turns out to be slooow on some networks. - enhancement: Update to Java runtime version 8u151 Version 3.008 (1.0.21): - fix: Rel DBMS: Given VAR v REAL RELATION {x INT, y INT} KEY {x} KEY {x}, do INSERT v REL {TUP {x 1, y 1}}. Subsequent INSERT v REL {TUP {x 2, y 1}} would report 0 tuples inserted but would insert TUP {x 2, y 1}. I.e., additional KEY constraints were not holding true for INSERT. Fixed. - enhancement: Update to Berkeley Java DB version 7.4.5 - enhancement: Update to Java runtime version 8u144 Version 3.007 (1.0.20): - enhancement: Rel DBMS: Infix EXTEND, SUMMARIZE and UPDATE expression now available. These are now allowed: S EXTEND {SS := STATUS} S EXTEND: {SS := STATUS} S SUMMARIZE BY {CITY} {SS := SUM(STATUS)} S SUMMARIZE BY {CITY}: {SS := SUM(STATUS)} S UPDATE {STATUS := 2} S UPDATE: {STATUS := 2} - enhancement: Rel DBMS: Dyadic and monadic relational operators now have equal precedence, except WHERE (lower precedence) and projection (higher precedence). This means operators may often be "chained" naturally without requiring parentheses. E.g., S RENAME {CITY AS PLACE} WRAP {PLACE, STATUS} AS T is allowed, where previously (S RENAME {CITY AS PLACE}) WRAP {PLACE, STATUS} AS T would have been required. Should not affect existing code. - enhancement: Rel DBMS: RANK has been implemented, per DTATRM page #234 and with infix version: RANK S BY (ASC STATUS AS Ranking) S RANK BY (ASC STATUS AS Ranking) S RANK (ASC STATUS AS Ranking) - enhancement: Rel DBMS: EQUIV has been implemented, per Database Explorations. - fix: Rel DBMS: Case #139 - #142: Fatal error inappropriately generated when a query was cancelled by a client. Fixed. - fix: Rel DBMS: Case #153: Fatal errors in built-in user user-defined Java-based operators now generate an error message rather than causing a fatal error. Version 3.006 (1.0.19): - enhancement: Rel DBMS: All operators previously found in UsefulOperatorsAndViews.rel are now built-in. - enhancement: Rel DBMS: sys.OperatorsBuiltin relvar now provides documentation of built-in relvars via Definition attribute. - enhancement: Rel DBMS: Updated storage engine to Oracle Berkeley DB JE version 7.3.7 - enhancement: Rel DBMS: External Rel DBMSs' relvars may now be EXTERNAL relvars. E.g.: VAR myvar EXTERNAL RELVAR "host,username,password,relvarname"; VAR myvar EXTERNAL RELVAR "host,username,password,relvarname,1234"; // port is 1234 - enhancement: Rel DBMS: Provided built-in QUOTE(CHAR) RETURNS CHAR and UNQUOTE(CHAR) RETURNS CHAR operators to quote/unquote delimiters and special characters. - fix: Rel DBMS: External relvar column name cleanup erroneously turned 'g' and 'i' to '_'. Fixed. - fix: Rel DBMS: Extraneous spaces no longer inserted into EXTERNAL ACCDB and EXTERNAL JDBC relvar definitions. - fix: Rel DBMS: UPDATE operator (not statement) allowed duplicate tuples to be emitted. Fixed. - fix: Rel DBMS: IN operator sometimes returned incorrect result if tuple operand had different attribute order from relation operand. Fixed. - fix: Rel UI: In Rev, single quotes in RESTRICT, EXTEND, SUMMARIZE or UPDATE expression caused expression not to be saved. Fixed. Version 3.005 (1.0.18): - enhancement: Rel UI: REAL relvar design view aesthetically improved, and prompts user if attempt is made to close tab without applying pending changes. - enhancement: Rel UI: external relvars easily created via Rel UI. - enhancement: Rel DBMS: sys.ExternalRelvarTypes relvar documents available external relvar types. - enhancement: Rel DBMS: sys.Keywords relvar lists all keywords in Rel / Tutorial D grammar. - enhancement: Rel UI: Syntax highlighting now obtains keyword list from database sys.Keywords relvar. - fix: Rel UI: Case #135: Special characters now work correctly under Windows. - fix: Rel UI: Case #136: Command-line entry panel is now always in focus after executing code. Version 3.004 (1.0.17): - enhancement: Rel DBMS: !!SP or !!(SP) is now equivalent to IMAGE_IN(SP) and !!(SP, TUP{x 1}) is equivalent to IMAGE_IN(SP, TUP {x 1}). This is to bring Rel into line with Date & Darwen's "Database Explorations" text. - enhancement: Rel DBMS: Unicode supported for ≤, ≥, ≠, ×, ÷, ‼, ⊂, ⊆, ⊃, ⊇ and ∈. Note: buggy on Windows 10; works well on OS X. - enhancement: Rel DBMS: GROUP now significantly faster, though uses more memory. - enhancement: Rel UI: Case #133: Command-line Save set to filename & path of most recent Load. - enhancement: Rel UI: Unicode entry shortcut dialog provided on command-line. - fix: Rel DBMS: RELATION {TUPLE {SID 1, PID 1}, TUPLE {SID 4, PID 5}} GROUP {PID} AS PARTS UNION RELATION {TUPLE {SID 1, PARTS RELATION {TUPLE {PID 1}}}, TUPLE {SID 4, PARTS RELATION {TUPLE {PID 5}}}} Produced bogus result due to GROUP bug. Fixed. - fix: Rel UI: Rev's "View Query" '?' dialog no longer crashes after changing mode. - fix: Rel UI: Viewing view or relvar with no attributes no longer crashes. - fix: Rel UI: Case #134: command-line entry pane now focuses on highlighted bug. - fix: Rel UI: Zoom button on command-line now placed correctly in toolbar; previously floated near the centre of the toolbar. Version 3.003 (1.0.16): - enhancement: Rel UI: Added support for UNORDER() (counterpart to ORDER()) to visual query editor. - enhancement: Rel UI: Added refresh toolbar item to VIEWs, same as for VARiables. - enhancement: Rel UI: Visual query editor's "View Query" '?' dialog now provides option to emit query text, or VIEW and OPERATOR definitions, directly to command-line. - enhancement: Rel UI: Visual query editor's "View Query" '?' dialog no longer modal; makes it easier to use query definition elsewhere. - enhancement: Rel UI: Initial Save dialog defaults to directory of most recent Load, if Load used first. - enhancement: Rel UI: Initial Load dialog defaults to directory of most recent Save, if Save used first. - enhancement: Rel UI: Variables, Views and visual query (Rev) results may now be exported to CSV and XLS/XLSX files. - enhancement: Rel: Support for external relvars is now built-in. External relvars are of the form: VAR EXTERNAL [ DUP_REMOVE | DUP_COUNT | AUTOKEY ]; is the kind of external relvar. Built-in are CSV, XLS, JDBC and ACCDB. Additional kinds and JDBC drivers can be put in the Extensions directory of a Rel database, but are only recognised by the standalone RelDBMS. is a CHAR specific to the kind of external relvar. DUP_REMOVE silently removes duplicate tuples. DUP_COUNT adds an INTEGER attribute named _DUP_COUNT that indicates a count of duplicate tuples. AUTOKEY adds an INTEGER attribute named _AUTOKEY that is serially numbered. In the absence of DUP_REMOVE, DUP_COUNT, or AUTOKEY, the default is AUTOKEY. Examples: VAR myvar EXTERNAL CSV "/home/dave/test.csv"; VAR myvar EXTERNAL CSV "/home/dave/test.csv,HOHEADING" DUP_REMOVE; VAR myvar EXTERNAL XLS "/home/dave/test.xls" DUP_REMOVE; VAR myvar EXTERNAL XLS "/home/dave/test.xlsx" DUP_COUNT; VAR myvar EXTERNAL XLS "/home/dave/test.xlsx,1" DUP_COUNT; VAR myvar EXTERNAL XLS "/home/dave/test.xls,2,NOHEADING" DUP_REMOVE; VAR myvar EXTERNAL JDBC "jdbc:postgresql://localhost/database,sqluser,sqluserpw,MyTable" AUTOKEY; VAR myvar EXTERNAL ACCDB "c:\\users\\me\\mydb.accdb,mytable"; VAR myvar EXTERNAL ACCDB "c:\\users\\me\\mydb.accdb,mytable" DUP_REMOVE; In the XLS connection string, the number after the optional ',' indicates the zero-based tab number. In the XLS & CSV connection string, NOHEADING indicates that the spreadsheet does not have a heading row. Built-in JDBC support is provided for MySQL, MariaDB, PostgreSQL, Oracle and Microsoft SQL Server: VAR myvar EXTERNAL JDBC "jdbc:mysql://localhost/database,sqluser,sqluserpw,MyTable"; VAR myvar EXTERNAL JDBC "jdbc:mariadb://localhost/database,sqluser,sqluserpw,MyTable"; VAR myvar EXTERNAL JDBC "jdbc:postgresql://localhost/database,sqluser,sqluserpw,MyTable"; VAR myvar EXTERNAL JDBC "jdbc:oracle:thin:@localhost:1521:database,sqluser,sqluserpw,MyTable"; VAR myvar EXTERNAL JDBC "jdbc:sqlserver://localhost:1433;databaseName=database,sqluser,sqluserpw,MyTable"; - enhancement: Rel DBMS: All application .jars moved into lib directory. - fix: Rel UI: Spaces in application path caused external Java-based operator compilation to fail. Fixed. - fix: Rel UI: "Get File Path" button now correctly returns backslashes in file path as '\\'. - fix: Rel UI: Failing to open a database could allow all database tabs to be closed, which left the Rel UI in an unstable state. Fixed. - note: Rel UI and Rel DBMS copyright years updated to 2017. - note: Once opened with 1.0.16, databases cannot be read by earlier versions. Version 3.002 (1.0.15): - enhancement: DBrowser: Default database tab now optionally displayed via option in Preferences. - enhancement: DBrowser: Databases can be loaded from the OS command-line. E.g. Rel "c:\Users\Dave\My Database" - fix: Rel: Spaces in database path caused external Java-based operator compilation to fail. Fixed. - fix: DBrowser: Opening new database tab hides mode (Rel/Rev/Cmd) buttons. Fixed. - fix: DBrowser: Clicking on *.rdb or *.rel files now correctly starts up Rel and loads files. Version 3.001 (1.0.14): - enhancement: DBrowser: startup shows progress bar, for better feedback on slow machines. - enhancement: DBrowser: more detailed crash reporting; includes system platform info. - enhancement: Rel: ATTRIBUTES_OF(r) or ALL BUT ATTRIBUTES_OF(r) may be used in place of an attribute commalist, where r is a non-scalar expression. - fix: DBrowser: fixed Case #91, 92, 93: crash in Windows when showing row/tuple delete confirmation. - fix: DBrowser: fixed Case #113 - #118 (approx): crash when editing a relvar with no attributes. - fix: Rel: fixed Case #94: org.reldb.rel.v0.languages.tutoriald.parser.TokenMgrError should be ExceptionSemantic, not ExceptionFatal. - fix: Rel: fixed Case ID #119: VAR test BASE RELATION {x INTEGER, y INTEGER} INIT (TUPLE {x 10, y 20}) KEY {}; threw fatal exception. Should have been semantic exception. Version 3.000 (1.0.13): - note: RelUI version 3.00 now covers the product; the RelDBMS version numbering continues from before. - enhancement: All: now requires Java 8 - enhancement: All: source now on GitHub; trivial to load into Eclipse. - enhancement: All: major package re-basing from ca.mb.armchair.rel3 to org.reldb.rel - enhancement: DBrowser: rewritten for better native look and feel and smoother, faster output and better display. - enhancement: DBrowser: Default database now found in getProperty("user.home"), i.e., user's home directory. - enhancement: DBrowser: "DBrowser" name now strictly internal; externally known as Rel or Rel UI. - enhancement: DBrowser: Code entry now provides syntax highlighting. - enhancement: DBrowser: Code entry now provides find/replace. - enhancement: DBrowser: Code entry now provides undo/redo. - enhancement: DBrowser: Code entry has "zoom" buttons to maximize input or output. - enhancement: DBrowser: Scripts can be edited and saved in the database. - enhancement: DBrowser/Rel: Backup script embedded in Rel; no longer relies on Scripts folder. - enhancement: Rel: TUPLE {*} now returns the "current tuple" in any open expression. I.e., TUPLE{*} is equivalent to TUPLE{A1 A1, ..., An An}, where A1, ..., An are the attributes of an implied relation such as the relation operand to an invocation of WHERE or EXTEND. The key word TUPLE can be abbreviated to TUP, as in other places where it appears in the language. - enhancement: Rel: IMAGE_IN(r, t) where r is a relation and t is a tuple, is equivalent to (r JOIN RELATION{t}) {ALL BUT A1, ..., An}, where A1, ..., An are the attributes of t. - enhancement: Rel: the tuple operand to IMAGE_IN may be omitted, defaulting to TUPLE{*}. Thus, IMAGE_IN(r) is equivalent to !!r as proposed in DBE, Chapter 14. - enhancement: Rel: ARRAY TUPLE {...} is now a valid parameter type. - enhancement: Rel: added general aggregation operator (also works with SUMMARIZE): AGGREGATE(, [, ]); RETURN ... using VALUE1 and VALUE2>; END AGGREGATE - enhancement: Rel: can now create user-defined aggregate operators such that SUM(, >) and SUMMARIZE : {r := SUM(>)} now invokes user-defined AGGREGATE_SUM(RELATION {AGGREGAND , AGGREGATION_SERIAL}) RETURNS where is any other than INT or RATIONAL. - enhancement: Rel: can now invoke user-defined aggregate operators from SUMMARIZE, such that SUMMARIZE : {r := STDEV(>)} now invokes user-defined AGGREGATE_STDEV(RELATION {AGGREGAND , AGGREGATION_SERIAL}) RETURNS and SUMMARIZE : {r := STDEV(>, 1)} now invokes user-defined AGGREGATE_STDEV(RELATION {AGGREGAND , AGGREGATION_SERIAL}, INT) RETURNS and SUMMARIZE : {r := STDEV(DISTINCT >)} or SUMMARIZE : {r := STDEV(DISTINCT >, 1)} specifies that > is to have duplicates removed before aggregation. This is not required (or supported) for built-in aggops, because SUM vs SUMD, AVG vs AVGD, etc., expresses this. - enhancement: Rel: can now invoke arbitrary aggregate operators of the form AGGREGATE_(RELATION {AGGREGAND , AGGREGATION_SERIAL INT}) RETURNS or AGGREGATE_(RELATION {AGGREGAND , AGGREGATION_SERIAL INT}, x ) RETURNS via AGGREGATE (, >) or AGGREGATE (, >, >) respectively. - enhancement: Rel: added ALTER VAR TYPE_OF TO - enhancement: Rel: added ALTER VAR RENAME AS - enhancement: Rel: added ALTER VAR INSERT - enhancement: Rel: added ALTER VAR DROP - enhancement: Rel: added ALTER VAR KEY {} [... KEY {}] (must be last) - enhancement: Rel: All data definition statements are now logged in sys.DefinitionHistory. - enhancement: Rel: SET_UNIQUE_NUMBER(INT) operator provided; used in DatabaseToScript.rel script. - enhancement: Rel: IF, CASE, DO, WHILE, FOR and OPERATOR definitions now support multiple statements without requiring BEGIN .. END blocks. - enhancement: Rel: IF, CASE, DO, WHILE, FOR and OPERATOR are now optional after the END that closes a block. - enhancement: Rel: POSSREP component definitions may now be surrounded with "( ... )" (preferred) or "{ ... }" (deprecated). - enhancement: Rel: Updated storage engine to Oracle Berkeley DB JE version 7.0.6 - enhancement: Rel: External Java compilation integrated; no longer requires JDK. - enhancement: Rel: Default database now refers to explicit path - enhancement: Rel: System startup announcement now provides more information about runtime platform. - enhancement: Rel: Rel DBMS now called RelDBMS. - enhancement: Rel: Removed octal and hex integer representations, as these were a source of confusion. - enhancement: Rel: Empty EXTEND, e.g., EXTEND S: {}, is now permitted. - enhancement: Rel: Empty UPDATE, e.g., UPDATE S: {}, is now permitted. - enhancement: Rel: Added a sequence generator built-in operator: OPERATOR SEQUENCE(first INT, last INT, step INT) RELATION {n INT}; OPERATOR SEQUENCE(first INT, last INT) RELATION {n INT}; - enhancement: Rel: TYPE_OF(e) pseudo-operator returns TypeInfo (either Scalar or NonScalar) about any expression e. Uses new built-in types TypeInfo, Scalar and NonScalar. - enhancement: Rel: sys.Catalog relvar now provides Attributes and Keys metadata - enhancement: Rel: Relvar update notices can be turned off with SET VerboseRelvarUpdates Off. - enhancement: Rel: All relations now emitted with heading. This improves readability & parse-ability. - enhancement: Rel: Modulo operator (%) now implemented. E.g., 3 % 4 is a valid expression. - fix: Rel: UNION (RELATION {x RELATION {y INT}} {}, x) returns error. It should give RELATION {y INT}} {}. Same for D_UNION and XUNION. This has been corrected. Version 1.0.12: - note: Rel: Updated storage engine to Oracle Berkeley DB  Java Edition version 6.2.7 - enhancement: Rel: Database resilience after power failures or system crashes considerably increased. - fix: Rel: Updates to relation-valued parameters, which created side-effects, have been disallowed. - fix: Rel: TREAT_AS_type and IS_type did not work correctly with static inheritance. This has been fixed. - fix: Rel: The following... TYPE Temperature UNION; TYPE Temperature_Normal IS {Temperature POSSREP {t INTEGER}}; TYPE Temperature_NoReading IS {Temperature POSSREP {}}; TYPE Temperature_OutOfRange IS {Temperature POSSREP {}}; VAR Readings REAL RELATION {timestamp INTEGER, temp Temperature} KEY {timestamp}; INSERT Readings REL { TUP {timestamp 12938, temp Temperature_Normal(33)}, TUP {timestamp 12940, temp Temperature_Normal(33)}, TUP {timestamp 12943, temp Temperature_Normal(34)}, TUP {timestamp 12948, temp Temperature_NoReading()}, TUP {timestamp 12955, temp Temperature_OutOfRange()} }; ...crashed due to hash error on Temperature_NoReading(), etc. Fixed. - fix: Rel: Some CONSTRAINT failures display an un-helpful "Transaction is not active" error message. Corrected. Version 1.0.11: - enhancement: DBrowser: now displays friendlier messages when attempting to open an already-open database, or when a connection attempt to a remote server fails. - enhancement: DBrowser: provides option to hide headings and declared types in headings. - enhancement: DBrowser: now has "Get File Path" button to facilitate putting file paths in source code. This facilitates use of external data sources, described below. - enhancement: Rel: syntax improvements - parentheses around WRAP, UNWRAP, GROUP, UNGROUP removed. UNGROUP (a) and UNWRAP (a) now UNGROUP a and UNWRAP a - enhancement: Rel: all error messages uniquely identified - enhancement: Rel: Update to version 6.0.11 of Berkeley Java DB - enhancement: Rel: Simple support for CSV/XLS/XLSX/JDBC sources as relvars e.g., VAR myvar EXTERNAL CSV "/home/dave/test.csv"; e.g., VAR myvar EXTERNAL XLS "/home/dave/test.xls" DUP_REMOVE; e.g., VAR myvar EXTERNAL XLS "/home/dave/test.xlsx" DUP_COUNT; e.g., VAR myvar EXTERNAL XLS "/home/dave/test.xlsx" AUTOKEY; e.g., VAR myvar EXTERNAL JDBC ",,,.,,"; - enhancement: Rel: Support for user-defined relvar types as extensions of TableCustom and RelvarCustomMetadata. Must be installed in CustomRelvars folder of Rel installation and/or CustomRelvars folder of a database folder. If an attempt is made to create a duplicate custom relvar in a database folder, it is silently ignored. - enhancement: Rel: 'x RENAME {}' is now valid syntax. - enhancement: Rel: Errors occurring in a database constraint are treated as if the constraint evaluates to false, and the failing constraint is named in the error message. - fix: DBrowser: Fixed minor errors parsing certain error messages. - fix: Rel: Given... VAR S BASE RELATION { SNO CHAR, SNAME CHAR, STATUS INTEGER, CITY CHAR } KEY {SNO}; VAR SP BASE RELATION { SNO CHAR, PNO CHAR, QTY INTEGER } KEY {SNO, PNO}; VAR SPQ BASE INIT(EXTEND S: {PQ := RELATION {TUPLE {SNO SNO}} COMPOSE SP}) KEY{SNO}; ...these failed: UPDATE SPQ WHERE SNO = "S2": {INSERT PQ RELATION {TUPLE {PNO "P5", QTY 500}}}; UPDATE SPQ WHERE SNO = "S2": {UPDATE PQ WHERE PNO="P5": {QTY := 250}}; UPDATE SPQ WHERE SNO = "S2": {DELETE PQ WHERE PNO="P5"}; This has been corrected. - fix: Rel: The following should return true; returns false. RELATION { TUPLE { SUPPLIES RELATION { TUPLE {PID "P5"} }}, TUPLE { SUPPLIES RELATION { TUPLE {PID "P2"} }}, TUPLE { SUPPLIES RELATION { TUPLE {PID "P4"} }} } = RELATION { TUPLE { SUPPLIES RELATION { TUPLE {PID "P5"} }}, TUPLE { SUPPLIES RELATION { TUPLE {PID "P2"} }}, TUPLE { SUPPLIES RELATION { TUPLE {PID "P4"} }} } Corrected by making only Value derivatives that define a total order be Comparable. This meant converting a number of TreeSetS to HashSets, which may have an impact (+ve? -ve?) on performance. - fix: Rel: JOIN {}, TIMES {}, and COMPOSE {} now return DEE. - fix: Rel: XUNION {}, D_UNION {}, UNION {} now return TUPLE {}. - fix: Rel: XUNION {} {}, D_UNION {} {}, UNION {} {} return DUM. - fix: Rel: INTERSECT {} and INTERSECT {} {} throw an error. - fix: Rel: Type checking was too weak on comparison operators, allowing incorrect expressions like 'tuple{x 1} = tuple{y 2, x 1}' to return a result instead of throwing an error. Fixed. - fix: Rel: RELATION {TUPLE {x 10, y DEE}} WHERE x = 100 UNGROUP y throws fatal error. Should throw type error due to attempt to ungroup integer 100. Fixed. - fix: Rel: Built-in operator name OP_GREATHERTHANOREQUALS corrected to OP_GREATERTHANOREQUALS - fix: Rel: assignment to a real relvar altered its CreationSequence. Fixed. - fix: Rel: CAST_AS_INTEGER("blah") and CAST_AS_RATIONAL("blah") should have thrown semantic errors, not fatal errors. Fixed. Version 1.0.10: - fix: Rel tests: revised TestDelete0 and TestRelvar26 to eliminate order-dependent testing. - fix: Rel: reversed execution order of statements in multiple assignment to prevent counterintuitive behaviour in partial implementation of multiple assignment. Now executes from first to last. - fix: Rel: passing a non-boolean to the WHERE clause of an UPDATE would result in a crash. Fixed. - enhancement: Rel: Added partial support for anonymous operators. This is a work-in-progress documented at http://dbappbuilder.sourceforge.net/docs/AnonymousAndFirstClassOperatorsInTutorialD.pdf - enhancement: Rel: Update to version 5.0.58 of Berkeley Java DB - enhancement: Rel: Various changes to support DBE syntax: EXTEND: old: EXTEND r ADD (p AS q, a AS b) new: EXTEND r : {q := p, b := a} UPDATE: old: UPDATE r (p := q, b := a) new: UPDATE r : {p := q, b := a} RENAME: old: r RENAME (a AS b) new: r RENAME {a AS b} SUMMARIZE: old: SUMMARIZE p ADD (SUM(x) AS y) new: SUMMARIZE p : {y := SUM(x)) WITH: old: WITH a AS b, x AS y : ... new: WITH (b := a, y := x) : ... WRAP: old: r WRAP ({a, b} AS c, {d, e} AS f) new (r WRAP ({a, b} AS c)) WRAP ({d, e} AS f) UNWRAP: old: r UNWRAP (a, b) new: (r UNWRAP (a)) UNWRAP (b) GROUP: old: r GROUP ({a, b} AS c, {d, e} AS f) new (r GROUP ({a, b} AS c)) GROUP ({d, e} AS f) UNGROUP: old: r UNGROUP (a, b) new: (r UNGROUP (a)) UNGROUP (b) Removed ANY and ALL synonyms for OR and AND. Implemented n-adic COMPOSE. Implemented XUNION, TIMES, I_MINUS, I_DELETE, D_INSERT and updated INSERT to silently ignore duplicate tuples. - enhancement: Rel: POSSREP keyword ORDERED now recognised in addition to ORDINAL, but is a no-op. - enhancement: Rel: Improved shutdown procedure is less likely to result in corrupt database if there are problems encountered during shutdown. - enhancement: Scripts: DatabaseToScript.d, Views.d changed to accommodate support for DBE syntax. - enhancement: DBrowser: Splash screen disappears as soon as Ok appears. - enhancement: DBrowser: Error messages that specify line and column now cause the cursor to move to the position of the error in the source. Version 1.0.9 (DBrowser 2.12): - enhancement: Rel: Update to version 5.0.34 of Berkeley Java DB - enhancement: Rel: TempStorageTuples and TempIndexTuples now dynamically switch from in-memory to disk-based storage. This may fix peculiar bugs re duplicate btree keys, etc., too. - fix: Rel: Fixed reference to "ca.mb.armchair.rel3.values.ValueChar" to "ca.mb.armchair.rel3.values.ValueCharacter" in ForeignCompilerJava.java. This fixes problems defining new Java-based types that define methods/operators which use CHAR parameters. - fix: DBrowser: Altered ResponseParser.jj grammar in literal() rule to include LOOKAHEAD(3) to avoid warning. - fix: Rel3Client: ResponseParser.jj grammar to admit unicode (UNICODE_INPUT = true). - fix: Rel: TutorialD.jjt grammar to admit unicode (UNICODE_INPUT = true). - fix: Rel: ValueCharacter.stripDelimitedString() now performs unquote() on strings, to correctly invert toParsableString(). This will allow, e.g., backups to restore quoted strings without introducing extraneous backslashes. - enhancement: Rel: Implemented mechanism to ensure expected version of Berkeley Java DB is installed. - enhancement: Scripts: TypeDate.d now includes THE_readable element to obtain a human-friendly date. - enhancement: DBrowser: Crashes will now send error reports. - fix: RelTest redesigned to allow tests to run in random order. - enhancement: Rel: Improved likelihood that JDK tools.jar will be used for Java compilation, instead of external javac. Version 1.0.8 (DBrowser 2.11): - enhancement: Rel: Improved error reporting on Java-based built-in operators when they fail. E.g., SUBSTRING("blah", 1, 20) used to fail in an un-helpful manner; now the error message goes some way toward explaining and locating the problem. - fix: Rel: The following failed with a low-level error; now fixed: var items private relation { id integer, name character } init ( relation { tuple {id 1, name "hi" }, tuple {id 2, name "lo"}, tuple {id 3, name "do"} } ) key {id}; var result private relation { r relation same_heading_as (items) } key { r }; var inner private relation same_heading_as (items) key {id}; insert inner relation { tuple from items where id = 1 }; insert result relation {tuple {r inner }}; - fix: Rel: Updating an RVA caused an error like the following: "ERROR: '%tuple23' has not been defined." This has been corrected. E.g.: var x private relation {a integer, b relation {c integer}} init (relation {tuple {a 1, b relation {tuple {c 2}}}}) key {a}; update x where a = 1 (b := update (b) (c := 33)); Version 1.0.7 (DBrowser 2.10): - enhancement: Rel: Built-in operator GET_UNIQUE_NUMBER returns an integer guaranteed to be unique in a given database. - fix: Rel: given TYPE POSINT IS {INTEGER CONSTRAINT INTEGER > 0}, MAX(RELATION {TUPLE {X 1}, TUPLE {X 2}}, X) failed due to a missing target. Fixed. - fix: Rel: set longer transaction timeout in RelDatabase, to reduce likelihood of spurious timeouts in multithreaded applications. - fix: Rel: The following... var cons real relation { id integer, kind integer, value relation { price integer, quantity integer } } init ( relation { tuple { id 1, kind 1, value relation { tuple { price 1, quantity 5 } } }, tuple { id 2, kind 1, value relation { tuple { price 1, quantity 5 } } } } ) key { id, kind }; var ccc private relation same_heading_as (cons { kind, value }) key {kind}; var ddd private relation same_heading_as ((cons ungroup (value)) {kind, price, quantity}) key {kind, price}; ddd := summarize (cons ungroup (value)) by { kind, price } add ( sum ( quantity ) as quantity ); output ddd group ( { price, quantity} as value); ccc := ddd group ( { price, quantity} as value); ...threw: Table: update failed: java.io.NotSerializableException: ca.mb.armchair.rel3.storage.RelvarPrivateCell Fixed. - fix: Rel: The following... var x real relation { a integer, b relation { c integer }} init ( relation {tuple {a 1, b relation {tuple {c 2}}}}) key {a}; var y private relation { c integer } init ( relation { tuple { c 88 }}) key {c}; update x where a = 1 ( b := y ); ...threw: Table: update failed: java.io.NotSerializableException: ca.mb.armchair.rel3.storage.RelvarPrivateCell Fixed. - fix: Rel: Given the following... var notok private relation { a integer, b integer } init (relation {tuple { a 1, b 1 }}) key { a }; The following... delete notok where a = 3; -or- update notok where a = 1 ( b := 2 ); ...threw: 'ERROR: Expected a relation-valued variable in DELETE ... WHERE' or 'ERROR: Expected a relation-valued variable in UPDATE ... WHERE'. Fixed. Version 1.0.6: - enhancement: Rel: Implemented per "Database Explorations", which subsumes per "TDRM". - enhancement: Rel: Implemented synonyms for some common keywords, as per "Database Explorations": INTEGER = INT RATIONAL = RAT BOOLEAN = BOOL TUPLE = TUP RELATION = REL Note that TABLE_DEE = DEE and TABLE_DUM = DUM have been in Rel since the earliest versions. Version 1.0.5: - fix: Rel: relation { x integer, y integer } {tuple{x 1, z 1}} is accepted and yields relation { x integer, y integer } {tuple{x 1, y 1}}. Fixed. - fix: Rel: A change in the way the third-party storage engine (Berkeley Java DB) reported errors resulted in possible Rel crashes, particularly when performing database updates after any Rel error (e.g., a syntax error) has been generated. Version 1.0.4: - enhancement: Rel: Implemented inference of most specific common supertype (excluding Alpha), such that evaluating... relation { tuple {x triangle(point(0,0), point(2,3), point(7,4))} tuple {x square(point(1,1), point(4,3))} } ...returns: relation {x shape} { tuple {x triangle(point(0,0), point(2,3), point(7,4))} tuple {x square(point(1,1), point(4,3))} } - enhancement: Rel: Implemented selectors for immediate subtypes of built-in types per Database Explorations Chapter 21 page 348 "Selectors for System Defined Types". - fix: Rel: should be allowed to be empty if dummy type or derived from built-in type, but required at least one POSSREP. E.g., the following legitimate definition was not allowed: TYPE posint IS {INTEGER CONSTRAINT THE_VALUE(INTEGER) >= 0}; Fixed. - fix: Rel: A bug has been corrected that could, in rare circumstances, cause a database to fail to open with an internal "LOG INTEGRITY" error. - fix: Rel: A bug has been corrected that could, in rare circumstances, cause corruption of user-defined type values when inserted into a relvar immediately after any Rel error (e.g., a syntax error) has been generated. Version 1.0.3: - fix: Rel: Performing a JOIN on relations with common attributes that belong to a user-defined TYPE with at least one relation-valued component could result in a Java exception. Fixed. Version 1.0.2: - fix: Rel: In some cases, the superset operator >= did not work correctly. E.g... WITH (S WHERE CITY = 'London') AS S1, (SP RENAME (P# AS P#1)) AS SP1: (P WHERE ((SP1 WHERE P#1=P#) {S#}) >= (S1 {S#})) ...returned bogus results. Fixed. Version 1.0.1: - fix: Rel: Given relation with RVA having cardinality 0, e.g.: extend S {S#} add (relation {tuple {S# S#}} compose SP as SP_result). Ungrouping this relation causes a java exception: (extend S {S#} add (relation {tuple {S# S#}} compose SP as SP_result)) ungroup (SP_result) Fixed. - fix: Rel: This resulted in duplicate column names: sys.Catalog RENAME (Definition AS Name) Fixed. - fix: Rel: S JOIN SP JOIN P returned bogus result, due to incorrect comparison of user-defined type values in relvars in some cases. Fixed. - fix: Rel: GROUP with multiple AS clauses, or performing GROUP on a relation with relation-valued attributes, e.g., ... (sys.Catalog GROUP ({isVirtual, Name} as Blah, {Owner} as Blah2)) ...threw a Java exception. This has been corrected. - fix: DBrowser: DBrowser incorrectly displayed RATIONAL values of NaN, -Infinity and Infinity. Fixed. Version 1.0.0: - fix: Rel: Relvar definitions with both a defined heading and an INIT section did not correctly map the INIT expression to the heading. E.g., in the following, company_name and department_name wound up reversed: VAR Department BASE RELATION {company_name CHAR, department_name CHAR} INIT (RELATION { TUPLE {department_name "Research and Development", company_name "General Electronics"}, TUPLE {department_name "Management", company_name "Ads are Us"}, TUPLE {department_name "Management", company_name "General Electronics"}}) KEY {department_name, company_name}; - fix: DBrowser: Enhanced mode now correctly displays user-defined TYPE values with relation-valued components. Previously, these caused unpredictable display quirks. - enhancement: Rel: Given: TYPE Point POSSREP { x INTEGER , y INTEGER }; TYPE Line UNION; TYPE Line2p IS { Line POSSREP { p1 Point , p2 Point } }; TYPE LineInfinite IS { Line POSSREP { points RELATION { p Point } } }; VAR myvar3 REAL RELATION {x INTEGER, y Line} KEY {x}; INSERT myvar3 RELATION { TUPLE {x 1, y Line2p(Point(2, 2), Point(3,3))}, TUPLE {x 2, y LineInfinite(relation { TUPLE {p Point(3,4)}, TUPLE {p Point(4,2)}, TUPLE {p Point(6,7)}})} }; A type "not compatible" error is generated by the INSERT because Line2p is neither a subtype or supertype of LineInfinite. The error message has been extended to recommend the user specify an explicit relation heading. *** Update to Beta status, and version 1.0.0 designation *** Revision 0.3.20: - enhancement: Rel: Builtin-in types may now be subtyped, and symbolic operators now invoke associated named operators. This involves replacement of Scripts/*. Java-based UDTs and UDOs have new requirements. - change: Rel: TCLOSE has been implemented, though inefficiently, as it is based on TRANCLO() from page 175 of TTM3. Revision 19: - fix: Rel: Valid long integer values caused an internal exception. This has been corrected. - fix: Rel: Invalid rational values caused an internal exception. This has been corrected. - fix: Rel: Attempting to select a user- defined type that employs a CONSTRAINT employing a user-defined Java-based operator would cause an invalid constraint failure if the type and operator were defined, and the type selected, all in the same transaction. This has been corrected. Revision 18: - change: Rel: TTM non-conforming implicit tagged UNION construct has been removed. Where this was supported: TYPE List POSSREP Node {data INTEGER, next List} POSSREP Nothing {}; Use this: TYPE List UNION; TYPE Node IS {List POSSREP {data INTEGER, next List}}; TYPE Nothing IS {List POSSREP {}}; - fix: distribution: Rel.bat and DBrowser.bat referenced parameters as $n instead of %n. Fixed. - fix: Rel: VAR TEST BASE RELATION {X Date} KEY{X}; where Date is 'FOREIGN Java' type caused exception. Fixed. - fix: Rel: TYPE DATE POSSREP { c CHAR CONSTRAINT LENGTH ( c ) = 8 AND IS_DIGITS ( c ) }; VAR TEST BASE RELATION { ID INTEGER, D DATE} KEY{ID}; TEST := RELATION { TUPLE {ID 1, D "15061989"}}; The above threw an internal error instead of the appropriate type mismatch error. Fixed. Revision 17: - fix: Rel: dynamic dispatch did not correctly resolve invocations based on MST; it used DT. - fix: Rel: attributes of user-defined type threw exception when used in real relvar. - enhancement: Rel: sys.Operators relvar reorganised. - enhancement: Scripts: DatabaseToScript.d modified to support sys.Operators reorganisation. Revision 16: - fix: DBrowser: negative rational and integer literals returned by Rel are now recognised. - fix: DBrowser: relation-valued attributes with cardinality 0 now display correctly in enhanced mode. - enhancement: DBrowser: startup error messages now wrap to prevent msgbox being wider than screen. - enhancement: Scripts: replaced IS_NUMERIC with IS_DIGITS, which only returns true if supplied CHAR consists strictly of 0-9. - enhancement: Rel: User-defined types support Rel extension 'INIT', for explicitly setting values of components not in the current possrep. Only required by types with multiple possreps. Takes the place of "highly protected operators not part of D". (pg 382, etc.) - enhancement: Rel: User-defined types without INIT section are treated as tagged union types. THE_x operators applied to components not in the current possrep for a given value will throw an exception. - enhancement: Rel: Support for jikes removed. Replaced with tools.jar compilation. - enhancement: Rel: Types cached to improve performance. - enhancement: Rel: Operators spawned by user-defined types may not be explicitly dropped. - enhancement: Rel: Dropping a user-defined type will now attempt to drop spawned operators. - enhancement: Rel: SET now available to manipulate system environment settings. - enhancement: Rel: Initial implementation of S-by-C on single inheritance is now available. - enhancement: Rel: no longer serialise types in the database metadata. All metadata now represented via primitive types. Complex types are explicitly loaded from definitions in database. Revision 15: - fix: DBrowser: in enhanced mode, adjacent tuple or relation valued attributes were displayed one above the other, instead of beside each other. Corrected. - fix: Rel: A bug that would cause this... summarize relation {tuple {a 'A', x 0}} by {a} add ( sum(x) as xx, sum(xx) as xxx ) ...or this... extend sys.Catalog add ( 1 as p, 2 as q, extend sys.Catalog add (q as y) as r ) ...to generate an internal error has been corrected. - fix: Rel: CreationSequence column on relvars was incorrect relative to other objects. - enhancement: Rel: Simple user-defined TYPEs are now supported. - enhancement: Rel: sys.Types relvar now contains built-in primitive types. - enhancement: Rel: new sys.OperatorsBuiltin relvar contains built-in operator names. - enhancement: Rel: sys.Operators now has a ReturnsType column. - enhancement: Scripts: DateBookSampleRelvars.d corrected and revised to use POSSREPs. - enhancement: Scripts: Views.d revised to use new Dependencies relvars. Revision 14: - fix: DBrowser: Pressing ctrl-tab in the entry panel resulted in a stack overflow. This has been corrected. - fix: DBrowser: User-defined font settings now load on start-up. - fix: DBrowser: User-defined font size (but not style) now applies to enhanced output. - fix: Rel: aggregate UNION, D_UNION, MAX, MIN, and INTERSECT now correctly throw error when performing operations on cardinality-0 relations. Revision 13: - fix: In some cases, an expression that used the result of one WHERE operator as input to another WHERE operator resulted in bogus results or thrown exceptions. This has been corrected. - fix: JOIN on relations with generated RVAs (e.g., via GROUP) no longer causes exception. - fix: No longer display bogus tuple update notices after transaction failure due to constraint violation. - feature: Literal CHARACTER strings now output with delimiters in un-enhanced mode, in order to be consistent with the view that Rel output can be parsed. - feature: Added character LENGTH operator to OperatorsChar.d - feature: CHARs now appear formatted and un-delimited in DBrowser. - feature: Improved formatting of code on generated Java-based operators. - feature: Improved readability of parse error messages -- removed token name. Revision 12: - feature: Alter ORDER() to return an ARRAY. - feature: Alter FOR to iterate ARRAY tuples. - feature: Alter LOAD ... FROM ... to load ARRAY from ARRAY. - feature: Alter RelClient parser to recognise ARRAYs. - fix: Attempt to JOIN RELATION {TUPLE {x 1, y 2.3}} to RELATION {TUPLE {y 2.3, x 1}} could fail. Fixed. - enhancement: Removed 'Serializable' from JoinMap, OrderMap, NativeFunction and NativeProcedure because unnecessary. - enhancement: provided user-friendly index-out-of-bounds messages for ARRAY - enhancement: lowered operator precedence of ORDER to below WHERE, and [...] (array dereference) to below ORDER. This allows formation of natural expressions, e.g., sys.Catalog WHERE Owner<>"Rel" ORDER (ASC Name) [2] - enhancement: JOIN can now emit tuples before indexing is complete. - Deployed to SourceForge on August 3, 2008 Revision 11: - fix: Rel: assigning a relvar to itself could result in locking up, as it perpetually tried to insert newly-inserted tuples into itself. This has been corrected. - fix: Rel: updating a key value in a relvar could result in locking up, as updated tuples moved ahead of the internal cursor to be updated again, forever. This has been corrected. - fix: Rel: inserting a substituted relvar into itself could result in locking up, as the newly-inserted tuples appeared in the source relvar, which were then copied into the target relvar, which then appeared in the source relvar, which were then copied into the target relvar, which then appeared in the source relvar, etc. This has been corrected. - fix: Rel: INIT clause of REAL relvar definition would define the relvar correctly, but not assign any tuples. This has been corrected. - Fix: DBrowser: A thread race condition that caused un-enhanced display to sometimes duplicate or drop text has been corrected. - feature: Rel: relation JOIN performance has been improved. - feature: Rel: CPU consumption during external Java compilation has been reduced. - feature: Rel: Tuple update notices are now consolidated and deferred until the end of execution, to avoid cluttering output with results of individual operations. - Deployed to SourceForge on August 1, 2008 Revision 10: - fix: DBrowser: command-line parms with spaces are now supported - fix: DBrowser Monitor no longer closes when supplied with incorrect number of arguments - fix: DBrowser: ':' in backup file name will be changed to '_' - feature: DBrowser: more error-checking in Backup process - Deployed to SourceForge on July 30, 2008 Revision 9: - fix: fixed memory leak in Enhanced/non-enhanced switching in DBrowser - fix: DBrowser "splash" window widened to display under OpenJDK without the text bleeding outside the window. - feature: added free memory display in DBrowser - feature: provided unhandled exception reporting in DBrowser - feature: Under UNIX/Linux, changed "Uninstall" menu entry to "Uninstall Rel", to avoid ambiguity when merged with other menu entries. - feature: DBrowser window now preserves screen position and dimensions across invocations. - feature: Implemented DBrowser Monitor window - feature: 'r ORDER ()' now implemented as relational operator - feature: minor grammar tweak to avoid extraneous parentheses. E.g. (union {sys.Catalog}) = (union {sys.Catalog}) can now be expressed as union {sys.Catalog} = union {sys.Catalog} - feature: 'FOR r; ; END FOR;' now implemented to iterate tuples of a relation. Should be considered shorthand for LOAD array FROM r and associated iteration, local variables, etc. - note: DatabaseToScript.d revised to use FOR and ORDER. - Deployed to SourceForge on July 29, 2008 Revision 8: - fix: DBrowser toolbars no longer tear off to form a blank floating window. - feature: DBrowser now has Backup button to automate generating a backup script - fix: If a Java-based type was created, dropped, and then re-created with revisions, the original type definition would be used instead of the revised version. This has been corrected. - feature: Installer now creates Start menu entries & desktop icons on some operating systems - Deployed to SourceForge on July 15, 2008 Revision 7: - feature: relvar updates now report number of tuples affected - feature: extensive DBrowser changes, including tabular formatting of relations and tuples. - Deployed to SourceForge on July 11, 2008 Revision 6: - feature: database directory may now be specified via command switch to Rel and DBrowser, or via DBrowser user interface - fix: changed replaceAll() to replace() in DirClassLoader to hopefully fix Vista issue reported by Hugh Darwen. - Deployed to SourceForge on June 26, 2008 Revision 5: - fix: aggregate operators SUM, AVG, MIN, MAX, UNION, D_UNION, and INTERSECT now return correct types in all cases - fix: OUTPUT now appends newline to output - feature: implemented user-defined Java-based types and operators - feature: database now contained in the Database subdirectory - refactor: moved built-in operator definition to RelDatabase - Deployed to SourceForge on June 21, 2008 Revision 4: - fix to Context scoping bug - License changed to Apache License ver 2.0 - Major Catalog revisions - Numerous minor fixes - Operators and Constraints now persistent - Deployed to SourceForge on May 1, 2008 Revision 3: - INSERT bugs fixed - all KEY specs now honoured Revision 2: - Catalog (initial version) and VIRTUAL relvars implemented. Revision 0 & 1: - pre-release to testers Transition from version 0.0.14 to 0.3.0: - Ground-up rewrite.