You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2012/07/10 17:24:30 UTC
svn commit: r1359727 -
/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java
Author: doebele
Date: Tue Jul 10 15:24:29 2012
New Revision: 1359727
URL: http://svn.apache.org/viewvc?rev=1359727&view=rev
Log:
EMPIREDB-141
Allow Oracle optimizer hint for updates
Modified:
empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java
Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java?rev=1359727&r1=1359726&r2=1359727&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBCommandOracle.java Tue Jul 10 15:24:29 2012
@@ -22,6 +22,7 @@ package org.apache.empire.db.oracle;
import java.util.HashSet;
import java.util.Set;
+import org.apache.empire.commons.StringUtils;
import org.apache.empire.db.DBColumn;
import org.apache.empire.db.DBColumnExpr;
import org.apache.empire.db.DBCommand;
@@ -145,9 +146,8 @@ public class DBCommandOracle extends DBC
throw new ObjectNotValidException(this);
// Prepares statement
buf.append("SELECT ");
- if (optimizerHint != null)
- {
- // Append an optimizer hint to the select statement e.g. SELECT /*+ RULE */
+ if (StringUtils.isNotEmpty(optimizerHint))
+ { // Append an optimizer hint to the select statement e.g. SELECT /*+ RULE */
buf.append("/*+ ").append(optimizerHint).append(" */ ");
}
if (selectDistinct)
@@ -193,7 +193,42 @@ public class DBCommandOracle extends DBC
{
// No Joins: Use Default
if (joins==null || set==null)
- return super.getUpdate();
+ return getSimpleUpdate();
+ else
+ return getUpdateWithJoins();
+ }
+
+ protected String getSimpleUpdate()
+ {
+ resetParamUsage();
+ if (set == null)
+ return null;
+ StringBuilder buf = new StringBuilder("UPDATE ");
+ DBRowSet table = set.get(0).getTable();
+ long context = CTX_FULLNAME;
+ // Optimizer Hint
+ if (StringUtils.isNotEmpty(optimizerHint))
+ { // Append an optimizer hint to the select statement e.g. SELECT /*+ RULE */
+ buf.append("/*+ ").append(optimizerHint).append(" */ ");
+ // Append alias (if necessary)
+ if (optimizerHint.contains(table.getAlias()))
+ context |= CTX_ALIAS;
+ }
+ // table
+ table.addSQL(buf, context);
+ // Simple Statement
+ context = CTX_NAME | CTX_VALUE;
+ // Set Expressions
+ buf.append("\r\nSET ");
+ addListExpr(buf, set, context, ", ");
+ // Add Where
+ addWhere(buf, context);
+ // done
+ return buf.toString();
+ }
+
+ protected String getUpdateWithJoins()
+ {
// Generate Merge expression
resetParamUsage();
StringBuilder buf = new StringBuilder("MERGE INTO ");