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

org.tinygroup.jsqlparser.extend.ParameterSelectVisitor Maven / Gradle / Ivy

There is a newer version: 3.4.9
Show newest version
/**
 *  Copyright (c) 1997-2013, www.tinygroup.org ([email protected]).
 *
 *  Licensed under the GPL, Version 3.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *       http://www.gnu.org/licenses/gpl.html
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.tinygroup.jsqlparser.extend;

import org.tinygroup.jsqlparser.expression.Expression;
import org.tinygroup.jsqlparser.expression.ExpressionVisitorAdapter;
import org.tinygroup.jsqlparser.schema.Table;
import org.tinygroup.jsqlparser.statement.select.*;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 
 * @author renhui
 * 
 */
public class ParameterSelectVisitor implements SelectVisitor, OrderByVisitor,
		SelectItemVisitor, FromItemVisitor, PivotVisitor {

	private Map positionMap;
	private AtomicInteger paramLength;
	private ExpressionVisitorAdapter expressionVisitor;

	public ParameterSelectVisitor(Map positionMap,
			AtomicInteger paramLength) {
		super();
		this.positionMap = positionMap;
		this.paramLength = paramLength;
	}
	
	public ExpressionVisitorAdapter getExpressionVisitor() {
		return expressionVisitor;
	}

	public void setExpressionVisitor(ExpressionVisitorAdapter expressionVisitor) {
		this.expressionVisitor = expressionVisitor;
	}



	public void visit(Pivot pivot) {

	}

	public void visit(PivotXml pivot) {

	}

	public void visit(Table tableName) {

	}

	public void visit(SubSelect subSelect) {
		subSelect.getSelectBody().accept(this);
	}

	public void visit(SubJoin subjoin) {
        subjoin.getLeft().accept(this);
        deparseJoin(subjoin.getJoin());
	}

	public void visit(LateralSubSelect lateralSubSelect) {
		lateralSubSelect.getSubSelect().accept(this);
	}

	public void visit(ValuesList valuesList) {
		valuesList.getMultiExpressionList().accept(expressionVisitor);
	}

	public void visit(AllColumns allColumns) {

	}

	public void visit(AllTableColumns allTableColumns) {

	}

	public void visit(SelectExpressionItem selectExpressionItem) {
		selectExpressionItem.getExpression().accept(expressionVisitor);
	}

	public void visit(OrderByElement orderBy) {
		orderBy.getExpression().accept(expressionVisitor);
	}

	public void visit(PlainSelect plainSelect) {
		if (plainSelect.getDistinct() != null) {
			if (plainSelect.getDistinct().getOnSelectItems() != null) {
				for (Iterator iter = plainSelect.getDistinct()
						.getOnSelectItems().iterator(); iter.hasNext();) {
					SelectItem selectItem = iter.next();
					selectItem.accept(this);
				}
			}
		}
		Top top = plainSelect.getTop();
		if (top != null) {
			if (top.isRowCountJdbcParameter()) {
				positionMap.put("top", paramLength.incrementAndGet());
			}
		}

		for (Iterator iter = plainSelect.getSelectItems()
				.iterator(); iter.hasNext();) {
			SelectItem selectItem = iter.next();
			selectItem.accept(this);
		}

		if (plainSelect.getFromItem() != null) {
			plainSelect.getFromItem().accept(this);
		}

		if (plainSelect.getJoins() != null) {
			for (Join join : plainSelect.getJoins()) {
				deparseJoin(join);
			}
		}

		if (plainSelect.getWhere() != null) {
			plainSelect.getWhere().accept(expressionVisitor);
		}

		if (plainSelect.getOracleHierarchical() != null) {
			plainSelect.getOracleHierarchical().accept(expressionVisitor);
		}

		if (plainSelect.getGroupByColumnReferences() != null) {
			for (Iterator iter = plainSelect
					.getGroupByColumnReferences().iterator(); iter.hasNext();) {
				Expression columnReference = iter.next();
				columnReference.accept(expressionVisitor);
			}
		}

		if (plainSelect.getHaving() != null) {
			plainSelect.getHaving().accept(expressionVisitor);
		}

		if (plainSelect.getOrderByElements() != null) {
			deparseOrderBy(plainSelect.isOracleSiblings(),
					plainSelect.getOrderByElements());
		}

		if (plainSelect.getLimit() != null) {
			deparseLimit(plainSelect.getLimit());
		}
		if (plainSelect.getOffset() != null) {
			deparseOffset(plainSelect.getOffset());
		}
		if (plainSelect.getFetch() != null) {
			deparseFetch(plainSelect.getFetch());
		}
	}

	public void deparseLimit(Limit limit) {
		if (limit.isOffsetJdbcParameter()) {
			positionMap.put("start", paramLength.incrementAndGet());
		}

		if (limit.isRowCountJdbcParameter()) {
			positionMap.put("limit", paramLength.incrementAndGet());
		}

	}

	public void deparseOffset(Offset offset) {
		// OFFSET offset
		// or OFFSET offset (ROW | ROWS)
		if (offset.isOffsetJdbcParameter()) {
			positionMap.put("offset", paramLength.incrementAndGet());
		}

	}

	public void deparseFetch(Fetch fetch) {
		if (fetch.isFetchJdbcParameter()) {
			positionMap.put("fetch", paramLength.incrementAndGet());
		}
	}

	public void deparseOrderBy(List orderByElements) {
		deparseOrderBy(false, orderByElements);
	}

	public void deparseOrderBy(boolean oracleSiblings,
			List orderByElements) {
		for (Iterator iter = orderByElements.iterator(); iter
				.hasNext();) {
			OrderByElement orderByElement = iter.next();
			orderByElement.accept(this);
		}
	}

	public void deparseJoin(Join join) {
		FromItem fromItem = join.getRightItem();
		fromItem.accept(this);
		if (join.getOnExpression() != null) {
			join.getOnExpression().accept(expressionVisitor);
		}
	}

	public void visit(SetOperationList list) {
		for (int i = 0; i < list.getPlainSelects().size(); i++) {
			PlainSelect plainSelect = list.getPlainSelects().get(i);
			plainSelect.accept(this);
		}
		if (list.getOrderByElements() != null) {
			deparseOrderBy(list.getOrderByElements());
		}

		if (list.getLimit() != null) {
			deparseLimit(list.getLimit());
		}
		if (list.getOffset() != null) {
			deparseOffset(list.getOffset());
		}
		if (list.getFetch() != null) {
			deparseFetch(list.getFetch());
		}
	}

	public void visit(WithItem withItem) {
		if (withItem.getWithItemList() != null) {
			for (Iterator iter = withItem.getWithItemList()
					.iterator(); iter.hasNext();) {
				SelectItem selectItem = iter.next();
				selectItem.accept(this);
			}
		}
		withItem.getSelectBody().accept(this);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy