What's New

<<Download IBExpert|IBExpert| Online documentation>>

IBExpert 2021.09.04

Minor bugfixes and improvements


IBExpert 2021.08.01

Minor bugfixes and improvements


IBExpert 2021.07.09

Minor bugfixes and improvements


IBExpert 2021.06.17

Minor bugfixes and improvements


IBExpert 2021.02.09

and bugfix version 2021.02.16

 

Note: some of the following feature were introduced in earlier versions, but not documented.

1. Database Explorer

  • Package nodes now contain child nodes with package routines (procedures and functions).
  • Dragging package routine nodes into code editors has been implemented, with a choice of autogenerated statements.
  • SQL Assistant for packages has been implemented.

2. Table Editor

  • Log tab: added the possibility to disable automatic refresh of log data.

To disable automatic refresh put the following function call into "After IBExpert starts" event block:

    ibec_SetGlobalVar('IBE$TDL_DISABLE_AUTO_REFRESH', TRUE);

To disable the automatic refresh for a specified database:

    ibec_SetGlobalVar('IBE$TDL_DISABLE_AUTO_REFRESH.123', TRUE);

where 123 is a unique identifier of the registered database.

3. Package Editor

  • Commenting and uncommenting package procedures and functions implemented.
  • [Ctrl] + [C] shortcut in the list of package routines displays "Copy to clipboard" dialog with a choice of autogenerated statements.

4. Data Form View

  • Support of mouse wheel implemented.

5. Stored procedure/Function Editor

  • Emulation of procedure/function plan for Firebird 3, 4 databases.

6. Procedure/Function/Trigger Editors

  • Fixed the problem with missing body for external procedures/functions/triggers which have a non-empty source.
  • Parameters grid, Lazy mode: for domain-based parameters it is now possible to copy the domain comment to parameter comment. To enable this put following the function call into the "After IBExpert starts" event block:
 
ibec_SetGlobalVar('IBE$PRMFM_COPY_DOMAIN_COMMENT', TRUE);

To enable for a specified database only:

    ibec_SetGlobalVar('IBE$PRMFM_COPY_DOMAIN_COMMENT.123', TRUE);

where 123 is an unique identifier of the registered database.

7. Export data into script

  • The possibility to put statements into Firebird blocks (EXECUTE BLOCK) has been implemented.

8. Extract metadata

  • The possibility to put DML statements into Firebird blocks (EXECUTE BLOCK) has been implemented.
  • "Use REINSERT" option is ignored when the "Put statements in blocks" option is selected.

9. Table Data Comparer

  • The possibility to compare system (RDB$*) tables has been implemented.
  • "Use UNIQUE constraint in case of missing PRIMARY KEY constraint" option has been implemented.

For system (RDB$*) tables UNIQUE constraints will be used automatically, for user tables this option should be enabled manually if it is really necessary.

  • If two or more UNIQUE constraints are defined for a table, a random constraint will be used to identify records.
  • Online synchronization ignores DML statements generated for system tables.

10. IBEBlock

  • ibec_CompareTables: UseUniques option has been implemented to allow the comparison of tables which have a UNIQUE constraint instead of a PRIMARY KEY.
  • ibec_ExtractMetadata: UseBlocks and CommitBlocks options have been implemented.
  • ibec_CastEx function implemented.

In comparison with the ibec_Cast function, ibec_CastEx doesn't raise an exception if casting is impossible, instead it returns a specified DefaultValue.

Syntax:

    function ibec_CastEx(Value : variant; CastToType : integer; DefaultValue : variant) : variant;  

11. Other minor bugfixes and improvements

back to top of page


IBExpert 2021.01.07

 

1. Bugfixes, for example the grid view in Trace and Audit.

2. Help / Download IBExpert

This new menu item allows you to enter and store your IBExpert Download Center data once, so that in future, you can download all new IBExpert setup files onto the registered computer without any additional steps, as long as your subscription is still valid.


IBExpert 2020.12.06

 

1. Stored procedures now also display a plan in Firebird 3.0

2. Minor bug fixes and small improvements

back to top of page


IBExpert 2020.09.21

and bugfix version 2020.11.26

 

New IBEScript.dll interface

