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

prerna.reactor.frame.rdbms.RenameColumnReactor Maven / Gradle / Ivy

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

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

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import prerna.ds.OwlTemporalEngineMeta;
import prerna.ds.rdbms.AbstractRdbmsFrame;
import prerna.query.querystruct.transform.QSRenameColumnConverter;
import prerna.reactor.frame.AbstractFrameReactor;
import prerna.sablecc2.om.GenRowStruct;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.PixelOperationType;
import prerna.sablecc2.om.nounmeta.ModifyHeaderNounMetadata;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.util.Constants;

public class RenameColumnReactor extends AbstractFrameReactor {
	
	private static final Logger classLogger = LogManager.getLogger(RenameColumnReactor.class);

	@Override
	public NounMetadata execute() {
		AbstractRdbmsFrame frame = (AbstractRdbmsFrame) getFrame();
		String originalColName = getOriginalColumn();
		String newColName = getNewColumnName();

		String table = frame.getName();
		String column = originalColName;
		if (originalColName.contains("__")) {
			String[] split = originalColName.split("__");
			table = split[0];
			column = split[1];
		}
		// validate column exists and clean new name
		String[] allCol = getColNames(frame);
		if (Arrays.asList(allCol).contains(column) != true) {
			throw new IllegalArgumentException("Column doesn't exist.");
		}
		newColName = getCleanNewColName(frame, newColName);

		String update = "ALTER TABLE " + table + " RENAME COLUMN " + column + " TO " + newColName + " ; ";
		try {
			frame.getBuilder().runQuery(update);
			// update metadata
			OwlTemporalEngineMeta metaData = frame.getMetaData();
			metaData.modifyPropertyName(table + "__" + originalColName, table, table + "__" + newColName);
			metaData.setAliasToProperty(table + "__" + newColName, newColName);
			frame.syncHeaders();
		} catch (Exception e) {
			classLogger.error(Constants.STACKTRACE, e);
		}
		
		NounMetadata retNoun = new NounMetadata(frame, PixelDataType.FRAME, PixelOperationType.FRAME_HEADERS_CHANGE, PixelOperationType.FRAME_DATA_CHANGE);
		ModifyHeaderNounMetadata metaNoun = new ModifyHeaderNounMetadata(frame.getName(), originalColName, newColName);
		retNoun.addAdditionalReturn(metaNoun);
		
		// also modify the frame filters
		Map modMap = new HashMap();
		modMap.put(originalColName, newColName);
		frame.setFrameFilters(QSRenameColumnConverter.convertGenRowFilters(frame.getFrameFilters(), modMap, false));
		
		// return the output
		return retNoun;
	}

	private String getOriginalColumn() {
		GenRowStruct inputsGRS = this.getCurRow();
		String originalColName = "";
		if (inputsGRS != null && !inputsGRS.isEmpty()) {
			NounMetadata input1 = inputsGRS.getNoun(0);
			originalColName = input1.getValue() + "";
		}
		return originalColName;
	}

	private String getNewColumnName() {
		GenRowStruct inputsGRS = this.getCurRow();
		String newColName = "";
		NounMetadata input2 = inputsGRS.getNoun(1);
		newColName = input2.getValue() + "";
		return newColName;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy