/* * Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com> * Licensed under the Apache License, Version 2.0 (the "License") * $Id: AbstractParametrizedQuery.java 3918 2008-04-14 17:35:35Z gbevin $ */ package com.uwyn.rife.database.queries; import com.uwyn.rife.database.Datasource; import com.uwyn.rife.database.queries.QueryParameterType; import java.util.List; abstract class AbstractParametrizedQuery extends AbstractQuery implements Query, Cloneable { private QueryParameters mParameters = null; protected AbstractParametrizedQuery(Datasource datasource) { super(datasource); } public void clear() { super.clear(); if (mParameters != null) { mParameters.clear(); } } private void addTypedParameters(QueryParameterType type, QueryParameters parameters) { if (null == parameters) { return; } addTypedParameters(type, parameters.getOrderedNames()); } private void addTypedParameters(QueryParameterType type, List<String> parameters) { if (null == mParameters) { mParameters = new QueryParameters(this); } mParameters.addTypedParameters(type, parameters); } private void addTypedParameter(QueryParameterType type, String parameter) { if (null == mParameters) { mParameters = new QueryParameters(this); } mParameters.addTypedParameter(type, parameter); } private <T> T getTypedParameters(QueryParameterType type) { if (null == mParameters) { return null; } return (T)mParameters.getTypedParameters(type); } private void clearTypedParameters(QueryParameterType type) { if (null == mParameters) { return; } mParameters.clearTypedParameters(type); if (0 == mParameters.getNumberOfTypes()) { mParameters = null; } } protected void _fieldSubselect(Select query) { if (null == query) throw new IllegalArgumentException("query can't be null."); addTypedParameters(QueryParameterType.FIELD, query.getParameters()); } protected void _tableSubselect(Select query) { if (null == query) throw new IllegalArgumentException("query can't be null."); addTypedParameters(QueryParameterType.TABLE, query.getParameters()); } protected void _whereSubselect(Select query) { if (null == query) throw new IllegalArgumentException("query can't be null."); addTypedParameters(QueryParameterType.WHERE, query.getParameters()); } protected void _unionSubselect(Select query) { if (null == query) throw new IllegalArgumentException("query can't be null."); addTypedParameters(QueryParameterType.UNION, query.getParameters()); } public QueryParameters getParameters() { return mParameters; } protected void addFieldParameter(String field) { addTypedParameter(QueryParameterType.FIELD, field); } protected void clearWhereParameters() { clearTypedParameters(QueryParameterType.WHERE); } protected void addWhereParameter(String field) { addTypedParameter(QueryParameterType.WHERE, field); } protected List<String> getWhereParameters() { return getTypedParameters(QueryParameterType.WHERE); } public void addWhereParameters(List<String> parameters) { addTypedParameters(QueryParameterType.WHERE, parameters); } protected void setLimitParameter(String limitParameter) { addTypedParameter(QueryParameterType.LIMIT, limitParameter); } public String getLimitParameter() { return getTypedParameters(QueryParameterType.LIMIT); } protected void setOffsetParameter(String offsetParameter) { addTypedParameter(QueryParameterType.OFFSET, offsetParameter); } public String getOffsetParameter() { return getTypedParameters(QueryParameterType.OFFSET); } protected boolean isLimitBeforeOffset() { return true; } public AbstractParametrizedQuery clone() { AbstractParametrizedQuery new_instance = (AbstractParametrizedQuery)super.clone(); if (new_instance != null && mParameters != null) { new_instance.mParameters = mParameters.clone(); } return new_instance; } }