Author: hthomann
Date: Thu Jul 31 17:05:14 2014
New Revision: 1614937
URL: http://svn.apache.org/r1614937
Log:
OPENJPA-2131: Missing IN or OUT parameter exception with OracleDictionary -
back ported Albert Lee's trunk commit.
Modified:
openjpa/branches/2.2.1.x/ (props changed)
openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java
Propchange: openjpa/branches/2.2.1.x/
------------------------------------------------------------------------------
Merged /openjpa/branches/2.1.x:r1614935
Modified:
openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=1614937&r1=1614936&r2=1614937&view=diff
==============================================================================
---
openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
(original)
+++
openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
Thu Jul 31 17:05:14 2014
@@ -362,10 +362,12 @@ public class OracleDictionary
for (Iterator itr = aliases.iterator(); itr.hasNext(); i++) {
alias = itr.next();
String asString = null;
- if (alias instanceof SQLBuffer)
+ if (alias instanceof SQLBuffer) {
asString = ((SQLBuffer) alias).getSQL();
- else
+ selectSQL.appendParamOnly((SQLBuffer) alias);
+ } else {
asString = alias.toString();
+ }
selectSQL.append(asString);
if (asString.indexOf(" AS ") == -1)
selectSQL.append(" AS c").append(String.valueOf(i));
Modified:
openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java?rev=1614937&r1=1614936&r2=1614937&view=diff
==============================================================================
---
openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java
(original)
+++
openjpa/branches/2.2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java
Thu Jul 31 17:05:14 2014
@@ -103,16 +103,23 @@ public final class SQLBuffer
* Append all SQL and parameters of the given buffer.
*/
public SQLBuffer append(SQLBuffer buf) {
- append(buf, _sql.length(), (_params == null) ? 0 : _params.size(),
- true);
+ append(buf, _sql.length(), (_params == null) ? 0 : _params.size(),
true, false);
return this;
}
/**
- * Append all SQL and parameters of the given buffer at the given
positions.
+ * Append parameters only if the given buffer at the given positions.
+ */
+ public SQLBuffer appendParamOnly(SQLBuffer buf) {
+ append(buf, _sql.length(), (_params == null) ? 0 : _params.size(),
true, true);
+ return this;
+ }
+
+ /**
+ * Append parameters and/or SQL of the given buffer at the given positions.
*/
private void append(SQLBuffer buf, int sqlIndex, int paramIndex,
- boolean subsels) {
+ boolean subsels, boolean paramOnly) {
if (subsels) {
// only allow appending of buffers with subselects, not insertion
if (_subsels != null && !_subsels.isEmpty()
@@ -129,10 +136,12 @@ public final class SQLBuffer
}
}
- if (sqlIndex == _sql.length())
- _sql.append(buf._sql.toString());
- else
- _sql.insert(sqlIndex, buf._sql.toString());
+ if (!paramOnly) {
+ if (sqlIndex == _sql.length())
+ _sql.append(buf._sql.toString());
+ else
+ _sql.insert(sqlIndex, buf._sql.toString());
+ }
if (buf._params != null) {
if (_params == null)
@@ -435,7 +444,7 @@ public final class SQLBuffer
else
buf = sub.select.toSelect(false, sub.fetch);
buf.resolveSubselects();
- append(buf, sub.sqlIndex, sub.paramIndex, false);
+ append(buf, sub.sqlIndex, sub.paramIndex, false, false);
}
_subsels.clear();
}