OSDN Git Service

DBFlute-0.9.3に更新
[ea2ddl/ea2ddl.git] / ea2ddl-gen / dbflute / templates / om / csharp / allcommon / s2dao / FetchNarrowingResultSetWrapper.vmnet
1 \r
2 using System;\r
3 using System.Collections;\r
4 using System.Reflection;\r
5 \r
6 using ${glPackageBaseCommon};\r
7 using ${glPackageBaseCommonCBean};\r
8 \r
9 namespace ${glPackageBaseCommonS2Dao} {\r
10 \r
11     public class ${glFetchNarrowingResultSetWrapper} : System.Data.IDataReader {\r
12 \r
13         // ===============================================================================\r
14         //                                                                       Attribute\r
15         //                                                                       =========\r
16         protected System.Data.IDataReader _dataReader;\r
17         protected ${glFetchNarrowingBeanInterfaceName} _fetchNarrowingBean;\r
18         protected long _fetchCounter;\r
19         protected long _requestCounter;\r
20         protected bool _offsetByCursorForcedly;\r
21         protected bool _limitByCursorForcedly;\r
22 \r
23         // ===============================================================================\r
24         //                                                                     Constructor\r
25         //                                                                     ===========\r
26         /**\r
27          * Constructor.\r
28          * \r
29          * @param dataReader Original data-reader. (NotNull)\r
30          * @param ${glAttachedCBArgsVariableName} FetchNarrowing-bean. (NotNull)\r
31          */\r
32         public ${glFetchNarrowingResultSetWrapper}(System.Data.IDataReader dataReader, ${glFetchNarrowingBeanInterfaceName} fetchNarrowingBean\r
33                                                  , bool offsetByCursorForcedly, bool limitByCursorForcedly) {\r
34             _dataReader = dataReader;\r
35             _fetchNarrowingBean = fetchNarrowingBean;\r
36             _offsetByCursorForcedly = offsetByCursorForcedly;\r
37             _limitByCursorForcedly = limitByCursorForcedly;\r
38 \r
39             skip();\r
40         }\r
41 \r
42         // ===============================================================================\r
43         //                                                                            Skip\r
44         //                                                                            ====\r
45         private void skip() {\r
46             if (!IsAvailableSkipRecord()) {\r
47                 return;\r
48             }\r
49             int skipStartIndex = GetFetchNarrowingSkipStartIndex();\r
50             if (IsCursorUsed()) {\r
51 //                if (0 == skipStartIndex) {\r
52 //                    _dataReader.beforeFirst();\r
53 //                } else {\r
54 //                    _dataReader.absolute(skipStartIndex);\r
55 //                }\r
56 //                _fetchCounter = _dataReader.getRow();\r
57                 throw new NotSupportedException("Cursor is unsupported!!!");\r
58             } else {\r
59                 while (_fetchCounter < skipStartIndex && _dataReader.Read()) {\r
60                     ++_fetchCounter;\r
61                 }\r
62             }\r
63         }\r
64 \r
65         protected bool IsAvailableSkipRecord() {\r
66             if (!IsFetchNarrowingEffective()) {\r
67                 return false;\r
68             }\r
69             if (IsOffsetByCursorForcedly) {\r
70                 return true;\r
71             }\r
72             if (IsFetchNarrowingSkipStartIndexEffective()) {\r
73                 return true;\r
74             }\r
75             return false;\r
76         }\r
77 \r
78         // ===============================================================================\r
79         //                                                                            Read\r
80         //                                                                            ====\r
81         /**\r
82          * Read.\r
83          * \r
84          * @return Does the result set have next record?\r
85          * @throws SQLException\r
86          */\r
87         public bool Read() {\r
88             bool hasNext = _dataReader.Read();\r
89             ++_requestCounter;\r
90             if (!IsAvailableLimitLoopCount()) {\r
91                 CheckSafetyResult(hasNext);\r
92                 return hasNext;\r
93             }\r
94 \r
95             if (hasNext && _fetchCounter < GetFetchNarrowingSkipStartIndex() + GetFetchNarrowingLoopCount()) {\r
96                 ++_fetchCounter;\r
97                 CheckSafetyResult(true);\r
98                 return true;\r
99             } else {\r
100                 return false;\r
101             }\r
102         }\r
103 \r
104         protected bool IsAvailableLimitLoopCount() {\r
105             if (!IsFetchNarrowingEffective()) {\r
106                 return false;\r
107             }\r
108             if (IsLimitByCursorForcedly) {\r
109                 return true;\r
110             }\r
111             if (IsFetchNarrowingLoopCountEffective()) {\r
112                 return true;\r
113             }\r
114             return false;\r
115         }\r
116 \r
117         protected void CheckSafetyResult(bool hasNext) {\r
118             if (hasNext && GetSafetyMaxResultSize() > 0 && _requestCounter > (GetSafetyMaxResultSize() + 1)) {\r
119                 String msg = "You have already been in Danger Zone!";\r
120                 msg = msg + " Please confirm your query or data of table: safetyMaxResultSize=" + GetSafetyMaxResultSize();\r
121                 throw new ${glPackageBaseCommonException}.${glDangerousResultSizeException}(msg, GetSafetyMaxResultSize());\r
122             }\r
123         }\r
124 \r
125         // ===============================================================================\r
126         //                                                                    Fetch Option\r
127         //                                                                    ============\r
128         protected bool IsFetchNarrowingEffective() {\r
129             return _fetchNarrowingBean.IsFetchNarrowingEffective;\r
130         }\r
131 \r
132         protected bool IsFetchNarrowingSkipStartIndexEffective() {\r
133             return _fetchNarrowingBean.IsFetchNarrowingSkipStartIndexEffective;\r
134         }\r
135 \r
136         protected bool IsFetchNarrowingLoopCountEffective() {\r
137             return _fetchNarrowingBean.IsFetchNarrowingLoopCountEffective;\r
138         }\r
139 \r
140         protected int GetFetchNarrowingSkipStartIndex() {\r
141             return _fetchNarrowingBean.FetchNarrowingSkipStartIndex;\r
142         }\r
143 \r
144         protected int GetFetchNarrowingLoopCount() {\r
145             return _fetchNarrowingBean.FetchNarrowingLoopCount;\r
146         }\r
147 \r
148         protected int GetSafetyMaxResultSize() {\r
149             return _fetchNarrowingBean.SafetyMaxResultSize;\r
150         }\r
151 \r
152         protected bool IsCursorUsed() {\r
153             return IsCursorSupported(_dataReader);\r
154         }\r
155 \r
156         public static bool IsCursorSupported(System.Data.IDataReader dataReader) {\r
157             return false;// Is Cursor Unsupported at C#?\r
158         }\r
159 \r
160         // ===============================================================================\r
161         //                                                                        Accessor\r
162         //                                                                        ========\r
163         public ${glFetchNarrowingBeanInterfaceName} FetchNarrowingBean {\r
164             get { return _fetchNarrowingBean; }\r
165         }\r
166 \r
167         public bool IsOffsetByCursorForcedly {\r
168             get { return _offsetByCursorForcedly; }\r
169         }\r
170 \r
171         public bool IsLimitByCursorForcedly {\r
172             get { return _limitByCursorForcedly; }\r
173         }\r
174 \r
175         // ===============================================================================\r
176         //                                                   Implementation of IDataReader\r
177         //                                                   =============================\r
178         #region Implementation of IDataReader\r
179         void System.Data.IDataReader.Close() {\r
180             _dataReader.Close();\r
181         }\r
182 \r
183         int System.Data.IDataReader.Depth {\r
184             get { return _dataReader.Depth; }\r
185         }\r
186 \r
187         System.Data.DataTable System.Data.IDataReader.GetSchemaTable() {\r
188             return _dataReader.GetSchemaTable();\r
189         }\r
190 \r
191         bool System.Data.IDataReader.IsClosed {\r
192             get { return _dataReader.IsClosed; }\r
193         }\r
194 \r
195         bool System.Data.IDataReader.NextResult() {\r
196             return _dataReader.NextResult();\r
197         }\r
198 \r
199         int System.Data.IDataReader.RecordsAffected {\r
200             get { return _dataReader.RecordsAffected; }\r
201         }\r
202         #endregion\r
203 \r
204         // ===============================================================================\r
205         //                                                   Implementation of IDisposable\r
206         //                                                   =============================\r
207         #region Implementation of IDisposable\r
208         void System.IDisposable.Dispose() {\r
209             _dataReader.Dispose();\r
210         }\r
211         #endregion\r
212 \r
213         // ===============================================================================\r
214         //                                                   Implementation of IDataRecord\r
215         //                                                   =============================\r
216         #region Implementation of IDataRecord\r
217         int System.Data.IDataRecord.FieldCount {\r
218             get { return _dataReader.FieldCount; }\r
219         }\r
220 \r
221         bool System.Data.IDataRecord.GetBoolean(int i) {\r
222             return _dataReader.GetBoolean(i);\r
223         }\r
224 \r
225         byte System.Data.IDataRecord.GetByte(int i) {\r
226             return _dataReader.GetByte(i);\r
227         }\r
228 \r
229         long System.Data.IDataRecord.GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) {\r
230             return _dataReader.GetBytes(i, fieldOffset, buffer, bufferoffset, length);\r
231         }\r
232 \r
233         char System.Data.IDataRecord.GetChar(int i) {\r
234             return _dataReader.GetChar(i);\r
235         }\r
236 \r
237         long System.Data.IDataRecord.GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) {\r
238             return _dataReader.GetChars(i, fieldoffset, buffer, bufferoffset, length);\r
239         }\r
240 \r
241         System.Data.IDataReader System.Data.IDataRecord.GetData(int i) {\r
242             return _dataReader.GetData(i);\r
243         }\r
244 \r
245         string System.Data.IDataRecord.GetDataTypeName(int i) {\r
246             return _dataReader.GetDataTypeName(i);\r
247         }\r
248 \r
249         System.DateTime System.Data.IDataRecord.GetDateTime(int i) {\r
250             return _dataReader.GetDateTime(i);\r
251         }\r
252 \r
253         decimal System.Data.IDataRecord.GetDecimal(int i) {\r
254             return _dataReader.GetDecimal(i);\r
255         }\r
256 \r
257         double System.Data.IDataRecord.GetDouble(int i) {\r
258             return _dataReader.GetDouble(i);\r
259         }\r
260 \r
261         System.Type System.Data.IDataRecord.GetFieldType(int i) {\r
262             return _dataReader.GetFieldType(i);\r
263         }\r
264 \r
265         float System.Data.IDataRecord.GetFloat(int i) {\r
266             return _dataReader.GetFloat(i);\r
267         }\r
268 \r
269         System.Guid System.Data.IDataRecord.GetGuid(int i) {\r
270             return _dataReader.GetGuid(i);\r
271         }\r
272 \r
273         short System.Data.IDataRecord.GetInt16(int i) {\r
274             return _dataReader.GetInt16(i);\r
275         }\r
276 \r
277         int System.Data.IDataRecord.GetInt32(int i) {\r
278             return _dataReader.GetInt32(i);\r
279         }\r
280 \r
281         long System.Data.IDataRecord.GetInt64(int i) {\r
282             return _dataReader.GetInt64(i);\r
283         }\r
284 \r
285         string System.Data.IDataRecord.GetName(int i) {\r
286             return _dataReader.GetName(i);\r
287         }\r
288 \r
289         int System.Data.IDataRecord.GetOrdinal(string name) {\r
290             return _dataReader.GetOrdinal(name);\r
291         }\r
292 \r
293         string System.Data.IDataRecord.GetString(int i) {\r
294             return _dataReader.GetString(i);\r
295         }\r
296 \r
297         object System.Data.IDataRecord.GetValue(int i) {\r
298             return _dataReader.GetValue(i);\r
299         }\r
300 \r
301         int System.Data.IDataRecord.GetValues(object[] values) {\r
302             return _dataReader.GetValues(values);\r
303         }\r
304 \r
305         bool System.Data.IDataRecord.IsDBNull(int i) {\r
306             return _dataReader.IsDBNull(i);\r
307         }\r
308 \r
309         object System.Data.IDataRecord.this[string name] {\r
310             get { return _dataReader[name]; }\r
311         }\r
312 \r
313         object System.Data.IDataRecord.this[int i] {\r
314             get { return _dataReader[i]; }\r
315         }\r
316         #endregion\r
317     }\r
318 }\r