Skip to content

Commit

Permalink
isNumberTypeColumn move to MappingColumn
Browse files Browse the repository at this point in the history
  • Loading branch information
HidekiSugimoto189 committed Nov 3, 2023
1 parent 23598a8 commit 7a68200
Show file tree
Hide file tree
Showing 3 changed files with 1,433 additions and 34 deletions.
22 changes: 1 addition & 21 deletions src/main/java/jp/co/future/uroborosql/SqlEntityQueryImpl.java
Expand Up @@ -246,26 +246,6 @@ public long count(final String col) {
}
}

/**
* 数値型のカラムかどうかの判定.<br>
* Optional型の場合、OptionalのGenerics型で指定された型が数値型かどうかを判定する.
*
* @param mappingColumn MappingColumn
* @return 数値型のカラムの場合<code>true</code>.
*/
private static boolean isNumberTypeColumn(final MappingColumn mappingColumn) {
Class<?> rawType = mappingColumn.getJavaType().getRawType();
if (Optional.class.equals(rawType)) {
rawType = mappingColumn.getJavaType().getParam(0).getRawType();
}
return short.class.equals(rawType) ||
int.class.equals(rawType) ||
long.class.equals(rawType) ||
float.class.equals(rawType) ||
double.class.equals(rawType) ||
Number.class.isAssignableFrom(rawType);
}

/**
* {@inheritDoc}
*
Expand All @@ -276,7 +256,7 @@ private static boolean isNumberTypeColumn(final MappingColumn mappingColumn) {
public <T> T sum(final String col) {
String camelColumnName = CaseFormat.CAMEL_CASE.convert(col);
MappingColumn mappingColumn = MappingUtils.getMappingColumn(context().getSchema(), entityType, camelColumnName);
if (!isNumberTypeColumn(mappingColumn)) {
if (!mappingColumn.isNumber()) {
throw new UroborosqlRuntimeException("Column is not of type Number. col=" + camelColumnName);
}
TableMetadata.Column column = tableMetadata.getColumn(camelColumnName);
Expand Down
84 changes: 71 additions & 13 deletions src/main/java/jp/co/future/uroborosql/mapping/MappingColumn.java
Expand Up @@ -6,6 +6,9 @@
*/
package jp.co.future.uroborosql.mapping;

import java.time.temporal.Temporal;
import java.util.Optional;

import jp.co.future.uroborosql.enums.SqlKind;
import jp.co.future.uroborosql.mapping.annotations.GeneratedValue;
import jp.co.future.uroborosql.mapping.annotations.SequenceGenerator;
Expand All @@ -20,65 +23,65 @@
public interface MappingColumn {

/**
* エンティティから値を取得
* エンティティから値を取得.
*
* @param entity エンティティ
* @return 取得した値
*/
Object getValue(Object entity);

/**
* エンティティに値をセット
* エンティティに値をセット.
*
* @param entity エンティティ
* @param value 値
*/
void setValue(Object entity, Object value);

/**
* カラム名取得
* カラム名取得.
*
* @return カラム名
*/
String getName();

/**
* キャメルケースカラム名取得
* キャメルケースカラム名取得.
*
* @return キャメルケースカラム名
*/
String getCamelName();

/**
* {@link JavaType}取得
* {@link JavaType}取得.
*
* @return {@link JavaType}
*/
JavaType getJavaType();

/**
* IDアノテーションが付与されているかどうか
* IDアノテーションが付与されているかどうか.
*
* @return IDアノテーションが付与されている場合<code>true</code>
*/
boolean isId();

/**
* {@link GeneratedValue}の取得
* {@link GeneratedValue}の取得.
*
* @return {@link GeneratedValue}
*/
GeneratedValue getGeneratedValue();

/**
* {@link SequenceGenerator}の取得
* {@link SequenceGenerator}の取得.
*
* @return {@link SequenceGenerator}
*/
SequenceGenerator getSequenceGenerator();

/**
* 修飾済みのシーケンス名の取得
* 修飾済みのシーケンス名の取得.
*
* @return {@link SequenceGenerator} をもとに修飾したシーケンス名
*/
Expand All @@ -99,29 +102,84 @@ default String getQualifiedSequenceName() {
}

/**
* {@link Transient}の取得
* {@link Transient}の取得.
*
* @return {@link Transient}
*/
Transient getTransient();

/**
* 指定したSQL種別でtransientかどうかを判断する
* 指定したSQL種別でtransientかどうか.
*
* @param sqlKind SQL種別
* @return 指定したSQL種別でtransientの場合<code>true</code>
*/
boolean isTransient(SqlKind sqlKind);

/**
* バージョン情報カラムかどうか
* バージョン情報カラムかどうか.
*
* @return バージョンカラムの場合は<code>true</code>
*/
boolean isVersion();

/**
* {@link Version} の取得
* Optional型のカラムかどうか.
*
* @return Optional型のカラムの場合は<code>true</code>
*/
default boolean isOptional() {
return Optional.class.equals(getJavaType().getRawType());
}

/**
* 文字、または文字列型のカラムかどうか.
*
* @return 文字、または文字列型のカラムの場合は<code>true</code>
*/
default boolean isString() {
Class<?> rawType = isOptional() ? getJavaType().getParam(0).getRawType() : getJavaType().getRawType();
return String.class.equals(rawType) ||
char.class.equals(rawType) ||
Character.class.equals(rawType);
}

/**
* 数値型のカラムかどうか.
*
* @return 数値型のカラムの場合は<code>true</code>
*/
default boolean isNumber() {
Class<?> rawType = isOptional() ? getJavaType().getParam(0).getRawType() : getJavaType().getRawType();
return short.class.equals(rawType) ||
int.class.equals(rawType) ||
long.class.equals(rawType) ||
float.class.equals(rawType) ||
double.class.equals(rawType) ||
Number.class.isAssignableFrom(rawType);
}

/**
* 配列型のカラムかどうか.
*
* @return 配列型のカラムの場合は<code>true</code>
*/
default boolean isArray() {
return getJavaType().getRawType().isArray();
}

/**
* 時間的オブジェクト型のカラムかどうか.
*
* @return 時間的オブジェクト型のカラムの場合は<code>true</code>
*/
default boolean isTemporal() {
Class<?> rawType = isOptional() ? getJavaType().getParam(0).getRawType() : getJavaType().getRawType();
return Temporal.class.isAssignableFrom(rawType);
}

/**
* {@link Version} の取得.
*
* @return {@link Version}
*/
Expand Down

0 comments on commit 7a68200

Please sign in to comment.