[teiid-commits] teiid SVN: r4045 - in branches/8.0.x: connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/sqlserver and 4 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Mon Apr 30 14:58:14 EDT 2012


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);
 



More information about the teiid-commits mailing list