forked from nhibernate/nhibernate-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSQLFunctionTemplateTest.cs
107 lines (93 loc) · 3.47 KB
/
SQLFunctionTemplateTest.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System;
using System.Collections;
using System.Globalization;
using NHibernate.Dialect.Function;
using NUnit.Framework;
namespace NHibernate.Test.Hql
{
[TestFixture]
public class SQLFunctionTemplateTest : BaseFunctionFixture
{
[Test]
public void Simple()
{
SQLFunctionTemplate ft = new SQLFunctionTemplate(NHibernateUtil.String, "ltrim( ?1 )");
Assert.IsTrue(ft.HasArguments);
IList args = new ArrayList();
args.Add("'abcd <'");
Assert.AreEqual("ltrim( 'abcd <' )", ft.Render(args, factoryImpl).ToString());
ft = new SQLFunctionTemplate(NHibernateUtil.String, "ltrim( Az?ab )");
Assert.IsFalse(ft.HasArguments);
Assert.AreEqual("ltrim( Az?ab )", ft.Render(args, factoryImpl).ToString());
ft = new SQLFunctionTemplate(NHibernateUtil.String, "function( ?1 )? 5:6");
Assert.IsTrue(ft.HasArguments);
Assert.AreEqual("function( 'abcd <' )? 5:6", ft.Render(args, factoryImpl).ToString());
ft = new SQLFunctionTemplate(NHibernateUtil.String, "????????1?");
Assert.IsTrue(ft.HasArguments);
Assert.AreEqual("???????'abcd <'?", ft.Render(args, factoryImpl).ToString());
}
[Test]
public void RepetedParams()
{
SQLFunctionTemplate ft;
IList args = new ArrayList();
ft =
new SQLFunctionTemplate(NHibernateUtil.String,
"replace( replace( rtrim( replace( replace( ?1, ' ', '${space}$' ), ?2, ' ' ) ), ' ', ?2 ), '${space}$', ' ' )");
args.Add("'param1 '");
args.Add("'param2 ab '");
Assert.AreEqual(
"replace( replace( rtrim( replace( replace( 'param1 ', ' ', '${space}$' ), 'param2 ab ', ' ' ) ), ' ', 'param2 ab ' ), '${space}$', ' ' )",
ft.Render(args, factoryImpl).ToString());
args.Clear();
ft = new SQLFunctionTemplate(NHibernateUtil.String, "?1 ?3 ?2 ?3 ?1");
args.Add(1);
args.Add(2);
args.Add(3);
Assert.AreEqual("1 3 2 3 1", ft.Render(args, factoryImpl).ToString());
}
//[Test] not required
public void NoStringArguments()
{
SQLFunctionTemplate ft;
IList args = new ArrayList();
ft = new SQLFunctionTemplate(NHibernateUtil.String, "?1 ?2 ?3");
args.Add(DateTime.Today);
args.Add(125.6D);
args.Add(0910.123456m);
string expected = string.Format("{0} {1} {2}",
DateTime.Today.ToString(DateTimeFormatInfo.InvariantInfo),
(125.6D).ToString(NumberFormatInfo.InvariantInfo),
(0910.123456m).ToString(NumberFormatInfo.InvariantInfo));
Assert.AreEqual(expected, ft.Render(args, factoryImpl).ToString());
}
[Test]
public void ArgsDiffParams()
{
SQLFunctionTemplate ft;
IList args = new ArrayList();
// No Args; 2 params
ft = new SQLFunctionTemplate(NHibernateUtil.String, "func(?1,?2)");
Assert.AreEqual("func(,)", ft.Render(args, factoryImpl).ToString());
// Args<params
args.Clear();
ft = new SQLFunctionTemplate(NHibernateUtil.String, "func(?1,?2)");
args.Add(1);
Assert.AreEqual("func(1,)", ft.Render(args, factoryImpl).ToString());
// Args>params
args.Clear();
ft = new SQLFunctionTemplate(NHibernateUtil.String, "func(?1,?3)");
args.Add(1);
args.Add(2);
args.Add(3);
Assert.AreEqual("func(1,3)", ft.Render(args, factoryImpl).ToString());
// Args in different position
args.Clear();
ft = new SQLFunctionTemplate(NHibernateUtil.String, "func(?2, ?1, ?3)");
args.Add(1);
args.Add(2);
args.Add(3);
Assert.AreEqual("func(2, 1, 3)", ft.Render(args, factoryImpl).ToString());
}
}
}