242 lines
9.1 KiB
Plaintext
242 lines
9.1 KiB
Plaintext
|
** TO DO **
|
|||
|
|
|||
|
- Add WITH statement.
|
|||
|
|
|||
|
- Allow KEY {...} to be optional, equivalent to KEY {ALL BUT}.
|
|||
|
|
|||
|
- Ensure AVG returns NaN for no records everywhere it's used.
|
|||
|
|
|||
|
- Fix Nattable display refresh issues on MacOS.
|
|||
|
|
|||
|
- Fix SWT_AWT bridge problems using alternative display on Linux.
|
|||
|
|
|||
|
- Case #228: Cut and pasting in the command window pastes
|
|||
|
multiple times; possibly related to how many times the cmd-c combo was pressed.
|
|||
|
|
|||
|
- Case #220 - 227: Check that "Cancel" correctly resets vm.
|
|||
|
|
|||
|
- Improve connection handling to reduce socket consumption in org.reldb.rel.client.Connection.
|
|||
|
|
|||
|
- DBrowser: Closing a database tab should close its database.
|
|||
|
|
|||
|
- Provide "prepared statement" or parameterised query mechanism in client
|
|||
|
library, to promote code re-use and avoid "Tutorial D injection".
|
|||
|
|
|||
|
- DBrowser: On recently-used database display, provide options to sort alphabetically
|
|||
|
or by use frequency, and to display as tiles or a list.
|
|||
|
|
|||
|
- Provide encrypted backups (and log-ins to a given database).
|
|||
|
|
|||
|
- DBrowser: When using alternative display mode on Windows, the content scrollbars
|
|||
|
disappear unless the main window is manually resized. Fix this.
|
|||
|
|
|||
|
- DBrowser: Standard file dialog boxes missing titles on MacOS.
|
|||
|
|
|||
|
- DBrowser: https://github.com/DaveVoorhis/Rel/issues/1
|
|||
|
Navigation keys and undo appear to be consumed by Nattable without performing
|
|||
|
appropriate actions. Fix.
|
|||
|
|
|||
|
- Rel: Check that UNGROUP of an RVA with a single attribute works correctly.
|
|||
|
(RELATION {RATE RELATION {RATE RATIONAL}} {
|
|||
|
TUPLE {RATE RELATION {RATE RATIONAL} {
|
|||
|
TUPLE {RATE 22.0}}}})
|
|||
|
UNGROUP RATE
|
|||
|
Fails? Looks like RATE reference winds up being ambiguous. This works:
|
|||
|
(RELATION {r RELATION {RATE RATIONAL}} {
|
|||
|
TUPLE {r RELATION {RATE RATIONAL} {
|
|||
|
TUPLE {RATE 22.0}}}})
|
|||
|
UNGROUP r
|
|||
|
|
|||
|
- Rel: Provide CAST_AS_CHARACTER(OPERATOR) and CAST_AS_OPERATOR(CHARACTER).
|
|||
|
|
|||
|
- Rel: Issue:
|
|||
|
S WHERE (WITH (x := true): x)
|
|||
|
works but
|
|||
|
S WHERE WITH (x := true): x
|
|||
|
doesn't. Look at operator precedence around WHERE and WITH.
|
|||
|
Note that this is non-trivial to resolve, because without the
|
|||
|
parentheses, it is ambiguous because both WITH and WHERE
|
|||
|
end with the same term. Thus, S WHERE WITH (x = 2 * y): x AND p
|
|||
|
could mean WHERE (WITH (x = 2 * y): x) AND p
|
|||
|
or could mean WHERE (WITH (x = 2 * y): x AND p).
|
|||
|
|
|||
|
- Allow overwrite of attributes in EXTEND.
|
|||
|
|
|||
|
- "Standard library": A mechanism to load/include/use/import specific types,
|
|||
|
sets of operators, or other definitions (e.g., pre-built database schemas)
|
|||
|
in-language and by name, which then loads and executes them if they’re not
|
|||
|
already loaded and is a no-op if they are, with appropriate versioning,
|
|||
|
etc. — as opposed to simply explicitly running a script file — would be a
|
|||
|
nice way to provide a “standard library” that can be extended, upgraded,
|
|||
|
customised, or removed as needed.
|
|||
|
|
|||
|
- Remove read-only UPDATE operator (as long as EXTEND can serve the same purpose.)
|
|||
|
|
|||
|
- Fix EXACTLY.
|
|||
|
|
|||
|
- Maybe associate "loading" screen with database loading, rather than Rel loading.
|
|||
|
|
|||
|
- SUMMARIZE BY is too slow. Make it faster.
|
|||
|
|
|||
|
- Fix: Altering a relvar will almost certainly cause dependent VIEWs to break.
|
|||
|
|
|||
|
- Test Extensions directory to handle user-added JDBC drivers with stand-alone DBMS.
|
|||
|
|
|||
|
- Improve update handling in TableCSV, TableXLS, and (particularly) TableJDBC.
|
|||
|
|
|||
|
- Configure JDBC/XLS/CSV support as separate plug-in for both RelUI and stand-alone DBMS.
|
|||
|
|
|||
|
- provide READ/READLN as counterparts to WRITE/WRITELN, to support writing interactive scripts, console filters,
|
|||
|
CGI scripts, etc.
|
|||
|
|
|||
|
- Add plenty of useful time/date parsers and conversions.
|
|||
|
|
|||
|
- Implement user-defined physreps and user-defined THE_<x> operators. Treat
|
|||
|
RM Pre 4's "shall not be visible" as having a reasonable definition, perhaps
|
|||
|
one involving as-yet-unimplemented security features.
|
|||
|
|
|||
|
- Have values under S-by-C display declared type; use MST_OF(v) to obtain MST of v.
|
|||
|
|
|||
|
- Implement LEAD, LAG, iTH etc. Maybe these return the whole tuple, rather than an attribute? (If so, what
|
|||
|
does 'null' look like?)
|
|||
|
|
|||
|
- Replace VM with generation of native Java code, compiled with ecj.
|
|||
|
|
|||
|
- Be able to specify user-defined parameters in Rev queries.
|
|||
|
|
|||
|
- Be able to bring operator invocations into Rev queries.
|
|||
|
|
|||
|
- Be able to invoke operators via Operator entries in tree of database objects.
|
|||
|
|
|||
|
- Provide facility to associate predicate expressions (and/or general comments) with relvar definitions in the catalog.
|
|||
|
|
|||
|
- Associate a 'project' attribute with every database object, to permit admin UIs that
|
|||
|
show only the relvars, views, types, operators, etc., in that project.
|
|||
|
|
|||
|
- Provide a means to store code generation 'wizards' in the database and integrate with UI.
|
|||
|
|
|||
|
- Provide a means to easily import/export from other databases. Being able to define external database contents as local
|
|||
|
relvars will make this straightforward.
|
|||
|
|
|||
|
- Associate a 'valid' attribute with every database object, to permit changes that invalidate dependent objects.
|
|||
|
|
|||
|
- Provide THE_INTEGER(INTEGER)
|
|||
|
|
|||
|
- Fix intermittent getKeyForTuple exception when creating new database.
|
|||
|
|
|||
|
- Check that invocation of update operators (no RETURNS) supports multimethod invocation.
|
|||
|
|
|||
|
- Improve UPDATE operator in Rev.
|
|||
|
|
|||
|
- Implement (only for multiple possreps) SELECTORS and (mandatory) INIT clause in TYPE definitions.
|
|||
|
|
|||
|
- Examine org.reldb.rel.client. Should tuple iteration close the tuple iterator?
|
|||
|
|
|||
|
- Test client connection reset() on remote databases.
|
|||
|
|
|||
|
- Fix self-reference POSSREP (e.g., t = THE_t(supertype) ) bug.
|
|||
|
I.e., prevent recursive definitions like
|
|||
|
TYPE blah IS {blat CONSTRAINT p POSSREP {x = THE_x(blat)}}
|
|||
|
|
|||
|
Another example:
|
|||
|
OPERATOR LENGTH(s CHAR) RETURNS INTEGER Java FOREIGN
|
|||
|
return ValueInteger.select(context.getGenerator(), s.stringValue().length());
|
|||
|
END OPERATOR;
|
|||
|
TYPE BDT_symbolic POSSREP { VALUE CHAR } ;
|
|||
|
TYPE identifier IS { BDT_symbolic CONSTRAINT LENGTH ( THE_VALUE ( BDT_symbolic ) ) <= 64
|
|||
|
POSSREP { VALUE = THE_VALUE ( BDT_symbolic) } } ;
|
|||
|
VAR Base_data_type BASE RELATION { name identifier } KEY { name } ;
|
|||
|
Rel goes into an infinite loop on the final definition.
|
|||
|
Appears to be due to VALUE = THE_VALUE (...) which results in unresolved recursive reference.
|
|||
|
|
|||
|
- Enhancement: Use the following TCLOSE:
|
|||
|
// Based on submission by Vilem Vychodil, Palacky University in Olomouc (Czech Republic)
|
|||
|
OPERATOR TCLOSE(r RELATION {x INT, y INT}) RETURNS SAME_TYPE_AS(r);
|
|||
|
VAR result PRIVATE INIT(r) KEY {x, y};
|
|||
|
VAR work PRIVATE INIT(r) KEY {x, y};
|
|||
|
WHILE NOT IS_EMPTY(work);
|
|||
|
work := ((r RENAME {y AS z}) COMPOSE (work RENAME {x AS z})) MINUS result;
|
|||
|
INSERT result work;
|
|||
|
END WHILE;
|
|||
|
RETURN result;
|
|||
|
END OPERATOR;
|
|||
|
|
|||
|
- Provide \t\n\r translation in DBrowser, so that string literals like...
|
|||
|
WRITELN("blah
|
|||
|
blah
|
|||
|
blah");
|
|||
|
...translate to WRITELN("blah\nblah\nblah");
|
|||
|
|
|||
|
- Optimise TupleIteratorCount.
|
|||
|
|
|||
|
- Complete anonymous operator support.
|
|||
|
|
|||
|
- Allow operator names to be used as identifiers to obtain ValueOperator values.
|
|||
|
Maybe... What does this do to polymorphism?
|
|||
|
|
|||
|
- Replace OPERATOR BOOLEAN(BOOLEAN) RETURNS BOOLEAN with
|
|||
|
OPERATOR BOOLEAN(RELATION {}) RETURNS BOOLEAN, such that
|
|||
|
we can have:
|
|||
|
CONST TRUE INIT(BOOLEAN(TABLE_DEE));
|
|||
|
CONST FALSE INIT(BOOLEAN(TABLE_DUM));
|
|||
|
- on the other hand, what do we do with the other built-in types?
|
|||
|
|
|||
|
- Fix bug reported by Hugh re OP_EQUALS() etc.
|
|||
|
|
|||
|
- UNION {x, y} should work where x and y define attributes
|
|||
|
that have the same name and differing type but have a common supertype.
|
|||
|
|
|||
|
- Alter inference of most specific common supertype, such that evaluating:
|
|||
|
RELATION {
|
|||
|
TUPLE {x 1, y 2.3, z 'two'},
|
|||
|
TUPLE {x 2.3, y 1, z true}
|
|||
|
}
|
|||
|
...returns...
|
|||
|
RELATION {x ALPHA, y ALPHA, z ALPHA} {
|
|||
|
TUPLE {x 1, y 2.3, z 'two'},
|
|||
|
TUPLE {x 2.3, y 1, z true}
|
|||
|
}
|
|||
|
|
|||
|
- Rewrite areas where high-cardinality relations currently run out of RAM.
|
|||
|
|
|||
|
- INTERSECT {c CHARACTER} {} should either return maximal relation or throw exception or
|
|||
|
implement 'INTERSECT {h} {} WHERE boolexp' as "relation comprehension"
|
|||
|
|
|||
|
- Implement multiple inheritance.
|
|||
|
|
|||
|
- Check constraints when used on Catalog, e.g., "CONSTRAINT blah COUNT(Catalog) = 6;".
|
|||
|
|
|||
|
- Implement LEAVE statement.
|
|||
|
|
|||
|
- Implement operator UPDATE parameters.
|
|||
|
|
|||
|
- Implement partial evaluation and memoization.
|
|||
|
|
|||
|
- Implement triggers. Maybe.
|
|||
|
|
|||
|
- Optimise constraints that implement semantics of SQL's "foreign key" constraints.
|
|||
|
|
|||
|
- Quote strings on all generated error messages.
|
|||
|
|
|||
|
- Implement users, groups and authorisation
|
|||
|
|
|||
|
- Implement named arguments and default parameters for operator invocation?
|
|||
|
|
|||
|
- Test user-defined types with Array and Relation parameters and return values.
|
|||
|
|
|||
|
- Build 'EVALUATE' -- like EXECUTE but returns a value.
|
|||
|
|
|||
|
- Create a view to represent active connections, including statistics.
|
|||
|
|
|||
|
- Create a view to represent system information, such as host name, current date, unique ID, etc.
|
|||
|
|
|||
|
- Create a relvar to contain all log messages.
|
|||
|
|
|||
|
- Create a "KILL" operator to kill a connection.
|
|||
|
|
|||
|
- Replacing an Operator should immediately update any references to that Operator in the running code.
|
|||
|
Implementing this may be deferred until everything (code, data, types) is stored in the catalog,
|
|||
|
with appropriate triggers and foreign key constraints.
|
|||
|
|
|||
|
- Build JDBC and/or ODBC drivers.
|