package tiup_upgrade

import (
	"database/sql"

	"github.com/coreos/go-semver/semver"
	. "github.com/onsi/gomega"

	. "github.com/pingcap/endless/pkg/matcher"
	. "github.com/pingcap/endless/pkg/workloadnode/tiup"
)

func EXPINDEX_001(
	cluster *TiUPCluster,
) {
	db := Try(cluster.GetDB("test")).(*sql.DB)
	defer db.Close()
	Try(db.Query("create table expidx.t1(a int, b int, c char, d varchar(20), primary key (a));"))
	Try(db.Query("create table expidx.t3(a int, b int, c char, d varchar(20), primary key (a));"))
	_, err := db.Query("alter table expidx.t3 add index ((a + b), (concat(c, d)));")
	if expFlag == "false" {
		Expect(err.Error()).Should(ContainSubstring("Unsupported creating expression index"))
	} else {
		must(err)
	}

	_, err = db.Query("alter table expidx.t3 add index eidx ((upper(a)));")
	src_version := semver.New(installVersion[1:])
	if expFlag == "false" && src_version.LessThan(*semver.New("5.2.0")) {
		Expect(err.Error()).Should(ContainSubstring("Unsupported creating expression index"))
	} else {
		must(err)
	}

}

func EXPINDEX_002(
	cluster *TiUPCluster,
) {
	db := Try(cluster.GetDB("test")).(*sql.DB)
	defer db.Close()
	_, err := db.Query("alter table expidx.t1 add index ((a  + b), (concat(c, d)));")
	if expFlag == "false" {
		Expect(err.Error()).Should(ContainSubstring("Unsupported creating expression index"))
	} else {
		must(err)
		Try(db.Query("alter table expidx.t3 rename index eidx to eidnew;"))
	}

	if expFlag == "true" || !tar_version.LessThan(*semver.New("5.2.0")) {
		Try(db.Query("alter table expidx.t1 add index eidx ((lower(a)));"))
		Try(db.Query("alter table expidx.t1 add index eidx2 ((md5(a)));"))
		Try(db.Query("alter table expidx.t1 add index eidx3 ((reverse(a)));"))
		Try(db.Query("alter table expidx.t1 add index eidx4 ((vitess_hash(a)));"))
	}

	Try(db.Query("create table expidx.t2(a int, b int, c char, d varchar(20), primary key (a));"))

	_, err = db.Query("alter table expidx.t2 add index ((a  + b), (concat(c, d)));")

	if expFlag == "false" {
		Expect(err.Error()).Should(ContainSubstring("Unsupported creating expression index"))
	} else {
		must(err)
	}

}
