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

prerna.util.sql.SqlQueryUtilFactory Maven / Gradle / Ivy

The newest version!
package prerna.util.sql;

import static prerna.util.sql.RdbmsTypeEnum.ASTER;
import static prerna.util.sql.RdbmsTypeEnum.ATHENA;
import static prerna.util.sql.RdbmsTypeEnum.BIG_QUERY;
import static prerna.util.sql.RdbmsTypeEnum.CASSANDRA;
import static prerna.util.sql.RdbmsTypeEnum.CLICKHOUSE;
import static prerna.util.sql.RdbmsTypeEnum.DATABRICKS;
import static prerna.util.sql.RdbmsTypeEnum.DB2;
import static prerna.util.sql.RdbmsTypeEnum.DERBY;
import static prerna.util.sql.RdbmsTypeEnum.ELASTIC_SEARCH;
import static prerna.util.sql.RdbmsTypeEnum.H2_DB;
import static prerna.util.sql.RdbmsTypeEnum.HIVE;
import static prerna.util.sql.RdbmsTypeEnum.IMPALA;
import static prerna.util.sql.RdbmsTypeEnum.MARIADB;
import static prerna.util.sql.RdbmsTypeEnum.MYSQL;
import static prerna.util.sql.RdbmsTypeEnum.OPEN_SEARCH;
import static prerna.util.sql.RdbmsTypeEnum.ORACLE;
import static prerna.util.sql.RdbmsTypeEnum.PHOENIX;
import static prerna.util.sql.RdbmsTypeEnum.POSTGRES;
import static prerna.util.sql.RdbmsTypeEnum.REDSHIFT;
import static prerna.util.sql.RdbmsTypeEnum.SAP_HANA;
import static prerna.util.sql.RdbmsTypeEnum.SEMOSS;
import static prerna.util.sql.RdbmsTypeEnum.SNOWFLAKE;
import static prerna.util.sql.RdbmsTypeEnum.SPARK;
import static prerna.util.sql.RdbmsTypeEnum.SQLITE;
import static prerna.util.sql.RdbmsTypeEnum.SQL_SERVER;
import static prerna.util.sql.RdbmsTypeEnum.SYNAPSE;
import static prerna.util.sql.RdbmsTypeEnum.TERADATA;
import static prerna.util.sql.RdbmsTypeEnum.TIBCO;
import static prerna.util.sql.RdbmsTypeEnum.TRINO;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

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

public class SqlQueryUtilFactory {

	/**
	 * List of keywords based on what has been pushed into DIHelper
	 */
	private static Map> keywordsMap = new HashMap>();
	
	/**
	 * Get the appropriate query util class
	 * @param dbType
	 * @return
	 */
	public static AbstractSqlQueryUtil initialize(RdbmsTypeEnum dbType) {
		AbstractSqlQueryUtil queryUtil = null;
		if(dbType == ASTER) {
			queryUtil = new AsterQueryUtil();
		} else if(dbType == ATHENA) {
			queryUtil = new AthenaQueryUtil();
		} else if(dbType == BIG_QUERY) {
			queryUtil = new BigQueryQueryUtil();
		} else if(dbType == CASSANDRA) {
			queryUtil = new CassandraQueryUtil();
		} else if(dbType == CLICKHOUSE) {
			queryUtil = new ClickhouseQueryUtil();
		} else if(dbType == DATABRICKS) {
			queryUtil = new DatabricksQueryUtil();
		} else if(dbType == DB2) {
			queryUtil = new DB2QueryUtil();
		} else if(dbType == DERBY) {
			queryUtil = new DerbyQueryUtil();
		} else if(dbType == ELASTIC_SEARCH) {
			queryUtil = new ElasticSearchQueryUtil();
		} else if(dbType == H2_DB) {
			queryUtil = new H2QueryUtil();
		} else if(dbType == SQLITE) {
			queryUtil = new SQLiteQueryUtil();
		} else if(dbType == HIVE) {
			queryUtil = new HiveQueryUtil();
		} else if(dbType == IMPALA) {
			queryUtil = new ImpalaQueryUtil();
		} else if(dbType == REDSHIFT) {
			queryUtil = new RedshiftQueryUtil();
		} else if(dbType == MARIADB) {
			queryUtil = new MariaDbQueryUtil();
		} else if(dbType == MYSQL) {
			queryUtil = new MySQLQueryUtil();
		} else if(dbType == OPEN_SEARCH) {
			queryUtil = new OpenSearchQueryUtil();
		} else if(dbType == ORACLE) {
			queryUtil = new OracleQueryUtil();
		} else if(dbType == PHOENIX) {
			queryUtil = new PhoenixQueryUtil();
		} else if(dbType == POSTGRES) {
			queryUtil = new PostgresQueryUtil();
		} else if(dbType == SAP_HANA) {
			queryUtil = new SAPHanaQueryUtil();
		} else if(dbType == SPARK) {
			queryUtil = new SparkQueryUtil();
		} else if(dbType == SNOWFLAKE) {
			queryUtil = new SnowFlakeQueryUtil();
		} else if(dbType == SYNAPSE) {
			queryUtil = new SynapseQueryUtil();
		}  else if(dbType == SQL_SERVER) {
			queryUtil = new MicrosoftSqlServerQueryUtil();
		} else if(dbType == TERADATA) {
			queryUtil = new TeradataQueryUtil();
		} else if(dbType == TIBCO) {
			queryUtil = new TibcoQueryUtil();
		} else if(dbType == TRINO) {
			queryUtil = new TrinoQueryUtil();
		} else if(dbType == SEMOSS) {
			queryUtil = new SEMOSSQueryUtil();
		} else {
			throw new IllegalArgumentException("Unknown DB Type. Please define a query util for the DB Type " + dbType);
		}
			
		queryUtil.setReservedWords(loadReservedWords(dbType));
		return queryUtil;
	}
	
	public static AbstractSqlQueryUtil initialize(RdbmsTypeEnum dbType, String connectionUrl, String username, String password) {
		AbstractSqlQueryUtil queryUtil = null;
		if(dbType == ASTER) {
			queryUtil = new AsterQueryUtil(connectionUrl, username, password);
		} else if(dbType == ATHENA) {
			queryUtil = new AthenaQueryUtil(connectionUrl, username, password);
		} else if(dbType == BIG_QUERY) {
			queryUtil = new BigQueryQueryUtil(connectionUrl, username, password);
		} else if(dbType == CASSANDRA) {
			queryUtil = new CassandraQueryUtil(connectionUrl, username, password);
		} else if(dbType == CLICKHOUSE) {
			queryUtil = new ClickhouseQueryUtil(connectionUrl, username, password);
		} else if(dbType == DATABRICKS) {
			queryUtil = new DatabricksQueryUtil(connectionUrl, username, password);
		} else if(dbType == DB2) {
			queryUtil = new DB2QueryUtil(connectionUrl, username, password);
		} else if(dbType == DERBY) {
			queryUtil = new DerbyQueryUtil(connectionUrl, username, password);
		} else if(dbType == ELASTIC_SEARCH) {
			queryUtil = new ElasticSearchQueryUtil(connectionUrl, username, password);
		} else if(dbType == H2_DB) {
			queryUtil = new H2QueryUtil(connectionUrl, username, password);
		} else if(dbType == SQLITE) {
			queryUtil = new SQLiteQueryUtil(connectionUrl, username, password);
		} else if(dbType == HIVE) {
			queryUtil = new HiveQueryUtil(connectionUrl, username, password);
		} else if(dbType == IMPALA) {
			queryUtil = new ImpalaQueryUtil(connectionUrl, username, password);
		} else if(dbType == REDSHIFT) {
			queryUtil = new RedshiftQueryUtil(connectionUrl, username, password);
		} else if(dbType == MARIADB) {
			queryUtil = new MariaDbQueryUtil(connectionUrl, username, password);
		} else if(dbType == MYSQL) {
			queryUtil = new MySQLQueryUtil(connectionUrl, username, password);
		} else if(dbType == OPEN_SEARCH) {
			queryUtil = new OpenSearchQueryUtil(connectionUrl, username, password);
		} else if(dbType == ORACLE) {
			queryUtil = new OracleQueryUtil(connectionUrl, username, password);
		} else if(dbType == PHOENIX) {
			queryUtil = new PhoenixQueryUtil(connectionUrl, username, password);
		} else if(dbType == POSTGRES) {
			queryUtil = new PostgresQueryUtil(connectionUrl, username, password);
		} else if(dbType == SAP_HANA) {
			queryUtil = new SAPHanaQueryUtil(connectionUrl, username, password);
		} else if(dbType == SPARK) {
			queryUtil = new SparkQueryUtil(connectionUrl, username, password);
		} else if(dbType == SNOWFLAKE) {
			queryUtil = new SnowFlakeQueryUtil(connectionUrl, username, password);
		} else if(dbType == SYNAPSE) {
			queryUtil = new SynapseQueryUtil(connectionUrl, username, password);
		} else if(dbType == SQL_SERVER) {
			queryUtil = new MicrosoftSqlServerQueryUtil(connectionUrl, username, password);
		} else if(dbType == TERADATA) {
			queryUtil = new TeradataQueryUtil(connectionUrl, username, password);
		} else if(dbType == TIBCO) {
			queryUtil = new TibcoQueryUtil(connectionUrl, username, password);
		} else if(dbType == TRINO) {
			queryUtil = new TrinoQueryUtil(connectionUrl, username, password);
		} else if(dbType == SEMOSS) {
			queryUtil = new SEMOSSQueryUtil(connectionUrl, username, password);
		} else {
			throw new IllegalArgumentException("Unknown DB Type. Please define a query util for the DB Type " + dbType);
		}
		
		queryUtil.setReservedWords(loadReservedWords(dbType));
		return queryUtil;
	}
	
	/**
	 * Load the reserved words from DIHelper (static - only load once per type)
	 * @param type
	 * @return
	 */
	private static List loadReservedWords(RdbmsTypeEnum type) {
		if(keywordsMap.containsKey(type)) {
			return keywordsMap.get(type);
		}
		
		String keywordsString = Utility.getDIHelperProperty(type.getLabel().toUpperCase() + Constants.KEYWORDS_SUFFIX);
		if(keywordsString != null) {
			List keywordsList = new Vector();
			// the string is comma delimited
			String[] words = keywordsString.split(",");
			for(String word : words) {
				// keep everything upper case for simplicity in comparisons
				keywordsList.add(word.toUpperCase());
			}
			keywordsMap.put(type, keywordsList);
		}
		
		return keywordsMap.get(type);
	}
	
	private SqlQueryUtilFactory() {
		
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy