Merge pull request #152 from github/validate-no-triggers
testing for trigger existence
This commit is contained in:
commit
5001e7303f
2
build.sh
2
build.sh
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
#
|
||||
RELEASE_VERSION="1.0.8"
|
||||
RELEASE_VERSION="1.0.9"
|
||||
|
||||
buildpath=/tmp/gh-ost
|
||||
target=gh-ost
|
||||
|
@ -69,6 +69,9 @@ func (this *Inspector) ValidateOriginalTable() (err error) {
|
||||
if err := this.validateTableForeignKeys(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := this.validateTableTriggers(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := this.estimateTableRowsViaExplain(); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -342,6 +345,34 @@ func (this *Inspector) validateTableForeignKeys() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// validateTableTriggers makes sure no triggers exist on the migrated table
|
||||
func (this *Inspector) validateTableTriggers() error {
|
||||
query := `
|
||||
SELECT COUNT(*) AS num_triggers
|
||||
FROM INFORMATION_SCHEMA.TRIGGERS
|
||||
WHERE
|
||||
TRIGGER_SCHEMA=?
|
||||
AND EVENT_OBJECT_TABLE=?
|
||||
`
|
||||
numTriggers := 0
|
||||
err := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error {
|
||||
numTriggers = rowMap.GetInt("num_triggers")
|
||||
|
||||
return nil
|
||||
},
|
||||
this.migrationContext.DatabaseName,
|
||||
this.migrationContext.OriginalTableName,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if numTriggers > 0 {
|
||||
return log.Errorf("Found triggers on %s.%s. Triggers are not supported at this time. Bailing out", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))
|
||||
}
|
||||
log.Debugf("Validated no triggers exist on table")
|
||||
return nil
|
||||
}
|
||||
|
||||
// estimateTableRowsViaExplain estimates number of rows on original table
|
||||
func (this *Inspector) estimateTableRowsViaExplain() error {
|
||||
query := fmt.Sprintf(`explain select /* gh-ost */ * from %s.%s where 1=1`, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))
|
||||
|
Loading…
Reference in New Issue
Block a user