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

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

The newest version!
package com.ivanceras.keyword.sql;

import java.util.ArrayList;
import java.util.List;

import com.ivanceras.keyword.sql.Keywords;
import static com.ivanceras.keyword.sql.BaseSQL.Type.*;

public class SQL extends Keywords{
	
	
	/**
	 * Wraps with open and close parenthesis the SQL
	 * @param sql
	 * @return
	 */
	public SQL FIELD(SQL sql){
		smartCommaFnField();
		openParen();
		field(sql);
		closeParen();
		lastCall = FIELD;
		return this;
	}

	public SQL FIELD(String keyword){
		smartCommaFnField();
		keyword(keyword);
		lastCall = FIELD;
		return this;
	}
	

	public SQL FIELD(String... columns){
		for(String col : columns){
			FIELD(col);
		}
		return this;
	}


	public SQL ALTER_TABLE(String table){
		return instance().ALTER().TABLE(table);
	}
	public SQL AVG(SQL sql){
		return instance().FUNCTION("AVG", sql);
	}
	public SQL AVG(String column){
		return instance().FUNCTION("AVG", column);
	}
	public SQL COUNT(SQL sql){
		return instance().FUNCTION("COUNT", sql);
	}

	public SQL COUNT(String column){
		return instance().FUNCTION("COUNT", column);
	}
	public SQL CREATE_TABLE(String table){
		return CREATE().TABLE(table);
	}
	public SQL DELETE_FROM(String table){
		return DELETE().FROM(table);
	}

	public SQL DROP_TABLE() {
		return DROP().keyword("TABLE");
	}

	public SQL DROP_TABLE(String table) {
		return DROP().TABLE(table);
	}

	public static SQL instance(){
		return new SQL();
	}
	public SQL LOWER(SQL sql){
		return FUNCTION("LOWER", sql);
	}
	public SQL LOWER(String column){
		return FUNCTION("LOWER", column);
	}

	public SQL MAX(SQL sql){
		return FUNCTION("MAX", sql);
	}

	public SQL MAX(String column){
		return FUNCTION("MAX", column);
	}

	public SQL MIN(SQL sql){
		return FUNCTION("MIN", sql);
	}

	public SQL MIN(String column){
		return FUNCTION("MIN", column);
	}

	public SQL SELECT(SQL arg){
		return ln().SELECT().field(arg);
	}

	public SQL SELECT(String... columns){
		return ln().SELECT().FIELD(columns);
	}

	public SQL SUM(SQL sql){
		return FUNCTION("SUM", sql);
	}


	public SQL SUM(String column){
		return FUNCTION("SUM", column);
	}

	public SQL TRUNCATE_TABLE(String table){
		return keyword("TRUNCATE").TABLE(table);
	}

	public SQL UPDATE(String table){
		return keyword("UPDATE").FIELD(table);
	}

	public SQL UPPER(SQL sql){
		return FUNCTION("UPPER", sql);
	}

	public SQL UPPER(String column){
		return FUNCTION("UPPER", column);
	}


	public SQL AND(SQL sql){
		return keyword("AND").FN(sql);
	}


	public SQL AND(String column){
		return ln().AND().FIELD(column);
	}

	public SQL AND_ON(String column1, String column2) {
		return ln().AND().FIELD(column1).EQUAL_TO_FIELD(column2);
	}

	public SQL AS(SQL sql){
		return AS().ln().FIELD(sql);
	}
	public SQL AS(String asColumn){
		return AS().FIELD(asColumn);
	}
	
	public Breakdown build(){
		Breakdown bk = new Breakdown(); 
		build(bk, (SQL)this);
		return bk;
	}
	
	public SQL CONSTRAINT(String constraintName){
		return CONSTRAINT().keyword(constraintName);
	}
	public SQL CROSS_JOIN(String table){
		return CROSS().JOIN().FIELD(table);
	}
	
