Module cli.pkg
1//*****************************************************************************
2//*** CLI.PKG ***
3//*** ***
4//*** Author: Ben Weijers ***
5//*** Data Access Nederland ***
6//*** 10 September 1998 ***
7//*** ***
8//*** Purpose: ***
9//*** CLI specific functionality. There are several connectivity kits ***
10//*** based on SQL/92 CLI. Those are: ***
11//*** - ODBC_DRV The Data Access CK for ODBC ***
12//*** - DB2_DRV The Data Access CK for DB2 ***
13//*** - MSSQLDRV The Data Access CK for Microsoft SQL Server ***
14//*** ***
15//*** This package defines the common functionality for all CLI based ***
16//*** drivers. ***
17//*** ***
18//*** Updated: May 23rd 2008 (Current CK build: 5.0.0.53 ) ***
19//*** Added NULLABLE and DEFAULT attributes for DATETIME type ***
20//*** Updated: Apr 6th 2009 (Current CK build: 5.0.0.61 ) ***
21//*** Added DF_DRIVER_MATCH_CLIENT_SERVER_VERSION attribute ***
22//*** DF_DRIVER_SQLSERVER_CLIENT_VERSION attribute ***
23//*****************************************************************************
24
25
26//*** We are not using ifndef below becuase that is not supported in Character Mode
27//*** Driver attributes
28#IFDEF DF_FILE_TABLE_CHARACTER_FORMAT
29#ELSE
30 #REPLACE DF_FILE_TABLE_CHARACTER_FORMAT |CI601
31#ENDIF
32#IFDEF DF_FILE_MAX_ROWS_FETCHED
33#ELSE
34 #REPLACE DF_FILE_MAX_ROWS_FETCHED |CI602
35#ENDIF
36#IFDEF DF_FILE_PRIMARY_INDEX_TRIGGER
37#ELSE
38 #REPLACE DF_FILE_PRIMARY_INDEX_TRIGGER |CI604 //*** Replaced by DF_FILE_GENERATE_RECORD_ID_METHOD !
39#ENDIF
40#IFDEF DF_FILE_TRANSLATE_OEM_TO_ANSI
41#ELSE
42 #REPLACE DF_FILE_TRANSLATE_OEM_TO_ANSI |CI606 //*** Deprecated !!! Only defined for decent error reporting
43#ENDIF
44#IFDEF DF_FILE_REFIND_AFTER_SAVE
45#ELSE
46 #REPLACE DF_FILE_REFIND_AFTER_SAVE |CI608
47#ENDIF
48#IFDEF DF_FILE_TABLE_NAME
49#ELSE
50 #REPLACE DF_FILE_TABLE_NAME |CI609
51#ENDIF
52#IFDEF DF_FILE_GET_RID_AFTER_CREATE
53#ELSE
54 #REPLACE DF_FILE_GET_RID_AFTER_CREATE |CI610
55#ENDIF
56#IFDEF DF_FILE_SQL_FILTER
57#ELSE
58 #REPLACE DF_FILE_SQL_FILTER |CI611
59#ENDIF
60#IFDEF DF_FILE_USE_DUMMY_ZERO_DATE
61#ELSE
62 #REPLACE DF_FILE_USE_DUMMY_ZERO_DATE |CI612
63#ENDIF
64#IFDEF DF_FILE_GENERATE_RECORD_ID_METHOD
65#ELSE
66 #REPLACE DF_FILE_GENERATE_RECORD_ID_METHOD |CI614
67#ENDIF
68#IFDEF DF_FILE_DUMMY_UPDATE_COLUMN
69#ELSE
70 #REPLACE DF_FILE_DUMMY_UPDATE_COLUMN |CI616
71#ENDIF
72#IFDEF DF_FILE_FETCH_ALL_COLUMNS
73#ELSE
74 #REPLACE DF_FILE_FETCH_ALL_COLUMNS |CI620
75#ENDIF
76#IFDEF DF_FILE_DATABASE_ID
77#ELSE
78 #REPLACE DF_FILE_DATABASE_ID |CI622
79#ENDIF
80#IFDEF DF_FILE_SQL_FILTER_ACTIVE
81#ELSE
82 #REPLACE DF_FILE_SQL_FILTER_ACTIVE |CI624
83#ENDIF
84#IFDEF DF_FILE_NUMBER_SQL_RELATIONS
85#ELSE
86 #REPLACE DF_FILE_NUMBER_SQL_RELATIONS |CI626
87#ENDIF
88#IFDEF DF_FILE_BLOCK_SIZE
89#ELSE
90 #REPLACE DF_FILE_BLOCK_SIZE |CI628
91#ENDIF
92#IFDEF DF_FILE_JIT_BINDING
93#ELSE
94 #REPLACE DF_FILE_JIT_BINDING |CI630
95#ENDIF
96#IFDEF DF_FILE_FINDCACHE_HITS
97#ELSE
98 #REPLACE DF_FILE_FINDCACHE_HITS |CI632
99#ENDIF
100#IFDEF DF_FILE_FINDCACHE_TIMEOUTS
101#ELSE
102 #REPLACE DF_FILE_FINDCACHE_TIMEOUTS |CI634
103#ENDIF
104
105
106#IFDEF DF_FIELD_STORE_TIME
107#ELSE
108 #REPLACE DF_FIELD_STORE_TIME |CI702
109#ENDIF
110#IFDEF DF_FIELD_TIME
111#ELSE
112 #REPLACE DF_FIELD_TIME |CI703
113#ENDIF
114#IFDEF DF_FIELD_IS_NULL
115#ELSE
116 #REPLACE DF_FIELD_IS_NULL |CI704
117#ENDIF
118#IFDEF DF_FIELD_NULL_ALLOWED
119#ELSE
120 #REPLACE DF_FIELD_NULL_ALLOWED |CI706
121#ENDIF
122#IFDEF DF_FIELD_DEFAULT_VALUE
123#ELSE
124 #REPLACE DF_FIELD_DEFAULT_VALUE |CI707
125#ENDIF
126#IFDEF DF_FIELD_FETCH_STATE
127#ELSE
128 #REPLACE DF_FIELD_FETCH_STATE |CI708
129#ENDIF
130#IFDEF DF_FIELD_READ_ONLY
131#ELSE
132 #REPLACE DF_FIELD_READ_ONLY |CI710
133#ENDIF
134#IFDEF DF_FIELD_NATIVE_TYPE_NAME
135#ELSE
136 #REPLACE DF_FIELD_NATIVE_TYPE_NAME |CI711
137#ENDIF
138#IFDEF DF_FIELD_NATIVE_TYPE
139#ELSE
140 #REPLACE DF_FIELD_NATIVE_TYPE |CI712
141#ENDIF
142#IFDEF DF_FIELD_NO_OEM_ANSI_TRANSLATE
143#ELSE
144 #REPLACE DF_FIELD_NO_OEM_ANSI_TRANSLATE |CI714
145#ENDIF
146#IFDEF DF_SQL_RELATION_COLUMN
147#ELSE
148 #REPLACE DF_SQL_RELATION_COLUMN |CI716
149#ENDIF
150#IFDEF DF_SQL_RELATION_RELATED_SCHEMA
151#ELSE
152 #REPLACE DF_SQL_RELATION_RELATED_SCHEMA |CI717
153#ENDIF
154#IFDEF DF_FIELD_NATIVE_SIZE
155#ELSE
156 #REPLACE DF_FIELD_NATIVE_SIZE |CI718
157#ENDIF
158#IFDEF DF_SQL_RELATION_RELATED_TABLE
159#ELSE
160 #REPLACE DF_SQL_RELATION_RELATED_TABLE |CI719
161#ENDIF
162#IFDEF DF_SQL_RELATION_RELATED_COLUMN
163#ELSE
164 #REPLACE DF_SQL_RELATION_RELATED_COLUMN |CI721
165#ENDIF
166
167
168#IFDEF DF_INDEX_NAME
169#ELSE
170 #REPLACE DF_INDEX_NAME |CI801
171#ENDIF
172#IFDEF DF_INDEX_UNIQUE
173#ELSE
174 #REPLACE DF_INDEX_UNIQUE |CI802
175#ENDIF
176#IFDEF DF_INDEX_ON_BACKEND
177#ELSE
178 #REPLACE DF_INDEX_ON_BACKEND |CI804
179#ENDIF
180
181#IFDEF DF_DATABASE_LOCK_STATE
182#ELSE
183 #REPLACE DF_DATABASE_LOCK_STATE |CI1001
184#ENDIF
185#IFDEF DF_DATABASE_ID
186#ELSE
187 #REPLACE DF_DATABASE_ID |CI1002
188#ENDIF
189#IFDEF DF_DATABASE_MYSQLTABLETYPE
190#ELSE
191 #REPLACE DF_DATABASE_MYSQLTABLETYPE |CI1003
192#ENDIF
193#IFDEF DF_DATABASE_NUMBER_TYPES
194#ELSE
195 #REPLACE DF_DATABASE_NUMBER_TYPES |CI1004
196#ENDIF
197#IFDEF DF_DATABASE_TYPE_NAME
198#ELSE
199 #REPLACE DF_DATABASE_TYPE_NAME |CI1005
200#ENDIF
201#IFDEF DF_DATABASE_TYPE_ID
202#ELSE
203 #REPLACE DF_DATABASE_TYPE_ID |CI1006
204#ENDIF
205#IFDEF DF_DATABASE_TYPE_CREATE_PARAMS
206#ELSE
207 #REPLACE DF_DATABASE_TYPE_CREATE_PARAMS |CI1007
208#ENDIF
209#IFDEF DF_DATABASE_TYPE_AUTOINC
210#ELSE
211 #REPLACE DF_DATABASE_TYPE_AUTOINC |CI1008
212#ENDIF
213#IFDEF DF_DATABASE_DEFAULT_DEFAULT_ASCII
214#ELSE
215 #REPLACE DF_DATABASE_DEFAULT_DEFAULT_ASCII |CI1009
216#ENDIF
217#IFDEF DF_DATABASE_TYPE_UNSIGNED
218#ELSE
219 #REPLACE DF_DATABASE_TYPE_UNSIGNED |CI1010
220#ENDIF
221#IFDEF DF_DATABASE_DEFAULT_DEFAULT_NUMERIC
222#ELSE
223 #REPLACE DF_DATABASE_DEFAULT_DEFAULT_NUMERIC |CI1011
224#ENDIF
225#IFDEF DF_DATABASE_TYPE_MAXSIZE
226#ELSE
227 #REPLACE DF_DATABASE_TYPE_MAXSIZE |CI1012
228#ENDIF
229#IFDEF DF_DATABASE_DEFAULT_DEFAULT_DATE
230#ELSE
231 #REPLACE DF_DATABASE_DEFAULT_DEFAULT_DATE |CI1013
232#ENDIF
233#IFDEF DF_DATABASE_DEFAULT_NULLABLE_ASCII
234#ELSE
235 #REPLACE DF_DATABASE_DEFAULT_NULLABLE_ASCII |CI1014
236#ENDIF
237#IFDEF DF_DATABASE_DEFAULT_DEFAULT_TEXT
238#ELSE
239 #REPLACE DF_DATABASE_DEFAULT_DEFAULT_TEXT |CI1015
240#ENDIF
241#IFDEF DF_DATABASE_DEFAULT_NULLABLE_NUMERIC
242#ELSE
243 #REPLACE DF_DATABASE_DEFAULT_NULLABLE_NUMERIC |CI1016
244#ENDIF
245#IFDEF DF_DATABASE_DEFAULT_DEFAULT_BINARY
246#ELSE
247 #REPLACE DF_DATABASE_DEFAULT_DEFAULT_BINARY |CI1017
248#ENDIF
249#IFDEF DF_DATABASE_DEFAULT_NULLABLE_DATE
250#ELSE
251 #REPLACE DF_DATABASE_DEFAULT_NULLABLE_DATE |CI1018
252#ENDIF
253#IFDEF DF_DATABASE_DUMMY_ZERO_DATE_VALUE
254#ELSE
255 #REPLACE DF_DATABASE_DUMMY_ZERO_DATE_VALUE |CI1019
256#ENDIF
257#IFDEF DF_DATABASE_DEFAULT_NULLABLE_TEXT
258#ELSE
259 #REPLACE DF_DATABASE_DEFAULT_NULLABLE_TEXT |CI1020
260#ENDIF
261#IFDEF DF_DATABASE_DUPREC_STATE
262#ELSE
263 #REPLACE DF_DATABASE_DUPREC_STATE |CI1021
264#ENDIF
265#IFDEF DF_DATABASE_DEFAULT_NULLABLE_BINARY
266#ELSE
267 #REPLACE DF_DATABASE_DEFAULT_NULLABLE_BINARY |CI1022
268#ENDIF
269#IFDEF DF_DATABASE_MAX_ACTIVE_STATEMENTS
270#ELSE
271 #REPLACE DF_DATABASE_MAX_ACTIVE_STATEMENTS |CI1024
272#ENDIF
273#IFDEF DF_DATABASE_DRIVER_DECIMAL_SEPARATOR
274#ELSE
275 #REPLACE DF_DATABASE_DRIVER_DECIMAL_SEPARATOR |CI1026
276#ENDIF
277#IFDEF DF_DATABASE_DRIVER_THOUSANDS_SEPARATOR
278#ELSE
279 #REPLACE DF_DATABASE_DRIVER_THOUSANDS_SEPARATOR |CI1028
280#ENDIF
281#IFDEF DF_DATABASE_DRIVER_DATE_FORMAT
282#ELSE
283 #REPLACE DF_DATABASE_DRIVER_DATE_FORMAT |CI1030
284#ENDIF
285#IFDEF DF_DATABASE_DRIVER_DATE_SEPARATOR
286#ELSE
287 #REPLACE DF_DATABASE_DRIVER_DATE_SEPARATOR |CI1032
288#ENDIF
289#IFDEF DF_DATABASE_IGNORE_UCASE_SUPPORT
290#ELSE
291 #REPLACE DF_DATABASE_IGNORE_UCASE_SUPPORT |CI1034
292#ENDIF
293#IFDEF #IFDEF DF_DATABASE_INDEX_CREATE
294#ELSE
295 #REPLACE DF_DATABASE_INDEX_CREATE |CI1036
296#ENDIF
297#IFDEF DF_DATABASE_INDEX_DROP
298#ELSE
299 #REPLACE DF_DATABASE_INDEX_DROP |CI1038
300#ENDIF
301#IFDEF DF_DATABASE_INDEX_ASC
302#ELSE
303 #REPLACE DF_DATABASE_INDEX_ASC |CI1040
304#ENDIF
305#IFDEF DF_DATABASE_INDEX_DESC
306#ELSE
307 #REPLACE DF_DATABASE_INDEX_DESC |CI1042
308#ENDIF
309#IFDEF DF_DATABASE_COLUMN_CREATE_DEFAULTCLAUSE
310#ELSE
311 #REPLACE DF_DATABASE_COLUMN_CREATE_DEFAULTCLAUSE |CI1044
312#ENDIF
313#IFDEF DF_DATABASE_DUPREC_ERRORNUMBER
314#ELSE
315 #REPLACE DF_DATABASE_DUPREC_ERRORNUMBER |CI1046
316#ENDIF
317#IFDEF DF_DATABASE_USE_IDENTITY_TYPE
318#ELSE
319 #REPLACE DF_DATABASE_USE_IDENTITY_TYPE |CI1048
320#ENDIF
321#IFDEF DF_DATABASE_NUMBER_NATIVE_LOCKERRORS
322#ELSE
323 #REPLACE DF_DATABASE_NUMBER_NATIVE_LOCKERRORS |CI1050
324#ENDIF
325#IFDEF DF_DATABASE_NATIVE_LOCKERROR
326#ELSE
327 #REPLACE DF_DATABASE_NATIVE_LOCKERROR |CI1052
328#ENDIF
329#IFDEF DF_DATABASE_DEFAULT_MAX_ROWS
330#ELSE
331 #REPLACE DF_DATABASE_DEFAULT_MAX_ROWS |CI1054
332#ENDIF
333#IFDEF DF_DATABASE_IGNORE_WARNINGS
334#ELSE
335 #REPLACE DF_DATABASE_IGNORE_WARNINGS |CI1056
336#ENDIF
337#IFDEF DF_DATABASE_USE_DF_LOCKERROR
338#ELSE
339 #REPLACE DF_DATABASE_USE_DF_LOCKERROR |CI1058
340#ENDIF
341#IFDEF DF_DATABASE_FIND_CACHE_TIMEOUT
342#ELSE
343 #REPLACE DF_DATABASE_FIND_CACHE_TIMEOUT |CI1060
344#ENDIF
345#IFDEF DF_DATABASE_JIT_TRESHOLD
346#ELSE
347 #REPLACE DF_DATABASE_JIT_TRESHOLD |CI1062
348#ENDIF
349#IFDEF DF_DATABASE_TRUNCATE_BINARY_ZEROES
350#ELSE
351 #REPLACE DF_DATABASE_TRUNCATE_BINARY_ZEROES |CI1064
352#ENDIF
353#IFDEF DF_DATABASE_DEFAULT_DEFAULT_DATETIME
354#ELSE
355 #REPLACE DF_DATABASE_DEFAULT_DEFAULT_DATETIME |CI1065
356#ENDIF
357#IFDEF DF_DATABASE_DEFAULT_NULLABLE_DATETIME
358#ELSE
359 #REPLACE DF_DATABASE_DEFAULT_NULLABLE_DATETIME |CI1066
360#ENDIF
361//-------------------------------------
362#IFDEF DF_DRIVER_DEFAULT_DEFAULT_ASCII
363#ELSE
364 #REPLACE DF_DRIVER_DEFAULT_DEFAULT_ASCII |CI1101
365#ENDIF
366#IFDEF DF_DRIVER_DEFAULT_NULLABLE_ASCII
367#ELSE
368 #REPLACE DF_DRIVER_DEFAULT_NULLABLE_ASCII |CI1102
369#ENDIF
370#IFDEF DF_DRIVER_DEFAULT_DEFAULT_NUMERIC
371#ELSE
372 #REPLACE DF_DRIVER_DEFAULT_DEFAULT_NUMERIC |CI1103
373#ENDIF
374#IFDEF DF_DRIVER_DEFAULT_NULLABLE_NUMERIC
375#ELSE
376 #REPLACE DF_DRIVER_DEFAULT_NULLABLE_NUMERIC |CI1104
377#ENDIF
378#IFDEF DF_DRIVER_DEFAULT_DEFAULT_DATE
379#ELSE
380 #REPLACE DF_DRIVER_DEFAULT_DEFAULT_DATE |CI1105
381#ENDIF
382#IFDEF DF_DRIVER_DEFAULT_NULLABLE_DATE
383#ELSE
384 #REPLACE DF_DRIVER_DEFAULT_NULLABLE_DATE |CI1106
385#ENDIF
386#IFDEF DF_DRIVER_DEFAULT_DEFAULT_TEXT
387#ELSE
388 #REPLACE DF_DRIVER_DEFAULT_DEFAULT_TEXT |CI1107
389#ENDIF
390#IFDEF DF_DRIVER_DEFAULT_NULLABLE_TEXT
391#ELSE
392 #REPLACE DF_DRIVER_DEFAULT_NULLABLE_TEXT |CI1108
393#ENDIF
394#IFDEF DF_DRIVER_DEFAULT_DEFAULT_BINARY
395#ELSE
396 #REPLACE DF_DRIVER_DEFAULT_DEFAULT_BINARY |CI1109
397#ENDIF
398#IFDEF DF_DRIVER_DEFAULT_NULLABLE_BINARY
399#ELSE
400 #REPLACE DF_DRIVER_DEFAULT_NULLABLE_BINARY |CI1110
401#ENDIF
402#IFDEF DF_DRIVER_DUMMY_ZERO_DATE_VALUE
403#ELSE
404 #REPLACE DF_DRIVER_DUMMY_ZERO_DATE_VALUE |CI1111
405#ENDIF
406#IFDEF DF_DRIVER_MAX_ACTIVE_STATEMENTS
407#ELSE
408 #REPLACE DF_DRIVER_MAX_ACTIVE_STATEMENTS |CI1112
409#ENDIF
410#IFDEF DF_DRIVER_CACHE_PATH
411#ELSE
412 #REPLACE DF_DRIVER_CACHE_PATH |CI1113
413#ENDIF
414#IFDEF DF_DRIVER_DRIVER_DECIMAL_SEPARATOR
415#ELSE
416 #REPLACE DF_DRIVER_DRIVER_DECIMAL_SEPARATOR |CI1114
417#ENDIF
418#IFDEF DF_DRIVER_DEFAULT_TABLE_CHARACTER_FORMAT
419#ELSE
420 #REPLACE DF_DRIVER_DEFAULT_TABLE_CHARACTER_FORMAT |CI1115
421#ENDIF
422#IFDEF DF_DRIVER_DRIVER_THOUSANDS_SEPARATOR
423#ELSE
424 #REPLACE DF_DRIVER_DRIVER_THOUSANDS_SEPARATOR |CI1116
425#ENDIF
426#IFDEF DF_DRIVER_APPLICATION_CHARACTER_FORMAT
427#ELSE
428 #REPLACE DF_DRIVER_APPLICATION_CHARACTER_FORMAT |CI1117
429#ENDIF
430#IFDEF DF_DRIVER_DRIVER_DATE_FORMAT
431#ELSE
432 #REPLACE DF_DRIVER_DRIVER_DATE_FORMAT |CI1118
433#ENDIF
434#IFDEF DF_DRIVER_LAST_ERROR_TEXT
435#ELSE
436 #REPLACE DF_DRIVER_LAST_ERROR_TEXT |CI1119
437#ENDIF
438#IFDEF DF_DRIVER_DRIVER_DATE_SEPARATOR
439#ELSE
440 #REPLACE DF_DRIVER_DRIVER_DATE_SEPARATOR |CI1120
441#ENDIF
442#IFDEF DF_DRIVER_CONNECTION_ID
443#ELSE
444 #REPLACE DF_DRIVER_CONNECTION_ID |CI1121
445#ENDIF
446#IFDEF DF_DRIVER_IGNORE_UCASE_SUPPORT
447#ELSE
448 #REPLACE DF_DRIVER_IGNORE_UCASE_SUPPORT |CI1122
449#ENDIF
450#IFDEF DF_DRIVER_CONNECTION_ID_STRING
451#ELSE
452 #REPLACE DF_DRIVER_CONNECTION_ID_STRING |CI1123
453#ENDIF
454#IFDEF DF_DRIVER_IGNORE_WARNINGS
455#ELSE
456 #REPLACE DF_DRIVER_IGNORE_WARNINGS |CI1124
457#ENDIF
458#IFDEF DF_DRIVER_USE_DF_LOCKERROR
459#ELSE
460 #REPLACE DF_DRIVER_USE_DF_LOCKERROR |CI1126
461#ENDIF
462#IFDEF DF_DRIVER_FIND_CACHE_TIMEOUT
463#ELSE
464 #REPLACE DF_DRIVER_FIND_CACHE_TIMEOUT |CI1128
465#ENDIF
466#IFDEF DF_DRIVER_JIT_TRESHOLD
467#ELSE
468 #REPLACE DF_DRIVER_JIT_TRESHOLD |CI1130
469#ENDIF
470#IFDEF DF_DRIVER_TRUNCATE_BINARY_ZEROES
471#ELSE
472 #REPLACE DF_DRIVER_TRUNCATE_BINARY_ZEROES |CI1132
473#ENDIF
474#IFDEF DF_DRIVER_ERROR_DEBUG_MODE
475#ELSE
476 #REPLACE DF_DRIVER_ERROR_DEBUG_MODE |CI1134
477#ENDIF
478#IFDEF DF_DRIVER_USE_CACHE
479#ELSE
480 #REPLACE DF_DRIVER_USE_CACHE |CI1136
481#ENDIF
482#IFDEF DF_DRIVER_REPORT_CACHE_ERRORS
483#ELSE
484 #REPLACE DF_DRIVER_REPORT_CACHE_ERRORS |CI1138
485#ENDIF
486#IFDEF DF_DRIVER_USE_CACHE_EXPIRATION
487#ELSE
488 #REPLACE DF_DRIVER_USE_CACHE_EXPIRATION |CI1140
489#ENDIF
490#IFDEF DF_DRIVER_DEFAULT_USE_DUMMY_ZERO_DATE
491#ELSE
492 #REPLACE DF_DRIVER_DEFAULT_USE_DUMMY_ZERO_DATE |CI1142
493#ENDIF
494#IFDEF DF_DRIVER_DEFAULT_RECORD_IDENTITY_HIDING
495#ELSE
496 #REPLACE DF_DRIVER_DEFAULT_RECORD_IDENTITY_HIDING |CI1144
497#ENDIF
498#IFDEF DF_DRIVER_REPORT_ACTIVE_COLUMN_ERRORS
499#ELSE
500 #REPLACE DF_DRIVER_REPORT_ACTIVE_COLUMN_ERRORS |CI1146
501#ENDIF
502#IFDEF DF_DRIVER_SILENT_LOGIN
503#ELSE
504 #REPLACE DF_DRIVER_SILENT_LOGIN |CI1148
505#ENDIF
506#IFDEF DF_DRIVER_DEFAULT_MAP_TO_RECNUM
507#ELSE
508 #REPLACE DF_DRIVER_DEFAULT_MAP_TO_RECNUM |CI1150
509#ENDIF
510#IFDEF DF_DRIVER_CONNECTION_ID_OPTIONS
511#ELSE
512 #REPLACE DF_DRIVER_CONNECTION_ID_OPTIONS |CI1152
513#ENDIF
514#IFDEF DF_DRIVER_NUMBER_CONNECTION_IDS
515#ELSE
516 #REPLACE DF_DRIVER_NUMBER_CONNECTION_IDS |CI1154
517#ENDIF
518#IFDEF DF_DRIVER_DEFAULT_DEFAULT_DATETIME
519#ELSE
520 #REPLACE DF_DRIVER_DEFAULT_DEFAULT_DATETIME |CI1155
521#ENDIF
522#IFDEF DF_DRIVER_DEFAULT_NULLABLE_DATETIME
523#ELSE
524 #REPLACE DF_DRIVER_DEFAULT_NULLABLE_DATETIME |CI1156
525#ENDIF
526#IFDEF DF_DRIVER_MATCH_CLIENT_SERVER_VERSION
527#ELSE
528 #REPLACE DF_DRIVER_MATCH_CLIENT_SERVER_VERSION |CI1158
529#ENDIF
530#IFDEF DF_DRIVER_SQLSERVER_CLIENT_VERSION
531#ELSE
532 #REPLACE DF_DRIVER_SQLSERVER_CLIENT_VERSION |CI1160
533#ENDIF
534
535//*** Replacement for logical column number that indicates all columns
536#REPLACE DF_ALL_COLUMNS -1
537
538//*** Possible DF_FILE_GENERATE_RECORD_ID_METHOD values
539#REPLACE RIM_NONE 0
540#REPLACE RIM_IDENTITY_COLUMN 1
541#REPLACE RIM_DISPENSER_TABLE 2
542#REPLACE RIM_EXTERNAL 3
543
544//*** Possible DF_FIELD_READ_ONLY values
545#REPLACE RO_NO 0
546#REPLACE RO_IGNORECHANGE 1
547#REPLACE RO_ACCEPTCHANGE 2
548#REPLACE RO_ERRORONCHANGE 3
549
550//*** Possible DF_DRIVER_SQLSERVER_CLIENT_VERSION values
551#REPLACE SQLSERVERUNKNOWNCLIENT 0
552#REPLACE SQLSERVER2000CLIENT 8 // "SQL Server"
553#REPLACE SQLSERVER2005CLIENT 9 // "SQL Native Client"
554#REPLACE SQLSERVER2008CLIENT 10 // "SQL Server Native Client 10.0"
555
556//*** Possible SQL Column type values
557Define SQL_UNKNOWN_TYPE For 0
558Define SQL_CHAR For 1
559Define SQL_NUMERIC For 2
560Define SQL_DECIMAL For 3
561Define SQL_INTEGER For 4
562Define SQL_SMALLINT For 5
563Define SQL_FLOAT For 6
564Define SQL_REAL For 7
565Define SQL_DOUBLE For 8
566Define SQL_DATETIME For 9
567Define SQL_VARCHAR For 12
568Define SQL_TYPE_DATE For 91
569Define SQL_TYPE_TIME For 92
570Define SQL_TYPE_TIMESTAMP For 93
571
572Define SQL_DATE For 9
573Define SQL_INTERVAL For 10
574Define SQL_TIME For 10
575Define SQL_TIMESTAMP For 11
576Define SQL_LONGVARCHAR For (-1)
577Define SQL_BINARY For (-2)
578Define SQL_VARBINARY For (-3)
579Define SQL_LONGVARBINARY For (-4)
580Define SQL_BIGINT For (-5)
581Define SQL_TINYINT For (-6)
582Define SQL_BIT For (-7)
583Define SQL_WCHAR For (-8)
584Define SQL_WVARCHAR For (-9)
585Define SQL_WLONGVARCHAR For (-10)
586Define SQL_GUID For (-11)
587
588//*** Driver level attributes
589#REPLACE DRVR_TOKEN_BASE |CI1000
590#REPLACE DRVR_ATTRIBUTE_START (DRVR_TOKEN_BASE + |CI19)
591#REPLACE DRVR_DEFAULT_NULLABLE_ASCII (DRVR_ATTRIBUTE_START)
592#REPLACE DRVR_DEFAULT_NULLABLE_NUMERIC (DRVR_ATTRIBUTE_START + 1)
593#REPLACE DRVR_DEFAULT_NULLABLE_DATE (DRVR_ATTRIBUTE_START + 2)
594#REPLACE DRVR_DEFAULT_NULLABLE_TEXT (DRVR_ATTRIBUTE_START + 3)
595#REPLACE DRVR_DEFAULT_NULLABLE_BINARY (DRVR_ATTRIBUTE_START + 4)
596#REPLACE DRVR_DEFAULT_DEFAULT_ASCII (DRVR_ATTRIBUTE_START + 5)
597#REPLACE DRVR_DEFAULT_DEFAULT_NUMERIC (DRVR_ATTRIBUTE_START + 6)
598#REPLACE DRVR_DEFAULT_DEFAULT_DATE (DRVR_ATTRIBUTE_START + 7)
599#REPLACE DRVR_DEFAULT_DEFAULT_TEXT (DRVR_ATTRIBUTE_START + 8)
600#REPLACE DRVR_DEFAULT_DEFAULT_BINARY (DRVR_ATTRIBUTE_START + 9)
601#REPLACE DRVR_MAX_ACTIVE_STATEMENTS (DRVR_ATTRIBUTE_START + 10)
602#REPLACE DRVR_ERROR_DEBUG_MODE (DRVR_ATTRIBUTE_START + 11)
603#REPLACE DRVR_DRIVER_DECIMAL_SEPARATOR (DRVR_ATTRIBUTE_START + 12)
604#REPLACE DRVR_DRIVER_THOUSANDS_SEPARATOR (DRVR_ATTRIBUTE_START + 13)
605#REPLACE DRVR_DRIVER_DATE_FORMAT (DRVR_ATTRIBUTE_START + 14)
606#REPLACE DRVR_DRIVER_DATE_SEPARATOR (DRVR_ATTRIBUTE_START + 15)
607#REPLACE DRVR_USE_CACHE (DRVR_ATTRIBUTE_START + 16)
608#REPLACE DRVR_REPORT_CACHE_ERRORS (DRVR_ATTRIBUTE_START + 17)
609#REPLACE DRVR_CACHE_PATH (DRVR_ATTRIBUTE_START + 18)
610#REPLACE DRVR_USE_CACHE_EXPIRATION (DRVR_ATTRIBUTE_START + 19)
611#REPLACE DRVR_DEFAULT_TABLE_CHARACTER_FORMAT (DRVR_ATTRIBUTE_START + 20)
612#REPLACE DRVR_APPLICATION_CHARACTER_FORMAT (DRVR_ATTRIBUTE_START + 21)
613#REPLACE DRVR_DUMMY_ZERO_DATE_VALUE (DRVR_ATTRIBUTE_START + 22)
614#REPLACE DRVR_DEFAULT_USE_DUMMY_ZERO_DATE (DRVR_ATTRIBUTE_START + 23)
615#REPLACE DRVR_IGNORE_UCASE_SUPPORT (DRVR_ATTRIBUTE_START + 24)
616#REPLACE DRVR_LASTERRORTEXTLENGTH (DRVR_ATTRIBUTE_START + 25)
617#REPLACE DRVR_LASTERRORTEXT (DRVR_ATTRIBUTE_START + 26)
618#REPLACE DRVR_DEFAULTRECORDIDHIDING (DRVR_ATTRIBUTE_START + 35)
619#REPLACE DRVR_REPORTACTIVECOLUMNERRORS (DRVR_ATTRIBUTE_START + 36)
620
621
622//*** Error number constants
623#REPLACE CLIERR_GENERAL_ERROR 12289
624#REPLACE CLIERR_CANT_INITIALIZE 12290
625#REPLACE CLIERR_CANT_DEINITIALIZE 12291
626#REPLACE CLIERR_BAD_OR_NO_PRIMARY_INDEX_SPECIFIED 12292
627#REPLACE CLIERR_LOGIN_UNSUCCESSFUL 12293
628#REPLACE CLIERR_LOGOUT_UNSUCCESSFUL 12294
629#REPLACE CLIERR_TABLE_NOT_IN_CONNECTION 12295
630#REPLACE CLIERR_NULL_VALUE_NOT_ALLOWED 12296
631#REPLACE CLIERR_SEGMENT_NUMBER_RANGE 12297
632#REPLACE CLIERR_INDEX_NUMBER_RANGE 12298
633#REPLACE CLIERR_LOGIN_ATTRIBUTE_MUST_BE_SET 12299
634#REPLACE CLIERR_PHYSICAL_NAME_MUST_BE_SET 12300
635#REPLACE CLIERR_INVALID_REGISTRATION_FILE 12301
636#REPLACE CLIERR_LICENSE_EXPIRED 12302
637#REPLACE CLIERR_DEADLOCK_OR_TIMEOUT 12303
638#REPLACE CLIERR_SQL_ERROR 12304
639#REPLACE CLIERR_SQLINVALID_CLI_STMT_HANDLE 12305
640#REPLACE CLIERR_SQLINVALID_CLI_CONN_HANDLE 12306
641#REPLACE CLIERR_SQLINVALID_DRIVER_ID 12307
642#REPLACE CLIERR_SQLINVALID_BIND_FILE 12308
643#REPLACE CLIERR_SQLINVALID_COLUMN 12309
644#REPLACE CLIERR_SQLINVALID_ATTRIBUTE 12310
645#REPLACE CLIERR_SQLINVALID_BUFFER 12311
646#REPLACE CLIERR_INVALID_CONFIGURATION_KEYWORD 12312
647#REPLACE CLIERR_NOUNIQUEINDEX 12313
648#REPLACE CLIERR_UCSEGMENT_NOT_SUPPORTED 12314
649#REPLACE CLIERR_FIELDREADONLY 12315
650#REPLACE CLIERR_DBPROPERROR 12316
651#REPLACE CLIERR_CANTSETRECNUMINACTIVE 12317
652#REPLACE CLIERR_CANTCHANGEINACTIVECOLUMN 12318
653#REPLACE CLIERR_FIELDISINACTIVE 12319
654#REPLACE CLIERR_NOT_INSTALLED 12320
655#REPLACE CLIERR_CANT_FIND_TERMLIST 12321
656#REPLACE CLIERR_CANT_READ_TERMLIST 12322
657#REPLACE CLIERR_MAX_USERS_EXCEEDED 12323
658#REPLACE CLIERR_USER_COUNT_FILE_ERROR 12324
659#REPLACE CLIERR_CANT_INIT_USER_COUNT 12325
660#REPLACE CLIERR_USER_COUNT_FILE_NOT_FOUND 12326
661#REPLACE CLIERR_USER_COUNT_FILE_CANT_READ 12327
662#REPLACE CLIERR_USER_COUNT_FILE_CANT_DECRYPT 12328
663#REPLACE CLIERR_USER_COUNT_FILE_BAD_VERSION 12329
664#REPLACE CLIERR_CANTCREATE_RECNUMISZERO 12330
665#REPLACE CLIERR_CANTGETCOLUMNINFO 12331
666#REPLACE CLIERR_INVALIDDATABASEHANDLE 12332
667#REPLACE CLIERR_TYPENUMBEROUTOFRANGE 12333
668#REPLACE CLIERR_LOCKERRORNUMBEROUTOFRANGE 12334
669#REPLACE CLIERR_CONNECTIONIDOUTOFRANGE 12335
670#REPLACE CLIERR_CONNECTIONIDNOTFOUND 12336
671#REPLACE CLIERR_RELATIONOUTOFRANGE 12337
672#REPLACE CLIERR_NOTANEXPRESSEDITION 12338
673
674
675//*** Call driver function identifiers
676#REPLACE CLI_CONSTRAINT 10000
677#REPLACE CLI_SETDRIVERATTRIBUTE 10001
678#REPLACE CLI_GETDRIVERATTRIBUTE 10002
679#REPLACE CLI_BROWSECONNECT 10003
680#REPLACE CLI_DATASOURCES 10004
681#REPLACE CLI_CKREVISION 10005
682#REPLACE CLI_INITDATASOURCES 10006
683#Replace CLI_ENUMERATE_TABLES 10007
684#Replace CLI_TABLENAME 10008
685#Replace CLI_TABLESCHEMA 10009
686#Replace CLI_TABLETYPE 10010
687#Replace CLI_TABLECOMMENT 10011
688#Replace CLI_ENUMERATE_COLUMNS 10012
689#Replace CLI_COLUMNNAME 10013
690#Replace CLI_DUMPSTATUS 10014
691#Replace CLI_READCONFIGURATION 10015
692#Replace CLI_GETDBATTRIBUTE0 10016
693#Replace CLI_GETDBATTRIBUTE 10017
694#Replace CLI_GETREGNAME 10018
695#Replace CLI_GETSERIALNUM 10019
696#Replace CLI_GETMAXUSERS 10020
697#Replace CLI_BCP 10021
698#Replace CLI_DROPINDICES 10022
699#Replace CLI_CREATEINDICES 10023
700#Replace CLI_REDIRECTCONNECTION 10024
701#Replace CLI_CREATECONNECTIONID 10025
702#Replace CLI_DELETECONNECTIONID 10026
703
704
705//*** Init data source types
706#REPLACE SQL_FETCH_ALL 2
707#REPLACE SQL_FETCH_USER 31
708#REPLACE SQL_FETCH_SYSTEM 32
709
710
711//*** Dummy strings used in the commands
712#IFDEF CLI$StrDummy
713#ELSE
714 String CLI$StrDummy 255
715 Integer CLI$IntDummy
716#ENDIF
717
718
719//*****************************************************************************
720//*** CLI_SetConstraint <FileNum> <NewState> ***
721//*** ***
722//*** Setup a constraint for a file. ***
723//*****************************************************************************
724
725#COMMAND CLI_SetConstraint R R R .
726 Call_driver !1 !3 Function CLI_Constraint Callback 0 Passing !2 CLI$StrDummy CLI$IntDummy Result CLI$IntDummy
727#ENDCOMMAND
728
729
730
731//*****************************************************************************
732//*** CLI_Set_Driver_Atrtribute / CLI_Get_Driver_Attribute ***
733//*** ***
734//*** Set or get an attribute at driver level. These attributes, when set, ***
735//*** will be set for the remainder of the session or until set again. To ***
736//*** permanently set driver level attributes change the driver ***
737//*** configuration file. ***
738//*****************************************************************************
739
740#COMMAND CLI_Get_Driver_Attribute R R "TO" R .
741 Move (Repeat(Character(" "), 255)) To CLI$StrDummy
742 Call_driver 0 !1 Function CLI_GETDRIVERATTRIBUTE Callback 0 Passing CLI$StrDummy CLI$IntDummy !2 Result CLI$IntDummy
743 Move (Left(CLI$StrDummy, Pos(Character(0), CLI$StrDummy) - 1)) To !4
744#ENDCOMMAND
745
746#COMMAND CLI_Set_Driver_Attribute R R "TO" R .
747 Call_driver 0 !1 Function CLI_SETDRIVERATTRIBUTE Callback 0 Passing !4 CLI$StrDummy !2 Result CLI$IntDummy
748#ENDCOMMAND
749
750
751#COMMAND CLI_Get_Database_Attribute R R R
752 #IFSAME !4 TO
753 Move (Repeat(Character(" "), 255)) To CLI$StrDummy
754 Call_driver 0 !1 Function CLI_GETDBATTRIBUTE Callback 0 Passing CLI$StrDummy !3 !2 Result CLI$IntDummy
755 Move (Left(CLI$StrDummy, Pos(Character(0), CLI$StrDummy) - 1)) To !5
756 #ELSE IFSAME !5 TO
757 Move "" To CLI$StrDummy
758 Call_driver 0 !1 Function CLI_GETDBATTRIBUTE0 Callback 0 Passing CLI$StrDummy CLI$StrDummy !4 Result CLI$IntDummy
759 Move (Repeat(Character(" "), 255)) To CLI$StrDummy
760 Call_driver 0 !1 Function CLI_GETDBATTRIBUTE Callback 0 Passing CLI$StrDummy !3 !2 Result CLI$IntDummy
761 Move (Left(CLI$StrDummy, Pos(Character(0), CLI$StrDummy) - 1)) To !6
762 #ENDIF
763#ENDCOMMAND
764
765
766
767//*****************************************************************************
768//*** Class : cCLIHandler ***
769//*** Purpose: An instance of this class can be used as a broker object to ***
770//*** call several CLI releated methods. ***
771//*****************************************************************************
772
773Class cCLIHandler Is An Array
774
775 Procedure Construct_Object Integer iImage
776 Forward Send Construct_object iImage
777
778 Property String psDriverID Public ""
779 End_Procedure // Construct_Object
780
781
782
783 //***
784 //*** Fucntion: CKRevsion
785 //*** Purpose : The revsion of a CLI Connectivity Kit
786 //***
787
788 Function CKRevision Returns String
789 Local String sDriverID
790 Local String sRevision
791 Local String sVoid
792 Local Integer iRetval
793
794 Get psDriverID To sDriverID
795 If (sDRiverID <> "") Begin
796 Move (Repeat(" ", 255)) To sRevision
797 Call_Driver 0 sDRiverID Function CLI_CKREVISION Callback 0 Passing sRevision sVoid 0 Result iRetval
798 End
799
800 Function_Return sRevision
801 End_Function // CKRevision
802
803
804
805 //***
806 //*** Function: ExtractPartFromRevision
807 //*** Purpose : Extarct the Nth part of a a.b.c.d revsion string.
808 //***
809 //*** Returns : The part version number or -1 if there is no such part number.
810 //***
811
812 Function ExtractPartFromRevision Integer iPartNum String sRevision Returns Integer
813 Local Integer iPartRev
814 Local Integer iCurrentPart
815 Local Integer iSeparatorPos
816
817 If (iPartNum > 4) ;
818 Function_Return -1
819
820 Move 0 To iCurrentPart
821 Repeat
822 Move (Pos(".", sRevision)) To iSeparatorPos
823 If (iSeparatorPos > 0) Begin
824 Move (Left(sRevision, iSeparatorPos - 1)) To iPartRev
825 Move (Right(sRevision, Length(sRevision) - iSeparatorPos)) To sRevision
826 Increment iCurrentPart
827 End
828 Else If (sRevision <> "") Begin
829 Move sRevision To iPartRev
830 Move "" To sRevision
831 Increment iCurrentPart
832 End
833 Else ;
834 Move -1 To iPartRev
835 Until (iCurrentPart >= iPartNum Or iPartRev = -1)
836
837 Function_Return iPartRev
838 End_Function // EcxtractPartFromRevision
839
840
841
842 //***
843 //*** Function: CKMajorRevision
844 //*** Purpose : Returns the major revision of the CK
845 //***
846
847 Function CKMajorRevision Returns Integer
848 Function_Return (ExtractPartFromRevision (Current_Object, 1, CKRevision(Current_Object)))
849 End_Function // CKMajorRevision
850
851
852
853 //***
854 //*** Function: CKMinorRevision
855 //*** Purpose : Returns the minor revision of the CK
856 //***
857
858 Function CKMinorRevision Returns Integer
859 Function_Return (ExtractPartFromRevision (Current_Object, 2, CKRevision(Current_Object)))
860 End_Function // CKMinorRevision
861
862
863
864 //***
865 //*** Function: CKReleaseRevision
866 //*** Purpose : Returns the release revision of the CK
867 //***
868
869 Function CKReleaseRevision Returns Integer
870 Function_Return (ExtractPartFromRevision (Current_Object, 3, CKRevision(Current_Object)))
871 End_Function // CKReleaseRevision
872
873
874
875 //***
876 //*** Function: CKBuildRevision
877 //*** Purpose : Returns the major revision of the CK
878 //***
879
880 Function CKBuildRevision Returns Integer
881 Function_Return (ExtractPartFromRevision (Current_Object, 4, CKRevision(Current_Object)))
882 End_Function // CKBuildRevision
883
884
885
886 //***
887 //*** Function: IsMinimalRevision
888 //*** Purpose : Determines if the CK conforms to a passed minimal revsion.
889 //***
890
891 Function IsMinimalRevision Integer iMajor Integer iMinor Integer iRelease Integer iBuild Returns Integer
892 If (iMajor < CKMajorRevision(Current_object)) ;
893 Function_return (TRUE)
894 Else If (iMajor = CKMajorRevision(Current_object)) Begin
895 If (iMinor < CKMinorRevision(Current_object)) ;
896 Function_return (TRUE)
897 Else If (iMinor = CKMinorRevision(Current_object)) Begin
898 If (iRelease < CKReleaseRevision(Current_object)) ;
899 Function_return (TRUE)
900 Else If (iRelease = CKReleaseRevision(Current_object) And iBuild <= CKBuildRevision(Current_object)) ;
901 Function_return (TRUE)
902 End
903 End
904
905 Function_Return (FALSE)
906 End_Function // IsMinimalRevision
907
908
909
910 //***
911 //*** Function: RegistrationName
912 //*** Purpose : Returns the Connectiivty Kit registration name.
913 //***
914
915 Function RegistrationName Returns String
916 Local String sRegistration
917 Local String sDRiverId
918 Local String sVoid
919 Local Integer iRetval
920
921 Get psDriverID To sDriverID
922 If (sDRiverID <> "") Begin
923 Move (Repeat(" ", 255)) To sRegistration
924 Call_Driver 0 sDRiverID Function CLI_GETREGNAME Callback 0 Passing sRegistration sVoid 0 Result iRetval
925 End
926
927 Function_Return sRegistration
928 End_Function // RegistrationName
929
930
931
932 //***
933 //*** Function: SerialNumber
934 //*** Purpose : Returns the Connectiivty Kit serial number.
935 //***
936
937 Function SerialNumber Returns Integer
938 Local String sDRiverId
939 Local String sVoid
940 Local Integer iRetval
941
942 Get psDriverID To sDriverID
943 If (sDRiverID <> "") Begin
944 Call_Driver 0 sDRiverID Function CLI_GETSERIALNUM Callback 0 Passing sVoid sVoid 0 Result iRetval
945 End
946
947 Function_Return iRetval
948 End_Function // SerialNumber
949
950
951
952 //***
953 //*** Function: MaxUsers
954 //*** Purpose : Returns the Connectiivty Kit maximum number of users.
955 //***
956
957 Function MaxUsers Returns Integer
958 Local String sDRiverId
959 Local String sVoid
960 Local Integer iRetval
961
962 Get psDriverID To sDriverID
963 If (sDRiverID <> "") Begin
964 Call_Driver 0 sDRiverID Function CLI_GETMAXUSERS Callback 0 Passing sVoid sVoid 0 Result iRetval
965 End
966
967 Function_Return iRetval
968 End_Function // MaxUsers
969
970
971
972 //***
973 //*** Procedure: DumpStatus
974 //*** Purpose : Dump the current status of the drver in the passed disk file.
975 //***
976
977 Procedure DumpStatus String sFileName
978 Local String sVoid
979 Local String sDriverID
980 Local Integer iVoid
981
982 Get psDriverID To sDriverID
983 If (sDriverID <> "") ;
984 Call_driver 0 sDriverID Function CLI_DUMPSTATUS Callback 0 Passing sFileName sVoid iVoid Result iVoid
985 End_Procedure // DumpStatus
986
987
988
989 //***
990 //*** Procedure: ReadConfiguration
991 //*** Purpose : Reset all driver level configurable attributes to the
992 //*** default value and then reread the configuration.
993 //***
994
995 Procedure ReadConfiguration
996 Local String sVoid
997 Local String sDriverID
998 Local Integer iVoid
999
1000 Get psDriverID To sDriverID
1001 If (sDriverID <> "") ;
1002 Call_driver 0 sDriverID Function CLI_READCONFIGURATION Callback 0 Passing sVoid sVoid iVoid Result iVoid
1003 End_Procedure // ReadConfiguration
1004
1005
1006
1007 //***
1008 //*** Function: TextToRIMValue
1009 //*** Purpose : Convert a text to the corresponding
1010 //*** Generate_Record_ID_Method attribute value
1011 //***
1012
1013 Function TextToRIMValue String sText Returns Integer
1014 If (sText = "None") ;
1015 Function_return RIM_NONE
1016 Else If (sText = "Identity Column") ;
1017 Function_return RIM_IDENTITY_COLUMN
1018 Else If (sText = "Dispenser Table") ;
1019 Function_return RIM_DISPENSER_TABLE
1020 Else If (sText = "External") ;
1021 Function_return RIM_EXTERNAL
1022 End_Function // TextToRIMValue
1023
1024
1025
1026 //***
1027 //*** Function: RIMValueTotext
1028 //*** Purpose : Convert a Generate_Record_ID_Method attribute value to the
1029 //*** corresponding text.
1030 //***
1031
1032 Function RIMValueToText Integer iAttrValue Returns String
1033 If (iAttrValue = RIM_NONE) ;
1034 Function_return "None"
1035 Else If (iAttrValue = RIM_IDENTITY_COLUMN) ;
1036 Function_return "Identity Column"
1037 Else If (iAttrValue = RIM_DISPENSER_TABLE) ;
1038 Function_return "Dispenser Table"
1039 Else If (iAttrValue = RIM_EXTERNAL) ;
1040 Function_return "External"
1041 End_Function // RIMValueToText
1042
1043
1044
1045 //***
1046 //*** Function: TextToROValue
1047 //*** Purpose : Convert a text to the corresponding
1048 //*** Generate_Record_ID_Method attribute value
1049 //***
1050
1051 Function TextToROValue String sText Returns Integer
1052 If (sText = "No") ;
1053 Function_return RO_NO
1054 Else If (sText = "Ignore Change") ;
1055 Function_return RO_IGNORECHANGE
1056 Else If (sText = "Accept Change") ;
1057 Function_return RO_ACCEPTCHANGE
1058 Else If (sText = "Error On Change") ;
1059 Function_return RO_ERRORONCHANGE
1060 End_Function // TextToRIMValue
1061
1062
1063
1064 //***
1065 //*** Function: ROValueTotext
1066 //*** Purpose : Convert a Generate_Record_ID_Method attribute value to the
1067 //*** corresponding text.
1068 //***
1069
1070 Function ROValueToText Integer iAttrValue Returns String
1071 If (iAttrValue = RO_NO) ;
1072 Function_return "No"
1073 Else If (iAttrValue = RO_IGNORECHANGE) ;
1074 Function_return "Ignore Change"
1075 Else If (iAttrValue = RO_ACCEPTCHANGE) ;
1076 Function_return "Accept Change"
1077 Else If (iAttrValue = RO_ERRORONCHANGE) ;
1078 Function_return "Error On Change"
1079 End_Function // RIMValueToText
1080
1081
1082
1083 //***
1084 //*** Function: LastDriverError
1085 //*** Purpose : Return the text f the last error geneated by the driver.
1086 //***
1087
1088 Function LastDriverError Returns String
1089 Local String sDriverID
1090 Local String sLastError
1091 Local String sLastErrorLength
1092 Local Integer iLastErrorLength
1093 Local Integer iVoid
1094
1095 //*** Initialize
1096 Move "" To sLastError
1097
1098 Get psDriverID To sDriverID
1099 If (sDriverID <> "") Begin
1100 //*** Get the text of the last error
1101 Move (Repeat(Character(" "), 14)) To sLastErrorlength
1102 Call_driver 0 sDriverID Function CLI_GETDRIVERATTRIBUTE Callback 0 Passing sLastErrorLength iVoid DRVR_LASTERRORTEXTLENGTH Result iVoid
1103 Move (Left(sLastErrorLength, Pos(Character(0), sLastErrorLength) - 1)) To iLastErrorLength
1104
1105 If (iLastErrorLength > 0) Begin
1106 Move (Repeat(Character(" "), iLastErrorLength + 1)) To sLastError
1107 Call_driver 0 sDriverID Function CLI_GETDRIVERATTRIBUTE Callback 0 Passing sLastError iVoid DRVR_LASTERRORTEXT Result iVoid
1108 Move (Left(sLastError, Pos(Character(0), sLastError) - 1)) To sLastError
1109 End
1110 End
1111
1112 Function_Return sLastError
1113 End_Function // LastDriverError
1114
1115
1116
1117 //***
1118 //*** Function: EnumerateTables
1119 //*** Purpose : Enumerate the tables in a database
1120 //***
1121
1122 Function EnumerateTables String sLogin Returns Integer
1123 Local String sDriver
1124 Local String sVoid
1125 Local Integer iNumTables
1126 Local Integer iVoid
1127
1128 Get psDriverID To sDriver
1129 If (sDriver <> "") ;
1130 Call_driver 0 sDriver Function CLI_ENUMERATE_TABLES Callback 0 Passing sLogin sVoid iVoid Result iNumTables
1131
1132 Function_Return iNumTables
1133 End_Function // EnumerateTables
1134
1135
1136
1137 //***
1138 //*** Function: TableName
1139 //*** Purpose : Returns the name of the table enumerated at the given position
1140 //***
1141
1142 Function TableName Integer iIndex Returns String
1143 Local String sDriver
1144 Local String sTableName
1145 Local String sVoid
1146 Local Integer iVoid
1147
1148 Get psDriverID To sDriver
1149 If (sDriver <> "") Begin
1150 Move (Repeat(" ", 255)) To sTableName
1151 Call_driver 0 sDriver Function CLI_TABLENAME Callback 0 Passing sTableName sVoid iIndex Result iVoid
1152 End
1153
1154 Function_Return sTableName
1155 End_Function // TableName
1156
1157
1158
1159 //***
1160 //*** Function: SchemaName
1161 //*** Purpose : Returns the name of the schema of the table enumerated at the given position
1162 //***
1163
1164 Function SchemaName Integer iIndex Returns String
1165 Local String sDriver
1166 Local String sSchemaName
1167 Local String sVoid
1168 Local Integer iVoid
1169
1170 Get psDriverID To sDriver
1171 If (sDriver <> "") Begin
1172 Move (Repeat(" ", 255)) To sSchemaName
1173 Call_driver 0 sDriver Function CLI_TABLESCHEMA Callback 0 Passing sSchemaName sVoid iIndex Result iVoid
1174 End
1175
1176 Function_Return sSchemaName
1177 End_Function // SchemaName
1178
1179
1180
1181 //***
1182 //*** Function: TableType
1183 //*** Purpose : Returns the type of the table enumerated at the given position.
1184 //*** Types can be "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
1185 //*** "LOCAL TEMPORARY", "ALIAS", "SYNONYM"
1186 //***
1187
1188 Function TableType Integer iIndex Returns String
1189 Local String sDriver
1190 Local String sTableType
1191 Local String sVoid
1192 Local Integer iVoid
1193
1194 Get psDriverID To sDriver
1195 If (sDriver <> "") Begin
1196 Move (Repeat(" ", 25)) To sTableType
1197 Call_driver 0 sDriver Function CLI_TABLETYPE Callback 0 Passing sTableType sVoid iIndex Result iVoid
1198 End
1199
1200 Function_Return sTableType
1201 End_Function // TableType
1202
1203
1204
1205 //***
1206 //*** Function: TableComment
1207 //*** Purpose : Returns the comment of the table enumerated at the given position
1208 //***
1209
1210 Function TableComment Integer iIndex Returns String
1211 Local String sDriver
1212 Local String sTableComment
1213 Local String sVoid
1214 Local Integer iVoid
1215
1216 Get psDriverID To sDriver
1217 If (sDriver <> "") Begin
1218 Move (Repeat(" ", 255)) To sTableComment
1219 Call_driver 0 sDriver Function CLI_TABLECOMMENT Callback 0 Passing sTableComment sVoid iIndex Result iVoid
1220 End
1221
1222 Function_Return sTableComment
1223 End_Function // TableComment
1224
1225
1226
1227 //***
1228 //*** Function: EnumerateColumns
1229 //*** Purpose : Enumerate the columns in a table
1230 //***
1231
1232 Function EnumerateColumns String sLogin String sTableName Returns Integer
1233 Local String sDriver
1234 Local Integer iNumColumns
1235 Local Integer iVoid
1236
1237 Get psDriverID To sDriver
1238 If (sDriver <> "") ;
1239 Call_driver 0 sDriver Function CLI_ENUMERATE_COLUMNS Callback 0 Passing sLogin sTablename iVoid Result iNumColumns
1240
1241 Function_Return iNumColumns
1242 End_Function // EnumerateColumns
1243
1244
1245
1246 //***
1247 //*** Function: ColumnName
1248 //*** Purpose : Returns the name of the column enumerated at the given position
1249 //***
1250
1251 Function ColumnName Integer iIndex Returns String
1252 Local String sDriver
1253 Local String sColumnName
1254 Local String sVoid
1255 Local Integer iVoid
1256
1257 Get psDriverID To sDriver
1258 If (sDriver <> "") Begin
1259 Move (Repeat(" ", 255)) To sColumnName
1260 Call_driver 0 sDriver Function CLI_COLUMNNAME Callback 0 Passing sColumnName sVoid iIndex Result iVoid
1261 End
1262
1263 Function_Return sColumnName
1264 End_Function // ColumnName
1265
1266
1267
1268 //***
1269 //*** Function: CLIDFDateToSQLDate
1270 //*** Purpose : Convert a DataFlex date to a SQL date using the dummy zero date value.
1271 //***
1272
1273 Function CLIDFDateToSQLDate String sDRiver Date dDFDate Returns String
1274 Local String sSQLDate
1275 Local Integer iOrgDateFmt
1276 Local Integer iOrgDateSep
1277
1278 //*** Change date format to military, SQL dates are military dates
1279 Get_Attribute DF_DATE_FORMAT To iOrgDateFmt
1280 Get_Attribute DF_DATE_SEPARATOR To iOrgDateSep
1281 Set_Attribute DF_DATE_FORMAT To DF_DATE_MILITARY
1282 Set_Attribute DF_DATE_SEPARATOR To (Ascii('-'))
1283
1284 //*** We only need to convert if the date is 0
1285 If (Integer(dDFDate = 0)) ;
1286 CLI_Get_Driver_Attribute sDRiver DRVR_DUMMY_ZERO_DATE_VALUE To sSQLDate
1287 Else ;
1288 Move dDFDate To sSQLDate
1289
1290 //*** Change date format back to original
1291 Set_Attribute DF_DATE_FORMAT To iOrgDateFmt
1292 Set_Attribute DF_DATE_SEPARATOR To iOrgDateSep
1293
1294 Function_Return sSQLDate
1295 End_Function // CLIDFDateToSQLDate
1296
1297
1298
1299 //***
1300 //*** Function: CLISQLDateToDFDate
1301 //*** Purpose : Convert a SQL date to a DataFlex date using the dummy zero date value.
1302 //***
1303
1304 Function CLISQLDateToDFDate String sDRiver String sSQLDate Returns Date
1305 Local Date dDFDate
1306 Local String sDummyDateValue
1307 Local Integer iOrgDateFmt
1308 Local Integer iOrgDateSep
1309
1310 //*** Change date format to military, SQL dates are military dates
1311 Get_Attribute DF_DATE_FORMAT To iOrgDateFmt
1312 Get_Attribute DF_DATE_SEPARATOR To iOrgDateSep
1313 Set_Attribute DF_DATE_FORMAT To DF_DATE_MILITARY
1314 Set_Attribute DF_DATE_SEPARATOR To (Ascii('-'))
1315
1316 //*** We only need to convert if the date is the dummy zero date value
1317 CLI_Get_Driver_Attribute sDRiver DRVR_DUMMY_ZERO_DATE_VALUE To sDummyDateValue
1318 If (sDummyDateValue = sSQLDate) ;
1319 Move 0 To dDFDate
1320 Else ;
1321 Move sSQLDate To dDFDate
1322
1323 //*** Change date format back to original
1324 Set_Attribute DF_DATE_FORMAT To iOrgDateFmt
1325 Set_Attribute DF_DATE_SEPARATOR To iOrgDateSep
1326
1327 Function_Return dDFDate
1328 End_Function // CLISQLDateToDFDate
1329
1330
1331
1332 //***
1333 //*** Function: RedirectConnection
1334 //*** Purpose : Redirect an exisitng connection. The existing connection
1335 //*** will point to another database but all tables will stay
1336 //*** open!
1337 //***
1338
1339 Function RedirectConnection String sOldConnection String sNewConnection Returns Integer
1340 Local String sDriver
1341 Local String sVoid
1342 Local Integer iResult
1343 Local Integer iVoid
1344
1345 Get psDriverID To sDriver
1346 If (sDriver <> "") Begin
1347 Call_driver 0 sDriver Function CLI_REDIRECTCONNECTION Callback 0 Passing sOldConnection sNewConnection iVoid Result iResult
1348 End
1349 Function_Return iResult
1350 End_Function // RedirectConnect
1351
1352
1353
1354 //***
1355 //*** Function: CreateConnectionID
1356 //*** Purpose : Create a DataFlex side connection id that can be used later on.
1357 //***
1358
1359 Function CreateConnectionID String sID String sConnStr Integer iOpt Returns Integer
1360 Local String sDriver
1361 Local Integer iResult
1362 Local Integer iOptions
1363
1364 Get psDriverID to sDriver
1365 If (Num_Arguments = 2) ;
1366 Move 0 to iOptions
1367 Else ;
1368 Move iOpt to iOptions
1369 If (sDriver <> "") Begin
1370 Call_Driver 0 sDriver Function CLI_CREATECONNECTIONID Callback 0 Passing sID sConnStr iOptions Result iResult
1371 End
1372 Function_Return iResult
1373 End_Function // CreateConnectionID
1374
1375
1376
1377 //***
1378 //*** Function: DeleteConnectionID
1379 //*** Purpose : Delete a DataFlex side connection id.
1380 //***
1381
1382 Function DeleteConnectionID String sID Integer iIndex Returns Integer
1383 Local String sDriver
1384 Local Integer iResult
1385 Local String sVoid
1386
1387 Get psDriverID To sDriver
1388 If (sDriver <> "") Begin
1389 Call_Driver 0 sDriver Function CLI_DELETECONNECTIONID Callback 0 Passing sID sVoid iIndex Result iResult
1390 End
1391 Function_Return iResult
1392 End_Function // DeleteConnectionID
1393
1394End_Class // cCLIHandler
1395