--- ibx/trunk/fbintf/client/FBAttachment.pas 2021/02/25 11:27:14 314 +++ ibx/trunk/fbintf/client/FBAttachment.pas 2021/02/25 11:56:36 315 @@ -79,6 +79,7 @@ type procedure EndAllTransactions; procedure DPBFromCreateSQL(CreateSQL: AnsiString); procedure SetParameters(SQLParams: ISQLParams; params: array of const); + procedure UseServerICUChanged; virtual; public destructor Destroy; override; function getFirebirdAPI: IFirebirdAPI; @@ -135,30 +136,56 @@ type function OpenArray(transaction: ITransaction; ArrayMetaData: IArrayMetaData; ArrayID: TISC_QUAD): IArray; overload; virtual; abstract; property SQLDialect: integer read FSQLDialect; property DPB: IDPB read FDPB; -public - function GetDBInformation(Requests: array of byte): IDBInformation; overload; - function GetDBInformation(Request: byte): IDBInformation; overload; - function GetDBInformation(Requests: IDIRB): IDBInformation; overload; - function GetConnectString: AnsiString; - function GetRemoteProtocol: AnsiString; - function GetAuthenticationMethod: AnsiString; - function GetSecurityDatabase: AnsiString; - function GetODSMajorVersion: integer; - function GetODSMinorVersion: integer; - {Character Sets} - function HasDefaultCharSet: boolean; - function GetDefaultCharSetID: integer; - function GetCharsetName(CharSetID: integer): AnsiString; - function CharSetID2CodePage(CharSetID: integer; var CodePage: TSystemCodePage): boolean; - function CodePage2CharSetID(CodePage: TSystemCodePage; var CharSetID: integer): boolean; - function CharSetName2CharSetID(CharSetName: AnsiString; var CharSetID: integer): boolean; - function CharSetWidth(CharSetID: integer; var Width: integer): boolean; - procedure RegisterCharSet(CharSetName: AnsiString; CodePage: TSystemCodePage; - AllowReverseLookup:boolean; out CharSetID: integer); - function GetBlobMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IBlobMetaData; virtual; abstract; - function GetArrayMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IArrayMetaData; virtual; abstract; - property CharSetID: integer read FCharSetID; - property CodePage: TSystemCodePage read FCodePage; + public + function GetDBInformation(Requests: array of byte): IDBInformation; overload; + function GetDBInformation(Request: byte): IDBInformation; overload; + function GetDBInformation(Requests: IDIRB): IDBInformation; overload; + function GetConnectString: AnsiString; + function GetRemoteProtocol: AnsiString; + function GetAuthenticationMethod: AnsiString; + function GetSecurityDatabase: AnsiString; + function GetODSMajorVersion: integer; + function GetODSMinorVersion: integer; + function HasDecFloatSupport: boolean; virtual; + + public + {Character Sets} + function HasDefaultCharSet: boolean; + function GetDefaultCharSetID: integer; + function GetCharsetName(CharSetID: integer): AnsiString; + function CharSetID2CodePage(CharSetID: integer; var CodePage: TSystemCodePage): boolean; + function CodePage2CharSetID(CodePage: TSystemCodePage; var CharSetID: integer): boolean; + function CharSetName2CharSetID(CharSetName: AnsiString; var CharSetID: integer): boolean; + function CharSetWidth(CharSetID: integer; var Width: integer): boolean; + procedure RegisterCharSet(CharSetName: AnsiString; CodePage: TSystemCodePage; + AllowReverseLookup:boolean; out CharSetID: integer); + function GetBlobMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IBlobMetaData; virtual; abstract; + function GetArrayMetaData(Transaction: ITransaction; tableName, columnName: AnsiString): IArrayMetaData; virtual; abstract; + property CharSetID: integer read FCharSetID; + property CodePage: TSystemCodePage read FCodePage; + + public + {Time Zone Support} + function GetTimeZoneServices: ITimeZoneServices; virtual; + function HasTimeZoneSupport: boolean; virtual; + + end; + + { TDPBItem } + + TDPBItem = class(TParamBlockItem,IDPBItem) + public + function getParamTypeName: AnsiString; override; + end; + + { TDPB } + + TDPB = class (TCustomParamBlock, IDPB) + protected + function LookupItemType(ParamTypeName: AnsiString): byte; override; + public + constructor Create(api: TFBClientAPI); + function GetDPBParamTypeName(ParamType: byte): Ansistring; end; implementation @@ -239,6 +266,106 @@ const (CharsetID: 69; CharSetName: 'GB18030'; CharSetWidth: 4; CodePage: 54936; AllowReverseLookup: true) ); +const + isc_dpb_last_dpb_constant = isc_dpb_decfloat_traps; + + DPBConstantNames: array[1..isc_dpb_last_dpb_constant] of string = ( + 'cdd_pathname', + 'allocation', + 'journal', + 'page_size', + 'num_buffers', + 'buffer_length', + 'debug', + 'garbage_collect', + 'verify', + 'sweep', + 'enable_journal', + 'disable_journal', + 'dbkey_scope', + 'number_of_users', + 'trace', + 'no_garbage_collect', + 'damaged', + 'license', + 'sys_user_name', + 'encrypt_key', + 'activate_shadow', + 'sweep_interval', + 'delete_shadow', + 'force_write', + 'begin_log', + 'quit_log', + 'no_reserve', + 'user_name', + 'password', + 'password_enc', + 'sys_user_name_enc', + 'interp', + 'online_dump', + 'old_file_size', + 'old_num_files', + 'old_file', + 'old_start_page', + 'old_start_seqno', + 'old_start_file', + 'drop_walfile', + 'old_dump_id', + 'wal_backup_dir', + 'wal_chkptlen', + 'wal_numbufs', + 'wal_bufsize', + 'wal_grp_cmt_wait', + 'lc_messages', + 'lc_ctype', + 'cache_manager', + 'shutdown', + 'online', + 'shutdown_delay', + 'reserved', + 'overwrite', + 'sec_attach', + 'disable_wal', + 'connect_timeout', + 'dummy_packet_interval', + 'gbak_attach', + 'sql_role_name', + 'set_page_buffers', + 'working_directory', + 'sql_dialect', + 'set_db_readonly', + 'set_db_sql_dialect', + 'gfix_attach', + 'gstat_attach', + 'set_db_charset', + 'gsec_attach', + 'address_path' , + 'process_id', + 'no_db_triggers', + 'trusted_auth', + 'process_name', + 'trusted_role', + 'org_filename', + 'utf8_ilename', + 'ext_call_depth', + 'auth_block', + 'client_version', + 'remote_protocol', + 'host_name', + 'os_user', + 'specific_auth_data', + 'auth_plugin_list', + 'auth_plugin_name', + 'config', + 'nolinger', + 'reset_icu', + 'map_attach', + 'session_time_zone', + 'set_db_replica', + 'set_bind', + 'decfloat_round', + 'decfloat_traps' + ); @@ -273,7 +400,7 @@ begin begin Stmt := Prepare(StartTransaction([isc_tpb_read,isc_tpb_nowait,isc_tpb_concurrency],taCommit), 'Select MON$CHARACTER_SET_ID, MON$REMOTE_PROTOCOL, MON$AUTH_METHOD, MON$SEC_DATABASE From MON$ATTACHMENTS, MON$DATABASE '+ - 'Where MON$ATTACHMENT_ID = CURRENT_CONNECTION'); + 'Where MON$ATTACHMENT_ID = CURRENT_CONNECTION '); ResultSet := Stmt.OpenCursor; if ResultSet.FetchNext then begin @@ -457,6 +584,11 @@ begin end; end; +procedure TFBAttachment.UseServerICUChanged; +begin + // Do nothing by default +end; + destructor TFBAttachment.Destroy; begin Disconnect(true); @@ -724,6 +856,11 @@ begin Result := FODSMinorVersion; end; +function TFBAttachment.HasDecFloatSupport: boolean; +begin + Result := false; +end; + function TFBAttachment.HasDefaultCharSet: boolean; begin Result := FHasDefaultCharSet @@ -868,5 +1005,55 @@ begin CharSetID := CharSets[0].AsInteger; end; +function TFBAttachment.GetTimeZoneServices: ITimeZoneServices; +begin + IBError(ibxeNotSupported,[]); +end; + +function TFBAttachment.HasTimeZoneSupport: boolean; +begin + Result := false; +end; + +{ TDPBItem } + +function TDPBItem.getParamTypeName: AnsiString; +begin + Result := DPBPrefix + DPBConstantNames[getParamType]; +end; + +{ TDPB } + +constructor TDPB.Create(api: TFBClientAPI); +begin + inherited Create(api); + FDataLength := 1; + FBuffer^ := isc_dpb_version1; +end; + +function TDPB.GetDPBParamTypeName(ParamType: byte): Ansistring; +begin + if ParamType <= isc_dpb_last_dpb_constant then + Result := DPBConstantNames[ParamType] + else + Result := ''; +end; + +function TDPB.LookupItemType(ParamTypeName: AnsiString): byte; +var i: byte; +begin + Result := 0; + ParamTypeName := LowerCase(ParamTypeName); + if (Pos(DPBPrefix, ParamTypeName) = 1) then + Delete(ParamTypeName, 1, Length(DPBPrefix)); + + for i := 1 to isc_dpb_last_dpb_constant do + if (ParamTypeName = DPBConstantNames[i]) then + begin + Result := i; + break; + end; +end; + end.