Author: shawkins
Date: 2012-04-30 14:58:11 -0400 (Mon, 30 Apr 2012)
New Revision: 4045
Modified:
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCBaseExecution.java
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCQueryExecution.java
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCUpdateExecution.java
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java
branches/8.0.x/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorWorkItem.java
branches/8.0.x/engine/src/main/java/org/teiid/query/sql/lang/StoredProcedure.java
branches/8.0.x/metadata/src/main/java/org/teiid/metadata/index/RecordFactory.java
Log:
TEIID-2020 fix for sybase procedure issue
Modified:
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCBaseExecution.java
===================================================================
---
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCBaseExecution.java 2012-04-30
18:23:28 UTC (rev 4044)
+++
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCBaseExecution.java 2012-04-30
18:58:11 UTC (rev 4045)
@@ -53,6 +53,7 @@
protected Connection connection;
protected ExecutionContext context;
protected JDBCExecutionFactory executionFactory;
+ protected Command command;
// Derived from properties
protected boolean trimString;
@@ -65,7 +66,7 @@
// Constructors
//
===========================================================================================================================
- protected JDBCBaseExecution(Connection connection, ExecutionContext context,
JDBCExecutionFactory jef) {
+ protected JDBCBaseExecution(Command command, Connection connection, ExecutionContext
context, JDBCExecutionFactory jef) {
this.connection = connection;
this.context = context;
@@ -73,6 +74,7 @@
trimString = jef.isTrimStrings();
fetchSize = context.getBatchSize();
+ this.command = command;
}
/**
@@ -143,7 +145,7 @@
protected void setSizeContraints(Statement statement) {
try {
- statement.setFetchSize(fetchSize);
+ executionFactory.setFetchSize(command, context, statement, fetchSize);
} catch (SQLException e) {
if (LogManager.isMessageToBeRecorded(LogConstants.CTX_CONNECTOR, MessageLevel.DETAIL))
{
LogManager.logDetail(LogConstants.CTX_CONNECTOR, context.getRequestId(), "
could not set fetch size: ", fetchSize); //$NON-NLS-1$
Modified:
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
===================================================================
---
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2012-04-30
18:23:28 UTC (rev 4044)
+++
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java 2012-04-30
18:58:11 UTC (rev 4045)
@@ -30,6 +30,7 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.MessageFormat;
@@ -1124,8 +1125,24 @@
return nameParts;
}
+ /**
+ * Get the predicate name for LIKE_REGEX
+ * @return
+ */
public String getLikeRegexString() {
return SQLConstants.Reserved.LIKE_REGEX;
}
+
+ /**
+ * Set the fetch size on the given statement.
+ * @param context
+ * @param command
+ * @param statement
+ * @param fetchSize
+ * @throws SQLException
+ */
+ public void setFetchSize(Command command, ExecutionContext context, Statement statement,
int fetchSize) throws SQLException {
+ statement.setFetchSize(fetchSize);
+ }
}
Modified:
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCQueryExecution.java
===================================================================
---
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCQueryExecution.java 2012-04-30
18:23:28 UTC (rev 4044)
+++
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCQueryExecution.java 2012-04-30
18:58:11 UTC (rev 4045)
@@ -52,7 +52,6 @@
//
===========================================================================================================================
protected ResultSet results;
- protected Command command;
protected Class<?>[] columnDataTypes;
//
===========================================================================================================================
@@ -60,8 +59,7 @@
//
===========================================================================================================================
public JDBCQueryExecution(Command command, Connection connection, ExecutionContext
context, JDBCExecutionFactory env) {
- super(connection, context, env);
- this.command = command;
+ super(command, connection, context, env);
}
@Override
Modified:
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCUpdateExecution.java
===================================================================
---
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCUpdateExecution.java 2012-04-30
18:23:28 UTC (rev 4044)
+++
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCUpdateExecution.java 2012-04-30
18:58:11 UTC (rev 4045)
@@ -43,7 +43,6 @@
*/
public class JDBCUpdateExecution extends JDBCBaseExecution implements UpdateExecution {
- private Command command;
private int[] result;
/**
@@ -54,8 +53,7 @@
* @param id
*/
public JDBCUpdateExecution(Command command, Connection connection, ExecutionContext
context, JDBCExecutionFactory env) {
- super(connection, context, env);
- this.command = command;
+ super(command, connection, context, env);
}
//
===========================================================================================================================
Modified:
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java
===================================================================
---
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java 2012-04-30
18:23:28 UTC (rev 4044)
+++
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver/SQLServerExecutionFactory.java 2012-04-30
18:58:11 UTC (rev 4045)
@@ -287,4 +287,9 @@
return true;
}
+ @Override
+ protected boolean setFetchSizeOnCallableStatements() {
+ return true;
+ }
+
}
Modified:
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java
===================================================================
---
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java 2012-04-30
18:23:28 UTC (rev 4044)
+++
branches/8.0.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sybase/SybaseExecutionFactory.java 2012-04-30
18:58:11 UTC (rev 4045)
@@ -24,7 +24,10 @@
*/
package org.teiid.translator.jdbc.sybase;
+import java.sql.CallableStatement;
import java.sql.Date;
+import java.sql.SQLException;
+import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
@@ -34,13 +37,16 @@
import java.util.List;
import java.util.Map;
+import org.teiid.language.Command;
import org.teiid.language.Expression;
import org.teiid.language.Function;
import org.teiid.language.Literal;
import org.teiid.language.SQLConstants;
+import org.teiid.translator.ExecutionContext;
import org.teiid.translator.SourceSystemFunctions;
import org.teiid.translator.Translator;
import org.teiid.translator.TranslatorException;
+import org.teiid.translator.TranslatorProperty;
import org.teiid.translator.jdbc.AliasModifier;
import org.teiid.translator.jdbc.ConvertModifier;
import org.teiid.translator.jdbc.EscapeSyntaxModifier;
@@ -58,6 +64,7 @@
public static final String FIFTEEN_5 = "15.5"; //$NON-NLS-1$
protected Map<String, Integer> formatMap = new HashMap<String, Integer>();
+ protected boolean jtdsDriver;
public SybaseExecutionFactory() {
setDatabaseVersion(TWELVE_5);
@@ -365,5 +372,27 @@
public boolean supportsRowLimit() {
return getDatabaseVersion().compareTo(FIFTEEN_0_2) >= 0;
}
+
+ @TranslatorProperty(display="JTDS Driver", description="True if the
driver is the JTDS driver",advanced=true)
+ public boolean isJtdsDriver() {
+ return jtdsDriver;
+ }
+
+ public void setJtdsDriver(boolean jtdsDriver) {
+ this.jtdsDriver = jtdsDriver;
+ }
+
+ protected boolean setFetchSizeOnCallableStatements() {
+ return false;
+ }
+
+ @Override
+ public void setFetchSize(Command command, ExecutionContext context,
+ Statement statement, int fetchSize) throws SQLException {
+ if (!isJtdsDriver() && !setFetchSizeOnCallableStatements() && statement
instanceof CallableStatement) {
+ return;
+ }
+ super.setFetchSize(command, context, statement, fetchSize);
+ }
}
Modified:
branches/8.0.x/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorWorkItem.java
===================================================================
---
branches/8.0.x/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorWorkItem.java 2012-04-30
18:23:28 UTC (rev 4044)
+++
branches/8.0.x/engine/src/main/java/org/teiid/dqp/internal/datamgr/ConnectorWorkItem.java 2012-04-30
18:58:11 UTC (rev 4045)
@@ -64,7 +64,7 @@
private AtomicRequestID id;
private ConnectorManager manager;
private AtomicRequestMessage requestMsg;
- private ExecutionFactory connector;
+ private ExecutionFactory<Object, Object> connector;
private QueryMetadataInterface queryMetadata;
/* Created on new request */
@@ -212,6 +212,9 @@
// Translate the command
Command command = this.requestMsg.getCommand();
this.expectedColumns = command.getProjectedSymbols().size();
+ if (command instanceof StoredProcedure) {
+ this.expectedColumns =
((StoredProcedure)command).getResultSetColumns().size();
+ }
LanguageBridgeFactory factory = new LanguageBridgeFactory(queryMetadata);
factory.setConvertIn(!this.connector.supportsInCriteria());
org.teiid.language.Command translatedCommand = factory.translate(command);
Modified:
branches/8.0.x/engine/src/main/java/org/teiid/query/sql/lang/StoredProcedure.java
===================================================================
---
branches/8.0.x/engine/src/main/java/org/teiid/query/sql/lang/StoredProcedure.java 2012-04-30
18:23:28 UTC (rev 4044)
+++
branches/8.0.x/engine/src/main/java/org/teiid/query/sql/lang/StoredProcedure.java 2012-04-30
18:58:11 UTC (rev 4045)
@@ -192,7 +192,7 @@
if(resultSetParameter != null){
List<ElementSymbol> result = new LinkedList<ElementSymbol>();
for (Iterator<ElementSymbol> i =
resultSetParameter.getResultSetColumns().iterator(); i.hasNext();) {
- ElementSymbol symbol = (ElementSymbol)i.next().clone();
+ ElementSymbol symbol = i.next().clone();
symbol.setGroupSymbol(getGroup());
result.add(symbol);
}
@@ -250,13 +250,11 @@
* @return Ordered list of SingleElementSymbol
*/
public List getProjectedSymbols(){
- List<ElementSymbol> result = new ArrayList<ElementSymbol>();
- //add result set columns
- List rsColumns = getResultSetColumns();
- result.addAll(rsColumns);
if (!returnParameters()) {
- return result;
+ return getResultSetColumns();
}
+ //add result set columns
+ List<ElementSymbol> result = new
ArrayList<ElementSymbol>(getResultSetColumns());
//add out/inout parameter symbols
for (SPParameter parameter : mapOfParameters.values()) {
if(parameter.getParameterType() == ParameterInfo.RETURN_VALUE){
Modified:
branches/8.0.x/metadata/src/main/java/org/teiid/metadata/index/RecordFactory.java
===================================================================
---
branches/8.0.x/metadata/src/main/java/org/teiid/metadata/index/RecordFactory.java 2012-04-30
18:23:28 UTC (rev 4044)
+++
branches/8.0.x/metadata/src/main/java/org/teiid/metadata/index/RecordFactory.java 2012-04-30
18:58:11 UTC (rev 4045)
@@ -806,6 +806,8 @@
case MetadataConstants.PARAMETER_TYPES.RETURN_VALUE:
type = ProcedureParameter.Type.ReturnValue;
break;
+ default:
+ throw new IllegalArgumentException("Invalid parameter type, please ensure all
parameter types are valid in Designer."); //$NON-NLS-1$
}
paramRd.setType(type);