/
MySqlExpression.cs
46 lines (41 loc) · 1.73 KB
/
MySqlExpression.cs
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
namespace ServiceStack.OrmLite.MySql
{
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
public class MySqlExpression<T> : SqlExpression<T>
{
public MySqlExpression(IOrmLiteDialectProvider dialectProvider)
: base(dialectProvider) { }
protected override string ToCast(string quotedColName)
{
return $"cast({quotedColName} as char(1000))";
}
public override string ToDeleteRowStatement()
{
return base.tableDefs.Count > 1
? $"DELETE {DialectProvider.GetQuotedTableName(modelDef)} {FromExpression} {WhereExpression}"
: base.ToDeleteRowStatement();
}
protected override object VisitColumnAccessMethod(MethodCallExpression m)
{
if (m.Method.Name == nameof(ToString) && m.Object?.Type == typeof(DateTime))
{
List<object> args = this.VisitExpressionList(m.Arguments);
var quotedColName = Visit(m.Object);
if (!IsSqlClass(quotedColName))
quotedColName = ConvertToParam(quotedColName);
var statement = "";
var arg = args.Count > 0 ? args[0] : null;
if (arg == null) statement = ToCast(quotedColName.ToString());
else statement = $"DATE_FORMAT({quotedColName.ToString()},'{arg.ToString()}')";
return new PartialSqlString(statement);
}
return base.VisitColumnAccessMethod(m);
}
protected override string CreateInSubQuerySql(object quotedColName, string subSelect)
{
return $"{quotedColName} IN (SELECT * FROM ({subSelect}) SubQuery)";
}
}
}