What's New

<<Download IBExpert|IBExpert| Online documentation>>

IBExpert 2023.11.22

Mainly bug fixes.


IBExpert 2023.10.27

1. Code Editor, Code Completion

Improved performance especially on databases with lot of objects. Suggesting possible joins based on existing relationships by foreign keys - call the Code Completion after JOIN keyword. There was a bug on some configurations in the previous version which caused IBExpert to freeze when the Code Completion is fires. Fixed in this version.

2. Database Inside

Support for Firebird 4 databases.

3. Partial support for Firebird 5 implemented

Support for all known syntax changes/additions in the PSQL parser:

  • SKIP LOCKED, WHEN NOT MATCHED BY SOURCE, parenthesized SELECTs etc.
  • However, there is NO support yet for parenthesized SELECTs in the Database Comparer.
  • Also the PSQL debugger doesn't allow to debug roitines with subroutines which reference variables in a main routine.
  • Support for new built-in functions in the Code Parameters hint.
  • Support for partial indices in the index editors and metadata extract.
  • Support for parallel workers in following IBEBlock functions:
    ibec_BackupDatabase, ibec_RestoreDatabase, @Services.RepairDatabase.

There is a new option available - ParallelWorkers (or just Parallel) - which allows to specify number of parallel workers (e.g. ParallelWorkers=4)

4. Other minor bugfixes and small improvements

back to top of page


IBExpert 2023.09.13

Mainly bug fixes.


IBExpert 2023.03.06

Bug fixes.

back to top of page


IBExpert 2022.11.14

and bugfixes 2022.11.28, 2022.12.02 & 2023.01.03

1. SQL Editor

  • Execute with commit (Ctrl+Alt+F9) feature implemented.
    This executes a query and performs a COMMIT immediately for queries that don't return a record set.
  • Autocommit feature for the current SQL Editor (Ctrl+Shift+M) implemented.
    If ON non-select queries will be committed immediately. There is also a corresponding button on the toolbar and an item in the SQL Editor menu.
  • Convert SELECT / WITH into IBEBlock (Ctrl+Shift+B) feature.
    Converts the current select/with query into IBEBlock.
    There is also a corresponding item in the SQL Editor menu.

2. Metadata Search

Web-style search implemented. Rules are:

  • By default AND condition is used: 'declare variable' will find all DDL's that contain both 'declare' and 'variable'
  • To use OR place '|' between words: 'declare | variable'
  • OR has lower priority than AND
  • To exclude words from a search use '-' before a word (without a space):
    'declare -variable -procedure'
  • To search for an exact match put a word or phrase inside quotes:
    "declare variable"
  • Complex expressions with parentheses are not supported
  • 'Whole words' and 'Case sensitive' options are taken into account

Details can be referred to in our online documentation: Search in Metadata.

3. Support of version history for stored Firebird and IBExpert blocks

4. Visual Options

  • Disable undocked toolbars option. This prevents toolbars from undocking.

5. IBEBlock

6. Embed web technologies

It is just replacement of embedded Internet Explorer that is used in IBE Direct, Blob Viewer and some other parts of IBExpert, with embedded Edge.

The lastest IBExpert includes a new feature to embed web technologies (HTML, CSS, and JavaScript). So, instead of using an external program to display PDF or JSON, we have implemented Microsoft edge WebView2 support. The WebView2 control uses Microsoft Edge as the rendering engine to display the web content in IBExpert.

However, some Windows versions do not include WebView2 Runtime.

If you encounter an error when starting IBExpert, please download and install the correct WebView2 Runtime from https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section for your OS version. Following installation, IBExpert should work as intended.

If you do not wish to install this additional Runtime on your server, you can disable (for the time being) WebView2 support and revert to using SumatraPDF by deleting WebView.dll and WebView2Loader.dll from your IBExpert install folder.

7. Minor bugfixes and improvements

back to top of page


IBExpert 2022.06.10

1. Data Grid

  • The possibility to edit UUID/OCTETS values directly in the grid in hexadecimal notation has been implemented.
    For UUID values (CHAR(16) CHARACTER SET OCTETS) the following formats of input data are accepted (examples):
 
3897C040-5DAE-4856-BDAF-F1BA2591AA13 3897C0405DAE4856BDAFF1BA2591AA13 {3897C040-5DAE-4856-BDAF-F1BA2591AA13} x'3897C0405DAE4856BDAFF1BA2591AA13'

For OCTETS values (CHAR(xx) CHARACTER SET OCTETS) the following formats of input data are accepted (examples):

    3897C0405DAE 
    x'4856BDAFF1BA2591'

Notation as x'<hexadecimal sequence>' is universal and may be used even if the UUID and OCTETS switches on the grid toolbar are off.

  • Same possibilities are available in the Form View.

2. PSQL Debugger

  • The values of UUID/OCTETS variables are now shown in hexadecimal format.
  • Editing of OCTETS/UUID values is available AsOCTETS and AsUUID, see description above.
  • Support of conditions in automatic breakpoints. The IBExpert PSQL debugger supports automatic breakpoint in the form of a special comment:
    -- IBE_BREAKPOINT 

or

    /* IBE_BREAKPOINT */

If the debugger meets such a comment, the next executable line in a PSQL source will be set as a breakpoint automatically. Now it is possible to simply specify the conditions in such breakpoints:

     
    -- IBE_BREAKPOINT (var_a = 20) or (var_b > 0)

3. Input Parameters Form

  • Editing of OCTETS/UUID values in hexadecimal format has been implemented, see above.

4. Event blocks

  • The "After database connected" event block processes a new output parameter DBEExtraCaption which may be used to replace default SQL dialect information followed by database alias in the Database Explorer.

Example of usage

    execute ibeblock(
      DatabaseID integer,
      IsReconnect boolean)
    returns (
      DBEExtraCaption variant default NULL)
    as
    begin
      DBConn = ibec_GetDefaultConnection();

      if (DatabaseID = 630) then  -- Show database version stored in some user table
        select '(Ver. ' || DBVERSION || ')' from DBCONFIG into :DBEExtraCaption;
      else -- Show server version, just for example
      begin
        sv = ibec_GetConnectionProp(DBConn, 'ServerVersion');
        DBEExtraCaption = '(' || sv || ')';
      end;
    end

5. SQL Editor

  • Added the F4 shortcut to toggle visibility of the Query Manager.

6. Code Editors, Find and Replace Text

  • Added support of substitutions when using regular expressions.

7. Table and View Editors

  • DDL page: included USAGE privileges on generators used in table triggers.

8. IBEBlock

Syntax

function ibec_RecompileFunction(Connection : variant; FunctionName : string) : string; 
  • ibec_ProgressEx function has been implemented. This function provides some additional flags to display progress percentage and/or bars when executing scripts in console mode (IBEScript.exe). In the IBExpert GUI it works exactly as the ibec_Progress function.
 Syntax
function ibec_ProgressEx(Message : string; Options : variant);

Currently the Options argument can accept a combination of the following constants:

  • __poNoCRLF ($1) - no end-of-line marker (CR+LF) will be added to the end of progress message;
  • __poReplaceLast ($2) - last ibec_ProgressEx output will be replaced with a new one;

Example 1

    execute ibeblock
    as
    begin
      ibec_ProgressEx('Progress: ', __poNoCRLF);
      for i = 1 to 100 do
      begin
        s = i || '%';
        iOptions = __poNoCRLF;
        if (i > 1) then
          iOptions = iOptions + __poReplaceLast;
        ibec_ProgressEx(s, iOptions);
        ibec_sleep(100);
      end;

      ibec_ProgressEx('', 0);
    end;	

Example 2

    execute ibeblock
    as
    begin
      ibec_ProgressEx('Progress: ', __poNoCRLF);
      for i = 1 to 100 do
      begin
        if (i > 1) then
          ibec_ProgressEx('', __poNoCRLF + __poReplaceLast);
        ibec_ProgressEx('=', __poNoCRLF);
        s = ' ' || i || '%';
        ibec_ProgressEx(s, __poNoCRLF);
        ibec_sleep(100);
      end;
    end;
  • ibec_StartTraceSession function implemented.
    ibec_StartTraceSession starts a trace session using Firebird Services API and writes trace data into a file. Additional filtering of trace items is possible via callback block.

Syntax

    function ibec_StartTraceSession(ConnectParams : string; TraceConfig : string; OutputFile : string;
                                FilterBlock : variant; ProgressBlock : variant) : variant;

ConnectParams - list of connection params and some additional options delimited with semicolon:

  • Server - server name including port number if necessary.
  • User - user name.
  • Password - password.
  • ClientLib - path to a client library dll.
  • MaxFileSize - maximum size of the result file in megabytes. If not specified the result file size will be limited to 100 megabytes.
  • StopAfter - determines duration of the trace session in minutes. Default value is 60 minutes.
  • IncludeStatistics - some statistical data (total and max per second number of processed lines and events) will be written at beginning of trace data.
  • AppendToExisting | AppendMode - if specified, trace data will be added to the existing file (if exists).

TraceConfig - Firebird trace configuration.

OutputFile - name of a result file which will contain trace data.

FilterBlock - a callback block which performs additional filtering of trace items if necessary. This block is called for every trace item and accepts a trace item text as input parameter (EventSource). Output parameter NeedSkip determines whether trace item should be skipped i.e. not included into result file.

If no additional filtering is needed pass NULL or an empty string as FilterBlock value.

ProgressBlock - a callback block that is intended to display progress of tracing. It receives array of some statistical data:

  • Data[0] (or Data['LinesProcessed'] - number of processed lines.
  • Data[1] (or Data['EventsProcessed']) - number of processed trace items/events.
  • Data[2] (or Data['EventsMatched']) - number of trace items written to result file.
  • Data[3] (or Data['OutputSize']) - current size of result file in bytes.

Output parameter Threshold determines a delay im milliseconds before next call of the ProgressBlock.

ibec_StartTraceSession returns NULL if a trace session is started successfully, otherwise it returns an error message as a result.

Example

execute ibeblock
as

  -- Filter block
  declare ibeblock filter_block (EventSource variant)
  returns (
    NeedSkip boolean = FALSE)
  as
  begin
    -- Using regular expression
    NeedSkip = ibec_preg_Match('(?i)0\x20ms', :EventSource);

    -- Using ibec_Pos
    NeedSkip = ibec_Pos(' 0 ms', :EventSource) > 0;
  end;

  -- Callback block
  declare ibeblock progress_block (data variant)
  returns (
    threshold integer = 2000)
  as
  begin
    for i = 0 to ibec_High(data) do
      data[i] = ibec_Cast(data[i], __typeString);

    s = ibec_Format('| %15.15s | %16.16s | %14.14s | %16.16s |', data[0], data['EventsProcessed'], data['EventsMatched'], data['OutputSize']);
    ibec_ProgressEx(s, __poNoCRLF + __poReplaceLast);
  end;

begin
  sConfig = ibec_LoadFromFile('D:\temp\trace.conf');
  sOutFile = 'D:\Temp\tracedata.txt';
  sConnectParams = 'Server="myserver/3044"; User=SYSDBA; Password=masterkey; ClientLib="D:\FB4_CLIENT\fbclient.dll"';
  sOptions = 'MaxFileSize=10; StopAfter=60; IncludeStatistics';

  ibec_Progress('');
  ibec_Progress('+-----------------+------------------+----------------+------------------+');
  ibec_Progress('| Lines processed | Events processed | Events matched | Output file size |');
  ibec_Progress('+-----------------+------------------+----------------+------------------+');

  Res = ibec_StartTraceSession(:sConnectParams || ';' || :sOptions,
                               :sConfig,
                               :sOutFile,
                               filter_block,
                               progress_block);

  if (Res is not null) then  -- Error caused
    ibec_Progress('ERROR: ' || Res);
end;

Please also refer to: ibec_StartTraceSession.

9. Other minor bugfixes and small improvements

back to top of page


IBExpert 2022.03.08

Minor bugfixes and improvements

back to top of page


IBExpert 2021.11.16

and bugfix versions 2021.11.25 & 2021.12.06

 

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

1. Database Explorer

Added the possibility to deactivate (comment) stored functions and packages from the context menu.

2. DB object editors, Dependencies trees:

Added the possibility to deactivate (comment) PSQL objects from the context menu.
After deactivation of dependant objects they will disappear from the dependencies tree, and IBExpert offers the option to store a list of deactivated objects in the Project View tree or copy it to clipboard. It is possible to customize this behaviour using the corresponding event block, see "Event blocks" section below.

3. Object editors, SQL Editor

Error messages now provide hyperlinks to mentioned database objects.

4. Table data comparer

Support of alternative hash functions implemented.

5. Input parameters form

Added the possibility to enter OCTETS values in hexadecimal format.

6. PSQL Debugger

Support of "Trace Into" for the RETURN statement implemented.

7. Data grid, string value editor

Open in Blob Editor button added.

8. Windows navigation bar

Now supports database colour marks (Database Registration Info / Color Mark).

9. Services / Database Monitor

  • Now with more detailed results, also for SQL dialect 1 databases.
  • New query introduced to see the most active I/O statements.

10. Event blocks

  • Table/View editor :: On compose SELECT statement
    This block fires before executing a SELECT from table/view and allows you to override the SELECT statement composed by IBExpert.
  • Data grid :: Before edit a string value
    This block fires when the user clicks an edit button in a string cell and allows you to force IBExpert to open/edit the string value in the Blob editor.
  • Data grid :: After executing a query
    This block fires after executing a query that returns a record set and allows you to apply the best fit to grid columns just after the query is executed.
    The user can choose where and when "Apply best fit" should be performed and where not. See block example/template for details.
  • Dependencies :: Before deactivate database objects
    This block fires when the user deactivates PSQL objects from the dependencies trees in the database object editors.
    There are some options that can be customized via the block:
    default action, deactivation lists autodelete interval, confirmation request.

11. IBEBlock

  • ibec_CompareTables: support of alternative hash functions.
    In case you want to use your own hash function instead of the Firebird HASH function just specify its name in the UseHashFunction option:
     UseHashFunction=MY_OWN_HASH

12. Other minor bugfixes and small improvements

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