	public SQL DISTINCT(String... columns){
		return DISTINCT().FIELD(columns);
	}
	public SQL DISTINCT_ON(String... columns){
		DISTINCT().ON();
		openParen();
		FIELD(columns);
		closeParen();
		return this;
	}
	public SQL EQUAL() {
		return keyword("=");
	}
	public SQL NOT_EQUAL() {
		return keyword("!=");
	}
	public SQL EQUAL(Object value){
		return EQUAL().VALUE(value);
	}
	public SQL EQUAL_TO(Object value){
		return EQUAL().VALUE(value);
	}
	public SQL EQUAL_TO_FIELD(String column) {
		return EQUAL().FIELD(column);
	}
	public SQL EXCEPT(SQL sql){
		return EXCEPT().FIELD(sql);
	}
	public SQL EXCEPT_ALL(SQL sql){
		return EXCEPT().ALL().FIELD(sql);
	}
	public SQL EXISTS(SQL sql){
		EXISTS();
		openParen();
		FIELD(sql);
		closeParen();
		return this;
	}




	/**
	 * Does not wraps the SQL statements with parenthesis, to avoid unnecessary characters on the query
	 * @param sql
	 * @return
	 */
	public SQL FN(SQL sql){
		smartCommaFnField();
		field(sql);
		lastCall = FUNCTION;
		return this;
	}

	public SQL FOREIGN_KEY(String...columns){
		return FOREIGN().KEY()
				.openParen()
				.FIELD(columns)
				.closeParen()
				.ln();
	}
	
	public SQL FROM(SQL sql){
		return ln().FROM().FIELD(sql);
	}

	public SQL FROM(String table){
		ln().FROM().keyword(table);
		lastCall = TABLE;
		return this;
	}
	
	public SQL FROM(String table, String... otherTables){
		List tableList = new ArrayList();
		tableList.add(table);
		for(String tbl : otherTables){
			tableList.add(tbl);
		}
		return FROM(tableList.toArray(new String[tableList.size()]));
	}



	public SQL FROM(String[] tables){
		ln().FROM();
		for(String tbl : tables){
			table(tbl);
		}
		return this;
	}
	public SQL FULL_OUTER_JOIN(String table){
		return ln().FULL().OUTER().JOIN().FIELD(table);
	}


	public SQL function(String function, SQL sql){
		keyword(function);
		lastCall = FUNCTION;
		openParen();
		field(sql);
		closeParen();
		lastCall = FUNCTION;
		return this;
	}

	public SQL function(String function, String column){
		keyword(function);
		lastCall = FUNCTION;
		openParen();
		FIELD(column);
		closeParen();
		lastCall = FUNCTION;
		return this;
	}

	public SQL FUNCTION(String function, SQL sql){
		return function(function, sql);
	}

	public SQL FUNCTION(String function, String column){
		return function(function, column);
	}

	public SQL GREATER_THAN(){
		return keyword(">");
	}
	
	public SQL GREATER_THAN(Object value){
		return GREATER_THAN().VALUE(value);
	}

	public SQL GREATER_THAN(SQL sql){
		return GREATER_THAN().FIELD(sql);
	}

	public SQL GREATER_THAN_OR_EQUAL(){
		return keyword(">=");
	}
	public SQL GREATER_THAN_OR_EQUAL(Object value){
		return GREATER_THAN_OR_EQUAL().VALUE(value);
	}
	public SQL GROUP_BY(SQL sql){
		return GROUP().BY().FN(sql);
	}

	public SQL GROUP_BY(String... column){
		return GROUP().BY().FIELD(column);
	}
	/**
	 * As much as possible, don't use this
	 * @param expression
	 * @return
	 */
	public SQL HAVING(String column1){
		return HAVING().FIELD(column1);
	}
	
	public SQL IF_EXISTS(){
		return IF().EXISTS();
	}
	public SQL IF_NOT_EXISTS(){
		return IF().NOT().EXISTS();
	}
	public SQL IN(Object... value){
		IN();
		openParen();
		boolean doComma = false;
		for(Object v : value){
			if(doComma){comma();}else{doComma=true;}
			VALUE(v);
		}
		closeParen();
		return this;
	}

	public SQL IN(SQL sql){
		return ln().IN().FIELD(sql);
	}

	public SQL INDEX(String indexName, String columns){
		return INDEX().keyword(indexName).FIELD(columns);
	}
	public SQL INHERITS(String table){
		return INHERITS().openParen().FIELD(table).closeParen();
	}

	public SQL INNER_JOIN(String table){
		return ln().INNER().JOIN().FIELD(table);
	}

	public SQL INTERSECT(SQL sql){
		return INTERSECT().field(sql);
	}

	public SQL INTERSECT_ALL(SQL sql){
		return INTERSECT().ALL().FIELD(sql);
	}

	public SQL INTO(String table){
		INTO().FIELD(table);
		lastCall = TABLE;
		return this;
	}

	public SQL IS_NOT_NULL(){
		return IS().NOT().NULL();
	}
	public SQL IS_NULL(){
		return IS().NULL();
	}

	public SQL LEFT_JOIN(String table){
		return ln().LEFT().JOIN().FIELD(table);
	}

	public SQL LEFT_OUTER_JOIN(String table){
		return ln().LEFT().OUTER().JOIN().FIELD(table);
	}
	
	public SQL LESS_THAN(){
		return keyword("<");
	}

	public SQL LESS_THAN(Object value){
		return LESS_THAN().VALUE(value);
	}

	public SQL LESS_THAN(SQL sql){
		return LESS_THAN().FIELD(sql);
	}
	
	public SQL LESS_THAN_OR_EQUAL(){
		return keyword("<=");
	}
	public SQL LESS_THAN_OR_EQUAL(Object value){
		return LESS_THAN_OR_EQUAL().VALUE(value);
	}
	public SQL LIMIT(int limit){
		return LIMIT().keyword(limit+"");
	}

	public SQL MATCH_FULL(){
		return MATCH().FULL();
	}

	public SQL MATCH_SIMPLE(){
		return MATCH().SIMPLE();
	}


	public SQL NOT_EQUAL_TO(Object value){
		return keyword("!=").VALUE(value);
	}

	public SQL NOT_EQUAL_TO_FIELD(String column){
		return keyword("!=").FIELD(column);
	}

	public SQL NOT_EXISTS(SQL sql){
		NOT().EXISTS();
		FIELD(sql);
		return this;
	}

	public SQL NOT_IN(Object... value){
		NOT().IN();
		openParen();
		boolean doComma = false;
		for(Object v : value){
			if(doComma){comma();}else{doComma=true;}
			VALUE(v);
		}
		closeParen();
		return this;
	}
	public SQL NOT_IN(SQL sql){
		NOT().IN();
		FIELD(sql);
		return this;
	}

	public SQL NOT_NULL() {
		return NOT().NULL();
	}

	public SQL OFFSET(int offset){
		return OFFSET().keyword(offset+"");
	}

	public SQL ON(String column1){
		return ON().FIELD(column1);
	}

	public SQL ON(String column1, String column2){
		return ON().FIELD(column1).EQUAL().FIELD(column2);
	}
	public SQL ON_DELETE(){
		return ON().DELETE();
	}
	
	public SQL ON_UPDATE(){
		return ON().UPDATE();
	}

	public SQL OR(String column){
		return OR().FIELD(column);
	}
	public SQL ORDER_BY(){
		return ORDER().BY();
	}
	public SQL ORDER_BY(String... field){
		ORDER_BY();
		for(String f : field){
			FIELD(f);
		}
		return this;
	}
	public SQL PARTITION_BY(String... columns){
		return PARTITION().BY().FIELD(columns);
	}
	public SQL PRIMARY_KEY(){
		return PRIMARY().KEY();
	}
	public SQL PRIMARY_KEY(String...columns){
		return PRIMARY_KEY().openParen().FIELD(columns).closeParen();
	}
	public SQL REFERENCES(String table, String column){
		return REFERENCES().ln()
				.FIELD(table)
				.openParen().FIELD(column).ln().closeParen();
	}

	public SQL RENAME_TO(String table){
		return RENAME().TO(table);
	}

	public SQL RETURNING(String column){
		return ln().RETURNING().FIELD(column);
	}

