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.
function ibec_CompareMetadata(MasterDB : variant; SubscriberDB :variant; ScriptFile : string; Options : string; CallbackBlock : variant) : string;
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. |
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);