forked from nhibernate/nhibernate-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDecodeCaseFragment.cs
49 lines (44 loc) · 1.09 KB
/
DecodeCaseFragment.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
47
48
49
using System.Collections.Generic;
using System.Text;
using NHibernate.Util;
namespace NHibernate.SqlCommand
{
/// <summary>An Oracle-style DECODE function. </summary>
/// <example>
/// <code>decode(pkvalue, key1, 1, key2, 2, ..., 0)</code>
/// </example>
public class DecodeCaseFragment : CaseFragment
{
public DecodeCaseFragment(Dialect.Dialect dialect) : base(dialect) {}
/// <summary></summary>
public override string ToSqlStringFragment()
{
StringBuilder buf = new StringBuilder(cases.Count * 15 + 10)
.Append("decode(");
int number = 0;
foreach (KeyValuePair<string, string> de in cases)
{
if (number < cases.Count - 1)
{
buf.Append(StringHelper.CommaSpace)
.Append(de.Key)
.Append(StringHelper.CommaSpace)
.Append(de.Value);
}
else
{
buf.Insert(7, de.Key)
.Append(StringHelper.CommaSpace)
.Append(de.Value);
}
number++;
}
buf.Append(StringHelper.ClosedParen);
if (!string.IsNullOrEmpty(returnColumnName))
{
buf.Append(" as ").Append(returnColumnName);
}
return buf.ToString();
}
}
}