Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.nurkiewicz.jdbcrepository.sql;
  
  
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
 import java.util.Set;

Author(s):
Tomasz Nurkiewicz
Since:
12/18/12, 9:18 PM
 
 public class SqlGenerator {
 
 	public static final String WHERE = " WHERE ";
 	public static final String AND = " AND ";
 	public static final String OR = " OR ";
 	public static final String SELECT = "SELECT ";
 	public static final String FROM = "FROM ";
 	public static final String DELETE = "DELETE ";
 	public static final String COMMA = ", ";
 	public static final String PARAM = " = ?";
 
 	public SqlGenerator(String allColumnsClause) {
 		this. = allColumnsClause;
 	}
 
 	public SqlGenerator() {
 		this("*");
 	}
 
 	public String count(TableDescription table) {
 		return  + "COUNT(*) " +  + table.getFromClause();
 	}
 
 	public String deleteById(TableDescription table) {
 		return  +  + table.getName() + whereByIdClause(table);
 	}
 
 	private String whereByIdClause(TableDescription table) {
 		final StringBuilder whereClause = new StringBuilder();
 		for (Iterator<StringidColIterator = table.getIdColumns().iterator(); idColIterator.hasNext(); ) {
 			whereClause.append(idColIterator.next()).append();
 			if (idColIterator.hasNext()) {
 				whereClause.append();
 			}
 		}
 		return whereClause.toString();
 	}
 
 	private String whereByIdsClause(TableDescription tableint idsCount) {
 		final List<StringidColumnNames = table.getIdColumns();
 		if (idColumnNames.size() > 1) {
 			return whereByIdsWithMultipleIdColumns(idsCountidColumnNames);
 		} else {
 			return whereByIdsWithSingleIdColumn(idsCountidColumnNames.get(0));
 		}
 	}
 
 	private String whereByIdsWithMultipleIdColumns(int idsCountList<StringidColumnNames) {
 		int idColumnsCount = idColumnNames.size();
 		final StringBuilder whereClause = new StringBuilder();
 		final int totalParams = idsCount * idColumnsCount;
 		for (int idColumnIdx = 0; idColumnIdx < totalParamsidColumnIdx += idColumnsCount) {
 			if (idColumnIdx > 0) {
 				whereClause.append();
 			}
 			whereClause.append("(");
 			for (int i = 0; i < idColumnsCount; ++i) {
 				if (i > 0) {
 					whereClause.append();
 				}
 				whereClause.append(idColumnNames.get(i)).append(" = ?");
 			}
 			whereClause.append(")");
 		}
 		return whereClause.toString();
 	}
 
 	private String whereByIdsWithSingleIdColumn(int idsCountString idColumn) {
 		final StringBuilder whereClause = new StringBuilder();
 		return whereClause.
 				append(idColumn).
 				append(" IN (").
 				append(repeat("?"idsCount)).
 				append(")").
 	}
 
 	public String selectAll(TableDescription table) {
 		return  +  + " " +  + table.getFromClause();
 	}
 
 	public String selectAll(TableDescription tablePageable page) {
 		return selectAll(tablepage.getSort()) + limitClause(page);
	}
	public String selectAll(TableDescription tableSort sort) {
		return selectAll(table) + sortingClauseIfRequired(sort);
	}
	protected String limitClause(Pageable page) {
		final int offset = page.getPageNumber() * page.getPageSize();
		return " LIMIT " + offset +  + page.getPageSize();
	}
		return selectAll(table) + whereByIdClause(table);
	}
	public String selectByIds(TableDescription tableint idsCount) {
		switch (idsCount) {
			case 0:
				return selectAll(table);
			case 1:
				return selectById(table);
			default:
				return selectAll(table) + whereByIdsClause(tableidsCount);
		}
	}
	protected String sortingClauseIfRequired(Sort sort) {
		if (sort == null) {
			return "";
		}
		StringBuilder orderByClause = new StringBuilder();
		orderByClause.append(" ORDER BY ");
		for(Iterator<Sort.Orderiterator = sort.iterator(); iterator.hasNext();) {
			final Sort.Order order = iterator.next();
			orderByClause.
					append(" ").
			if (iterator.hasNext()) {
				orderByClause.append();
			}
		}
		return orderByClause.toString();
	}
	public String update(TableDescription tableMap<StringObjectcolumns) {
		final StringBuilder updateQuery = new StringBuilder("UPDATE " + table.getName() + " SET ");
		for(Iterator<Map.Entry<String,Object>> iterator = columns.entrySet().iterator(); iterator.hasNext();) {
			Map.Entry<StringObjectcolumn = iterator.next();
			updateQuery.append(column.getKey()).append(" = ?");
			if (iterator.hasNext()) {
				updateQuery.append();
			}
		}
		updateQuery.append(whereByIdClause(table));
		return updateQuery.toString();
	}
	public String create(TableDescription tableMap<StringObjectcolumns) {
		final StringBuilder createQuery = new StringBuilder("INSERT INTO " + table.getName() + " (");
		appendColumnNames(createQuerycolumns.keySet());
		createQuery.append(")").append(" VALUES (");
		createQuery.append(repeat("?"columns.size()));
		return createQuery.append(")").toString();
	}
	private void appendColumnNames(StringBuilder createQuerySet<StringcolumnNames) {
		for(Iterator<Stringiterator = columnNames.iterator(); iterator.hasNext();) {
			final String column = iterator.next();
			createQuery.append(column);
			if (iterator.hasNext()) {
				createQuery.append();
			}
		}
	}
	// Unfortunately {@link org.apache.commons.lang3.StringUtils} not available
	private static String repeat(String sString separatorint count) {
		StringBuilder string = new StringBuilder((s.length() + separator.length()) * count);
		while (--count > 0) {
			string.append(s).append(separator);
		}
		return string.append(s).toString();
	}
	public String deleteAll(TableDescription table) {
		return  +  + table.getName();
	}
	public String countById(TableDescription table) {
		return count(table) + whereByIdClause(table);
	}
	}
New to GrepCode? Check out our FAQ X