org.seasar.extension.jdbc.DbmsDialect Maven / Gradle / Ivy
The newest version!
/*
* 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.jdbc;
import java.sql.Statement;
import java.util.List;
import org.seasar.framework.util.Pair;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.TemporalType;
/**
* データベースごとの方言をあつかうインターフェースです。
*
* @author higa
*
*/
public interface DbmsDialect {
/**
* 名前を返します。
*
* @return 名前
*/
String getName();
/**
* リミットをサポートしているかどうかを返します。
*
* @return リミットをサポートしているかどうか
*/
boolean supportsLimit();
/**
* オフセットをサポートしているかどうかを返します。
*
* @return オフセットをサポートしているかどうか
*/
boolean supportsOffset();
/**
* リミットなしのオフセットをサポートしているかどうかを返します。
*
* @return リミットなしのオフセットをサポートしているかどうか
*/
boolean supportsOffsetWithoutLimit();
/**
* カーソルをサポートしているかどうか返します。
*
* @return カーソルをサポートしているかどうか
*/
boolean supportsCursor();
boolean supportsJdbc42AtJsr310();
/**
* プロシージャの呼び出しで結果セットに対してパラメータが必要かどうかを返します。
*
* @return プロシージャの呼び出しで結果セットに対してパラメータが必要かどうか
*/
boolean needsParameterForResultSet();
/**
* limit用SQLに変換します。
*
* @param sql
* SQL
* @param offset
* オフセット
* @param limit
* リミット
* @return limit用SQL
*/
String convertLimitSql(String sql, int offset, int limit);
/**
* 件数取得用SQLに変換します。
*
* @param sql
* SQL
* @return 件数取得用SQL
*/
String convertGetCountSql(String sql);
/**
* 件数取得用SQLのSELECTリストを返します。
*
* @param idPropertyMeta
* IDプロパティのメタデータ
* @return 件数取得用SQLのSELECTリスト
*/
String getCountSqlSelectList(List idPropertyMeta);
/**
* 値タイプを返します。
*
* @param propertyMeta
* プロパティのメタデータ
* @return 値タイプ
*/
ValueType getValueType(PropertyMeta propertyMeta);
/**
* 値タイプを返します。
*
* @param clazz
* クラス
* @param lob
* LOB
かどうか
* @param temporalType
* 時制の種別
* @return 値タイプ
*/
ValueType getValueType(Class> clazz, boolean lob,
TemporalType temporalType);
/**
* 結合用のSQLを組み立てます。
*
* @param fromClause
* from句
* @param whereClause
* where句
* @param joinType
* 結合タイプ
* @param tableName
* テーブル名
* @param tableAlias
* テーブル別名
* @param fkTableAlias
* 外部キーを持つテーブルの別名
* @param pkTableAlias
* 主キーを持つテーブルの別名
* @param joinColumnMetaList
* 結合カラムメタデータのリスト
* @param lockHint
* ロックヒント
* @param condition
* 付加的な結合条件
*/
void setupJoin(FromClause fromClause, WhereClause whereClause,
JoinType joinType, String tableName, String tableAlias,
String fkTableAlias, String pkTableAlias,
List joinColumnMetaList, String lockHint,
String condition);
/**
* {@link GeneratedValue#strategy()}に{@link GenerationType#AUTO}が指定された場合の、
* デフォルトの{@link GenerationType}を返します。
*
* @return デフォルトの{@link GenerationType}
*/
GenerationType getDefaultGenerationType();
/**
* {@link GenerationType#IDENTITY}をサポートしている場合はtrue
を返します。
*
* @return {@link GenerationType#IDENTITY}をサポートしている場合はtrue
*/
boolean supportsIdentity();
/**
* 識別子が{@link GenerationType#IDENTITY}で生成される場合に、 識別子をINSERT文に含める場合は
* true
を返します。
*
* @return 識別子をINSERT文に含める場合はtrue
*/
boolean isInsertIdentityColumn();
/**
* 識別子が{@link GenerationType#IDENTITY}で自動生成される場合に、 生成された主キーの値を
* {@link Statement#getGeneratedKeys()}で取得できる場合はtrue
を返します。
*
* @return 生成された識別子の値を{@link Statement#getGeneratedKeys()}で取得できる場合は
* true
*/
boolean supportsGetGeneratedKeys();
/**
* 識別子が{@link GenerationType#IDENTITY}で自動生成される場合に、 生成された主キーの値を取得するSQLを返します。
*
* @param tableName
* テーブル名
* @param columnName
* 識別子のカラム名
* @return 生成された識別子の値を取得するSQL
*/
String getIdentitySelectString(String tableName, String columnName);
/**
* {@link GenerationType#SEQUENCE}をサポートしている場合はtrue
を返します。
*
* @return {@link GenerationType#SEQUENCE}をサポートしている場合はtrue
*/
boolean supportsSequence();
/**
* 識別子が{@link GenerationType#SEQUENCE}で自動生成される場合に、 シーケンスの値を取得するSQLを返します。
*
* @param sequenceName
* シーケンス名
* @param allocationSize
* アロケーションサイズ
* @return シーケンスの値を取得するSQL
*/
String getSequenceNextValString(String sequenceName, int allocationSize);
/**
* デフォルトのバッチサイズを返します。
*
* @return デフォルトのバッチサイズ
*/
int getDefaultBatchSize();
/**
* バッチ更新の結果として更新カウントの配列を正しく返す場合はtrue
を返します。
*
* @return バッチ更新の結果として更新カウントの配列を正しく返す場合はtrue
*/
boolean supportsBatchUpdateResults();
/**
* 一意制約違反を原因とする例外であればtrue
を返します。
*
* @param t
* 例外
* @return 一意制約違反を原因とする例外であればtrue
*/
boolean isUniqueConstraintViolation(Throwable t);
/**
* SELECT文でFOR UPDATE
をサポートしていればtrue
を返します。
*
* @param type
* SELECT ~ FOR UPDATEのタイプ
* @param withTarget
* ロック対象を指定する場合はtrue
* @return SELECT文でFOR UPDATE
をサポートしていればtrue
*/
boolean supportsForUpdate(SelectForUpdateType type, boolean withTarget);
/**
* SELECT文に付加するFOR UPDATE NOWAIT
相当のSQLを返します。
*
* @param type
* SELECT ~ FOR UPDATEのタイプ
* @param waitSeconds
* type
に{@link SelectForUpdateType#WAIT}
* が指定された場合の待機時間(秒単位)
* @param aliases
* ロック対象となるカラムのエイリアス。対象が指定されなかった場合は空の配列
* @return SELECT文に付加するFOR UPDATE
句のSQL
*/
String getForUpdateString(SelectForUpdateType type, int waitSeconds,
@SuppressWarnings("unchecked") Pair... aliases);
/**
* SELECT文で排他制御のためのロックヒントをサポートしていればtrue
を返します。
*
* @return SELECT文で排他制御のためのロックヒントをサポートしていればtrue
*/
boolean supportsLockHint();
/**
* SELECT文に付加するロックヒントを返します。
*
* @param type
* SELECT ~ FOR UPDATEのタイプ
* @param waitSeconds
* type
に{@link SelectForUpdateType#WAIT}
* が指定された場合の待機時間(秒単位)
* @return SELECT文に付加するロックヒント
*/
String getLockHintString(SelectForUpdateType type, int waitSeconds);
/**
* 内部結合した場合にFOR UPDATE
をサポートしていればtrue
を返します。
*
* @return 内部結合した場合にFOR UPDATE
をサポートしていればtrue
*/
boolean supportsInnerJoinForUpdate();
/**
* 外部結合した場合にFOR UPDATE
をサポートしていればtrue
を返します。
*
* @return 外部結合した場合にFOR UPDATE
をサポートしていればtrue
*/
boolean supportsOuterJoinForUpdate();
/**
* ヒントコメントを返します。
*
* @param hint
* ヒント
* @return ヒントコメント
*/
String getHintComment(String hint);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy