use of org.pentaho.di.trans.steps.filterrows.FilterRowsMeta in project pentaho-metaverse by pentaho.
the class MetaverseValidationIT method testFilterRowsStepNode.
@Test
public void testFilterRowsStepNode() throws Exception {
FilterRowsStepNode node = root.getFilterRowsStepNode("Filter rows");
assertNotNull(node);
assertEquals("Filter rows", node.getStepType());
FilterRowsMeta meta = (FilterRowsMeta) getStepMeta(node);
Operations ops = MetaverseUtil.convertOperationsStringToMap(node.getOperations());
assertEquals(1, ops.get(ChangeType.DATA_FLOW).size());
assertEquals(meta.getCondition().toString(), ops.get(ChangeType.DATA_FLOW).get(0).getDescription());
// should not be any created nodes
Iterable<StreamFieldNode> streamFieldNodes = node.getStreamFieldNodesCreates();
int countCreatedStreamFieldNode = getIterableSize(streamFieldNodes);
assertEquals(0, countCreatedStreamFieldNode);
// should not be any deleted nodes
streamFieldNodes = node.getStreamFieldNodesCreates();
int countDeletedStreamFieldNode = getIterableSize(streamFieldNodes);
assertEquals(0, countDeletedStreamFieldNode);
// should use all of the fields that are used in the condition of the step
List<String> expectedUses = Arrays.asList(meta.getCondition().getUsedFields());
streamFieldNodes = node.getStreamFieldNodesUses();
int countUsedStreamFieldNode = getIterableSize(streamFieldNodes);
assertEquals(expectedUses.size(), countUsedStreamFieldNode);
for (StreamFieldNode streamFieldNode : streamFieldNodes) {
assertTrue(expectedUses.contains(streamFieldNode.getName()));
}
}
use of org.pentaho.di.trans.steps.filterrows.FilterRowsMeta in project pdi-dataservice-server-plugin by pentaho.
the class SqlTransGenerator method generateIifStep.
/**
* This method generates a 4 steps for every IIF clause... TODO: replace with one step...
*
* @param iifField
* @param lastStep
* @param transMeta
* @return steps
*/
private StepMeta generateIifStep(SQLField iifField, TransMeta transMeta, StepMeta lastStep) {
IifFunction iif = iifField.getIif();
// The Filter condition...
//
FilterRowsMeta filterMeta = new FilterRowsMeta();
filterMeta.setCondition(iifField.getIif().getSqlCondition().getCondition());
StepMeta filterStep = new StepMeta(iifField.getExpression(), filterMeta);
filterStep.setLocation(xLocation, 50);
xLocation += 100;
filterStep.setDraw(true);
lastStep = addToTrans(filterStep, transMeta, lastStep);
// The True and false steps...
//
StepMetaInterface trueMetaInterface;
ValueMetaInterface valueMeta = iif.getTrueValue().getValueMeta();
if (iif.isTrueField()) {
CalculatorMeta trueMeta = new CalculatorMeta();
trueMetaInterface = trueMeta;
trueMeta.allocate(1);
CalculatorMetaFunction function = new CalculatorMetaFunction();
function.setFieldName(Const.NVL(iifField.getAlias(), iifField.getField()));
function.setCalcType(CalculatorMetaFunction.CALC_COPY_OF_FIELD);
function.setValueType(valueMeta.getType());
function.setValueLength(valueMeta.getLength());
function.setValuePrecision(valueMeta.getPrecision());
function.setFieldA(iif.getTrueValueString());
function.setConversionMask(valueMeta.getConversionMask());
// CHECKSTYLE:Indentation:OFF
trueMeta.getCalculation()[0] = function;
} else {
ConstantMeta trueMeta = new ConstantMeta();
trueMetaInterface = trueMeta;
trueMeta.allocate(1);
// CHECKSTYLE:Indentation:OFF
trueMeta.getFieldName()[0] = Const.NVL(iifField.getAlias(), iifField.getField());
trueMeta.getFieldType()[0] = iif.getTrueValue().getValueMeta().getTypeDesc();
trueMeta.getValue()[0] = iif.getTrueValue().toString();
trueMeta.getFieldFormat()[0] = valueMeta.getConversionMask();
}
StepMeta trueStep = new StepMeta("TRUE: " + iifField.getExpression(), trueMetaInterface);
trueStep.setLocation(xLocation, 50);
trueStep.setDraw(true);
lastStep = addToTrans(trueStep, transMeta, filterStep);
StepMetaInterface falseMetaInterface;
valueMeta = iif.getFalseValue().getValueMeta();
if (iif.isFalseField()) {
CalculatorMeta falseMeta = new CalculatorMeta();
falseMetaInterface = falseMeta;
falseMeta.allocate(1);
CalculatorMetaFunction function = new CalculatorMetaFunction();
function.setFieldName(Const.NVL(iifField.getAlias(), iifField.getField()));
function.setCalcType(CalculatorMetaFunction.CALC_COPY_OF_FIELD);
function.setValueType(valueMeta.getType());
function.setValueLength(valueMeta.getLength());
function.setValuePrecision(valueMeta.getPrecision());
function.setFieldA(iif.getFalseValueString());
function.setConversionMask(valueMeta.getConversionMask());
falseMeta.getCalculation()[0] = function;
} else {
ConstantMeta falseMeta = new ConstantMeta();
falseMetaInterface = falseMeta;
falseMeta.allocate(1);
falseMeta.getFieldName()[0] = Const.NVL(iifField.getAlias(), iifField.getField());
falseMeta.getFieldType()[0] = iif.getFalseValue().getValueMeta().getTypeDesc();
falseMeta.getFieldFormat()[0] = valueMeta.getConversionMask();
falseMeta.getValue()[0] = iif.getFalseValue().toString();
}
StepMeta falseStep = new StepMeta("FALSE: " + iifField.getExpression(), falseMetaInterface);
falseStep.setLocation(xLocation, 150);
xLocation += 100;
falseStep.setDraw(true);
lastStep = addToTrans(falseStep, transMeta, filterStep);
// specify true/false targets
List<StreamInterface> targetStreams = filterMeta.getStepIOMeta().getTargetStreams();
targetStreams.get(0).setSubject(trueStep.getName());
targetStreams.get(1).setSubject(falseStep.getName());
filterMeta.searchInfoAndTargetSteps(transMeta.getSteps());
DummyTransMeta dummyMeta = new DummyTransMeta();
StepMeta dummyStep = new StepMeta("Collect: " + iifField.getExpression(), dummyMeta);
dummyStep.setLocation(xLocation, 50);
xLocation += 100;
dummyStep.setDraw(true);
lastStep = addToTrans(dummyStep, transMeta, trueStep);
transMeta.addTransHop(new TransHopMeta(falseStep, dummyStep));
return lastStep;
}
use of org.pentaho.di.trans.steps.filterrows.FilterRowsMeta in project pentaho-kettle by pentaho.
the class StringSearcherTest method testSearchConditionCase.
@Test
public void testSearchConditionCase() {
String dummyStepname = "Output";
DummyTransMeta dummyMeta = new DummyTransMeta();
String dummyStepPid = PluginRegistry.getInstance().getPluginId(StepPluginType.class, dummyMeta);
StepMeta dummyStep = new StepMeta(dummyStepPid, dummyStepname, dummyMeta);
List<StringSearchResult> stringList = new ArrayList<StringSearchResult>();
StringSearcher.findMetaData(dummyStep, 0, stringList, dummyMeta, 0);
int checkCount = 0;
String aResult = null;
// Check that it found a couple of fields and emits the values properly
for (int i = 0; i < stringList.size(); i++) {
aResult = stringList.get(i).toString();
if (aResult.endsWith("Dummy (stepid)")) {
checkCount++;
} else if (aResult.endsWith("Output (name)")) {
checkCount++;
}
if (checkCount == 2) {
break;
}
}
assertEquals(2, checkCount);
FilterRowsMeta filterRowsMeta = new FilterRowsMeta();
Condition condition = new Condition();
condition.setNegated(false);
condition.setLeftValuename("wibble_t");
condition.setRightValuename("wobble_s");
condition.setFunction(org.pentaho.di.core.Condition.FUNC_EQUAL);
filterRowsMeta.setDefault();
filterRowsMeta.setCondition(condition);
String filterRowsPluginPid = PluginRegistry.getInstance().getPluginId(StepPluginType.class, filterRowsMeta);
StepMeta filterRowsStep = new StepMeta(filterRowsPluginPid, "Filter Rows", filterRowsMeta);
stringList.clear();
StringSearcher.findMetaData(filterRowsStep, 0, stringList, filterRowsMeta, 0);
checkCount = 0;
for (int i = 0; i < stringList.size(); i++) {
aResult = stringList.get(i).toString();
if (aResult.endsWith("FilterRows (stepid)")) {
checkCount++;
} else if (aResult.endsWith("Filter Rows (name)")) {
checkCount++;
}
if (checkCount == 2) {
break;
}
}
assertEquals(2, checkCount);
}
use of org.pentaho.di.trans.steps.filterrows.FilterRowsMeta in project pdi-dataservice-server-plugin by pentaho.
the class SqlTransGenerator method generateFilterStep.
private StepMeta generateFilterStep(Condition condition, boolean isHaving) {
FilterRowsMeta meta = new FilterRowsMeta();
meta.setCondition(condition);
StepMeta stepMeta = new StepMeta(isHaving ? "Having filter" : "Where filter", meta);
stepMeta.setLocation(xLocation, 50);
xLocation += 100;
stepMeta.setDraw(true);
return stepMeta;
}
Aggregations