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

com.venky.swf.sql.DDL Maven / Gradle / Ivy

The newest version!
package com.venky.swf.sql;

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

import com.venky.swf.db.Database;
import com.venky.swf.db.table.BindVariable;
import com.venky.swf.routing.Config;

public abstract class DDL extends DataManupulationStatement{

	protected List values = new ArrayList();
	protected String table ;
	protected DDL(String pool,String table){
		super(pool);
		this.table = table;
	}

	protected void finalizeParameterizedSQL(){
		
	}
	@Override
	public List getValues() {
		return values;
	}

	public static final class DropTable extends DDL {
		public DropTable(String pool,String table){
			super(pool,table);
			getQuery().append("drop table ").append(table);
		}
	}
	
	public static final class CreateTable extends DDL {
		List columnsSpec = new ArrayList();
		List pk = new ArrayList();
		public CreateTable(String pool,String table){
			super(pool,table);
		}

		String asSelect = null;
		public CreateTable as(String selectClause){
			if (columnsSpec.isEmpty() && pk.isEmpty()){
				asSelect = selectClause;
			}else {
				throw new RuntimeException("Syntax Error for Create Table");
			}
			return this;
		}
		protected void finalizeParameterizedSQL(){
			StringBuilder query = getQuery();
			query.append("create table ").append(table);
			if (asSelect != null){
				query.append(" AS ");
				query.append(asSelect);
			}else {
				query.append("( ");
				
				Iterator colSpecIterator = columnsSpec.iterator();
				while(colSpecIterator.hasNext()){
					String colSpec = colSpecIterator.next();
					query.append(colSpec);
					if (colSpecIterator.hasNext()){
						query.append(" , ");
					}
				}
				
				if (pk.size() > 0 && Database.getJdbcTypeHelper(getPool()).requiresSeparatePrimaryKeyClause()){
					query.append(" , ").append(" primary key(");
					Iterator pkColumnIterator = pk.iterator();
					while (pkColumnIterator.hasNext()){
						String col = pkColumnIterator.next();
						query.append(col);
						if (pkColumnIterator.hasNext()){
							query.append(",");
						}
					}
					query.append(")");
				}
				
				query.append(" )");
			}
			Config.instance().getLogger(getClass().getName()).fine(query.toString());
		}
		public void addColumn(String columnSpec){
			assert asSelect == null;
			columnsSpec.add(columnSpec);
		}
		
		public void addPrimaryKeyColumn(String pkColumn){
			assert asSelect == null;
			pk.add(pkColumn);
		}
	}
	
	public static final class AlterTable extends DDL {
		public AlterTable(String pool,String table){
			super(pool,table);
		}
		private String alterSpec = null ;
		public void dropColumn(String columnName){
			if (alterSpec == null){
				alterSpec = " drop column " + columnName;
			}
		}
		
		public void addColumn(String columnSpec){
			if (alterSpec == null){
				alterSpec = " add column " + columnSpec;
			}
		}
		protected void finalizeParameterizedSQL(){
			StringBuilder query = getQuery();
			query.append("alter table ").append(table);
			query.append(alterSpec);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy