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

Commit 183142c

Browse files
committed
Refactor OracleSqlExpression to use DialectProvider
1 parent 1b4c76c commit 183142c

File tree

2 files changed

+42
-45
lines changed

2 files changed

+42
-45
lines changed

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,5 +1110,47 @@ public override string EscapeWildcards(string value)
11101110
.Replace("_", @"^_")
11111111
.Replace("%", @"^%");
11121112
}
1113+
1114+
1115+
public override string ToSelectStatement(ModelDefinition modelDef,
1116+
string selectExpression,
1117+
string bodyExpression,
1118+
string orderByExpression = null,
1119+
int? offset = null,
1120+
int? rows = null)
1121+
{
1122+
var sbInner = new StringBuilder(selectExpression);
1123+
sbInner.Append(bodyExpression);
1124+
1125+
if (!rows.HasValue)
1126+
return sbInner.ToString();
1127+
1128+
if (!offset.HasValue)
1129+
{
1130+
offset = 0;
1131+
}
1132+
1133+
if (string.IsNullOrEmpty(orderByExpression))
1134+
{
1135+
if (modelDef.PrimaryKey == null)
1136+
throw new ApplicationException("Malformed model, no PrimaryKey defined");
1137+
1138+
orderByExpression = string.Format("ORDER BY {0}",
1139+
OrmLiteConfig.DialectProvider.GetQuotedColumnName(modelDef.PrimaryKey.FieldName));
1140+
}
1141+
sbInner.Append(orderByExpression);
1142+
1143+
var sql = sbInner.ToString();
1144+
1145+
var sb = new StringBuilder();
1146+
sb.AppendLine("SELECT * FROM (");
1147+
sb.AppendLine("SELECT \"_ss_ormlite_1_\".*, ROWNUM RNUM FROM (");
1148+
sb.Append(sql);
1149+
sb.AppendLine(") \"_ss_ormlite_1_\"");
1150+
sb.AppendFormat("WHERE ROWNUM <= {0} + {1}) \"_ss_ormlite_2_\" ", offset.Value, rows.Value);
1151+
sb.AppendFormat("WHERE \"_ss_ormlite_2_\".RNUM > {0}", offset.Value);
1152+
1153+
return sb.ToString();
1154+
}
11131155
}
11141156
}

src/ServiceStack.OrmLite.Oracle/OracleSqlExpression.cs

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Text;
43
using System.Linq.Expressions;
54

65
namespace ServiceStack.OrmLite.Oracle
@@ -30,50 +29,6 @@ protected override object VisitColumnAccessMethod(MethodCallExpression m)
3029
return base.VisitColumnAccessMethod(m);
3130
}
3231

33-
public override string LimitExpression
34-
{
35-
get
36-
{
37-
return "";
38-
}
39-
}
40-
41-
//from Simple.Data.Oracle implementation https://github.com/flq/Simple.Data.Oracle/blob/master/Simple.Data.Oracle/OraclePager.cs
42-
private static string UpdateWithOrderByIfNecessary(string sql)
43-
{
44-
if (sql.IndexOf("order by ", StringComparison.OrdinalIgnoreCase) != -1)
45-
return sql;
46-
var col = GetFirstColumn(sql);
47-
return sql + " ORDER BY " + col;
48-
}
49-
50-
private static string GetFirstColumn(string sql)
51-
{
52-
var idx1 = sql.IndexOf("select", StringComparison.OrdinalIgnoreCase) + 7;
53-
var idx2 = sql.IndexOf(",", idx1, StringComparison.Ordinal);
54-
return sql.Substring(idx1, idx2 - 7).Trim();
55-
}
56-
57-
protected override string ApplyPaging(string sql)
58-
{
59-
if (!Rows.HasValue)
60-
return sql;
61-
if (!Offset.HasValue)
62-
{
63-
Offset = 0;
64-
}
65-
sql = UpdateWithOrderByIfNecessary(sql);
66-
var sb = new StringBuilder();
67-
sb.AppendLine("SELECT * FROM (");
68-
sb.AppendLine("SELECT \"_ss_ormlite_1_\".*, ROWNUM RNUM FROM (");
69-
sb.Append(sql);
70-
sb.AppendLine(") \"_ss_ormlite_1_\"");
71-
sb.AppendFormat("WHERE ROWNUM <= {0} + {1}) \"_ss_ormlite_2_\" ", Offset.Value, Rows.Value);
72-
sb.AppendFormat("WHERE \"_ss_ormlite_2_\".RNUM > {0}", Offset.Value);
73-
74-
return sb.ToString();
75-
}
76-
7732
public override SqlExpression<T> Clone()
7833
{
7934
return CopyTo(new OracleSqlExpression<T>());

0 commit comments

Comments
 (0)