/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* 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.seasar.extension.sql;
/**
* j<code>SQL</code>を実行するときのコンテキストです。 コンテキストで<code>SQL</code>を実行するのに必要な情報を組み立てた後、
* <code>getSql()</code>, <code>getBindVariables()</code>,
* <code>getBindVariableTypes()</code>で、 情報を取り出して<code>SQL</code>を実行します。
* <code>SQL</code>で<code>BEGIN</code>コメントと<code>END</code>コメントで囲まれている部分が、
* 子供のコンテキストになります。 通常は、 <code>WHERE</code>句を<code>BEGIN</code>コメントと<code>END</code>コメントで囲み、
* <code>WHERE</code>句の中の<code>IF</code>コメントが1つでも成立した場合、<code>enabled</code>になります。
*
* @author higa
*
*/
public interface SqlContext {
/**
* 名前に応じた引数を返します。
*
* @param name
* 引数名
* @return 名前に応じた引数
*/
Object getArg(String name);
/**
* 引数が存在するかどうかを返します。
*
* @param name
* 引数名
* @return 引数が存在するか
*/
boolean hasArg(String name);
/**
* 名前に応じた引数のクラスを返します。 <code>getArg()</code>が<code>null</code>を返す場合があるので、
* このメソッドが用意されています。
*
* @param name
* 引数名
* @return 名前に応じた引数のクラスを返します。
*/
Class getArgType(String name);
/**
* 引数を追加します。
*
* @param name
* 引数名
* @param arg
* 引数
* @param argType
* 引数の型
*/
void addArg(String name, Object arg, Class argType);
/**
* 追加されたすべての<code>SQL</code>を返します。
*
* @return <code>SQL</code>
*/
String getSql();
/**
* 追加されたすべてのバインド変数の配列を返します。
*
* @return バインド変数の配列
*/
Object[] getBindVariables();
/**
* 追加されたすべてのバインド変数の型の配列を返します。
*
* @return バインド変数の型の配列
*/
Class[] getBindVariableTypes();
/**
* <code>SQL</code>を追加します。
*
* @param sql
* @return コンテキスト自身
*/
SqlContext addSql(String sql);
/**
* <code>SQL</code>とバインド変数を追加します。
*
* @param sql
* @param bindVariable
* @param bindVariableType
* @return
*/
SqlContext addSql(String sql, Object bindVariable, Class bindVariableType);
/**
* <code>SQL</code>とバインド変数の配列を追加します。
*
* @param sql
* @param bindVariables
* @param bindVariableTypes
* @return
*/
SqlContext addSql(String sql, Object[] bindVariables,
Class[] bindVariableTypes);
/**
* <code>BEGIN</code>コメントと<code>END</code>コメントで、
* 囲まれた子供のコンテキストが有効かどうかを返します。
*
* @return 有効かどうか
*/
boolean isEnabled();
/**
* <code>BEGIN</code>コメントと<code>END</code>コメントで、
* 囲まれた子供のコンテキストが有効かどうかを設定します。
*
* @param enabled
* 有効かどうか
*/
void setEnabled(boolean enabled);
}