11using System ;
2- using System . Collections . Generic ;
32using System . IO ;
43using System . Linq ;
54using System . Reflection ;
@@ -16,30 +15,21 @@ public static ISelectBuilder Select(this IDatabase database, params string[] sel
1615 return new SelectBuilder ( database ) . WithColumns ( selectList ) ;
1716 }
1817
19- public static async Task < IEnumerable < T > > SelectAsync < T > ( this IDatabase database , CancellationToken cancellationToken = default )
18+ public static ISelectBuilder < T > SelectAll < T > ( this IDatabase database )
2019 {
21- return await database . Select < T > ( ) . ToEnumerableAsync < T > ( cancellationToken ) ;
22- }
23-
24- public static async Task < IEnumerable < T > > SelectAsync < T > (
25- this IDatabase database ,
26- Action < ISelectBuilder > builderCallback ,
27- CancellationToken cancellationToken = default )
28- {
29- var selectBuilder = database . Select < T > ( ) ;
30- builderCallback ( selectBuilder ) ;
31- return await selectBuilder . ToEnumerableAsync < T > ( cancellationToken ) ;
20+ var table = Table . FromType ( typeof ( T ) ) ;
21+ return new SelectBuilder < T > ( database )
22+ . WithColumns ( table . Columns . Select ( c => c . Name ) . ToArray ( ) )
23+ . From ( table . Name ) ;
3224 }
3325
3426 public static async Task < T > SelectAsync < T > (
35- this IDatabase database ,
36- object id ,
37- CancellationToken cancellationToken = default )
27+ this IDatabase database , object id , CancellationToken cancellationToken = default )
3828 {
3929 var table = Table . FromType ( typeof ( T ) ) ;
40- return await database . Select < T > ( )
30+ return await database . SelectAll < T > ( )
4131 . Where ( table . PrimaryKey . Name ) . EqualTo ( id )
42- . FirstOrDefaultAsync < T > ( cancellationToken ) ;
32+ . FirstOrDefaultAsync ( cancellationToken ) ;
4333 }
4434
4535 public static IInsertBuilder InsertInto ( this IDatabase database , string tableName )
@@ -60,7 +50,7 @@ public static Task<T> InsertAsync<T>(
6050 . Columns ( columnsWithoutPrimaryKey . Select ( c => c . Name ) . ToArray ( ) )
6151 . Values ( columnsWithoutPrimaryKey . Select ( c => c . GetValue ( model ) ) . ToArray ( ) ) as InsertBuilder ;
6252
63- ISelectBuilder select ;
53+ ISelectBuilder < T > select ;
6454 if ( primaryKey . IsAutoIncrement )
6555 {
6656 var identityExpression = database . Variant switch
@@ -71,22 +61,19 @@ public static Task<T> InsertAsync<T>(
7161 _ => throw new NotSupportedException ( "Unknown database variant: " + database . Variant )
7262 } ;
7363
74- select = Select ( database , columns . Select ( c => c . Name ) . ToArray ( ) )
75- . From ( table . Name )
64+ select = SelectAll < T > ( database )
7665 . Where ( $ "{ primaryKey . Name } = { identityExpression } ")
77- . End ( ) as SelectBuilder ;
66+ . End ( ) ;
7867 }
7968 else
8069 {
81- select = Select ( database , columns . Select ( c => c . Name ) . ToArray ( ) )
82- . From ( table . Name )
70+ select = SelectAll < T > ( database )
8371 . Where ( $ "{ primaryKey . Name } ") . EqualTo ( primaryKey . GetValue ( model ) ) ;
8472 }
8573
8674 insertBuilder . AddLine ( ";" ) ;
8775 insertBuilder . AddLine ( select . Build ( ) ) ;
8876
89-
9077 return insertBuilder
9178 . SingleAsync < T > ( cancellationToken ) ;
9279 }
@@ -97,9 +84,7 @@ public static IUpdateBuilder Update(this IDatabase database, string tableName)
9784 }
9885
9986 public static Task < int > UpdateAsync < T > (
100- this IDatabase database ,
101- T model ,
102- CancellationToken cancellationToken = default )
87+ this IDatabase database , T model , CancellationToken cancellationToken = default )
10388 {
10489 var table = Table . FromType ( typeof ( T ) ) ;
10590 var columns = table . Columns . ToList ( ) ;
@@ -116,7 +101,8 @@ public static IDeleteBuilder DeleteFrom(this IDatabase database, string tableNam
116101 return new DeleteBuilder ( database ) . WithTableName ( tableName ) ;
117102 }
118103
119- public static Task < int > DeleteAsync < T > ( this IDatabase database , T model , CancellationToken cancellationToken = default )
104+ public static Task < int > DeleteAsync < T > (
105+ this IDatabase database , T model , CancellationToken cancellationToken = default )
120106 {
121107 var table = Table . FromType ( typeof ( T ) ) ;
122108 var primaryKey = table . PrimaryKey ;
@@ -125,7 +111,8 @@ public static Task<int> DeleteAsync<T>(this IDatabase database, T model, Cancell
125111 . ExecuteNonQueryAsync ( cancellationToken ) ;
126112 }
127113
128- public static ICommandBuilder CreateCommandFromFile ( this IDatabase database , string fileName , Encoding encoding = default )
114+ public static ICommandBuilder CreateCommandFromFile (
115+ this IDatabase database , string fileName , Encoding encoding = default )
129116 {
130117 encoding ??= Encoding . Default ;
131118 var file = File . ReadAllText ( fileName , encoding ) ;
@@ -170,13 +157,5 @@ private static Stream FindResourceFromAssemblies(string resourceName, params Ass
170157 }
171158 return null ;
172159 }
173-
174-
175- // TODO: make this public, and return an ISelectBuilder with a Generic type?
176- private static ISelectBuilder Select < T > ( this IDatabase database )
177- {
178- var table = Table . FromType ( typeof ( T ) ) ;
179- return database . Select ( table . Columns . Select ( c => c . Name ) . ToArray ( ) ) . From ( table . Name ) ;
180- }
181160 }
182161}
0 commit comments