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

com.ivanceras.keyword.sql.BaseSQL Maven / Gradle / Ivy

There is a newer version: 0.1.2
Show newest version
package com.ivanceras.keyword.sql;

import java.util.LinkedList;
import java.util.List;

public abstract class BaseSQL {

	protected List keywords = new LinkedList();

	String lastCall = null;

	protected final String FIELD = "FIELD";
	protected final String FUNCTION = "FUNCTION";
	protected final String KEYWORD = "KEYWORD";
	protected final String VALUE = "VALUE";
	
	boolean smartMode = true;//if on smart mode, adds commas, and parenthesis automatically if possible.

	protected final String TABLE = "TABLE";

	int tabs = 0;


	protected List values = new LinkedList();
	
	public SQL append(SQL sql){
		keywords.add(sql);
		lastCall = KEYWORD;
		return (SQL) this;
	}
	
	public SQL keyword(String keyword){
		keywords.add(keyword);
		lastCall = KEYWORD; 
		return (SQL) this;
	}
	
	public SQL chars(String keyword){
		keywords.add(keyword);
		return (SQL) this;
	}
	
	public SQL comma(){
		return chars(",");
	}
	
	protected SQL smartCommaFnField(){
		if(smartMode && lastCall != null && (lastCall.equals(FIELD) || lastCall.equals(FUNCTION))){
			comma();
		}
		return (SQL) this;
	}
	public SQL tab(){
		tabs++;
		for(int i = 0; i < tabs; i++){
			keyword("\t");
		}
		return (SQL) this;
	}
	
	protected SQL table(String tbl) {
		if(smartMode && lastCall != null && lastCall.equals(TABLE)){
			comma();
		}
		keywords.add(tbl);
		lastCall = TABLE;
		return (SQL) this;
	}
	
	public SQL ln(){
		return chars("\n");
	}
	
	public Breakdown build(Breakdown bk, SQL passed){
		List passedKeywords = passed.keywords;
		List passedValues = passed.values;
		for(Object keyword : passedKeywords){
			if(keyword != null){
				Class keyClass = keyword.getClass();
				if(keyClass.equals(String.class)){
					bk.appendSp((String)keyword);
				}
				else if(keyClass.equals(SQL.class)){
					build(bk, (SQL)keyword);
				}
			}
		}
		for(Object value : passedValues){
			bk.addParameter(value);
		}
		return bk;
	}
	
	protected SQL field(SQL sql){
		keywords.add(sql);
		return (SQL) this;
	}

	public SQL openParen(){
		lastCall = "_OPEN_PAREN_";
		return chars("(");
	}
	public SQL closeParen(){
		lastCall = "_CLOSE_PAREN_";
		return chars(")");
	}
	
}