There are new interface functions implemented to allow a user application to communicate with IBEBlocks:

  1. Set IBEBlock parameters from the user application.
  2. Get IBEBlock output values.
  3. Perform user callback in any place of IBEBlock code passing data from within a block and returning user data back to a block,
 

1.New interface functions

1. ibesScriptInit - creates and initializes a scripter instance.

Syntax

 function ibesScriptInit : THandle; 

This function has no arguments and returns the handle of a script object.

2. ibesScriptFinalize - destroys a script object.

Syntax

 function ibesScriptFinalize(AScript : THandle) : integer; 

AScript is a valid handle to a scripter object created with the ibesScriptInit function. This function always returns 0 (zero).

3. ibesScriptSetConnection - sets an external connection for a script object.

Syntax

 function ibesScriptSetConnection(AScript : THandle; AConnection : THandle) : integer; 

AScript is a valid handle to a scripter object created with the ibesScriptInit function.
AConnection is a valid handle to a connection object created with the ibesConnectionInit function.

You don't need to set a connection if your script establishes it by itself or doesn't need any connection at all.

4. ibesScriptSetCallback - sets a specified callback function for a script object.

Syntax

 function ibesScriptSetCallback(AScript : THandle; AFunctionID : integer; AFunc : pointer) : integer;

AScript is a valid handle to a scripter object created with the ibesScriptInit function.
AFunctionID is an identifier of a callback function, see IBEScriptIntf.pas and the demo application (found in the program sub-directory IBExpert/IBEScriptDll/DemoApp) for a list of supported callback functions and their identifiers.
AFunc is a pointer to a callback function.

This function returns 0 (zero) if it succeeds, otherwise it returns a non-zero value.

5. ibesScriptExecuteText - executes a script from a specified string.

Syntax

 function ibesScriptExecuteText(AScript : THandle; AScriptText : PAnsiChar; AOptions : PAnsiChar) : integer;

AScript is a valid handle to a scripter object created with the ibesScriptInit function.
AScriptText is a string with script source.
AOptions argument is reserved for future use.

6. ibesScriptExecuteFile - executes a script from a specified file.

Syntax

 function ibesScriptExecuteFile(AScript : THandle; AFileName : PAnsiChar; AOptions : PAnsiChar) : integer;

AScript is a valid handle to a scripter object created with the ibesScriptInit function.
AFileName is a name of an existing script file.
AOptions argument is reserved for future use.

7. ibesConnectionInit connects to a database with specified connection parameters.

Syntax

 function ibesConnectionInit(AParams : PAnsiChar; AConnectErrorCallbacFunc : TConnectErrorCallbackFunc) : THandle;

AParams is a string with connection params. Syntax of the params string is the same as to the Connect function: IBEScript.dll documentation.
AConnectErrorCallbacFunc is a pointer to a callback function which will be fired in case of a connection error.

ibesConnectionInit returns a connection object handle (if successful) which should be used as an argument with the ibesScriptSetConnection function.

8. ibesConnectionFinalize - performs a disconnect for the specified connection object and destroys the specified connection object.

Syntax

 function ibesConnectionFinalize(AConnection : THandle) : integer;

The return value is 0 (zero).

The following new callback functions have been implemented:

1. TScriptIBEBlockProgressFunc = function(ABlockName, AProgressMessage : PAnsiChar) : integer; stdcall;

Similar to the old TBlockProgressFunc but also provides the block name for named blocks.
This function is called by the ibec_ProgressMessage function.

2. TScriptIBEBlockSuspendFunc = function(ABlockName, ASuspendData : PAnsiChar) : integer; stdcall;

This callback function is fired when SUSPEND is executed within a block. ASuspendData contains values of all output parameters in JSON format. See the demo app for an example.

3. TScriptIBEBlockGetInputParamsFunc = function(ABlockName : PAnsiChar) : PAnsiChar; stdcall;

This callback function is fired before the execution of the block and allows you to set values of block input parameters.
The user application should return a string which contains JSON data as in the example below:

 {
   "input": {
     "byname": true,
     "items": [
       {
         "name": "FirstParam",
         "value": 321
       },
       {
         "name": "SecondArrayParam",
         "value": [
           123.321,
           123.321
         ]
       },
       {
         "name": "ThirdParam",
         "value": true 
       }
     ]
   }
 }

