File Coverage

blib/lib/Win32/ADO.pm
Criterion Covered Total %
statement 13 181 7.1
branch 0 4 0.0
condition n/a
subroutine 4 159 2.5
pod 0 155 0.0
total 17 499 3.4


line stmt bran cond sub pod time code
1             package Win32::ADO;
2 1     1   752 use strict;
  1         2  
  1         47  
3            
4             BEGIN {
5 1     1   6 use Exporter ();
  1         1  
  1         22  
6 1     1   4 use vars qw( @ISA @EXPORT @EXPORT_OK $VERSION );
  1         15  
  1         343  
7 1     1   19 @ISA = qw(Exporter);
8 1         3 @EXPORT_OK = qw(CheckDBErrors QuoteString);
9 1         26 @EXPORT = qw( adOpenForwardOnly
10             adOpenKeyset
11             adOpenDynamic
12             adOpenStatic
13             adHoldRecords
14             adMovePrevious
15             adAddNew
16             adDelete
17             adUpdate
18             adBookmark
19             adApproxPosition
20             adUpdateBatch
21             adResync
22             adLockReadOnly
23             adLockPessimistic
24             adLockOptimistic
25             adLockBatchOptimistic
26             adUseClient
27             adUseServer
28             adUseClientBatch
29             adEmpty
30             adTinyInt
31             adSmallInt
32             adInteger
33             adBigInt
34             adUnsignedTinyInt
35             adUnsignedSmallInt
36             adUnsignedInt
37             adUnsignedBigInt
38             adSingle
39             adDouble
40             adCurrency
41             adDecimal
42             adNumeric
43             adBoolean
44             adError
45             adUserDefined
46             adVariant
47             adIDispatch
48             adIUnknown
49             adGUID
50             adDate
51             adDBDate
52             adDBTime
53             adDBTimeStamp
54             adBSTR
55             adChar
56             adVarChar
57             adLongVarChar
58             adWChar
59             adVarWChar
60             adLongVarWChar
61             adBinary
62             adVarBinary
63             adLongVarBinary
64             adPromptAlways
65             adPromptComplete
66             adPromptCompleteRequired
67             adPromptNever
68             adModeUnknown
69             adModeRead
70             adModeWrite
71             adModeReadWrite
72             adModeShareDenyRead
73             adModeShareDenyWrite
74             adModeShareExclusive
75             adModeShareDenyNone
76             adXactUnspecified
77             adXactChaos
78             adXactReadUncommitted
79             adXactBrowse
80             adXactCursorStability
81             adXactReadCommitted
82             adXactRepeatableRead
83             adXactSerializable
84             adXactIsolated
85             adXactPollAsync
86             adXactPollSyncPhaseOne
87             adXactCommitRetaining
88             adXactAbortRetaining
89             adXactAbortAsync
90             adFldBookmark
91             adFldMayDefer
92             adFldUpdatable
93             adFldUnknownUpdatable
94             adFldFixed
95             adFldIsNullable
96             adFldMayBeNull
97             adFldLong
98             adFldRowID
99             adFldRowVersion
100             adFldCacheDeferred
101             adEditNone
102             adEditInProgress
103             adEditAdd
104             adRecOK
105             adRecNew
106             adRecModified
107             adRecDeleted
108             adRecUnmodified
109             adRecInvalid
110             adRecMultipleChanges
111             adRecPendingChanges
112             adRecCanceled
113             adRecCantRelease
114             adRecConcurrencyViolation
115             adRecIntegrityViolation
116             adRecMaxChangesExceeded
117             adRecObjectOpen
118             adRecOutOfMemory
119             adRecPermissionDenied
120             adRecSchemaViolation
121             adRecDBDeleted
122             adGetRowsRest
123             adPosUnknown
124             adPosBOF
125             adPosEOF
126             adAffectCurrent
127             adAffectGroup
128             adAffectAll
129             adFilterNone
130             adFilterPendingRecords
131             adFilterAffectedRecords
132             adFilterFetchedRecords
133             adPropNotSupported
134             adPropRequired
135             adPropOptional
136             adPropRead
137             adPropWrite
138             adErrInvalidArgument
139             adErrNoCurrentRecord
140             adErrIllegalOperation
141             adErrInTransaction
142             adErrFeatureNotAvailable
143             adErrItemNotFound
144             adErrObjectNotSet
145             adErrDataConversion
146             adErrObjectClosed
147             adErrObjectOpen
148             adErrProviderNotFound
149             adErrBoundToCommand
150             adParamSigned
151             adParamNullable
152             adParamLong
153             adParamUnknown
154             adParamInput
155             adParamOutput
156             adParamInputOutput
157             adParamReturnValue
158             adCmdUnknown
159             adCmdText
160             adCmdTable
161             adCmdStoredProc
162             );
163 1         2084 $VERSION = '0.03';
164             }
165            
166             ##---- CursorTypeEnum Values ----
167 0     0 0   sub adOpenForwardOnly { 0 }
168 0     0 0   sub adOpenKeyset { 1 }
169 0     0 0   sub adOpenDynamic { 2 }
170 0     0 0   sub adOpenStatic { 3 }
171            
172             ##---- CursorOptionEnum Values ----
173 0     0 0   sub adHoldRecords { 0x00000100 }
174 0     0 0   sub adMovePrevious { 0x00000200 }
175 0     0 0   sub adAddNew { 0x01000400 }
176 0     0 0   sub adDelete { 0x01000800 }
177 0     0 0   sub adUpdate { 0x01008000 }
178 0     0 0   sub adBookmark { 0x00002000 }
179 0     0 0   sub adApproxPosition { 0x00004000 }
180 0     0 0   sub adUpdateBatch { 0x00010000 }
181 0     0 0   sub adResync { 0x00020000 }
182            
183             ##---- LockTypeEnum Values ----
184 0     0 0   sub adLockReadOnly { 1 }
185 0     0 0   sub adLockPessimistic { 2 }
186 0     0 0   sub adLockOptimistic { 3 }
187 0     0 0   sub adLockBatchOptimistic { 4 }
188            
189             ##---- CursorLocationEnum Values ----
190 0     0 0   sub adUseClient { 1 }
191 0     0 0   sub adUseServer { 2 }
192 0     0 0   sub adUseClientBatch { 3 }
193            
194             ##---- DataTypeEnum Values ----
195 0     0 0   sub adEmpty { 0 }
196 0     0 0   sub adTinyInt { 16 }
197 0     0 0   sub adSmallInt { 2 }
198 0     0 0   sub adInteger { 3 }
199 0     0 0   sub adBigInt { 20 }
200 0     0 0   sub adUnsignedTinyInt { 17 }
201 0     0 0   sub adUnsignedSmallInt { 18 }
202 0     0 0   sub adUnsignedInt { 19 }
203 0     0 0   sub adUnsignedBigInt { 21 }
204 0     0 0   sub adSingle { 4 }
205 0     0 0   sub adDouble { 5 }
206 0     0 0   sub adCurrency { 6 }
207 0     0 0   sub adDecimal { 14 }
208 0     0 0   sub adNumeric { 131 }
209 0     0 0   sub adBoolean { 11 }
210 0     0 0   sub adError { 10 }
211 0     0 0   sub adUserDefined { 132 }
212 0     0 0   sub adVariant { 12 }
213 0     0 0   sub adIDispatch { 9 }
214 0     0 0   sub adIUnknown { 13 }
215 0     0 0   sub adGUID { 72 }
216 0     0 0   sub adDate { 7 }
217 0     0 0   sub adDBDate { 133 }
218 0     0 0   sub adDBTime { 134 }
219 0     0 0   sub adDBTimeStamp { 135 }
220 0     0 0   sub adBSTR { 8 }
221 0     0 0   sub adChar { 129 }
222 0     0 0   sub adVarChar { 200 }
223 0     0 0   sub adLongVarChar { 201 }
224 0     0 0   sub adWChar { 130 }
225 0     0 0   sub adVarWChar { 202 }
226 0     0 0   sub adLongVarWChar { 203 }
227 0     0 0   sub adBinary { 128 }
228 0     0 0   sub adVarBinary { 204 }
229 0     0 0   sub adLongVarBinary { 205 }
230            
231             ##---- ConnectPromptEnum Values ----
232 0     0 0   sub adPromptAlways { 1 }
233 0     0 0   sub adPromptComplete { 2 }
234 0     0 0   sub adPromptCompleteRequired { 3 }
235 0     0 0   sub adPromptNever { 4 }
236            
237             ##---- ConnectModeEnum Values ----
238 0     0 0   sub adModeUnknown { 0 }
239 0     0 0   sub adModeRead { 1 }
240 0     0 0   sub adModeWrite { 2 }
241 0     0 0   sub adModeReadWrite { 3 }
242 0     0 0   sub adModeShareDenyRead { 4 }
243 0     0 0   sub adModeShareDenyWrite { 8 }
244 0     0 0   sub adModeShareExclusive { 0xc }
245 0     0 0   sub adModeShareDenyNone { 0x10 }
246            
247             ##---- IsolationLevelEnum Values ----
248 0     0 0   sub adXactUnspecified { 0xffffffff }
249 0     0 0   sub adXactChaos { 0x00000010 }
250 0     0 0   sub adXactReadUncommitted { 0x00000100 }
251 0     0 0   sub adXactBrowse { 0x00000100 }
252 0     0 0   sub adXactCursorStability { 0x00001000 }
253 0     0 0   sub adXactReadCommitted { 0x00001000 }
254 0     0 0   sub adXactRepeatableRead { 0x00010000 }
255 0     0 0   sub adXactSerializable { 0x00100000 }
256 0     0 0   sub adXactIsolated { 0x00100000 }
257            
258             ##---- XactAttributeEnum Values ----
259 0     0 0   sub adXactPollAsync { 2 }
260 0     0 0   sub adXactPollSyncPhaseOne { 4 }
261 0     0 0   sub adXactCommitRetaining { 0x00020000 }
262 0     0 0   sub adXactAbortRetaining { 0x00040000 }
263 0     0 0   sub adXactAbortAsync { 0x00080000 }
264            
265             ##---- FieldAttributeEnum Values ----
266 0     0 0   sub adFldBookmark { 0x00000001 }
267 0     0 0   sub adFldMayDefer { 0x00000002 }
268 0     0 0   sub adFldUpdatable { 0x00000004 }
269 0     0 0   sub adFldUnknownUpdatable { 0x00000008 }
270 0     0 0   sub adFldFixed { 0x00000010 }
271 0     0 0   sub adFldIsNullable { 0x00000020 }
272 0     0 0   sub adFldMayBeNull { 0x00000040 }
273 0     0 0   sub adFldLong { 0x00000080 }
274 0     0 0   sub adFldRowID { 0x00000100 }
275 0     0 0   sub adFldRowVersion { 0x00000200 }
276 0     0 0   sub adFldCacheDeferred { 0x00001000 }
277            
278             ##---- EditModeEnum Values ----
279 0     0 0   sub adEditNone { 0x0000 }
280 0     0 0   sub adEditInProgress { 0x0001 }
281 0     0 0   sub adEditAdd { 0x0002 }
282            
283             ##---- RecordStatusEnum Values ----
284 0     0 0   sub adRecOK { 0x0000000 }
285 0     0 0   sub adRecNew { 0x0000001 }
286 0     0 0   sub adRecModified { 0x0000002 }
287 0     0 0   sub adRecDeleted { 0x0000004 }
288 0     0 0   sub adRecUnmodified { 0x0000008 }
289 0     0 0   sub adRecInvalid { 0x0000010 }
290 0     0 0   sub adRecMultipleChanges { 0x0000040 }
291 0     0 0   sub adRecPendingChanges { 0x0000080 }
292 0     0 0   sub adRecCanceled { 0x0000100 }
293 0     0 0   sub adRecCantRelease { 0x0000400 }
294 0     0 0   sub adRecConcurrencyViolation { 0x0000800 }
295 0     0 0   sub adRecIntegrityViolation { 0x0001000 }
296 0     0 0   sub adRecMaxChangesExceeded { 0x0002000 }
297 0     0 0   sub adRecObjectOpen { 0x0004000 }
298 0     0 0   sub adRecOutOfMemory { 0x0008000 }
299 0     0 0   sub adRecPermissionDenied { 0x0010000 }
300 0     0 0   sub adRecSchemaViolation { 0x0020000 }
301 0     0 0   sub adRecDBDeleted { 0x0040000 }
302            
303             ##---- GetRowsOptionEnum Values ----
304 0     0 0   sub adGetRowsRest { -1 }
305            
306             ##---- PositionEnum Values ----
307 0     0 0   sub adPosUnknown { -1 }
308 0     0 0   sub adPosBOF { -2 }
309 0     0 0   sub adPosEOF { -3 }
310            
311             ##---- AffectEnum Values ----
312 0     0 0   sub adAffectCurrent { 1 }
313 0     0 0   sub adAffectGroup { 2 }
314 0     0 0   sub adAffectAll { 3 }
315            
316             ##---- FilterGroupEnum Values ----
317 0     0 0   sub adFilterNone { 0 }
318 0     0 0   sub adFilterPendingRecords { 1 }
319 0     0 0   sub adFilterAffectedRecords { 2 }
320 0     0 0   sub adFilterFetchedRecords { 3 }
321            
322             ##---- PropertyAttributesEnum Values ----
323 0     0 0   sub adPropNotSupported { 0x0000 }
324 0     0 0   sub adPropRequired { 0x0001 }
325 0     0 0   sub adPropOptional { 0x0002 }
326 0     0 0   sub adPropRead { 0x0200 }
327 0     0 0   sub adPropWrite { 0x0400 }
328            
329             ##---- ErrorValueEnum Values ----
330 0     0 0   sub adErrInvalidArgument { 0xbb9 }
331 0     0 0   sub adErrNoCurrentRecord { 0xbcd }
332 0     0 0   sub adErrIllegalOperation { 0xc93 }
333 0     0 0   sub adErrInTransaction { 0xcae }
334 0     0 0   sub adErrFeatureNotAvailable { 0xcb3 }
335 0     0 0   sub adErrItemNotFound { 0xcc1 }
336 0     0 0   sub adErrObjectNotSet { 0xd5c }
337 0     0 0   sub adErrDataConversion { 0xd5d }
338 0     0 0   sub adErrObjectClosed { 0xe78 }
339 0     0 0   sub adErrObjectOpen { 0xe79 }
340 0     0 0   sub adErrProviderNotFound { 0xe7a }
341 0     0 0   sub adErrBoundToCommand { 0xe7b }
342            
343             ##---- ParameterAttributesEnum Values ----
344 0     0 0   sub adParamSigned { 0x0010 }
345 0     0 0   sub adParamNullable { 0x0040 }
346 0     0 0   sub adParamLong { 0x0080 }
347            
348             ##---- ParameterDirectionEnum Values ----
349 0     0 0   sub adParamUnknown { 0x0000 }
350 0     0 0   sub adParamInput { 0x0001 }
351 0     0 0   sub adParamOutput { 0x0002 }
352 0     0 0   sub adParamInputOutput { 0x0003 }
353 0     0 0   sub adParamReturnValue { 0x0004 }
354            
355             ##---- CommandTypeEnum Values ----
356 0     0 0   sub adCmdUnknown { 0 }
357 0     0 0   sub adCmdText { 0x0001 }
358 0     0 0   sub adCmdTable { 0x0002 }
359 0     0 0   sub adCmdStoredProc { 0x0004 }
360            
361             sub QuoteString {
362 0     0 0   my $sql = shift;
363 0           $sql =~ s/\'/\'\'/g;
364 0           return $sql;
365             }
366            
367             sub CheckDBErrors {
368 0     0 0   my $Conn = shift;
369 0           my $arrayref = shift;
370 0           my $Errors = $Conn->Errors();
371 0           my $error;
372 0           my $NumErrors = 0;
373 0           foreach $error (in $Errors) {
374 0 0         next if $error->{Number} == 0; # Skip warnings
375 0           $NumErrors++;
376 0           push @{$arrayref}, "Error: [" .
  0            
377             $error->{Number} . "] " . $error->{Description} . "\n";
378             }
379 0           $Errors->Clear;
380 0 0         return $NumErrors == 0 ? 1 : 0;
381             }
382            
383             1;
384            
385             __END__