00001 {@********************************************************}
00002 { Copyright (c) 1999-2006 Zeos Development Group }
00003 { }
00004 { License Agreement: }
00005 { }
00006 { This library is distributed in the hope that it will be }
00007 { useful, but WITHOUT ANY WARRANTY; without even the }
00008 { implied warranty of MERCHANTABILITY or FITNESS FOR }
00009 { A PARTICULAR PURPOSE. See the GNU Lesser General }
00010 { Public License for more details. }
00011 { }
00012 { The source code of the ZEOS Libraries and packages are }
00013 { distributed under the Library GNU General Public }
00014 { License (see the file COPYING / COPYING.ZEOS) }
00015 { with the following modification: }
00016 { As a special exception, the copyright holders of this }
00017 { library give you permission to link this library with }
00018 { independent modules to produce an executable, }
00019 { regardless of the license terms of these independent }
00020 { modules, and to copy and distribute the resulting }
00021 { executable under terms of your choice, provided that }
00022 { you also meet, for each linked independent module, }
00023 { the terms and conditions of the license of that module. }
00024 { An independent module is a module which is not derived }
00025 { from or based on this library. If you modify this }
00026 { library, you may extend this exception to your version }
00027 { of the library, but you are not obligated to do so. }
00028 { If you do not wish to do so, delete this exception }
00029 { statement from your version. }
00030 { }
00031 { }
00032 { The project web site is located on: }
00033 { http:
00034 { http:
00035 { svn:
00036 { }
00037 { http:
00038 { http:
00039 { }
00040 { }
00041 { }
00042 { Zeos Development Group. }
00043 {********************************************************@}
00044
00045 unit ZPlainASA7;
00046
00047 interface
00048
00049 {$I ZPlain.inc}
00050
00051 {$J+}
00052
00053 uses Classes, ZPlainLoader, ZCompatibility, ZPlainASADriver;
00054
00055 { ***************** Plain API Constants definition **************** }
00056
00057 const
00058 WINDOWS_DLL_LOCATION = 'DBLIB7.DLL';
00059 LINUX_DLL_LOCATION = 'libdblib7.so';
00060
00061 { ****************** Plain API Types definition ***************** }
00062
00063 type
00064 TASABasic = function( sqlca: PZASASQLCA): Integer;
00065 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00066
00067 TASABasicWithParam = function( sqlca: PZASASQLCA; Params: PChar): LongWord;
00068 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00069
00070 TASAfind_engine = function( sqlca: PZASASQLCA; Params: PChar): Word;
00071 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00072
00073 TASAAlloc_sqlda = function( NumVar: LongWord): PASASQLDA;
00074 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00075
00076 TASAfill_sqlda = function( Parameter: PASASQLDA): PASASQLDA;
00077 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00078
00079 TASAfill_s_sqlda = function( Parameter: PASASQLDA; MaxLength: Integer): PASASQLDA;
00080 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00081
00082 TASAProc_sqlda = procedure( Parameter: PASASQLDA);
00083 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00084
00085 TASAdbpp_setConnect = procedure( sqlca: PZASASQLCA; ConnName: PChar);
00086 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00087
00088 TASAdbpp_describe_cursor = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00089 Descriptor: PASASQLDA; SomeNumber: LongWord);
00090 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00091
00092 TASAdbpp_prepare_into = procedure( sqlca: PZASASQLCA; UnKnown: PChar;
00093 ProgName: PChar; RecordStatementNum: PSmallInt; SqlStatement: PChar;
00094 Descriptor1: PASASQLDA; Descriptor2: PASASQLDA; SomeNumber: LongWord);
00095 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00096
00097 TASAdbpp_prepare_describe = procedure( sqlca: PZASASQLCA; UnKnown: PChar;
00098 ProgName: PChar; RecordStatementNum: PSmallInt; SqlStatement: PChar;
00099 Descriptor1: PASASQLDA; Descriptor2: PASASQLDA; WhatToDesc: LongWord;
00100 LongNames: Word);
00101 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00102
00103 TASAdbpp_select = procedure( sqlca: PZASASQLCA; UnKnown: PChar;
00104 ProgName: PChar; RecordStatementNum: PSmallInt; Descriptor1,
00105 Descriptor2: PASASQLDA);
00106 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00107
00108 TASAdbpp_open = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00109 UnKnown: PChar; ProgName: PChar; RecordStatementNum: PSmallInt;
00110 Descriptor1: PASASQLDA; BlockSize: SmallInt; IsolationLvl: SmallInt;
00111 Options : Word);
00112 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00113
00114 TASAdbpp_close = procedure( sqlca: PZASASQLCA; CursorName: PChar);
00115 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00116
00117 TASAdbpp_fetch = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00118 Offset: Word; RelPositon: LongInt; Descriptor1: PASASQLDA;
00119 BlockSize: SmallInt; Options: Word);
00120 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00121
00122 TASAdbpp_declare = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00123 UnKnown: PChar; ProgName: PChar; RecordStatementNum: PSmallInt;
00124 Options: Word);
00125 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00126
00127 TASAdbpp_dropstmt = procedure( sqlca: PZASASQLCA; UnKnown: PChar;
00128 ProgName: PChar; RecordStatementNum: PSmallInt);
00129 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00130
00131 TASAdbpp_describe = procedure( sqlca: PZASASQLCA; UnKnown: PChar;
00132 ProgName: PChar; RecordStatementNum: PSmallInt; Descriptor: PASASQLDA;
00133 WhatToDesc: Word);
00134 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00135
00136 TASAdbpp_delete = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00137 UnKnown1: PChar; UnKnown2: PChar);
00138 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00139
00140 TASAdbpp_update = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00141 Descriptor: PASASQLDA);
00142 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00143
00144 TASAdbpp_execute_imm = procedure( sqlca: PZASASQLCA; SqlRecordStatement: PChar;
00145 UnKnown1: Word);
00146 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00147
00148 TASAdbpp_put_into = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00149 Descriptor: PASASQLDA; UnKnown1: PASASQLDA);
00150 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00151
00152 TASAdbpp_put_array = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00153 Descriptor: PASASQLDA; Into_sqlda: PASASQLDA; Rows: Word);
00154 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00155
00156 TASAdbpp_commit = procedure( sqlca: PZASASQLCA; SomeNumber: LongWord);
00157 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00158
00159 TASAdbpp_rollback = procedure( sqlca: PZASASQLCA; SomeNumber: LongWord);
00160 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00161
00162 TASAdbpp_execute_into = procedure( sqlca: PZASASQLCA; UnKnown: PChar;
00163 ProgName: PChar; RecordStatementNum: PSmallInt; Descriptor1: PASASQLDA;
00164 Descriptor2: PASASQLDA);
00165 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00166
00167 TASAdbpp_get_data = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00168 ColumnNumber: Word; Offset: LongInt; Descriptor1: PASASQLDA;
00169 Unknown: Word);
00170 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00171
00172 TASAdbpp_explain = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00173 SomeNumber1: Word; Descriptor1: PASASQLDA);
00174 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00175
00176 TASASQLCallback = procedure() {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00177
00178 TASAdb_register_a_callback = procedure( sqlca: PZASASQLCA;
00179 CBIdx: integer; Proc: TASASQLCallback);
00180 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00181
00182 TASAdbpp_setoption = procedure( sqlca: PZASASQLCA; Temporary: LongInt;
00183 User: PChar; Option: PChar; Descriptor: PASASQLDA);
00184 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00185
00186 TASAdbpp_fetch_array = procedure( sqlca: PZASASQLCA; CursorName: PChar;
00187 Offset: Word; RelPositon: LongInt; Descriptor1: PASASQLDA;
00188 BlockSize: SmallInt; Options: Word; ArrayWidth: Word);
00189 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00190
00191 TASAerror_message = function( sqlca: PZASASQLCA; Buffer: PChar;
00192 MaxSize: Integer): PChar;
00193 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00194
00195 TASAdbpp_resume = procedure( sqlca: PZASASQLCA; CursorName: PChar);
00196 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00197
00198 TASAdb_cancel_request = function( sqlca: PZASASQLCA): Integer;
00199 {$IFNDEF LINUX} stdcall {$ELSE} cdecl {$ENDIF};
00200
00201 { ************* Plain API Function variables definition ************ }
00202
00203 var
00204 sqlerror_message: TASAerror_message;
00205 db_init: TASABasic;
00206 db_fini: TASABasic;
00207 db_string_connect: TASABasicWithParam;
00208 db_string_disconnect: TASABasicWithParam;
00209 db_find_engine: TASABasicWithParam;
00210 db_start_engine: TASABasicWithParam;
00211 db_stop_engine: TASABasicWithParam;
00212 db_start_database: TASABasicWithParam;
00213 db_stop_database: TASABasicWithParam;
00214 alloc_sqlda: TASAAlloc_sqlda;
00215 free_sqlda: TASAProc_sqlda;
00216 free_sqlda_noind: TASAProc_sqlda;
00217 fill_sqlda: TASAfill_sqlda;
00218 free_filled_sqlda: TASAProc_sqlda;
00219 fill_s_sqlda: TASAfill_s_sqlda;
00220 dbpp_setConnect: TASAdbpp_setConnect;
00221 dbpp_describe_cursor: TASAdbpp_describe_cursor;
00222 dbpp_disconnect: TASAdbpp_setConnect;
00223 dbpp_prepare_into: TASAdbpp_prepare_into;
00224 dbpp_prepare_describe: TASAdbpp_prepare_describe;
00225 dbpp_select: TASAdbpp_select;
00226 dbpp_open: TASAdbpp_open;
00227 dbpp_close: TASAdbpp_close;
00228 dbpp_fetch: TASAdbpp_fetch;
00229 dbpp_declare: TASAdbpp_declare;
00230 dbpp_dropstmt: TASAdbpp_dropstmt;
00231 dbpp_describe: TASAdbpp_describe;
00232 dbpp_delete: TASAdbpp_delete;
00233 dbpp_update: TASAdbpp_update;
00234 dbpp_execute_imm: TASAdbpp_execute_imm;
00235 dbpp_put_into: TASAdbpp_put_into;
00236 dbpp_put_array: TASAdbpp_put_array;
00237 dbpp_commit: TASAdbpp_commit;
00238 dbpp_rollback: TASAdbpp_rollback;
00239 dbpp_execute_into: TASAdbpp_execute_into;
00240 dbpp_get_data: TASAdbpp_get_data;
00241 dbpp_explain: TASAdbpp_explain;
00242 db_register_a_callback: TASAdb_register_a_callback;
00243 dbpp_setoption: TASAdbpp_setoption;
00244 dbpp_fetch_array: TASAdbpp_fetch_array;
00245 dbpp_resume: TASAdbpp_resume;
00246 db_cancel_request: TASAdb_cancel_request;
00247
00248 var
00249 LibraryLoader: TZNativeLibraryLoader;
00250
00251 implementation
00252
00253 type
00254 {** Implements a loader for ASA native library. }
00255 TZASANativeLibraryLoader = class (TZNativeLibraryLoader)
00256 public
00257 function Load: Boolean; override;
00258 end;
00259
00260 { TZASANativeLibraryLoader }
00261
00262 {**
00263 Loads a library module.
00264 @return <code>True</code> if library was successfully loaded.
00265 }
00266 function TZASANativeLibraryLoader.Load: Boolean;
00267 begin
00268 Result := inherited Load;
00269
00270 @sqlerror_message := GetAddress('sqlerror_message');
00271 @db_init := GetAddress('db_init');
00272 @db_fini := GetAddress('db_fini');
00273 @db_string_connect := GetAddress('db_string_connect');
00274 @db_string_disconnect := GetAddress('db_string_disconnect');
00275 @db_find_engine := GetAddress('db_find_engine');
00276 @db_start_engine := GetAddress('db_start_engine');
00277 @db_stop_engine := GetAddress('db_stop_engine');
00278 @db_start_database := GetAddress('db_start_database');
00279 @db_stop_database := GetAddress('db_stop_database');
00280 @alloc_sqlda := GetAddress('alloc_sqlda');
00281 @fill_sqlda := GetAddress('fill_sqlda');
00282 @fill_s_sqlda := GetAddress('fill_s_sqlda');
00283 @free_filled_sqlda := GetAddress('free_filled_sqlda');
00284 @free_sqlda := GetAddress('free_sqlda');
00285 @free_sqlda_noind := GetAddress('free_sqlda_noind');
00286 @dbpp_setConnect := GetAddress('dbpp_setconnect');
00287 @dbpp_disconnect := GetAddress('dbpp_disconnect');
00288 @dbpp_prepare_into := GetAddress('dbpp_prepare_into');
00289 @dbpp_describe_cursor := GetAddress('dbpp_describe_cursor');
00290 @dbpp_prepare_describe := GetAddress('dbpp_prepare_describe');
00291 @dbpp_select := GetAddress('dbpp_select');
00292 @dbpp_open := GetAddress('dbpp_open');
00293 @dbpp_close := GetAddress('dbpp_close');
00294 @dbpp_fetch := GetAddress('dbpp_fetch');
00295 @dbpp_declare := GetAddress('dbpp_declare');
00296 @dbpp_dropstmt := GetAddress('dbpp_dropstmt');
00297 @dbpp_describe := GetAddress('dbpp_describe');
00298 @dbpp_delete := GetAddress('dbpp_delete');
00299 @dbpp_update := GetAddress('dbpp_update');
00300 @dbpp_put_into := GetAddress('dbpp_put_into');
00301 @dbpp_put_array := GetAddress('dbpp_put_array');
00302 @dbpp_execute_imm := GetAddress('dbpp_execute_imm');
00303 @dbpp_commit := GetAddress('dbpp_commit');
00304 @dbpp_rollback := GetAddress('dbpp_rollback');
00305 @dbpp_execute_into := GetAddress('dbpp_execute_into');
00306 @dbpp_get_data := GetAddress('dbpp_get_data');
00307 @dbpp_explain := GetAddress('dbpp_explain');
00308 @dbpp_setoption := GetAddress('dbpp_setoption');
00309 @dbpp_fetch_array := GetAddress('dbpp_fetch_array');
00310 @db_register_a_callback := GetAddress('db_register_a_callback');
00311 @dbpp_resume := GetAddress('dbpp_resume');
00312 @db_cancel_request := GetAddress('db_cancel_request');
00313 end;
00314
00315 initialization
00316 LibraryLoader := nil;
00317 {$IFNDEF LINUX}
00318 LibraryLoader := TZASANativeLibraryLoader.Create(
00319 [WINDOWS_DLL_LOCATION]);
00320 {$ELSE}
00321 LibraryLoader := TZASANativeLibraryLoader.Create(
00322 [LINUX_DLL_LOCATION]);
00323 {$ENDIF}
00324
00325 finalization
00326 if Assigned( LibraryLoader) then
00327 LibraryLoader.Free;
00328 end.
00329