Skip to content

Commit

Permalink
- 已实现初版的 withCount()
Browse files Browse the repository at this point in the history
  • Loading branch information
xutengx committed Feb 23, 2023
1 parent 6dc5cc4 commit bf232de
Show file tree
Hide file tree
Showing 46 changed files with 780 additions and 464 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gaarason.database.contract.builder;

import gaarason.database.contract.eloquent.Builder;
import gaarason.database.contract.function.GenerateSqlPartFunctionalInterface;
import gaarason.database.contract.function.BuilderWrapper;
import gaarason.database.lang.Nullable;

import java.util.Collection;
Expand Down Expand Up @@ -49,7 +49,7 @@ public interface From<T, K> {
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> from(String alias, GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> from(String alias, BuilderWrapper<T, K> closure);

/**
* 临时表查询
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gaarason.database.contract.builder;

import gaarason.database.contract.eloquent.Builder;
import gaarason.database.contract.function.GenerateSqlPartFunctionalInterface;
import gaarason.database.contract.function.BuilderWrapper;
import gaarason.database.lang.Nullable;

import java.util.Collection;
Expand Down Expand Up @@ -344,7 +344,7 @@ public interface Having<T, K> {
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> havingSubQuery(String column, String symbol, GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> havingSubQuery(String column, String symbol, BuilderWrapper<T, K> closure);


/**
Expand Down Expand Up @@ -393,7 +393,7 @@ public interface Having<T, K> {
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> havingIn(String column, GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> havingIn(String column, BuilderWrapper<T, K> closure);

/**
* 列值不在范围内
Expand Down Expand Up @@ -441,7 +441,7 @@ public interface Having<T, K> {
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> havingNotIn(String column, GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> havingNotIn(String column, BuilderWrapper<T, K> closure);

/**
* 列值在两值之间
Expand Down Expand Up @@ -525,7 +525,7 @@ public interface Having<T, K> {
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> havingExists(GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> havingExists(BuilderWrapper<T, K> closure);

/**
* not exists一个闭包
Expand All @@ -539,7 +539,7 @@ public interface Having<T, K> {
* @param closure 完整sql
* @return 查询构造器
*/
Builder<T, K> havingNotExists(GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> havingNotExists(BuilderWrapper<T, K> closure);

/**
* 比较字段与字段
Expand All @@ -563,26 +563,26 @@ public interface Having<T, K> {
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> andHaving(GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> andHaving(BuilderWrapper<T, K> closure);

/**
* 且, 忽略空语句
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> andHavingIgnoreEmpty(GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> andHavingIgnoreEmpty(BuilderWrapper<T, K> closure);

/**
* 或
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> orHaving(GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> orHaving(BuilderWrapper<T, K> closure);

/**
* 或, 忽略空语句
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> orHavingIgnoreEmpty(GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> orHavingIgnoreEmpty(BuilderWrapper<T, K> closure);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import gaarason.database.contract.eloquent.Builder;
import gaarason.database.contract.function.ColumnFunctionalInterface;
import gaarason.database.contract.function.GenerateSqlPartFunctionalInterface;
import gaarason.database.contract.function.BuilderWrapper;
import gaarason.database.lang.Nullable;

import java.util.Arrays;
Expand Down Expand Up @@ -197,7 +197,7 @@ default <F> Builder<T, K> havingSubQuery(ColumnFunctionalInterface<T, F> column,
* @return 查询构造器
*/
default <F> Builder<T, K> havingSubQuery(ColumnFunctionalInterface<T, F> column, String symbol,
GenerateSqlPartFunctionalInterface<T, K> closure) {
BuilderWrapper<T, K> closure) {
return havingSubQuery(lambda2ColumnName(column), symbol, closure);
}

Expand Down Expand Up @@ -264,7 +264,7 @@ default <F> Builder<T, K> havingInRaw(ColumnFunctionalInterface<T, F> column, St
* @return 查询构造器
*/
default <F> Builder<T, K> havingIn(ColumnFunctionalInterface<T, F> column,
GenerateSqlPartFunctionalInterface<T, K> closure) {
BuilderWrapper<T, K> closure) {
return havingIn(lambda2ColumnName(column), closure);
}

Expand Down Expand Up @@ -332,7 +332,7 @@ default <F> Builder<T, K> havingNotInRaw(ColumnFunctionalInterface<T, F> column,
* @return 查询构造器
*/
default <F> Builder<T, K> havingNotIn(ColumnFunctionalInterface<T, F> column,
GenerateSqlPartFunctionalInterface<T, K> closure) {
BuilderWrapper<T, K> closure) {
return havingNotIn(lambda2ColumnName(column), closure);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import gaarason.database.appointment.JoinType;
import gaarason.database.contract.eloquent.Builder;
import gaarason.database.contract.function.GenerateSqlPartFunctionalInterface;
import gaarason.database.contract.function.BuilderWrapper;
import gaarason.database.lang.Nullable;

import java.util.Collection;
Expand Down Expand Up @@ -60,7 +60,7 @@ Builder<T, K> join(JoinType joinType, String table, String column1, String symbo
* @param joinConditions 连接条件
* @return 查询构造器
*/
Builder<T, K> join(JoinType joinType, String table, GenerateSqlPartFunctionalInterface<T, K> joinConditions);
Builder<T, K> join(JoinType joinType, String table, BuilderWrapper<T, K> joinConditions);

/**
* 连接查询(含子查询)
Expand All @@ -70,6 +70,6 @@ Builder<T, K> join(JoinType joinType, String table, String column1, String symbo
* @param joinConditions 连接条件
* @return 查询构造器
*/
Builder<T, K> join(JoinType joinType, GenerateSqlPartFunctionalInterface<T, K> tempTable, String alias,
GenerateSqlPartFunctionalInterface<T, K> joinConditions);
Builder<T, K> join(JoinType joinType, BuilderWrapper<T, K> tempTable, String alias,
BuilderWrapper<T, K> joinConditions);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gaarason.database.contract.builder;

import gaarason.database.contract.eloquent.Builder;
import gaarason.database.contract.function.GenerateSqlPartFunctionalInterface;
import gaarason.database.contract.function.BuilderWrapper;
import gaarason.database.lang.Nullable;

/**
Expand Down Expand Up @@ -39,6 +39,6 @@ public interface Order<T, K> {
* @param closure 闭包
* @return 查询构造器
*/
Builder<T, K> firstOrderBy(GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> firstOrderBy(BuilderWrapper<T, K> closure);

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gaarason.database.contract.builder;

import gaarason.database.contract.eloquent.Builder;
import gaarason.database.contract.function.GenerateSqlPartFunctionalInterface;
import gaarason.database.contract.function.BuilderWrapper;
import gaarason.database.lang.Nullable;

import java.util.Collection;
Expand Down Expand Up @@ -88,15 +88,21 @@ public interface Select<T, K> {
* @param alias 字段别名
* @return 查询构造器
*/
Builder<T, K> selectFunction(String function, GenerateSqlPartFunctionalInterface<T, K> closure,
@Nullable String alias);
Builder<T, K> selectFunction(String function, BuilderWrapper<T, K> closure, @Nullable String alias);

/**
* 调研数据库中的方法
* @param function 数据库方法名
* @param closure 返回代码片段
* @return 查询构造器
*/
Builder<T, K> selectFunction(String function, GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> selectFunction(String function, BuilderWrapper<T, K> closure);

/**
* 自定义查询字段
* @param columnName 列名
* @param value 值 // todo support Object type
* @return 查询构造器
*/
Builder<T, K> selectCustom(String columnName, String value);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@
import gaarason.database.contract.connection.GaarasonDataSource;
import gaarason.database.contract.eloquent.Builder;
import gaarason.database.contract.eloquent.Model;
import gaarason.database.contract.function.GenerateSqlPartFunctionalInterface;
import gaarason.database.contract.function.BuilderWrapper;
import gaarason.database.contract.query.Grammar;
import gaarason.database.contract.support.LambdaStyle;
import gaarason.database.exception.CloneNotSupportedRuntimeException;
import gaarason.database.lang.Nullable;

/**
* 支持
* @author xt
*/
public interface Support<T, K> extends LambdaStyle {
public interface Support<T, K> extends LambdaStyle, Cloneable{

/**
* 构造函数
Expand Down Expand Up @@ -54,32 +55,58 @@ public interface Support<T, K> extends LambdaStyle {
*/
Builder<T, K> getSelf();

/**
* 复制当前的查询构造器
* 相互不存在引用 即深拷贝实现
* @return 查询构造器
* @throws CloneNotSupportedRuntimeException 克隆出错
*/
Builder<T, K> clone() throws CloneNotSupportedRuntimeException;

/**
* 覆盖 查询构造器
* @param builder 查询构造器
* @return 查询构造器
*/
default Builder<T, K> setBuilder(Builder<T, K> builder) {
default Builder<T, K> setAnyBuilder(Builder<?, ?> builder) {
setGrammar(builder.getGrammar().deepCopy());
return getSelf();
}

/**
* 覆盖 查询构造器
* @param builder 查询构造器
* @return 查询构造器
*/
default Builder<T, K> setBuilder(Builder<T, K> builder) {
return setAnyBuilder(builder);
}

/**
* 合并 查询构造器
* @param builder 查询构造器
* @return 查询构造器
*/
default Builder<T, K> mergerBuilder(Builder<T, K> builder) {
default Builder<T, K> mergerAnyBuilder(Builder<?, ?> builder) {
mergerGrammar(builder.getGrammar().deepCopy());
return getSelf();
}

/**
* 合并 查询构造器
* @param builder 查询构造器
* @return 查询构造器
*/
default Builder<T, K> mergerBuilder(Builder<T, K> builder) {
return mergerAnyBuilder(builder);
}

/**
* 执行闭包生成完整sql, 含绑定参数的合并
* @param closure 闭包
* @return sql
*/
default Grammar.SQLPartInfo generateSql(GenerateSqlPartFunctionalInterface<T, K> closure) {
default Grammar.SQLPartInfo generateSql(BuilderWrapper<T, K> closure) {
Builder<T, K> subBuilder = closure.execute(getNewSelf());
return subBuilder.getGrammar().generateSql(SqlType.SELECT);
}
Expand All @@ -90,7 +117,7 @@ default Grammar.SQLPartInfo generateSql(GenerateSqlPartFunctionalInterface<T, K>
* @param sqlPartType 片段类型
* @return sql
*/
default Grammar.SQLPartInfo generateSql(GenerateSqlPartFunctionalInterface<T, K> closure,
default Grammar.SQLPartInfo generateSql(BuilderWrapper<T, K> closure,
Grammar.SQLPartType sqlPartType) {
Builder<T, K> subBuilder = closure.execute(getNewSelf());
return subBuilder.getGrammar().get(sqlPartType);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gaarason.database.contract.builder;

import gaarason.database.contract.eloquent.Builder;
import gaarason.database.contract.function.GenerateSqlPartFunctionalInterface;
import gaarason.database.contract.function.BuilderWrapper;

/**
* 结果集连接
Expand All @@ -16,12 +16,12 @@ public interface Union<T, K> {
* @param closure 返回代码片段
* @return 查询构造器
*/
Builder<T, K> union(GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> union(BuilderWrapper<T, K> closure);

/**
* 结果集连接(不去重)
* @param closure 返回代码片段
* @return 查询构造器
*/
Builder<T, K> unionAll(GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> unionAll(BuilderWrapper<T, K> closure);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gaarason.database.contract.builder;

import gaarason.database.contract.eloquent.Builder;
import gaarason.database.contract.function.GenerateSqlPartFunctionalInterface;
import gaarason.database.contract.function.BuilderWrapper;

/**
* 条件子句
Expand All @@ -17,7 +17,7 @@ public interface When<T, K> {
* @param closure 查询构造
* @return 查询构造器
*/
Builder<T, K> when(boolean condition, GenerateSqlPartFunctionalInterface<T, K> closure);
Builder<T, K> when(boolean condition, BuilderWrapper<T, K> closure);

/**
* 当condition==true时, 执行closureIfTrue, 反之执行closureIfFalse
Expand All @@ -26,8 +26,8 @@ public interface When<T, K> {
* @param closureIfFalse 查询构造
* @return 查询构造器
*/
Builder<T, K> when(boolean condition, GenerateSqlPartFunctionalInterface<T, K> closureIfTrue,
GenerateSqlPartFunctionalInterface<T, K> closureIfFalse);
Builder<T, K> when(boolean condition, BuilderWrapper<T, K> closureIfTrue,
BuilderWrapper<T, K> closureIfFalse);


}
Loading

0 comments on commit bf232de

Please sign in to comment.