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

Commit 0764e4e

Browse files
committed
re-factor SqlExpression sql generation into DialectProvider
1 parent 400944e commit 0764e4e

File tree

3 files changed

+47
-39
lines changed

3 files changed

+47
-39
lines changed

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 14 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -521,26 +521,10 @@ public virtual string ToUpdateStatement(T item, bool excludeDefaults = false)
521521

522522
public virtual string ToSelectStatement()
523523
{
524-
var sql = new StringBuilder();
524+
var sql = OrmLiteConfig.DialectProvider
525+
.ToSelectStatement(modelDef, SelectExpression, BodyExpression, OrderByExpression, Offset, Rows);
525526

526-
sql.Append(SelectExpression);
527-
528-
sql.Append(FromExpression);
529-
530-
sql.Append(string.IsNullOrEmpty(WhereExpression) ?
531-
"" :
532-
"\n" + WhereExpression);
533-
sql.Append(string.IsNullOrEmpty(GroupByExpression) ?
534-
"" :
535-
"\n" + GroupByExpression);
536-
sql.Append(string.IsNullOrEmpty(HavingExpression) ?
537-
"" :
538-
"\n" + HavingExpression);
539-
sql.Append(string.IsNullOrEmpty(OrderByExpression) ?
540-
"" :
541-
"\n" + OrderByExpression);
542-
543-
return ApplyPaging(sql.ToString());
527+
return sql;
544528
}
545529

546530
public virtual string ToCountStatement()
@@ -573,6 +557,17 @@ public string FromExpression
573557
set { fromExpression = value; }
574558
}
575559

560+
public string BodyExpression
561+
{
562+
get
563+
{
564+
return FromExpression
565+
+ (string.IsNullOrEmpty(WhereExpression) ? "" : "\n" + WhereExpression)
566+
+ (string.IsNullOrEmpty(GroupByExpression) ? "" : "\n" + GroupByExpression)
567+
+ (string.IsNullOrEmpty(HavingExpression) ? "" : "\n" + HavingExpression);
568+
}
569+
}
570+
576571
public string WhereExpression
577572
{
578573
get
@@ -622,19 +617,6 @@ public string OrderByExpression
622617
}
623618
}
624619

625-
public virtual string LimitExpression
626-
{
627-
get
628-
{
629-
if (Offset == null && Rows == null)
630-
return "";
631-
632-
return Offset == null
633-
? "LIMIT " + Rows
634-
: "LIMIT " + Rows.GetValueOrDefault(int.MaxValue) + " OFFSET " + Offset;
635-
}
636-
}
637-
638620
public int? Rows { get; set; }
639621
public int? Offset { get; set; }
640622

@@ -1123,13 +1105,6 @@ public IList<string> GetAllFields()
11231105
return modelDef.FieldDefinitions.ConvertAll(r => r.Name);
11241106
}
11251107

1126-
protected virtual string ApplyPaging(string sql)
1127-
{
1128-
var limitExpression = LimitExpression;
1129-
sql = sql + (string.IsNullOrEmpty(limitExpression) ? "" : "\n" + limitExpression);
1130-
return sql;
1131-
}
1132-
11331108
private bool IsStaticArrayMethod(MethodCallExpression m)
11341109
{
11351110
if (m.Object == null && m.Method.Name == "Contains")

src/ServiceStack.OrmLite/IOrmLiteDialectProvider.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ string GetColumnDefinition(
7474

7575
string ToSelectStatement(Type tableType, string sqlFilter, params object[] filterParams);
7676

77+
string ToSelectStatement(ModelDefinition modelDef, string selectExpression, string bodyExpression, string orderByExpression = null, int? offset = null, int? rows = null);
78+
7779
string ToInsertRowStatement(IDbCommand command, object objWithProperties, ICollection<string> InsertFields = null);
7880

7981
void PrepareParameterizedInsertStatement<T>(IDbCommand cmd, ICollection<string> insertFields = null);

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,37 @@ public virtual string ToSelectStatement(Type tableType, string sqlFilter, params
476476
return sql.ToString();
477477
}
478478

479+
public virtual string ToSelectStatement(ModelDefinition modelDef,
480+
string selectExpression,
481+
string bodyExpression,
482+
string orderByExpression = null,
483+
int? offset = null,
484+
int? rows = null)
485+
{
486+
487+
var sb = new StringBuilder(selectExpression);
488+
sb.Append(bodyExpression);
489+
if (orderByExpression != null)
490+
{
491+
sb.Append(orderByExpression);
492+
}
493+
494+
if (offset != null || rows != null)
495+
{
496+
sb.Append("\nLIMIT ");
497+
if (offset == null)
498+
{
499+
sb.Append(rows);
500+
}
501+
else
502+
{
503+
sb.Append(rows.GetValueOrDefault(int.MaxValue)).Append(" OFFSET ").Append(offset);
504+
}
505+
}
506+
507+
return sb.ToString();
508+
}
509+
479510
public virtual string GetRowVersionColumnName(FieldDefinition field)
480511
{
481512
return GetQuotedColumnName(field.FieldName);

0 commit comments

Comments
 (0)