If you can confirm it works for you, I'll put it in the next MLSQL release.  I 
think the fix should be general purpose and backward compatible.

-jh-

On Feb 24, 2010, at 10:20 AM, Chetan Patel wrote:

> Jason,
>  
> The code change that you are suggesting is for our version of MLSQL or for 
> community version of MLSQL?
>  
> Thanks
> -Chetan
> From: [email protected]
> Subject: Re: [MarkLogic Dev General] MLSQL update/delete operation
> Date: Tue, 23 Feb 2010 14:09:22 -0800
> To: [email protected]
> 
> I've been looking at the MLSQL code to see how to fix this for the general 
> case.  Unfortunately MLSQL doesn't require the user of MLSQL specify whether 
> the SQL update call is an INSERT or an UPDATE, so I can't easily have the 
> library follow different code paths for the two.
> 
> Then I wondered why others haven't been hitting the issue.  If you look at 
> the JDBC docs it does say this on the getGeneratedKeys() call:
> 
> Retrieves any auto-generated keys created as a result of executing this 
> Statement object. If this Statement object did not generate any keys, an 
> empty ResultSet object is returned.
> 
> So I think a well behaved database should be able to return an empty 
> ResultSet instead of a SQLException in the event there are no keys.  I expect 
> MySQL doesn't have this problem as MLSQL has been used widely against MySQL.
> 
> Perhaps this code change will work for you:
> 
>       else if (type.equalsIgnoreCase("update")) {
>         try {
>           int count = stmt.executeUpdate();
>           addWarnings(meta, stmt.getWarnings());
>           addUpdateCount(meta, count);
>           try {
>             addGeneratedKeys(meta, stmt.getGeneratedKeys());
>           }
>           catch (SQLException e) {
>             // Generated keys are available on INSERT calls but not UPDATE 
> calls
>             // So catch and eat the exception that Oracle (and maybe others) 
> will throw
>           }
>         }
>         catch (SQLException e) {
>           addExceptions(meta, e);
>         }
>       }
> 
> -jh-
> 
> On Feb 23, 2010, at 7:34 AM, Chetan Patel wrote:
> 
> You are right Jason.
> 
> Looks like the only option is to comment following two lines of the code. In 
> JDBC3.0, the retrieval of auto-generated key feature is supported ONLY when 
> INSERT statements are processed. In MLSQL, INSERT statement is processed by 
> default else block (stmt.execute()) of the code which already retrieves the 
> auto-generated keys.
>  
>           stmt.getGeneratedKeys();
>           addGeneratedKeys(meta, stmt.getGeneratedKeys());
>  
> Thanks for your help.
>  
> -Chetan
>  
> From: [email protected]
> Subject: Re: [MarkLogic Dev General] MLSQL update/delete operation
> Date: Mon, 22 Feb 2010 14:08:59 -0800
> To: [email protected]
> 
> OK, then I'm going to guess the issue is with catching the generated keys.  
> Here's what MLSQL is doing on the servlet side:
> 
>       else if (type.equalsIgnoreCase("update")) {
>         try {
>           int count = stmt.executeUpdate();
>           addWarnings(meta, stmt.getWarnings());
>           addUpdateCount(meta, count);
>           stmt.getGeneratedKeys();
>           addGeneratedKeys(meta, stmt.getGeneratedKeys());
>         }
>         catch (SQLException e) {
>           addExceptions(meta, e);
>         }
>       }
> 
> Earlier the Java does this:
> 
>         // Note this call depends on JDBC 3.0 (accompanying Java 1.4).
>         // The call without the 2nd argument would work on earlier JVMs,
>         // you just won't catch any generated keys.
>         stmt = con.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
> 
> I bet it will work if you remove the fetch for the generated keys from the 
> MLSQL code.  It'll probably also fail if you try getting the generated keys 
> in your standalone code.  Ideally you can figure out why Oracle isn't 
> returning the generated keys (or if you have to just remove the feature from 
> the library to work around the issue).  Curious what you come up with...
> 
> -jh-
> 
> On Feb 22, 2010, at 1:24 PM, Chetan Patel wrote:
> 
> Hi Jason,
>  
> It does the update/delete operation but it also throws an exception (17090 
> operation not allowed).
>  
> I tried with standalone program and it is not throwing any exception (with 
> same jar).
>  
> Thanks
> -Chetan 
>  
> From: [email protected]
> Subject: Re: [MarkLogic Dev General] MLSQL update/delete operation
> Date: Mon, 22 Feb 2010 09:13:08 -0800
> To: [email protected]
> 
> Maybe this explains it?
> 
> http://forum.springsource.org/showthread.php?p=283913
> 
> -jh-
> 
> On Feb 22, 2010, at 8:55 AM, Chetan Patel wrote:
> 
> Hello,
>  
> I am getting following error when I try update or delete operation (oracle 10 
> database) using MLSQL (insert and select works fine). Does anyone know how to 
> solve this problem?
>  
> import module namespace sql  = "http://xqdev.com/sql"; at "sql.xqy"
> sql:executeUpdate("update test set title = 
> 'xxxxx'","http://localhost:8080/mlsql/mlsql";, ())
>  
> <sql:result xmlns:sql="http://xqdev.com/sql";>
> <sql:meta>
>   <sql:rows-affected>1</sql:rows-affected>
> <sql:exceptions>
> <sql:exception type="java.sql.SQLException">
> <sql:reason>operation not allowed</sql:reason>
> <sql:sql-state />
> <sql:vendor-code>17090</sql:vendor-code>
> </sql:exception>
> </sql:exceptions>
> </sql:meta>
>   </sql:result>
>  
> Thanks
>  
> -Chetan Patel
> Elsevier
> 
> Your E-mail and More On-the-Go. Get Windows Live Hotmail Free. Sign up 
> now._______________________________________________
> General mailing list
> [email protected]
> http://xqzone.com/mailman/listinfo/general
> 
> 
> Your E-mail and More On-the-Go. Get Windows Live Hotmail Free. Sign up 
> now._______________________________________________
> General mailing list
> [email protected]
> http://xqzone.com/mailman/listinfo/general
> 
> 
> Your E-mail and More On-the-Go. Get Windows Live Hotmail Free. Sign up 
> now._______________________________________________
> General mailing list
> [email protected]
> http://xqzone.com/mailman/listinfo/general
> 
> 
> Hotmail: Trusted email with Microsoft’s powerful SPAM protection. Sign up 
> now._______________________________________________
> General mailing list
> [email protected]
> http://xqzone.com/mailman/listinfo/general

_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Reply via email to