[ 
http://issues.apache.org/jira/browse/DERBY-100?page=comments#action_12361118 ] 

Daniel John Debrunner commented on DERBY-100:
---------------------------------------------

In Positive test 47 you check to see what happens if you call insertRow() 
without setting any of the column values.
You code will just do nothing in this case, no exceptions, insertRow just 
returns having done nothing due to:

+                if (currentRowHasBeenUpdated == false) // not columns got 
updated
+                    return; //nothing to do since no updateXXX method has been 
called
+

But that got me thinking, if a table's columns in the result set then why can't 
I do an insert without setting any values?
E.g. on a result set of SELECT A,B FROM T, execute INSERT INTO T  VALUES DEFAULT

Then I looked at the javadoc for insertRow (JDK142) and it says:

Throws:
    SQLException - if a database access error occurs, if this method is called 
when the cursor is not on the insert row, or if not all of non-nullable columns 
in the insert row have been given a value

You code does not throw that exception, but it's a strange wording. It implies 
to me that  with the above SELECT if I set only A then the correct SQL is

INSERT INTO T(A,B) VALUES (?, NULL) [I don't this is correct, but it's what 
that wording implies]

rather than what you are executing,

INSERT INTO T(A) VALUES (?)
which is the same as
INSERT INTO T(A,B) VALUES (?, DEFAULT)

The JDBC 3.0 spec is somewhat clearer, from section: 14.2.4.3 Inserting a Row

Each column in the insert row that does not allow null as a value and does not
have a default value must be given a value using the approriate update method. 
If
this is not the case, the method insertRow will throw an SQLException.

I'm still unclear as to why the reference to not allowing null, that does not 
seem relevant.

So, since the engine will throw the SQLException if a value does not have a 
default, I believe that an insertRow
with no modified columns should be allowed and should insert a row.



> Add support for insert functionality using JDBC 2.0 updatable resultset apis
> ----------------------------------------------------------------------------
>
>          Key: DERBY-100
>          URL: http://issues.apache.org/jira/browse/DERBY-100
>      Project: Derby
>         Type: New Feature
>   Components: JDBC
>     Versions: 10.1.1.0
>     Reporter: Mamta A. Satoor
>     Assignee: Fernanda Pizzorno
>  Attachments: DERBY-100.diff, DERBY-100.stat
>
> The JDBC 2.0 API introduced the ability to update/delete/insert rows from a 
> resultset using methods in the Java programming language rather than having 
> to send an SQL command. This Jira entry is to track the insert rows 
> functionality using JDBC 2.0 apis.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to