ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/runtime/nongui/IBExtract.pas
(Generate patch)

Comparing ibx/trunk/runtime/nongui/IBExtract.pas (file contents):
Revision 225 by tony, Tue Apr 3 09:09:05 2018 UTC vs.
Revision 226 by tony, Tue Apr 3 10:52:43 2018 UTC

# Line 58 | Line 58 | type
58  
59    TExtractType =
60      (etDomain, etTable, etRole, etTrigger, etForeign,
61 <     etIndex, etData, etGrant, etCheck, etGrantsToUser);
61 >     etIndex, etData, etGrant, etCheck, etGrantsToUser,
62 >     etDatabaseTriggers, etDDLTriggers);
63  
64    TExtractTypes = Set of TExtractType;
65  
# Line 1576 | Line 1577 | var
1577    SList : TStrings;
1578   begin
1579    Header := true;
1580 +  if [etTable,etTrigger ] * ExtractTypes <> [] then
1581 +    ExtractTypes -= [etDatabaseTriggers,etDDLTriggers];
1582    SList := TStringList.Create;
1583    qryTriggers := TIBSQL.Create(FDatabase);
1584    try
# Line 1615 | Line 1618 | begin
1618          else
1619            InActive := 'ACTIVE';
1620  
1621 <      if qryTriggers.FieldByName('RDB$FLAGS').AsInteger <> 1 then
1622 <        SList.Add('/* ');
1621 >      if (ExtractTypes * [etDatabaseTriggers,etDDLTriggers] = []) or
1622 >         ((etDatabaseTriggers in ExtractTypes) and (qryTriggers.FieldByName('RDB$TRIGGER_TYPE').AsInt64 and $2000 <> 0)) or
1623 >         ((etDDLTriggers in ExtractTypes) and (qryTriggers.FieldByName('RDB$TRIGGER_TYPE').AsInt64 and $4000 <> 0))
1624 >         then
1625 >      begin
1626 >        if qryTriggers.FieldByName('RDB$FLAGS').AsInteger <> 1 then
1627 >          SList.Add('/* ');
1628 >
1629 >        {Database or Transaction trigger}
1630 >        SList.Add(Format('CREATE TRIGGER %s%s%s %s POSITION %d',
1631 >                  [QuoteIdentifier( TriggerName),
1632 >                  LineEnding, InActive,
1633 >                  GetTriggerType(qryTriggers.FieldByName('RDB$TRIGGER_TYPE').AsInt64),
1634 >                  qryTriggers.FieldByName('RDB$TRIGGER_SEQUENCE').AsInteger]));
1635  
1636 <      {Database or Transaction trigger}
1637 <      SList.Add(Format('CREATE TRIGGER %s%s%s %s POSITION %d',
1638 <                [QuoteIdentifier( TriggerName),
1639 <                LineEnding, InActive,
1640 <                GetTriggerType(qryTriggers.FieldByName('RDB$TRIGGER_TYPE').AsInt64),
1641 <                qryTriggers.FieldByName('RDB$TRIGGER_SEQUENCE').AsInteger]));
1642 <
1643 <      if RelationName <> '' then
1644 <        SList.Add('ON ' + QuoteIdentifier( RelationName));
1645 <
1646 <      if not qryTriggers.FieldByName('RDB$TRIGGER_SOURCE').IsNull then
1647 <        SList.Add(qryTriggers.FieldByName('RDB$TRIGGER_SOURCE').AsString)
1648 <      else
1649 <        SList.Add('AS BEGIN EXIT; END');
1635 <      SList.Add(' ' + ProcTerm);
1636 <      if qryTriggers.FieldByName('RDB$FLAGS').AsInteger <> 1 then
1637 <        SList.Add(' */');
1638 <      FMetaData.AddStrings(SList);
1639 <      if etGrant in ExtractTypes then
1640 <        ShowGrantsTo(TriggerName,obj_trigger,ProcTerm);
1636 >        if RelationName <> '' then
1637 >          SList.Add('ON ' + QuoteIdentifier( RelationName));
1638 >
1639 >        if not qryTriggers.FieldByName('RDB$TRIGGER_SOURCE').IsNull then
1640 >          SList.Add(qryTriggers.FieldByName('RDB$TRIGGER_SOURCE').AsString)
1641 >        else
1642 >          SList.Add('AS BEGIN EXIT; END');
1643 >        SList.Add(' ' + ProcTerm);
1644 >        if qryTriggers.FieldByName('RDB$FLAGS').AsInteger <> 1 then
1645 >          SList.Add(' */');
1646 >        FMetaData.AddStrings(SList);
1647 >        if etGrant in ExtractTypes then
1648 >          ShowGrantsTo(TriggerName,obj_trigger,ProcTerm);
1649 >      end;
1650        qryTriggers.Next;
1651      end;
1652      if not Header then
# Line 3041 | Line 3050 | begin
3050      eoRole : ListRoles(ObjectName,etGrant in ExtractTypes);
3051      eoTrigger :
3052        if etTable in ExtractTypes then
3053 <      begin
3045 <        if etGrant in ExtractTypes then
3046 <          ListTriggers(ObjectName, [etTable,etGrant])
3047 <        else
3048 <          ListTriggers(ObjectName, [etTable])
3049 <      end
3053 >        ListTriggers(ObjectName, ExtractTypes * [etTable,etGrant])
3054        else
3055 <      if etGrant in ExtractTypes then
3056 <        ListTriggers(ObjectName,[etTrigger,etGrant])
3055 >      if ExtractTypes * [etDatabaseTriggers,etDDLTriggers] = [] then
3056 >        ListTriggers(ObjectName,[etTrigger] + (ExtractTypes * [etGrant]))
3057        else
3058 <        ListTriggers(ObjectName);
3058 >        ListTriggers(ObjectName,ExtractTypes * [etDatabaseTriggers,etDDLTriggers, etGrant]);
3059      eoForeign :
3060        if etTable in ExtractTypes then
3061          ListForeign(ObjectName, etTable)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines