[
https://issues.apache.org/jira/browse/DERBY-1447?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sylvain Leroux updated DERBY-1447:
----------------------------------
Attachment: DERBY-1447-1a.patch
Attaching a version "1a" of a patch for this issue.
I'm rather unsatisfied by what I have done here:
First, ij has a contrived way of handling its input(s). So I finally had to
hook the history/edit in the main ij parser. This has the disadvantage of
adding two more tokens to the parser. And, since it works at statement-level,
it made appear two statements on the same line as two different entries in the
history (see below). A more robust approach could have been to use a
specialized InputStream or to modify on
org.apache.derby.impl.tools.ij.StatementFinder. But it seems such solutions
would require a deep rewrite of ij's input handling facilities.
Next, I use an external program to perform the edit. This works with a GUI
editor (tested on Linux with gedit), but /not/ with console-based editors. The
problem is that Runtime.getRuntime().exec() redirects the standard streams of
the launched process. So terminal-based editors will not have direct access to
the console.
----
The patch introduces two new commands in ij:
HISTORY -- display the history of all the statements handled by ij
EDIT n -- Allow to edit a previous statement by its number
The editor to use is defined by the ij.editor property.
Please note it should be a /GUI/ editor - or use some 'launcher' to reset the
standard I/O descriptor to the console.
Here is an example (defining "gedit" as editor):
sh$ java -Dij.editor=gedit org.apache.derby.tools.ij
ij version 10.6
ij> connect 'jdbc:derby:memory:dummy;create=true';
ij> create table t(a int, bint);
ERROR 42XA9: Column 'BINT' needs an explicit datatype. The datatype can be
omitted only for columns with generation clauses.
ij> history;
0 connect 'jdbc:derby:memory:dummy;create=true';
1 create table t(a int, bint);
2 history;
ij> edit 1;
*** At this point, the external editor is launched.
*** I made the required changes, save and quit
*** ij will now execute the modified statement
ij> create table t(a int, b int);
0 rows inserted/updated/deleted
In the example below, you will see that two statements on the same line appear
as two distinct statements in the history:
ij> insert into t values (1, 100); insert into t values (2, 200);
ij> history;
0 connect 'jdbc:derby:memory:dummy;create=true';
1 create table t(a int, bint);
2 history;
3 edit 1;
4 create table t(a int, b int);
5 insert into t values (1, 100);
6 insert into t values (2, 200);
7 history;
> add command line history to ij
> ------------------------------
>
> Key: DERBY-1447
> URL: https://issues.apache.org/jira/browse/DERBY-1447
> Project: Derby
> Issue Type: Improvement
> Components: Tools
> Reporter: Gary Orser
> Assignee: Sylvain Leroux
> Priority: Minor
> Attachments: DERBY-1447-1a.patch, jline-0_9_5.jar, jline.diff
>
>
> Using the command line tool
> org.apache.derby.tools.ij
> is user unfriendly.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.