From 95b4f9e440009e778b02f519cea099984b0ddf20 Mon Sep 17 00:00:00 2001 From: Shlomi Noach Date: Thu, 11 Aug 2016 14:10:35 +0200 Subject: [PATCH] testing for trigger existence --- build.sh | 2 +- go/logic/inspect.go | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/build.sh b/build.sh index f712d68..a1201a6 100755 --- a/build.sh +++ b/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 diff --git a/go/logic/inspect.go b/go/logic/inspect.go index 7970d6c..844258a 100644 --- a/go/logic/inspect.go +++ b/go/logic/inspect.go @@ -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))