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

prerna.auth.utils.reactors.admin.AdminRemoveDuplicatesReactor Maven / Gradle / Ivy

The newest version!
package prerna.auth.utils.reactors.admin;

import java.time.LocalDateTime;
import prerna.util.Constants;


import org.apache.logging.log4j.Logger;

import prerna.auth.User;
import prerna.auth.utils.SecurityAdminUtils;
import prerna.engine.impl.rdbms.RDBMSNativeEngine;
import prerna.reactor.AbstractReactor;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.ReactorKeysEnum;
import prerna.sablecc2.om.nounmeta.NounMetadata;
import prerna.util.Utility;
import prerna.util.sql.AbstractSqlQueryUtil;

public class AdminRemoveDuplicatesReactor extends AbstractReactor {

	private static final String CLASS_NAME = AdminRemoveDuplicatesReactor.class.getName();

	private static final String DROP_OLD_TABLE = "drop";

	public AdminRemoveDuplicatesReactor() {
		this.keysToGet = new String[]{ReactorKeysEnum.DATABASE.getKey(), ReactorKeysEnum.TABLE.getKey(), DROP_OLD_TABLE};
	}

	@Override
	public NounMetadata execute() {
		User user = this.insight.getUser();
		SecurityAdminUtils adminUtils = SecurityAdminUtils.getInstance(user);
		if(adminUtils == null) {
			throw new IllegalArgumentException("User must be an admin to perform this function");
		}

		organizeKeys();
		String appId = this.keyValue.get(this.keysToGet[0]);
		String tableName = this.keyValue.get(this.keysToGet[1]);
		boolean dropTable = Boolean.parseBoolean( this.keyValue.get(this.keysToGet[2]) + "" );

		Logger logger = getLogger(CLASS_NAME);
		long start = System.currentTimeMillis();

		RDBMSNativeEngine app = (RDBMSNativeEngine) Utility.getDatabase(appId);
		AbstractSqlQueryUtil queryUtil = app.getQueryUtil();
		String oldTableName = "OLD_" + tableName + "_" + Utility.getLocalDateTimeUTC(LocalDateTime.now());
		oldTableName = oldTableName.replaceAll("[^A-Za-z0-9]", "_");

		String temp = "TEMP_" + Utility.getRandomString(6);
		temp = temp.replaceAll("[^A-Za-z0-9]", "_");

		// make a new table temp with all the same data
		String query1 = "CREATE TABLE " + temp + " AS SELECT DISTINCT * FROM " + tableName;
		String query2 = queryUtil.alterTableName(tableName, oldTableName);
		String query3 = queryUtil.alterTableName(temp, tableName);
		String query4 = queryUtil.dropTable(oldTableName);

		try {
			logger.info("Running query " + query1);
			app.insertData(query1);
			logger.info("Running query " + query2);
			app.insertData(query2);
			logger.info("Running query " + query3);
			app.insertData(query3);
			if(dropTable) {
				logger.info("Running query " + query4);
				app.insertData(query4);
			}
		} catch (Exception e) {
			logger.error(Constants.STACKTRACE, e);
			throw new IllegalArgumentException(e.getMessage());
		}

		long end  = System.currentTimeMillis();
		return new NounMetadata("Time to complete the operation = " + (end-start) + "ms", PixelDataType.CONST_STRING);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy