Skip to content

Commit

Permalink
Add base Join support
Browse files Browse the repository at this point in the history
  • Loading branch information
biasc committed Jul 2, 2024
1 parent 2f66068 commit 930ef85
Show file tree
Hide file tree
Showing 41 changed files with 1,406 additions and 91 deletions.
26 changes: 12 additions & 14 deletions src/SqlQueryBuilder.Abstractions/Parts/ISqlQueryFrom.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,21 @@

namespace SqlQueryBuilder.Abstractions.Parts;

public interface ISqlQueryFrom<T>: ISqlQueryPart where T : ISqlEntity
public interface ISqlQueryFrom<T> :
ISqlQueryPart,
ISqlQueryWithSelect<T>
where T : ISqlEntity
{
ISqlQuerySelect<T> SelectAll();

ISqlQuerySelect<T> Select<TS>(Expression<Func<T, TS>> select);

ISqlQuerySelect<T> Select(
Expression<Func<T, object?>> select,
params Expression<Func<T, object?>>[] otherSelect);

ISqlQuerySelect<TS> Select<TS>(
Expression<Func<T, TS, object>> select,
params Expression<Func<T, TS, object>>[] otherSelect);

ISqlQueryWhere<T> Where(Expression<Func<T, bool>> where);

ISqlQueryOrder<T> OrderBy(Expression<Func<T, object>> orderBy, params Expression<Func<T, object>>[] otherOrderBy);

ISqlQueryDelete<T> Delete();


ISqlQueryJoin<T, TJ1> InnerJoin<TJ1>(ISqlQuerySelect select, Expression<Func<T, TJ1, bool>> join) where TJ1 : ISqlEntity;
ISqlQueryJoin<T, TJ1> InnerJoin<TJ1>(Expression<Func<T, TJ1, bool>> join) where TJ1 : ISqlEntity;
ISqlQueryJoin<T, TJ1> LeftOuterJoin<TJ1>(ISqlQuerySelect<TJ1> select, Expression<Func<T, TJ1, bool>> join) where TJ1 : ISqlEntity;
ISqlQueryJoin<T, TJ1> LeftOuterJoin<TJ1>(Expression<Func<T, TJ1, bool>> join) where TJ1 : ISqlEntity;
ISqlQueryJoin<T, TJ1> RightOuterJoin<TJ1>(Expression<Func<T, TJ1, bool>> join) where TJ1 : ISqlEntity;
ISqlQueryJoin<T, TJ1> RightOuterJoin<TJ1>(ISqlQuerySelect<TJ1> select, Expression<Func<T, TJ1, bool>> join) where TJ1 : ISqlEntity;
}
109 changes: 109 additions & 0 deletions src/SqlQueryBuilder.Abstractions/Parts/ISqlQueryJoin.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
using System.Linq.Expressions;

namespace SqlQueryBuilder.Abstractions.Parts;

public enum JoinType
{
Inner,
Left,
Right,
}

public interface ISqlQueryJoin : ISqlQueryPart
{

}

public interface ISqlQueryJoin<T, TJ1> :
ISqlQueryJoin,
ISqlQueryWithSelect<T,TJ1>
where T : ISqlEntity
where TJ1 : ISqlEntity
{
ISqlQueryJoin<T, TJ1> InnerJoin<TJ2>(Expression<Func<T, TJ1, TJ2, bool>> join)
where TJ2 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2> InnerJoin<TJ2>(
ISqlQuerySelect<TJ2> select, Expression<Func<T, TJ1, TJ2, bool>> join)
where TJ2 : ISqlEntity;

ISqlQueryJoin<T, TJ1> LeftJoin<TJ2>(Expression<Func<T, TJ1, TJ2, bool>> join)
where TJ2 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2> LeftJoin<TJ2>(
ISqlQuerySelect<TJ2> select, Expression<Func<T, TJ1, TJ2, bool>> join)
where TJ2 : ISqlEntity;

ISqlQueryJoin<T, TJ1> RightJoin<TJ2>(Expression<Func<T, TJ1, TJ2, bool>> join)
where TJ2 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2> RightJoin<TJ2>(
ISqlQuerySelect<TJ2> select, Expression<Func<T, TJ1, TJ2, bool>> join)
where TJ2 : ISqlEntity;

ISqlQueryOrder<T, TJ1> OrderBy(Expression<Func<T, TJ1, object>> orderBy,
params Expression<Func<T, TJ1, object>>[] otherOrderBy);
}

public interface ISqlQueryJoin<T, TJ1, TJ2> : ISqlQueryJoin
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
{
ISqlQueryJoin<T, TJ1, TJ2> InnerJoin<TJ3>(Expression<Func<T, TJ1, TJ2, TJ3, bool>> join)
where TJ3 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2> InnerJoin<TJ3>(
ISqlQuerySelect<TJ2> select, Expression<Func<T, TJ1, TJ2, TJ3, bool>> join)
where TJ3 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2> LeftJoin<TJ3>(Expression<Func<T, TJ1, TJ2, TJ3, bool>> join)
where TJ3 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2> LeftJoin<TJ3>(
ISqlQuerySelect<TJ2> select, Expression<Func<T, TJ1, TJ2, TJ3, bool>> join)
where TJ3 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2> RightJoin<TJ3>(Expression<Func<T, TJ1, TJ2, TJ3, bool>> join)
where TJ3 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2> RightJoin<TJ3>(
ISqlQuerySelect<TJ2> select, Expression<Func<T, TJ1, TJ2, TJ3, bool>> join)
where TJ3 : ISqlEntity;

ISqlQueryOrder<T, TJ1, TJ2> OrderBy(Expression<Func<T, TJ1, TJ2, object>> orderBy,
params Expression<Func<T, TJ1, TJ2, object>>[] otherOrderBy);
}

public interface ISqlQueryJoin<T, TJ1, TJ2, TJ3> : ISqlQueryJoin
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
where TJ3 : ISqlEntity
{
ISqlQueryJoin<T, TJ1, TJ2, TJ3> InnerJoin<TJ4>(Expression<Func<T, TJ1, TJ2, TJ3, TJ4, bool>> join)
where TJ4 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2, TJ3> InnerJoin<TJ4>(
ISqlQuerySelect<TJ3> select, Expression<Func<T, TJ1, TJ2, TJ3, TJ4, bool>> join)
where TJ4 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2, TJ3> LeftJoin<TJ4>(Expression<Func<T, TJ1, TJ2, TJ3, TJ4, bool>> join)
where TJ4 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2, TJ3> LeftJoin<TJ4>(
ISqlQuerySelect<TJ3> select, Expression<Func<T, TJ1, TJ2, TJ3, TJ4, bool>> join)
where TJ4 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2, TJ3> RightJoin<TJ4>(Expression<Func<T, TJ1, TJ2, TJ3, TJ4, bool>> join)
where TJ4 : ISqlEntity;

ISqlQueryJoin<T, TJ1, TJ2, TJ3> RightJoin<TJ4>(
ISqlQuerySelect<TJ3> select, Expression<Func<T, TJ1, TJ2, TJ3, TJ4, bool>> join)
where TJ4 : ISqlEntity;

ISqlQueryOrder<T, TJ1, TJ2, TJ3> OrderBy(Expression<Func<T, TJ1, TJ2, TJ3, object>> orderBy,
params Expression<Func<T, TJ1, TJ2, TJ3, object>>[] otherOrderBy);
}

#warning continuare con interfacce fino a 10

Check warning on line 109 in src/SqlQueryBuilder.Abstractions/Parts/ISqlQueryJoin.cs

View workflow job for this annotation

GitHub Actions / build (8.0.x)

#warning: 'continuare con interfacce fino a 10'
164 changes: 157 additions & 7 deletions src/SqlQueryBuilder.Abstractions/Parts/ISqlQueryOrder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,163 @@
namespace SqlQueryBuilder.Abstractions.Parts;

public interface ISqlQueryOrder<T> :
ISqlQueryPart, ISqlQuery
ISqlQueryWithSelect<T>,
ISqlQueryPart
where T : ISqlEntity
{
ISqlQuerySelect<T> Select<TS>(
Expression<Func<T, TS>> select);
}

ISqlQuerySelect<T> Select(
Expression<Func<T, object?>> select,
params Expression<Func<T, object?>>[] otherSelect);
}
public interface ISqlQueryOrder<T, TJ1>:
ISqlQueryWithSelect<T, TJ1>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
{
ISqlQueryOrder<T, TJ1> OrderBy(
Expression<Func<T, TJ1, object?>> orderBy,
params Expression<Func<T, TJ1, object?>>[] otherOrderBy);
}

