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

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

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

import java.util.Arrays;
import java.util.List;
import java.util.Set;

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

import prerna.ds.rdbms.AbstractRdbmsFrame;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.query.querystruct.filters.GenRowFilters;
import prerna.query.querystruct.filters.SimpleQueryFilter;
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.NounMetadata;
import prerna.util.Constants;

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

	@Override
	public NounMetadata execute() {
		AbstractRdbmsFrame frame = (AbstractRdbmsFrame) getFrame();
		GenRowStruct inputsGRS = this.getCurRow();
		String sqlStatements = "";
		NounMetadata filterNoun = inputsGRS.getNoun(0);
		PixelDataType filterNounType = filterNoun.getNounType();
		if (filterNounType.equals(PixelDataType.QUERY_STRUCT)) {
			SelectQueryStruct qs = (SelectQueryStruct) filterNoun.getValue();
			GenRowFilters grf = qs.getExplicitFilters();
			Set filteredColumns = grf.getAllFilteredColumns();
			for (String filColumn : filteredColumns) {
				List filterList = grf.getAllSimpleQueryFiltersContainingColumn(filColumn);
				for (SimpleQueryFilter queryFilter : filterList) {
					String table = "";
					String column = "";
					// col to values
					NounMetadata leftComp = queryFilter.getLComparison();
					String columnComp = leftComp.getValue() + "";
					if (columnComp.contains("__")) {
						String[] split = columnComp.split("__");
						table = split[0];
						column = split[1];
					}
					String nounComparator = queryFilter.getComparator();
					// clean nounComparator for sql statement
					if (nounComparator.equals("==")) {
						nounComparator = "=";
					} else if (nounComparator.equals("<>")) {
						nounComparator = "!=";
					}
					NounMetadata rightComp = queryFilter.getRComparison();
					Object value = rightComp.getValue();

					// escape single quote for sql
					if (String.valueOf(value).contains("'")) {
						value = String.valueOf(value).replaceAll("'", "''");
					}

					// check the column exists, if not then throw warning
					String[] allCol = getColNames(frame);
					if (Arrays.asList(allCol).contains(column) != true) {
						throw new IllegalArgumentException("Column doesn't exist.");
					}

					// put quotes if string
					if (rightComp.getNounType().equals(PixelDataType.CONST_STRING)) {
						sqlStatements += "DELETE FROM " + table + " WHERE " + column + " " + nounComparator + " '" + value + "'; ";
					} else {
						sqlStatements += "DELETE FROM " + table + " WHERE " + column + " " + nounComparator + " " + value + "; ";
					}
				}
			}
		}
		try {
			frame.getBuilder().runQuery(sqlStatements);
		} catch (Exception e) {
			classLogger.error(Constants.STACKTRACE, e);
		}
		return new NounMetadata(frame, PixelDataType.FRAME, PixelOperationType.FRAME_DATA_CHANGE);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy