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

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

The newest version!
package prerna.ds.util;

import java.util.List;
import java.util.Map;
import java.util.Set;

import prerna.ds.QueryStruct;
import prerna.query.querystruct.SelectQueryStruct;
import prerna.query.querystruct.filters.SimpleQueryFilter;
import prerna.query.querystruct.joins.BasicRelationship;
import prerna.query.querystruct.joins.IRelation;
import prerna.query.querystruct.joins.RelationSet;
import prerna.query.querystruct.selectors.QueryColumnOrderBySelector;
import prerna.query.querystruct.selectors.QueryColumnSelector;
import prerna.sablecc2.om.PixelDataType;
import prerna.sablecc2.om.nounmeta.NounMetadata;

public class QueryStructConverter {

	/*
	 * Class used to convert old qs to new qs
	 */
	
	private QueryStructConverter() {
		
	}
	
	public static SelectQueryStruct convertOldQueryStruct(QueryStruct qs) {
		SelectQueryStruct retQs = new SelectQueryStruct();

		// convert the selectors
		Map> oldSelectors = qs.selectors;
		for(String table : oldSelectors.keySet()) {
			retQs.addSelector(new QueryColumnSelector(table));
			List props = oldSelectors.get(table);
			for(int i = 0; i < props.size(); i++) {
				retQs.addSelector(new QueryColumnSelector(table + "__" + props.get(i)));
			}
		}

		// convert the filters
		Map> oldFilters = qs.andfilters;
		for(String colname : oldFilters.keySet()) {
			// need to determine if colname is a table or a column
			QueryColumnSelector colSelector = null;
			if(oldSelectors.keySet().contains(colname)) {
				colSelector = new QueryColumnSelector(colname);
			} else {
				// this is a gamble
				// hopefully the name doesn't repeat...
				// if it did, old logic would give an error anyway at anohter point in time
				for(String table : oldSelectors.keySet()) {
					List propNames = oldSelectors.get(table);
					if(propNames.contains(colname)) {
						colSelector = new QueryColumnSelector(table + "__" + colname);
						break;
					}
				}
			}

			// now that i have the selector
			// i need to add all the filters
			Map compHash = oldFilters.get(colname);
			for(String comparator : compHash.keySet()) {
				List values = compHash.get(comparator);
				PixelDataType type = null;
				if(values.get(0) instanceof Number) {
					type = PixelDataType.CONST_DECIMAL;
				} else {
					type = PixelDataType.CONST_STRING;
				}
				SimpleQueryFilter newFilter = new SimpleQueryFilter(
						new NounMetadata(colSelector, PixelDataType.COLUMN), 
						comparator, 
						new NounMetadata(compHash.get(comparator), type));
				retQs.addExplicitFilter(newFilter);
			}
		}
		
		// add relations
		Set rels = new RelationSet();
		Map> curRels = qs.getRelations();
		for(String up : curRels.keySet()) {
			Map innerMap = curRels.get(up);
			for(String jType : innerMap.keySet()) {
				List downs = innerMap.get(jType);
				for(Object d : downs) {
					rels.add(new BasicRelationship(new String[]{up, jType, d.toString()}));
				}
			}
		}
		retQs.mergeRelations(rels);

		// add group bys
		Map> groupBys = qs.getGroupBy();
		for(String table : groupBys.keySet()) {
			Set columns = groupBys.get(table);
			for(String col : columns) {
				retQs.addGroupBy(new QueryColumnSelector(table + "__" + col));
			}
		}
		
		// add orders
		Map orderBys = qs.getOrderBy();
		for(String table : orderBys.keySet()) {
			String col = orderBys.get(table);
			retQs.addOrderBy(new QueryColumnOrderBySelector(table + "__" + col));
		}
		
		return retQs;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy