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

prerna.ds.util.RdbmsQueryBuilder Maven / Gradle / Ivy

The newest version!
package prerna.ds.util;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import prerna.util.Constants;
import prerna.util.Utility;

@Deprecated
public class RdbmsQueryBuilder {

	private static final Logger classLogger = LogManager.getLogger(RdbmsQueryBuilder.class);

	public static String escapeForSQLStatement(String s) {
		if(s == null) {
			return s;
		}
		return s.replaceAll("'", "''");
	}
	
	/**
	 * Column names must match between the 2 tables!
	 * @param leftTableName
	 * @param mergeTable
	 * @param columnNames
	 * @return
	 */
	public static String makeMergeIntoQuery(String leftTableName, String mergeTable, String[] keyColumns, String[] columnNames) {
		StringBuilder sql = new StringBuilder("MERGE INTO ");
		sql.append(leftTableName).append(" KEY(").append(keyColumns[0]);
		for(int i = 1; i < keyColumns.length; i++) {
			sql.append(",").append(keyColumns[i]);
		}
		sql.append(") (SELECT ").append(columnNames[0]);
		for(int i = 1; i < columnNames.length; i++) {
			sql.append(",").append(columnNames[i]);
		}
		sql.append(" FROM ").append(mergeTable).append(")");
		return sql.toString();
	}
	
	public static String createTableFromFile(String fileName, Map  conceptTypes)
	{
		// if the fileName db exists delete it
		// I also need to think about multi-user ?
		// may be not, not until they move to the new version ok
		String normalizedFileName = Utility.normalizePath(fileName);
		String dbName = normalizedFileName;
		dbName = normalizedFileName.replace(".csv", "");
		dbName = normalizedFileName.replace(".tsv", "");
		
		try {
			File file = new File(dbName + ".mv.db");
			if(file.exists()) {
				FileUtils.forceDelete(file);
			}
			file = new File(dbName + ".trace.db");
			if(file.exists()) {
				FileUtils.forceDelete(file);
			}
		} catch (IOException e) {
			classLogger.error(Constants.STACKTRACE, e);
		}
		
		StringBuffer dropTable = new StringBuffer("DROP TABLE IF EXISTS ");
		StringBuffer createString = new StringBuffer("CREATE TABLE ");
		StringBuffer selectString = new StringBuffer("SELECT ");
		 
		Iterator  keys = conceptTypes.keySet().iterator();
		int count = 0;
		while(keys.hasNext())
		{
			String name = keys.next();
			String tableName = Utility.getInstanceName(name);
			String type = conceptTypes.get(name);
			name = Utility.getClassName(name);
			
			if(count == 0) {
				createString.append(tableName + " (");
				dropTable.append(tableName + "; ");
			}
			type = type.replace("TYPE:", "");

			StringBuffer tempSelect = new StringBuffer(""); 
			
			if(name.contains("UNIQUE_ROW_ID")) {
				tempSelect.append("ROWNUM()");
			} else {
				if(type.equalsIgnoreCase("DOUBLE") || type.equalsIgnoreCase("FLOAT") || type.equalsIgnoreCase("NUMBER"))
					tempSelect.append("CONVERT(" + name + ", " +"Double)");
				else if(type.equalsIgnoreCase("Integer"))
					tempSelect.append("CONVERT(" + name + ", " +"Int)");
				else if(type.equalsIgnoreCase("Date"))
					tempSelect.append("CONVERT(" + name + ", " +"Date)");
				else if(type.equalsIgnoreCase("Bigint") || type.equalsIgnoreCase("Long"))
					tempSelect.append("CONVERT(" + name + ", " +"Bigint)");
				else if(type.equalsIgnoreCase("boolean"))
					tempSelect.append("CONVERT(" + name + ", " +"boolean)");
				else //if(type.contains("varchar"))
					tempSelect.append(name);
			}
			if(count == 0) {
				createString.append(name + " " + type);
				selectString.append(tempSelect);
			} else {
				createString.append(", " + name + " " + type);
				selectString.append(", " + tempSelect);
			}
			count++; 
		}
		
		createString.append(") AS ").append(selectString).append(" from CSVREAD('" + fileName + "');");
		dropTable.append(createString);
		return dropTable.toString();
	}
	
	
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy