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 |
|
|
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 |
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 |
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) |