public interface ISqlQueryOrder<T, TJ1, TJ2>:
ISqlQueryWithSelect<T, TJ1, TJ2>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
{
ISqlQueryOrder<T, TJ1, TJ2> OrderBy(
Expression<Func<T, TJ1, TJ2, object?>> orderBy,
params Expression<Func<T, TJ1, TJ2, object?>>[] otherOrderBy);
}

public interface ISqlQueryOrder<T, TJ1, TJ2, TJ3>:
ISqlQueryWithSelect<T, TJ1, TJ2, TJ3>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
where TJ3 : ISqlEntity
{
ISqlQueryOrder<T, TJ1, TJ2, TJ3> OrderBy(
Expression<Func<T, TJ1, TJ2, TJ3, object?>> orderBy,
params Expression<Func<T, TJ1, TJ2, TJ3, object?>>[] otherOrderBy);
}

public interface ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4>:
ISqlQueryWithSelect<T, TJ1, TJ2, TJ3, TJ4>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
where TJ3 : ISqlEntity
where TJ4 : ISqlEntity
{
ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4> OrderBy(
Expression<Func<T, TJ1, TJ2, TJ3, TJ4, object?>> orderBy,
params Expression<Func<T, TJ1, TJ2, TJ3, TJ4, object?>>[] otherOrderBy);
}

public interface ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5>:
ISqlQueryWithSelect<T, TJ1, TJ2, TJ3, TJ4, TJ5>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
where TJ3 : ISqlEntity
where TJ4 : ISqlEntity
where TJ5 : ISqlEntity
{
ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5> OrderBy(
Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, object?>> orderBy,
params Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, object?>>[] otherOrderBy);
}

public interface ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6>:
ISqlQueryWithSelect<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
where TJ3 : ISqlEntity
where TJ4 : ISqlEntity
where TJ5 : ISqlEntity
where TJ6 : ISqlEntity
{
ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6> OrderBy(
Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, object?>> orderBy,
params Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, object?>>[] otherOrderBy);
}

public interface ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7>:
ISqlQueryWithSelect<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
where TJ3 : ISqlEntity
where TJ4 : ISqlEntity
where TJ5 : ISqlEntity
where TJ6 : ISqlEntity
where TJ7 : ISqlEntity
{
ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7> OrderBy(
Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, object?>> orderBy,
params Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, object?>>[] otherOrderBy);
}

public interface ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8>:
ISqlQueryWithSelect<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
where TJ3 : ISqlEntity
where TJ4 : ISqlEntity
where TJ5 : ISqlEntity
where TJ6 : ISqlEntity
where TJ7 : ISqlEntity
where TJ8 : ISqlEntity
{
ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8> OrderBy(
Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, object?>> orderBy,
params Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, object?>>[] otherOrderBy);
}

public interface ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ9>:
ISqlQueryWithSelect<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ9>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
where TJ3 : ISqlEntity
where TJ4 : ISqlEntity
where TJ5 : ISqlEntity
where TJ6 : ISqlEntity
where TJ7 : ISqlEntity
where TJ8 : ISqlEntity
where TJ9 : ISqlEntity
{
ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ9> OrderBy(
Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ9, object?>> orderBy,
params Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ9, object?>>[] otherOrderBy);
}

public interface ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ9, TJ10>:
ISqlQueryWithSelect<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ10>,
ISqlQueryPart
where T : ISqlEntity
where TJ1 : ISqlEntity
where TJ2 : ISqlEntity
where TJ3 : ISqlEntity
where TJ4 : ISqlEntity
where TJ5 : ISqlEntity
where TJ6 : ISqlEntity
where TJ7 : ISqlEntity
where TJ8 : ISqlEntity
where TJ9 : ISqlEntity
where TJ10 : ISqlEntity
{
ISqlQueryOrder<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ9, TJ10> OrderBy(
Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ9, TJ10, object?>> orderBy,
params Expression<Func<T, TJ1, TJ2, TJ3, TJ4, TJ5, TJ6, TJ7, TJ8, TJ9, TJ10, object?>>[] otherOrderBy);
}
Loading

0 comments on commit 930ef85

Please sign in to comment.