package tiup_upgrade

import (
	"database/sql"
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	. "github.com/pingcap/endless/pkg/matcher"
	. "github.com/pingcap/endless/pkg/workloadnode/tiup"
	"github.com/pingcap/log"
	"go.uber.org/zap"
	"strings"
)

func TC_MultiSchemaChange_systemvar_002(
	cluster *TiUPCluster,
) {
	db := Try(cluster.GetDB("test")).(*sql.DB)
	defer db.Close()
	Try(db.Query("use downDB;"))
	Try(db.Query("drop table if exists t;"))
	Try(db.Query("CREATE TABLE t (a INT, c INT);"))
	Try(db.Query("ALTER TABLE t ADD COLUMN b INT,MODIFY COLUMN c CHAR(5),ADD INDEX idx(a);"))
	var (
		u   string
		sch string
	)
	Try(db.QueryRow("show create table t;").Scan(&sch, &u))
	log.Info("show create table t:", zap.String("schema", u))
	u = strings.ToLower(u)
	Expect(u).Should(ContainSubstring("`b` int(11) default null,"))
	Expect(u).Should(ContainSubstring("`c` char(5) default null"))
	Expect(u).Should(ContainSubstring("key `idx` (`a`)"))
}

func TC_MultiSchemaChange_rollback_006(
	cluster *TiUPCluster,
) {
	db := Try(cluster.GetDB("test")).(*sql.DB)
	defer db.Close()
	Try(db.Query("use test;"))
	Try(db.Query("drop table if exists t;"))
	Try(db.Query("CREATE TABLE t (a INT, c INT);"))
	_, err := db.Query("ALTER TABLE t ADD COLUMN b INT,MODIFY COLUMN c CHAR(5),ADD INDEX idx(a),ADD PRIMARY KEY (c);")
	if err != nil {
		log.Info("run tptest result: ", zap.String("err:", err.Error()))
		Expect(err.Error()).Should(ContainSubstring("Unsupported operate same column 'c'"))
	} else {
		Fail(err.Error())
	}
}