4. TScriptIBEBlockUserCallbackFunc = function(ABlockName, AUserData : PAnsiChar) : PAnsiChar; stdcall;

This function is intended for communication between IBEBlock and the user application. It is fired when the @IBEScript.DoUserCallback function is executed.
Call it to pass data from a block and get a response if necessary:

  sResponse = @IBEScript.DoUserCallback('Should I do that?');
  if (sResponse = 'YES') then
    ...
  else
    ...;

See the demo application for more details.

5. All functions described above provide ABlockName argument which contains the name of the block if execution of that block was initiated as below:

  EXECUTE IBEBLOCK MYBLOCK ...

If the block name is missing ABlockName parameter will contain an empty string.

back to top of page


IBExpert 2020.09.13

1.Stored Procedure/Function Editor

  • Recompilation of dependent functions implemented (FB 3,4).

2. SQL Editor

  • Queries with a clause like "where (field = :PARAM) or (:PARAM IS NULL)" are now processed correctly: it is possible to specify any valid parameter value, not only NULL or NOT NULL.

3. Grant Manager

  • Improved performance (updating and filtering) while working with databases which contain thousands of DB objects and hundred thousands of grant records.

4. Data grids

  • Fixed problems with selecting a master record from popup grid when PK/FK values are of CHAR(16) (UUID) type.

5. Script Executive

  • OUTPUT statement: MemoAsText option implemented.
    If this option is specified blob values of subtype 1 (TEXT) will be exported as strings.

6. Extract Metadata

  • "Explicit COMMIT after each DDL statement" option implemented.
    This will add the COMMIT statement after each DDL statement in the result script.

7. IBEBlock

  • Support of POST_EVENT function implemented.
  • Set of functions for work with JSON data implemented.
  • ibec_ExtractMetadata: ExplicitDDLCommit option implemented, see above.
  • ibec_CompareMetadata: object filtering implemented.
    To exclude some database objects from the comparison it is necessary to process them in the callback block.
    For example see the IBEBlock page in the Database Comparer form.
  • ibec_CompareTables: a lot of additional statistical/progress information is passed to a callback block.
    See the IBEBlock page in the Table Data Comparer form for a full list of available data.
  • Namespaces implemented to divide IBEBlock functions and constants into categories without giving them long names starting with 'ibec_'.
    All new future functions will be implemented as namespace members.
    IBEBlock namespace is started with the @ character followed by a namespace name.
  • @IBEScript.DoUserCallback function implemented. It allows you to pass any user data in form of a string from IBEBlock to the user application and get a response.
    See IBEScriptIntf.pas and demo application for more info.
  • Support of the new IBEScript.dll interface.

8. IBEScript.dll

  • New set of interface functions implemented to handle work with the new callback functions.
    See IBEScriptIntf.pas and demo application for more info.

9. A lot of minor bug fixes and small improvements

back to top of page


IBExpert 2020.05.10

1. Database Explorer

  • Filtering of the Project View tree implemented.

2. Database Monitor

  • Fixed the issue with queries get messed up when two or more instances of the Database Monitor were started.
  • Fixed the problem with new queries disappearing after closing the Database Monitor.

3. Code Editor

  • Output parameters tip for the EXECUTE PROCEDURE statement implemented.
  • Parameter hints for new Firebird 4 functions (HEX_ENCODE, HEX_DECODE, MAKE_DBKEY, RDB$GET_TRANSACTION_CN) added.
  • Highlighting of new Firebird 4 keywords and reserved words.

4. Database Statistics

  • Statistics parsing has been improved.
  • Support of additional statistics data (Firebird 3, 4) in the table/index grids.
  • Fixed the problem with overflow of some statistics values which causes incorrect (mostly negative) data in table/index grids.

5. Option | Environment Options | User Database

  • Support of environment variables in a database path and client library name implemented.
    To use value of an environment variable as a part of a path enclose it between the percent chars:
    %USERPROFILE%\somedata\ibedb.fdb

There is IBE_APPDIR environment variable that contains the location of the IBExpert.exe directory.

6. Script Executive

  • SET DBTRIGGERS ON/OFF directive implemented.

If DBTRIGGERS is OFF all consequent CONNECT/RECONNECT statements will be executed with the isc_dbp_no_db_triggers flag. Default value is ON.

  • Add CONNECT statement feature adds SET DBTRIGGERS OFF automatically if the Supress database triggers option is specified in a database registration record.

