This repository was archived by the owner on Dec 24, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 616
Expand file tree
/
Copy pathOracleSqlExpression.cs
More file actions
57 lines (47 loc) · 1.92 KB
/
OracleSqlExpression.cs
File metadata and controls
57 lines (47 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace ServiceStack.OrmLite.Oracle
{
public class OracleSqlExpression<T> : SqlExpression<T>
{
public OracleSqlExpression(IOrmLiteDialectProvider dialectProvider)
: base(dialectProvider) {}
protected override object VisitColumnAccessMethod(MethodCallExpression m)
{
if (m.Method.Name == "Substring")
{
List<Object> args = VisitExpressionList(m.Arguments);
var quotedColName = Visit(m.Object);
var startIndex = Int32.Parse(args[0].ToString()) + 1;
if (args.Count == 2)
{
var length = Int32.Parse(args[1].ToString());
return new PartialSqlString(string.Format(
"subStr({0},{1},{2})", quotedColName, startIndex, length));
}
return new PartialSqlString(string.Format(
"subStr({0},{1})", quotedColName, startIndex));
}
return base.VisitColumnAccessMethod(m);
}
protected override void VisitFilter(string operand, object originalLeft, object originalRight, ref object left, ref object right)
{
if (originalRight is DateTimeOffset)
return;
base.VisitFilter(operand, originalLeft, originalRight, ref left, ref right);
}
protected override void ConvertToPlaceholderAndParameter(ref object right)
{
var paramName = Params.Count.ToString();
var paramValue = right;
var parameter = CreateParam(paramName, paramValue);
Params.Add(parameter);
right = parameter.ParameterName;
}
protected override PartialSqlString ToLengthPartialString(object arg)
{
return new PartialSqlString($"LENGTH({arg})");
}
}
}