0
|
1 #if ORACLE
|
|
2 using BLToolkit.Data;
|
|
3 #else
|
|
4 using System.Collections.Generic;
|
|
5 #endif
|
|
6 using NUnit.Framework;
|
|
7
|
|
8 using BLToolkit.DataAccess;
|
|
9 using BLToolkit.TypeBuilder;
|
|
10
|
|
11 namespace DataAccess
|
|
12 {
|
|
13 [TestFixture]
|
|
14 public class ArrayTest
|
|
15 {
|
|
16 public ArrayTest()
|
|
17 {
|
|
18 TypeFactory.SaveTypes = true;
|
|
19 }
|
|
20
|
|
21 #if ORACLE
|
|
22 public abstract class TestAccessor : DataAccessor
|
|
23 {
|
|
24 public abstract void ArrayTest(
|
|
25 int[] @intArray, out int[] @outputIntArray, ref int[] @inputOutputIntArray,
|
|
26 string[] @strArray, out string[] @outputStrArray, ref string[] @inputOutputStrArray);
|
|
27
|
|
28 [ScalarSource(ScalarSourceType.OutputParameter)]
|
|
29 public abstract int[] ScalarArray();
|
|
30
|
|
31 [SqlQuery(@"
|
|
32 DECLARE
|
|
33 intArray DBMS_UTILITY.NUMBER_ARRAY;
|
|
34 BEGIN
|
|
35 intArray := :intArray;
|
|
36 FOR i IN intArray.FIRST..intArray.LAST LOOP
|
|
37 :inputOutputIntArray(i) := intArray(i);
|
|
38 END LOOP;
|
|
39 END;"
|
|
40 )]
|
|
41 public abstract void Query(int[] @intArray, ref int[] @inputOutputIntArray);
|
|
42
|
|
43 public abstract void ArrayTest(
|
|
44 int?[] @intArray, out int?[] @outputIntArray, ref int?[] @inputOutputIntArray,
|
|
45 string[] @strArray, out string[] @outputStrArray, ref string[] @inputOutputStrArray);
|
|
46
|
|
47 [ScalarSource(ScalarSourceType.OutputParameter), SprocName("ScalarArray")]
|
|
48 public abstract int?[] NullableScalarArray();
|
|
49 }
|
|
50
|
|
51 [Test]
|
|
52 public void Test()
|
|
53 {
|
|
54 int[] @outputIntArray;
|
|
55 int[] @inputOutputIntArray = new int[] {1,2,3,4,5};
|
|
56 string[] @outputStrArray;
|
|
57 string[] @inputOutputStrArray = new string[] {"9","8","7","6","5"};
|
|
58
|
|
59 ((TestAccessor)DataAccessor.CreateInstance(typeof(TestAccessor))).ArrayTest(
|
|
60 new int[] {1,2,3,4,5}, out @outputIntArray, ref @inputOutputIntArray,
|
|
61 new string[] {"5","4","3","2","1"}, out @outputStrArray, ref @inputOutputStrArray);
|
|
62
|
|
63 Assert.AreEqual(new int[] {1,2,3,4,5}, @outputIntArray);
|
|
64 Assert.AreEqual(new int[] {2,4,6,8,10}, @inputOutputIntArray);
|
|
65 Assert.AreEqual(new string[] { "5","4","3","2","1"}, @outputStrArray);
|
|
66 Assert.AreEqual(new string[] { "95","84","73","62","51"}, @inputOutputStrArray);
|
|
67 }
|
|
68
|
|
69 [Test]
|
|
70 public void ScalarTest()
|
|
71 {
|
|
72 int[] @outputIntArray = ((TestAccessor)DataAccessor.CreateInstance(typeof(TestAccessor))).ScalarArray();
|
|
73
|
|
74 Assert.AreEqual(new int[] { 1, 2, 3, 4, 5 }, @outputIntArray);
|
|
75 }
|
|
76
|
|
77 [Test]
|
|
78 public void NullableTest()
|
|
79 {
|
|
80 int?[] @outputIntArray;
|
|
81 int?[] @inputOutputIntArray = new int?[] {1,2,3,4,5};
|
|
82 string[] @outputStrArray;
|
|
83 string[] @inputOutputStrArray = new string[] {"9","8","7","6","5"};
|
|
84
|
|
85 ((TestAccessor)DataAccessor.CreateInstance(typeof(TestAccessor))).ArrayTest(
|
|
86 new int?[] {1,null,3,4,5}, out @outputIntArray, ref @inputOutputIntArray,
|
|
87 new string[] {"5","4","3","2","1"}, out @outputStrArray, ref @inputOutputStrArray);
|
|
88
|
|
89 Assert.AreEqual(new int?[] {1,0,3,4,5}, @outputIntArray);
|
|
90 Assert.AreEqual(new int?[] {2,0,6,8,10}, @inputOutputIntArray);
|
|
91 Assert.AreEqual(new string[] { "5","4","3","2","1"}, @outputStrArray);
|
|
92 Assert.AreEqual(new string[] { "95","84","73","62","51"}, @inputOutputStrArray);
|
|
93 }
|
|
94
|
|
95 [Test]
|
|
96 public void NullableScalarTest()
|
|
97 {
|
|
98 int?[] @outputIntArray = ((TestAccessor)DataAccessor.CreateInstance(typeof(TestAccessor))).NullableScalarArray();
|
|
99
|
|
100 Assert.AreEqual(new int?[] { 1, 2, 3, 4, 5 }, @outputIntArray);
|
|
101 }
|
|
102
|
|
103 [Test]
|
|
104 public void QueryTest()
|
|
105 {
|
|
106 int[] intArray = new int[]{1,2,3,4,5};
|
|
107 int[] inputOutputIntArray = new int[5];
|
|
108
|
|
109 ((TestAccessor)DataAccessor.CreateInstance(typeof(TestAccessor))).Query(
|
|
110 intArray, ref inputOutputIntArray);
|
|
111
|
|
112 Assert.AreEqual(intArray, inputOutputIntArray);
|
|
113 }
|
|
114
|
|
115
|
|
116 #elif MSSQL
|
|
117
|
|
118 public abstract class TestAccessor : DataAccessor
|
|
119 {
|
|
120 [SprocName("ArrayTest")]
|
|
121 public abstract IList<int> SprocTest(int[] @inputIntArray);
|
|
122 [SqlQuery("SELECT Num * 3 FROM @inputIntArray")]
|
|
123 public abstract IList<int> QueryTest([ParamTypeName("IntArray")] int[] @inputIntArray);
|
|
124 }
|
|
125
|
|
126 [Test]
|
|
127 public void Test()
|
|
128 {
|
|
129 int[] intArray = { 1, 2, 3, 4, 5 };
|
|
130
|
|
131 TestAccessor a = TypeFactory.CreateInstance<TestAccessor>();
|
|
132 IList<int> list;
|
|
133
|
|
134 list = a.SprocTest(intArray);
|
|
135 for (int i = 0; i < list.Count; i++)
|
|
136 Assert.That(list[i], Is.EqualTo(intArray[i]*2));
|
|
137 list = a.QueryTest(intArray);
|
|
138 for (int i = 0; i < list.Count; i++)
|
|
139 Assert.That(list[i], Is.EqualTo(intArray[i]*3));
|
|
140 }
|
|
141 #endif
|
|
142 }
|
|
143 }
|