7. Performance Data

  • Fixed the problem with overflow of some performance data values.

8. Event Blocks

  • Process the Code completion list event block implemented.

This event happens just before the Code Completion list appears, so the user can customize what to see and what to hide in that list. See the template block for example.

9. IBEBlock

  • ibec_CompareTables, ibec_CompareMetadata functions: NoConnect option implemented.

If this option is specified in the option string the result script will not contain CONNECT statement and corresponding SET NAMES, SET SQL DIALECT and SET CLIENTLIB directives.

  • ibec_CompareMetadata: AppendMode option implemented.

If this option is specified and the file ScriptFile already exists the resulting script will be appended to the ScriptFile. Otherwise a new file will be created or an existing file will be overwritten.

  • ibec_CompareTables: Return option implemented.

By default, this function returns null, but now it is possible to force it to return the total number of different records: specify Return=DiffCount in the option string.

  • ibec_CompareMetadata: Return option implemented.

By default, ibec_CompareMetadata returns null, but it is possible to force it to return the total number of actions (CREATE/ALTER/DROP etc.) in the result script: specify Return=ActionCount in the option string. Normally ActionCount = 0 if there are no differences found.

  • ibec_ExecSQLScript: TransactionParams (or TrParams) option implemented.

This option can be used to specify the initial transaction isolation level for the SQL script. Transaction parameters should be separated with a colon or semicolon: TrParams="read_committed,rec_version,nowait"

10. New IBEBlock functions

11. Minor bug fixes and small improvements

back to top of page


IBExpert 2020.01.06

and bugfix version 2020.02.12

1. Test Data Generator

  • Initial support of DECFLOAT / NUMERIC(38) fields (Firebird 4).

2. Data Grid

  • Support of DECFLOAT and NUMERIC(38) fields (Firebird 4): sorting, filtering and aggregate functions implemented.

3. SQL Editor

  • Support of UPDATE OR INSERT into another database implemented.

Syntax is similar to INSERT into another database:

    UPDATE OR INSERT into [another_database_alias].<table_name> 
    <select>  

4. Table/View Editor

  • Columns grid: [Ctrl] + [C] / [Ctrl] + [Ins] now copies name of focused field into the clipboard.

5. Blob Viewer

  • Support of JSON data format implemented.
    If blob data is modified using "As JSON" page IBExpert will try to remove all insignificant whitespaces before post.
    There is Remove whitespaces on post checkbox to control this behaviour.
    If there is a syntax error in JSON data - it will be posted "as is", without removing whitespaces.
  • JSON syntax highlighting is available also on As text page.

6. IBEBlock

  • ibec_BackupDatabase, ibec_RestoreDatabase, ibec_CreateConnection functions now support the WireCompression option (if both client and server support them).

    To enable compression it is necessary to specify 'WireCompression=TRUE' (or just 'WireCompression') in the options string.

7. Minor bug fixes and small improvements

back to top of page


IBExpert 2019.11.13

The free IBExpert Personal Edition and the IBExpert Developer Studio full versions now include a free IBExpert Watchdog Version S in the Tools directory. The S version may also be distributed free of charge.

back to top of page


IBExpert 2019.10.9

1. PSQL Debugger

  • Support of Trace Into for package routines and stored functions.
  • Support of DECFLOAT and NUMERIC(38, x) variables and parameters (Firebird 4).

2. SQL Editor

  • Support of DECFLOAT and NUMERIC(38,x) parameters (Firebird 4).

3. Trace and Audit

  • Analysis of large trace logs is now possible. The main idea is to retrieve only necessary items from a trace log file using the Grid View mode with applied filter criteria.
    It is also possible to save filtered data as a trace log file.

4. Database Designer

  • Support of identity columns (GENERATE BY DEFAULT AS IDENTITY and GENERATE ALWAYS BY IDENTITY).

5. Trigger Editor

  • Fixed bug with missing SQL SECURITY clause in lazy mode (Firebird 4).

6. Grant Manager

  • Fixed bug with missing USAGE privileges while working with a Firebird 4 database.

7. Minor bug fixes and small improvements

back to top of page
<<Download IBExpert|IBExpert| Online documentation>>