	public SQL RIGHT_JOIN(String table){
		return ln().RIGHT().JOIN().FIELD(table);
	}

	public SQL RIGHT_OUTER_JOIN(String table){
		return ln().RIGHT().OUTER().JOIN().FIELD(table);
	}

	public SQL SCHEMA(String schema){
		return SCHEMA().FIELD(schema);
	}
	
	public SQL SET(String field) {
		return SET().FIELD(field);
	}
	public SQL SET(String field, Object value) {
		return SET().FIELD(field).EQUAL(value);
	}

	public SQL TABLE(String table){
		return TABLE().FIELD(table);
	}
	public SQL TABLE(String table, String...otherTables){
		TABLE();
		FIELD(table);
		lastCall = TABLE;
		for(String o : otherTables){
			FIELD(o);
		}
		return this;
	}

	public SQL TO(String table){
		return TO().TABLE(table);
	}

	public SQL UNION(SQL sql){
		return UNION().field(sql);
	}

	public SQL UNION_ALL(SQL sql){
		return UNION().ALL().FIELD(sql);
	}

	public SQL UNIQUE(String... uniqueColumns){
		return UNIQUE().openParen().FIELD(uniqueColumns).closeParen();
	}

	public SQL USING(String... column){
		return USING().FIELD(column);
	}

	public SQL VALUE(Object value){
		FIELD("?");
		values.add(value);
		lastCall = VALUE;
		return this;
	}
	public SQL VALUE(SQL sql){
		return FIELD(sql);
	}

	public SQL VALUES(Object... objValue){
		VALUES().openParen();
		for(Object val : objValue){
			VALUE(val);
		}
		return closeParen();
	}

	public SQL WHERE(SQL sql){
		return WHERE().FIELD(sql);
	}

	public SQL WHERE(String column){
		return WHERE().FIELD(column);
	}
	
	public SQL INITIALLY_DEFERRED() {
		return INITIALLY().DEFERRED();
	}
	
	public SQL WITH(String queryName){
		return WITH().keyword(queryName);
	}
	
	public SQL WITH(String queryName, SQL sql){
		return WITH(queryName).AS().FIELD(sql);
	}

	public SQL WITH_RECURSIVE(String queryName){
		return WITH().RECURSIVE().keyword(queryName);
	}
	public SQL WITH_RECURSIVE(String queryName, SQL sql){
		return WITH().RECURSIVE().keyword(queryName).AS().FIELD(sql);
	}
	
	/**
	 * Trigonometric Functions
	 * @param sql
	 * @return
	 */
	public SQL SIN(SQL sql) {
		return FUNCTION("SIN",sql);
	}
	
	public SQL COS(SQL sql) {
		return FUNCTION("COS",sql);
	}
	public SQL TAN(SQL sql) {
		return FUNCTION("TAN",sql);
	}
	public SQL SEC(SQL sql) {
		return FUNCTION("SEC",sql);
	}
	
	//arc
	public SQL ASIN(SQL sql) {
		return FUNCTION("ASIN",sql);
	}
	
	public SQL ACOS(SQL sql) {
		return FUNCTION("ACOS",sql);
	}
	public SQL ATAN(SQL sql) {
		return FUNCTION("ATAN",sql);
	}
	public SQL ASEC(SQL sql) {
		return FUNCTION("ASEC",sql);
	}
	
	public SQL DESC(){
		super.DESC();
		lastCall = FIELD;
		return this;
	}
	
	//degree, radians
	public SQL DEGREES(SQL sql) {
		return FUNCTION("DEGREES",sql);
	}
	public SQL RADIANS(SQL sql) {
		return FUNCTION("RADIANS",sql);
	}
	
	public SQL MULTIPLY(){
		return ln().keyword("*");
	}
	public SQL PLUS(){
		return ln().keyword("+");
	}
	
	public SQL MINUS(){
		return ln().keyword("-");
	}
	public SQL DIVIDE(){
		return ln().keyword("/");
	}
	
	@Override
	public SQL OVER(){
		return FUNCTION("OVER", "");
	}
	
	
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy