meta data for this page
  •  

ibec_CompareMetadata

Compares the metadata of specified databases and creates a script of all discrepancies.

Description

This function compares the metadata of two databases (or scripts) and creates a discrepancy script.

Note: Object filtering was implemented in IBExpert version 2020.02.13. 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.

Syntax

 function ibec_CompareMetadata(MasterDB : variant; SubscriberDB :variant;
                             ScriptFile : string; Options : string;
                             CallbackBlock : variant) : string;

Parameters

MasterDB Reference database or script file.
SubscriberDB Comparative database or script file.
ScriptFile Name of the difference script file.
Options List of options, delimited with semicolon; possible options are:
NoConnect 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.
AlterViews If this option is ON, the Database Comparer will alter modified views instead of dropping and creating them again. This enables the alteration of a modified view even if somebody is still using it.
OmitDomains (Domains=0) don't compare domains.
OmitTables (Tables=0) don't compare tables.
OmitViews (Views=0) don't compare views.
OmitTriggers (Triggers=0) don't compare triggers.
OmitProcedures (Procedures=0) don't compare procedures.
OmitGenerators (Generators=0 don't compare generators.
OmitExceptions (Exceptions=0) don't compare exceptions.
OmitUDFs (UDFs=0) don't compare UDFs.
OmitRoles (Roles=0) don't compare roles.
OmitIndices (Indices=0) don't compare indices.
OmitGrants (Grants=0) don't compare privileges.
OmitUserGrants (UserGrants=0) don't compare user privileges.
OmitRoleGrants (RoleGrants=0) don't compare role privileges.
OmitObjectGrants (ObjectGrants=0) don't compare database object privileges.
OmitDescriptions (Descriprions=0) don't compare object descriptions.
OmitPrimaryKeys (PrimaryKeys=0) don't compare primary keys.
OmitForeignKeys (ForeignKeys=0) don't compare foreign keys.
OmitUniques (Uniques=0) don't compare unique constraints.
OmitChecks (Checks=0) don't compare check constraints.
OmitFunctions This option skips stored functions while extracting and comparing metadata.
OmitPackages This option skips packages while extracting and comparing metadata.
SafeDatatypeConversion (SafeDatatypeConversion=1) Use only safe data type conversion (don't update system tables directly).
IgnoreColumnPositions don't compare column positions.
IgnoreIBEObjects don't compare IBE$xxx objects
IgnoreCharsets When specified, character sets of domain/fields/parameters will be ignored during the comparison process.
ServerVersion Possible values are:
IB4x - for InterBase® 4.x; IB4x - for InterBase® 4.x;
IB5x - for InterBase® 5.x; IB5x - for InterBase® 5.x;
IB6x - for InterBase® 6.x; IB6x - for InterBase® 6.x;
IB7x - for InterBase® 7.x; IB7x - for InterBase® 7.x;
IB75 - for InterBase® 7.5; IB75 - for InterBase® 7.5;
FB1x - for Firebird 1.x; FB1x - for Firebird 1.x;
FB15 - for Firebird 1.5; FB15 - for Firebird 1.5;
FB20 - for Firebird 2.0; FB20 - for Firebird 2.0;
FB21 - for Firebird 2.1; FB21 - for Firebird 2.1;
FB25 - for Firebird 2.5; FB25 - for Firebird 2.5;
FB30 - for Firebird 3.0; FB30 - for Firebird 3.0;
YA1x - for Yaffil 1.x. YA1x - for Yaffil 1.x.
If the ServerVersion is not specified, FB15 will be used. If the ServerVersion is not specified, FB15 will be used.
Return 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.
AppendMode 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.
CallbackBlock A callback IBEBlock which will be executed for each record processed whilst comparing data. The callback IBEBlock must have at least one input parameter, which will be used to pass a number of processed records within it.

Examples of usage

1. Comparing databases:

 execute ibeblock
 as
 begin
    create connection MasterDB dbname 'localhost:c:\MasterDB.fdb'
    password 'masterkey' user 'SYSDBA'
    clientlib 'C:\Program Files\Firebird\bin\fbclient.dll';

    create connection SubscriberDB dbname 'localhost:c:\SubscriberDB.fdb'
    password 'masterkey' user 'SYSDBA'
    sql_dialect 3
    clientlib 'C:\Program Files\Firebird\bin\fbclient.dll';


    cbb = 'execute ibeblock (LogMessage variant)
           as
           begin
             ibec_progress(LogMessage);
           end';

    ibec_CompareMetadata(MasterDB, SubscriberDB, 'E:\CompRes.sql', 'OmitDescriptions; OmitGrants', cbb);

    close connection MasterDB;
    close connection SubscriberDB;
 end
 

2. Comparing scripts:

 execute ibeblock
 as
 begin
   cbb = 'execute ibeblock (LogMessage variant)
          as
          begin
            ibec_progress(LogMessage);
          end';

   ibec_CompareMetadata('c:\myscripts\master.sql','c:\myscripts\subscriber.sql', 'E:\CompRes.sql','', cbb);
 end

3. Using the ServerVersion parameter:

 ibec_CompareMetadata(MasterDB, 
                      SubscriberDB, 
                      'E:\CompRes.sql', 
                      'OmitDescriptions; OmitGrants; ServerVersion=FB1x;', 
                      cbb);