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

prerna.reactor.export.ConvertToQueryReactor Maven / Gradle / Ivy

The newest version!
package prerna.reactor.export;

import java.util.List;

import prerna.algorithm.api.ITableDataFrame;
import prerna.ds.nativeframe.NativeFrame;
import prerna.query.interpreters.IQueryInterpreter;
import prerna.query.querystruct.AbstractQueryStruct.QUERY_STRUCT_TYPE;
import prerna.query.querystruct.HardSelectQueryStruct;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.query.querystruct.transform.QSAliasToPhysicalConverter;
import prerna.reactor.AbstractReactor;
import prerna.sablecc2.om.GenRowStruct;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.sablecc2.om.task.BasicIteratorTask;
import prerna.sablecc2.om.task.ITask;
import prerna.util.insight.InsightUtility;

public class ConvertToQueryReactor extends AbstractReactor {

	private static final String IGNORE_STATE_KEY = "ignoreState";
	
	public ConvertToQueryReactor() {
		this.keysToGet = new String[] {IGNORE_STATE_KEY};
	}
	
	@Override
	public NounMetadata execute() {
		organizeKeys();
		Boolean addInsightState = !Boolean.parseBoolean(keyValue.get(this.keysToGet[0]) + "");
		String query = null;

		SelectQueryStruct qs = getQs();
		if(qs == null) {
			ITask task = getTask();
			if(task != null && task instanceof BasicIteratorTask) {
				qs = ((BasicIteratorTask) task).getQueryStruct();
			}
		}
		
		if(qs == null) {
			throw new NullPointerException("Must input a query struct");
		}
		
		// if query defined
		// just grab it
		if(qs instanceof HardSelectQueryStruct) {
			query = ((HardSelectQueryStruct) qs).getQuery();
			return new NounMetadata(query, PixelDataType.CONST_STRING);
		}
		
		if(addInsightState) {
			InsightUtility.fillQsReferencesAndMergeOptions(this.insight, qs);
		}
		
		// else, we grab the interpreter 
		// from the engine or frame
		// if frame - must convert to physical from alias
		IQueryInterpreter interp = null;
		if(qs.getQsType() == QUERY_STRUCT_TYPE.ENGINE) {
			interp = qs.retrieveQueryStructEngine().getQueryInterpreter();
		} else if(qs.getQsType() == QUERY_STRUCT_TYPE.FRAME) {
			ITableDataFrame frame = qs.getFrame();
			interp = frame.getQueryInterpreter();
			if(frame instanceof NativeFrame) {
				qs = ((NativeFrame) frame).prepQsForExecution(qs);
			} else {
				qs = QSAliasToPhysicalConverter.getPhysicalQs(qs, frame.getMetaData());
			}
		} else {
			throw new IllegalArgumentException("Cannot generate a query for this source");
		}
		
		interp.setQueryStruct(qs);
		// grab the query
		query = interp.composeQuery();
		return new NounMetadata(query, PixelDataType.CONST_STRING);
	}

	private SelectQueryStruct getQs() {
		GenRowStruct grsQs = this.store.getNoun(PixelDataType.QUERY_STRUCT.getKey());
		NounMetadata noun;
		//if we don't have tasks in the curRow, check if it exists in genrow under the qs key
		if(grsQs != null && !grsQs.isEmpty()) {
			noun = grsQs.getNoun(0);
			return (SelectQueryStruct) noun.getValue();
		} else {
			List qsList = this.curRow.getNounsOfType(PixelDataType.QUERY_STRUCT);
			if(qsList != null && !qsList.isEmpty()) {
				noun = qsList.get(0);
				return (SelectQueryStruct) noun.getValue();
			}
		}
		
		return null;
	}
	
	private ITask getTask() {
		GenRowStruct grsTask = this.store.getNoun(PixelDataType.TASK.getKey());
		NounMetadata noun;
		//if we don't have tasks in the curRow, check if it exists in genrow under the task key
		if(grsTask != null && !grsTask.isEmpty()) {
			noun = grsTask.getNoun(0);
			return (ITask) noun.getValue();
		} else {
			List taskList = this.curRow.getNounsOfType(PixelDataType.TASK);
			if(taskList != null && !taskList.isEmpty()) {
				noun = taskList.get(0);
				return (ITask) noun.getValue();
			}
		}
		
		return null;
	}
	
	@Override
	protected String getDescriptionForKey(String key) {
		if(key.equals(IGNORE_STATE_KEY)) {
			return "Boolean flag to ignore/not add the frame and panel level options to the query struct";
		}
		return super.getDescriptionForKey(key);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy