All Downloads are FREE. Search and download functionalities are using the official Maven repository.

prerna.reactor.qs.selectors.SelectReactor Maven / Gradle / Ivy

The newest version!
package prerna.reactor.qs.selectors;

import java.util.List;
import java.util.Vector;

import prerna.query.querystruct.AbstractQueryStruct;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.query.querystruct.selectors.IQuerySelector;
import prerna.query.querystruct.selectors.QueryConstantSelector;
import prerna.query.querystruct.selectors.QueryFunctionSelector;
import prerna.reactor.qs.AbstractQueryStructReactor;
import prerna.sablecc2.om.GenRowStruct;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.sablecc2.om.task.TaskUtility;

public class SelectReactor extends AbstractQueryStructReactor {	
	
	public SelectReactor() {
		this.keysToGet = new String[]{ReactorKeysEnum.COLUMNS.getKey()};
	}
	
	protected AbstractQueryStruct createQueryStruct() {
		GenRowStruct qsInputs = this.getCurRow();
		if(qsInputs != null && !qsInputs.isEmpty()) {
			List selectors = new Vector();
			for(int selectIndex = 0;selectIndex < qsInputs.size();selectIndex++) {
				NounMetadata input = qsInputs.getNoun(selectIndex);
				IQuerySelector selector = getSelector(input);
				if(selector != null) {
					selectors.add(selector);
				}
			}
			setAlias(selectors, this.selectorAlias, 0);
			qs.mergeSelectors(selectors);
		}
		
		if(qs.getPragmap() == null)
			qs.setPragmap(new java.util.HashMap());
		
		if(insight.getPragmap() != null)
			qs.getPragmap().putAll(insight.getPragmap());
		
		return qs;
	}
	
	protected IQuerySelector getSelector(NounMetadata input) {
		PixelDataType nounType = input.getNounType();
		if(nounType == PixelDataType.QUERY_STRUCT) {
			// remember, if it is an embedded selector
			// we return a full QueryStruct even if it has just one selector
			// inside of it
			SelectQueryStruct qs = (SelectQueryStruct) input.getValue();
			List selectors = qs.getSelectors();
			if(selectors.isEmpty()) {
				// umm... merge the other QS stuff
				qs.merge(qs);
				return null;
			}
			return selectors.get(0);
		} else if(nounType == PixelDataType.COLUMN) {
			return (IQuerySelector) input.getValue();
		} else if(nounType == PixelDataType.FORMATTED_DATA_SET || nounType == PixelDataType.TASK) {
			Object value = input.getValue();
			NounMetadata formatData = TaskUtility.getTaskDataScalarElement(value);
			if(formatData == null) {
				throw new IllegalArgumentException("Can only handle query data that is a scalar input");
			} else {
				Object newValue = formatData.getValue();
				QueryConstantSelector cSelect = new QueryConstantSelector();
				cSelect.setConstant(newValue);
				return cSelect;
			}
		}
		else {
			// we have a constant...
			QueryConstantSelector cSelect = new QueryConstantSelector();
			cSelect.setConstant(input.getValue());
			return cSelect;
		}
	}

	protected QueryFunctionSelector genFunctionSelector(String functionName, IQuerySelector innerSelector) {
		return genFunctionSelector(functionName, innerSelector, false);
	}
	
	protected QueryFunctionSelector genFunctionSelector(String functionName, IQuerySelector innerSelector, boolean isDistinct) {
		QueryFunctionSelector newSelector = new QueryFunctionSelector();
		newSelector.addInnerSelector(innerSelector);
		newSelector.setFunction(functionName);
		newSelector.setDistinct(isDistinct);
		return newSelector;
	}
	
	protected QueryFunctionSelector genFunctionSelector(String functionName, List innerSelectors) {
		return genFunctionSelector(functionName, innerSelectors, false);
	}
	
	protected QueryFunctionSelector genFunctionSelector(String functionName, List innerSelectors, boolean isDistinct) {
		QueryFunctionSelector newSelector = new QueryFunctionSelector();
		newSelector.setInnerSelector(innerSelectors);
		newSelector.setFunction(functionName);
		newSelector.setDistinct(isDistinct);
		return newSelector;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy