package com.ca.chorus.server.translator.hints; import java.sql.Types; import org.teiid.language.Call; import org.teiid.language.QueryExpression; import org.teiid.metadata.MetadataFactory; import org.teiid.metadata.RuntimeMetadata; import org.teiid.metadata.Table; import org.teiid.metadata.Table.Type; import org.teiid.translator.ExecutionContext; import org.teiid.translator.ExecutionFactory; import org.teiid.translator.ProcedureExecution; import org.teiid.translator.ResultSetExecution; import org.teiid.translator.Translator; import org.teiid.translator.TranslatorException; import org.teiid.translator.TypeFacility; import com.ca.chorus.server.translator.async.RandomNumberStoredProcedureExecution; @Translator(name = "hintsexec") public class HintsExecutionFactory extends ExecutionFactory { public HintsExecutionFactory() { setSourceRequired(false); setSourceRequiredForMetadata(false); } @Override public ResultSetExecution createResultSetExecution(final QueryExpression command, final ExecutionContext executionContext, final RuntimeMetadata metadata, final Void connection) throws TranslatorException { // TODO Auto-generated method stub return super.createResultSetExecution(command, executionContext, metadata, connection); } @Override public void getMetadata(final MetadataFactory mdf, final Void conn) throws TranslatorException { final Table v = mdf.addTable("random_hintsview"); if (v != null) { mdf.addColumn("dummy", TypeFacility.getDataTypeNameFromSQLType(Types.INTEGER), v); v.setVirtual(true); v.setTableType(Type.View); final String transformation = "SELECT " + "/*+ sh:'general_hint' random:'source_hint' */ " + "random_number" + " FROM (CALL random.random_number(3)) AS b"; System.out.println("transformation is " + transformation); v.setSelectTransformation(transformation); } } @Override public ProcedureExecution createProcedureExecution(final Call command, final ExecutionContext executionContext, final RuntimeMetadata metadata, final Void connection) throws TranslatorException { return new RandomNumberStoredProcedureExecution(executionContext); } }