From 9ff77877b4799fda146d90c0c1b2d8beba68f990 Mon Sep 17 00:00:00 2001 From: Brieuc Dubois Date: Wed, 15 May 2024 09:22:25 +0200 Subject: [PATCH] mix end of lines --- P1/Rel/LICENSE.txt | 108 +- P1/Rel/doc/CHANGES.txt | 2534 ++++++++++++++++++++-------------------- P1/Rel/doc/LICENSE.txt | 108 +- P3/toy.db | Bin 507904 -> 507904 bytes 4 files changed, 1375 insertions(+), 1375 deletions(-) diff --git a/P1/Rel/LICENSE.txt b/P1/Rel/LICENSE.txt index f7e284f..14bb68c 100644 --- a/P1/Rel/LICENSE.txt +++ b/P1/Rel/LICENSE.txt @@ -1,55 +1,55 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - -You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/P1/Rel/doc/CHANGES.txt b/P1/Rel/doc/CHANGES.txt index 15bb9ff..db38572 100644 --- a/P1/Rel/doc/CHANGES.txt +++ b/P1/Rel/doc/CHANGES.txt @@ -1,1267 +1,1267 @@ -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. - +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. + diff --git a/P1/Rel/doc/LICENSE.txt b/P1/Rel/doc/LICENSE.txt index f7e284f..14bb68c 100644 --- a/P1/Rel/doc/LICENSE.txt +++ b/P1/Rel/doc/LICENSE.txt @@ -1,55 +1,55 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - -You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/P3/toy.db b/P3/toy.db index f8e94e725ae2932cbd873734f4277970f3e2746c..27aa3bb6bceb592203bc2b6671af63c12274e6ab 100644 GIT binary patch delta 44 zcmZo@kZ)*^pCHXBHc`fzRg6KeXi;NIYYJm)3R7zeb88AqYYJ;?3ftBc_Bs0jF1QXk delta 44 zcmZo@kZ)*^pCHXBI#I@%Rg^*Z~r=506qK; A%K!iX