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

prerna.reactor.frame.sql.ReplaceParamReactor Maven / Gradle / Ivy

The newest version!
package prerna.reactor.frame.sql;

import java.util.HashMap;
import java.util.Map;

import prerna.query.parsers.GenExpressionWrapper;
import prerna.query.parsers.SqlParser2;
import prerna.reactor.AbstractReactor;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.nounmeta.NounMetadata;

public class ReplaceParamReactor extends AbstractReactor {

	public ReplaceParamReactor()
	{
		this.keysToGet = new String[] {ReactorKeysEnum.SQL.getKey(), ReactorKeysEnum.PARAM_KEY.getKey(), ReactorKeysEnum.VALUE.getKey()};
		this.keyRequired = new int[] {1, 1, 1};
	}

	
	@Override
	public NounMetadata execute() {
		// TODO Auto-generated method stub
		
		// replace the parameter
		// fill it 
		// generate the sql
		// generate wrapper from it
		// parameterize and regenerate - need to know if front end needs it like that
		organizeKeys();
		
		try
		{
			String id = keyValue.get(keysToGet[0]); // this is really the id
			String param = keyValue.get(keysToGet[1]);
			String value = keyValue.get(keysToGet[2]);
			
			GenExpressionWrapper wrapper = this.insight.getSQLWrapper(id);
			if(wrapper.setCurrentValueOfParam(param, value))
			{
				SqlParser2 sqlParser = new SqlParser2();
				
				Map  returnMap = new HashMap();
				// generate the sql
				wrapper.fillParameters();
				// this will be the new sql
				String newSql = sqlParser.generateQuery(wrapper.root);
				newSql = newSql.replace("\n", " ").trim();
				returnMap.put("query", newSql);
				
				sqlParser.parameterize = true;
				wrapper = sqlParser.processQuery(newSql);
				String generatedSQL = wrapper.generateQuery(false);
				returnMap.put("generated_query", generatedSQL);
				
				// get the param string list to embed
				returnMap.put("params", wrapper.getAllParamNames());
				
				// remove the old one
				this.insight.replaceWrapper(id, newSql, wrapper);
				
				return new NounMetadata(returnMap, PixelDataType.MAP);
			}
			else
				return NounMetadata.getErrorNounMessage("No such parameter found");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			return NounMetadata.getErrorNounMessage(e.getLocalizedMessage());
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy