Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 951f1a2

Browse files
committed
Add QueryType override for SelectInto
1 parent 2f61de9 commit 951f1a2

16 files changed

+43
-44
lines changed

src/ServiceStack.OrmLite.Firebird/FirebirdOrmLiteDialectProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ public override string ToSelectStatement(QueryType queryType, ModelDefinition mo
801801
.Append(selectExpression)
802802
.Append(bodyExpression);
803803

804-
if (orderByExpression != null)
804+
if (!string.IsNullOrEmpty(orderByExpression))
805805
sb.Append(orderByExpression);
806806

807807
if ((queryType == QueryType.Select || (rows == 1 && offset is null or 0)) && (offset != null || rows != null))

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1082,7 +1082,7 @@ public override string ToSelectStatement(QueryType queryType, ModelDefinition mo
10821082
if (!offset.HasValue)
10831083
offset = 0;
10841084

1085-
if ((queryType == QueryType.Select || (rows == 1 && offset is null or 0)) && string.IsNullOrEmpty(orderByExpression))
1085+
if (queryType == QueryType.Select && (offset.GetValueOrDefault() > 0 || rows.GetValueOrDefault() > 1) && orderByExpression.IsEmpty())
10861086
{
10871087
var primaryKey = modelDef.FieldDefinitions.FirstOrDefault(x => x.IsPrimaryKey);
10881088
if (primaryKey == null)

src/ServiceStack.OrmLite/Async/ReadExpressionCommandExtensionsAsync.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,20 @@ internal static class ReadExpressionCommandExtensionsAsync
1717
{
1818
internal static Task<List<Into>> SelectAsync<Into, From>(this IDbCommand dbCmd, SqlExpression<From> q, CancellationToken token)
1919
{
20-
string sql = q.SelectInto<Into>();
20+
string sql = q.SelectInto<Into>(QueryType.Select);
2121
return dbCmd.ExprConvertToListAsync<Into>(sql, q.Params, q.OnlyFields, token);
2222
}
2323

2424
internal static Task<List<T>> SelectAsync<T>(this IDbCommand dbCmd, SqlExpression<T> q, CancellationToken token)
2525
{
26-
string sql = q.SelectInto<T>();
26+
string sql = q.SelectInto<T>(QueryType.Select);
2727
return dbCmd.ExprConvertToListAsync<T>(sql, q.Params, q.OnlyFields, token);
2828
}
2929

3030
internal static Task<List<T>> SelectAsync<T>(this IDbCommand dbCmd, Expression<Func<T, bool>> predicate, CancellationToken token)
3131
{
3232
var q = dbCmd.GetDialectProvider().SqlExpression<T>();
33-
string sql = q.Where(predicate).SelectInto<T>();
33+
string sql = q.Where(predicate).SelectInto<T>(QueryType.Select);
3434

3535
return dbCmd.ExprConvertToListAsync<T>(sql, q.Params, q.OnlyFields, token);
3636
}
@@ -112,7 +112,7 @@ internal static Task<T> SingleAsync<T>(this IDbCommand dbCmd, Expression<Func<T,
112112

113113
internal static Task<T> SingleAsync<T>(this IDbCommand dbCmd, SqlExpression<T> expression, CancellationToken token)
114114
{
115-
string sql = expression.Limit(1).SelectInto<T>();
115+
string sql = expression.Limit(1).SelectInto<T>(QueryType.Single);
116116

117117
return dbCmd.ExprConvertToAsync<T>(sql, expression.Params, token);
118118
}
@@ -121,7 +121,7 @@ public static Task<TKey> ScalarAsync<T, TKey>(this IDbCommand dbCmd, Expression<
121121
{
122122
var q = dbCmd.GetDialectProvider().SqlExpression<T>();
123123
q.Select(field);
124-
var sql = q.SelectInto<T>();
124+
var sql = q.SelectInto<T>(QueryType.Scalar);
125125
return dbCmd.ScalarAsync<TKey>(sql, q.Params, token);
126126
}
127127

@@ -130,7 +130,7 @@ internal static Task<TKey> ScalarAsync<T, TKey>(this IDbCommand dbCmd,
130130
{
131131
var q = dbCmd.GetDialectProvider().SqlExpression<T>();
132132
q.Select(field).Where(predicate);
133-
string sql = q.SelectInto<T>();
133+
string sql = q.SelectInto<T>(QueryType.Scalar);
134134
return dbCmd.ScalarAsync<TKey>(sql, q.Params, token);
135135
}
136136

@@ -200,7 +200,7 @@ internal static Task<T> ExprConvertToAsync<T>(this IDataReader dataReader, IOrmL
200200
internal static Task<List<T>> Select<T>(this IDbCommand dbCmd, Expression<Func<T, bool>> predicate, CancellationToken token)
201201
{
202202
var q = dbCmd.GetDialectProvider().SqlExpression<T>();
203-
string sql = q.Where(predicate).SelectInto<T>();
203+
string sql = q.Where(predicate).SelectInto<T>(QueryType.Select);
204204

205205
return dbCmd.ExprConvertToListAsync<T>(sql, q.Params, q.OnlyFields, token);
206206
}

src/ServiceStack.OrmLite/Expressions/IUntypedSqlExpression.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -641,10 +641,8 @@ public Tuple<ModelDefinition, FieldDefinition> FirstMatchingField(string fieldNa
641641
return q.FirstMatchingField(fieldName);
642642
}
643643

644-
public string SelectInto<TModel>()
645-
{
646-
return q.SelectInto<TModel>();
647-
}
644+
public string SelectInto<TModel>() => q.SelectInto<TModel>();
645+
public string SelectInto<TModel>(QueryType queryType) => q.SelectInto<TModel>(queryType);
648646
}
649647

650648
public static class SqlExpressionExtensions

src/ServiceStack.OrmLite/Expressions/ReadExpressionCommandExtensions.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ internal static class ReadExpressionCommandExtensions
1212
{
1313
internal static List<T> Select<T>(this IDbCommand dbCmd, SqlExpression<T> q)
1414
{
15-
string sql = q.SelectInto<T>();
15+
string sql = q.SelectInto<T>(QueryType.Select);
1616
return dbCmd.ExprConvertToList<T>(sql, q.Params, onlyFields: q.OnlyFields);
1717
}
1818

1919
internal static List<T> Select<T>(this IDbCommand dbCmd, Expression<Func<T, bool>> predicate)
2020
{
2121
var q = dbCmd.GetDialectProvider().SqlExpression<T>();
22-
string sql = q.Where(predicate).SelectInto<T>();
22+
string sql = q.Where(predicate).SelectInto<T>(QueryType.Select);
2323

2424
return dbCmd.ExprConvertToList<T>(sql, q.Params);
2525
}
@@ -135,22 +135,22 @@ internal static T Single<T>(this IDbCommand dbCmd, Expression<Func<T, bool>> pre
135135

136136
internal static T Single<T>(this IDbCommand dbCmd, SqlExpression<T> q)
137137
{
138-
string sql = q.Limit(1).SelectInto<T>();
138+
string sql = q.Limit(1).SelectInto<T>(QueryType.Single);
139139

140140
return dbCmd.ExprConvertTo<T>(sql, q.Params, onlyFields:q.OnlyFields);
141141
}
142142

143143
public static TKey Scalar<T, TKey>(this IDbCommand dbCmd, SqlExpression<T> expression)
144144
{
145-
var sql = expression.SelectInto<T>();
145+
var sql = expression.SelectInto<T>(QueryType.Scalar);
146146
return dbCmd.Scalar<TKey>(sql, expression.Params);
147147
}
148148

149149
public static TKey Scalar<T, TKey>(this IDbCommand dbCmd, Expression<Func<T, object>> field)
150150
{
151151
var q = dbCmd.GetDialectProvider().SqlExpression<T>();
152152
q.Select(field);
153-
var sql = q.SelectInto<T>();
153+
var sql = q.SelectInto<T>(QueryType.Scalar);
154154
return dbCmd.Scalar<TKey>(sql, q.Params);
155155
}
156156

@@ -159,7 +159,7 @@ internal static TKey Scalar<T, TKey>(this IDbCommand dbCmd,
159159
{
160160
var q = dbCmd.GetDialectProvider().SqlExpression<T>();
161161
q.Select(field).Where(predicate);
162-
string sql = q.SelectInto<T>();
162+
string sql = q.SelectInto<T>(QueryType.Scalar);
163163
return dbCmd.Scalar<TKey>(sql, q.Params);
164164
}
165165

src/ServiceStack.OrmLite/Expressions/SqlExpression.Join.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,12 @@ protected virtual SqlExpression<T> InternalJoin(string joinType, Expression join
268268
return this;
269269
}
270270

271-
public string SelectInto<TModel>()
271+
public string SelectInto<TModel>() => SelectInto<TModel>(QueryType.Select);
272+
public string SelectInto<TModel>(QueryType queryType)
272273
{
273274
if ((CustomSelect && OnlyFields == null) || (typeof(TModel) == typeof(T) && !PrefixFieldWithTableName))
274275
{
275-
return ToSelectStatement(QueryType.Select);
276+
return ToSelectStatement(queryType);
276277
}
277278

278279
useFieldName = true;
@@ -411,7 +412,7 @@ public string SelectInto<TModel>()
411412
var columns = select.Length > 0 ? select : "*";
412413
SelectExpression = "SELECT " + (selectDistinct ? "DISTINCT " : "") + columns;
413414

414-
return ToSelectStatement(QueryType.Select);
415+
return ToSelectStatement(queryType);
415416
}
416417

417418
private static FieldDefinition FindWeakMatch(ModelDefinition tableDef, FieldDefinition fieldDef)

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3071,6 +3071,7 @@ public interface ISqlExpression
30713071
string ToSelectStatement();
30723072
string ToSelectStatement(QueryType forType);
30733073
string SelectInto<TModel>();
3074+
string SelectInto<TModel>(QueryType forType);
30743075
}
30753076

30763077
public enum QueryType

src/ServiceStack.OrmLite/Legacy/ReadExpressionCommandExtensionsAsyncLegacy.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ internal static class ReadExpressionCommandExtensionsAsyncLegacy
1717
internal static Task<List<T>> SelectAsync<T>(this IDbCommand dbCmd, Func<SqlExpression<T>, SqlExpression<T>> expression, CancellationToken token)
1818
{
1919
var q = dbCmd.GetDialectProvider().SqlExpression<T>();
20-
var sql = expression(q).SelectInto<T>();
20+
var sql = expression(q).SelectInto<T>(QueryType.Select);
2121
return dbCmd.ExprConvertToListAsync<T>(sql, q.Params, q.OnlyFields, token);
2222
}
2323

2424
[Obsolete("Use db.SelectAsync(db.From<T>())")]
2525
internal static Task<List<Into>> SelectAsync<Into, From>(this IDbCommand dbCmd, Func<SqlExpression<From>, SqlExpression<From>> expression, CancellationToken token)
2626
{
2727
var q = dbCmd.GetDialectProvider().SqlExpression<From>();
28-
string sql = expression(q).SelectInto<Into>();
28+
string sql = expression(q).SelectInto<Into>(QueryType.Select);
2929
return dbCmd.ExprConvertToListAsync<Into>(sql, q.Params, q.OnlyFields, token);
3030
}
3131

src/ServiceStack.OrmLite/Legacy/ReadExpressionCommandExtensionsLegacy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ internal static class ReadExpressionCommandExtensionsLegacy
1111
internal static List<T> Select<T>(this IDbCommand dbCmd, Func<SqlExpression<T>, SqlExpression<T>> expression)
1212
{
1313
var q = dbCmd.GetDialectProvider().SqlExpression<T>();
14-
string sql = expression(q).SelectInto<T>();
14+
string sql = expression(q).SelectInto<T>(QueryType.Select);
1515

1616
return dbCmd.ExprConvertToList<T>(sql, q.Params, onlyFields: q.OnlyFields);
1717
}
@@ -20,14 +20,14 @@ internal static List<T> Select<T>(this IDbCommand dbCmd, Func<SqlExpression<T>,
2020
internal static List<Into> Select<Into, From>(this IDbCommand dbCmd, Func<SqlExpression<From>, SqlExpression<From>> expression)
2121
{
2222
var q = dbCmd.GetDialectProvider().SqlExpression<From>();
23-
string sql = expression(q).SelectInto<Into>();
23+
string sql = expression(q).SelectInto<Into>(QueryType.Select);
2424

2525
return dbCmd.ExprConvertToList<Into>(sql, q.Params, onlyFields: q.OnlyFields);
2626
}
2727

2828
internal static List<Into> Select<Into, From>(this IDbCommand dbCmd, SqlExpression<From> q)
2929
{
30-
string sql = q.SelectInto<Into>();
30+
string sql = q.SelectInto<Into>(QueryType.Select);
3131
return dbCmd.ExprConvertToList<Into>(sql, q.Params, onlyFields: q.OnlyFields);
3232
}
3333

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ public virtual string ToSelectStatement(QueryType queryType, ModelDefinition mod
524524
var sb = StringBuilderCache.Allocate();
525525
sb.Append(selectExpression);
526526
sb.Append(bodyExpression);
527-
if (orderByExpression != null)
527+
if (!string.IsNullOrEmpty(orderByExpression))
528528
{
529529
sb.Append(orderByExpression);
530530
}

0 commit comments

Comments
 (0)