diff --git a/internal/db/database_test.go b/internal/db/database_test.go
deleted file mode 100644
index c7cca4e..0000000
--- a/internal/db/database_test.go
+++ /dev/null
@@ -1,142 +0,0 @@
-package db_test
-
-// import (
-// 	"context"
-// 	"log"
-// 	"github.com/kareemmahlees/meta-x/internal"
-// 	"github.com/kareemmahlees/meta-x/internal/db"
-// 	"github.com/kareemmahlees/meta-x/lib"
-// 	"github.com/kareemmahlees/meta-x/utils"
-// 	"testing"
-
-// 	"github.com/jmoiron/sqlx"
-// 	"github.com/stretchr/testify/assert"
-// 	"github.com/stretchr/testify/suite"
-// )
-
-// type DatabaseTestSuite struct {
-// 	suite.Suite
-// 	providers        []string
-// 	pgContainer      *utils.PostgresContainer
-// 	pgConnection     *sqlx.DB
-// 	mysqlContainer   *utils.MySQLContainer
-// 	mysqlConnection  *sqlx.DB
-// 	sqliteConnection *sqlx.DB
-// 	ctx              context.Context
-// }
-
-// func (suite *DatabaseTestSuite) getConnection(provider string) *sqlx.DB {
-// 	switch provider {
-// 	case lib.SQLITE3:
-// 		return suite.sqliteConnection
-// 	case lib.PSQL:
-// 		return suite.pgConnection
-// 	case lib.MYSQL:
-// 		return suite.mysqlConnection
-// 	default:
-// 		return suite.sqliteConnection
-// 	}
-// }
-
-// func (suite *DatabaseTestSuite) SetupSuite() {
-// 	suite.ctx = context.Background()
-
-// 	var err error
-
-// 	suite.sqliteConnection, err = internal.InitDBConn(lib.SQLITE3, ":memory:")
-// 	if err != nil {
-// 		log.Fatal(err)
-// 	}
-
-// 	pgContainer, err := utils.CreatePostgresContainer(suite.ctx)
-// 	if err != nil {
-// 		log.Fatal(err)
-// 	}
-// 	suite.pgContainer = pgContainer
-// 	suite.pgConnection, err = internal.InitDBConn(lib.PSQL, pgContainer.ConnectionString)
-// 	if err != nil {
-// 		log.Fatal(err)
-// 	}
-
-// 	mysqlContainer, err := utils.CreateMySQLContainer(suite.ctx)
-// 	if err != nil {
-// 		log.Fatal(err)
-// 	}
-// 	suite.mysqlContainer = mysqlContainer
-// 	suite.mysqlConnection, err = internal.InitDBConn(lib.MYSQL, mysqlContainer.ConnectionString)
-// 	if err != nil {
-// 		log.Fatal(err)
-// 	}
-
-// 	suite.providers = []string{lib.SQLITE3, lib.PSQL, lib.MYSQL}
-// }
-
-// func (suite *DatabaseTestSuite) TearDownSuite() {
-// 	if err := suite.pgContainer.Terminate(suite.ctx); err != nil {
-// 		log.Fatalf("error terminating postgres container: %s", err)
-// 	}
-
-// 	if err := suite.mysqlContainer.Terminate(suite.ctx); err != nil {
-// 		log.Fatalf("error terminating mysql container: %s", err)
-// 	}
-// 	suite.sqliteConnection.Close()
-// 	suite.pgConnection.Close()
-// 	suite.mysqlConnection.Close()
-
-// }
-
-// func (suite *DatabaseTestSuite) TestListDatabases() {
-// 	t := suite.T()
-
-// 	for _, provider := range suite.providers {
-// 		con := suite.getConnection(provider)
-
-// 		var dbs []*string
-// 		var err error
-
-// 		switch provider {
-// 		case lib.SQLITE3:
-// 			dbs, err = db.ListDatabasesSqlite(suite.sqliteConnection)
-// 		case lib.PSQL, lib.MYSQL:
-// 			dbs, err = db.ListDatabasesPgMySQL(con, provider)
-// 		}
-
-// 		assert.Nil(t, err)
-// 		assert.Greater(t, len(dbs), 0)
-
-// 		switch provider {
-// 		// we reverse the order here to intentionally make the query fail
-// 		case lib.SQLITE3:
-// 			_, err = db.ListDatabasesPgMySQL(suite.sqliteConnection, provider)
-// 		case lib.PSQL, lib.MYSQL:
-// 			_, err = db.ListDatabasesSqlite(con)
-// 		}
-// 		assert.NotNil(t, err)
-// 	}
-// }
-
-// func (suite *DatabaseTestSuite) TestCreateDatabase() {
-// 	t := suite.T()
-
-// 	for _, provider := range suite.providers {
-// 		con := suite.getConnection(provider)
-
-// 		var err error
-
-// 		switch provider {
-// 		case lib.PSQL, lib.MYSQL:
-// 			err = db.CreatePgMysqlDatabase(con, provider, "metax")
-// 			assert.Nil(t, err)
-// 		}
-
-// 		switch provider {
-// 		case lib.PSQL, lib.MYSQL:
-// 			err = db.CreatePgMysqlDatabase(con, provider, "true")
-// 			assert.NotNil(t, err)
-// 		}
-// 	}
-// }
-
-// func TestDatabaseTestSuite(t *testing.T) {
-// 	suite.Run(t, new(DatabaseTestSuite))
-// }
diff --git a/internal/db/mysql_test.go b/internal/db/mysql_test.go
new file mode 100644
index 0000000..21c6e00
--- /dev/null
+++ b/internal/db/mysql_test.go
@@ -0,0 +1,165 @@
+package db
+
+import (
+	"context"
+	"log"
+	"testing"
+
+	"github.com/jmoiron/sqlx"
+	"github.com/kareemmahlees/meta-x/lib"
+	"github.com/kareemmahlees/meta-x/models"
+	"github.com/kareemmahlees/meta-x/utils"
+	"github.com/stretchr/testify/suite"
+)
+
+type MySQLTestSuite struct {
+	suite.Suite
+	mysqlContainer  *utils.MySQLContainer
+	mysqlConnection *sqlx.DB
+	mysqlProvider   *mysqlProvider
+	ctx             context.Context
+}
+
+func (suite *MySQLTestSuite) SetupSuite() {
+	suite.ctx = context.Background()
+
+	mysqlContainer, err := utils.CreateMySQLContainer(suite.ctx)
+	if err != nil {
+		log.Fatal(err)
+	}
+	suite.mysqlContainer = mysqlContainer
+
+	mysqlConfig := utils.NewMySQLConfig(&mysqlContainer.ConnectionString, nil)
+	conn, err := InitDBConn(lib.MYSQL, mysqlConfig)
+	if err != nil {
+		log.Fatal(err)
+	}
+	suite.mysqlConnection = conn
+
+	mysqlProvider := NewMySQLProvider(conn)
+	suite.mysqlProvider = mysqlProvider
+}
+
+func (suite *MySQLTestSuite) TearDownSuite() {
+	if err := suite.mysqlContainer.Terminate(suite.ctx); err != nil {
+		log.Fatalf("error terminating postgres container: %s", err)
+	}
+	suite.mysqlConnection.Close()
+}
+
+func (suite *MySQLTestSuite) BeforeTest(suiteName, testName string) {
+	queryString := "CREATE TABLE test ( name varchar(255) );"
+	_, _ = suite.mysqlConnection.Exec(queryString)
+}
+
+func (suite *MySQLTestSuite) AfterTest(suiteName, testName string) {
+	queryString := "DROP TABLE test;"
+	_, _ = suite.mysqlConnection.Exec(queryString)
+}
+
+func (suite *MySQLTestSuite) TestListDBs() {
+	assert := suite.Assert()
+
+	dbs, err := suite.mysqlProvider.ListDBs()
+
+	assert.Nil(err)
+	assert.Greater(len(dbs), 0)
+
+}
+func (suite *MySQLTestSuite) TestCreateDB() {
+	assert := suite.Assert()
+
+	err := suite.mysqlProvider.CreateDB("metax")
+	assert.Nil(err)
+
+	err = suite.mysqlProvider.CreateDB("true")
+	assert.NotNil(err)
+
+}
+func (suite *MySQLTestSuite) TestGetTable() {
+	assert := suite.Assert()
+
+	tableInfo, err := suite.mysqlProvider.GetTable("test")
+
+	assert.Nil(err)
+	assert.NotEmpty(tableInfo)
+	assert.Equal(tableInfo[0].Name, "name")
+	assert.Equal(tableInfo[0].Type, "varchar(255)")
+
+}
+func (suite *MySQLTestSuite) TestListTables() {
+	assert := suite.Assert()
+
+	result, err := suite.mysqlProvider.ListTables()
+
+	assert.Nil(err)
+	assert.NotEmpty(result)
+
+}
+func (suite *MySQLTestSuite) TestCreateTable() {
+	assert := suite.Assert()
+
+	err := suite.mysqlProvider.CreateTable("test_create_table", []models.CreateTablePayload{
+		{
+			ColName:  "test",
+			Type:     "varchar(255)",
+			Default:  "defaultText",
+			Unique:   true,
+			Nullable: false,
+		},
+	})
+	assert.Nil(err)
+
+	result, _ := suite.mysqlProvider.ListTables()
+	convertedResult := utils.SliceOfPointersToSliceOfValues(result)
+	assert.Contains(convertedResult, "test_create_table")
+
+	err = suite.mysqlProvider.CreateTable("123456", nil)
+	assert.NotNil(err)
+
+}
+func (suite *MySQLTestSuite) TestDeleteTable() {
+	assert := suite.Assert()
+	err := suite.mysqlProvider.DeleteTable("test")
+	assert.Nil(err)
+
+	result, _ := suite.mysqlProvider.ListTables()
+	assert.NotContains(result, "test")
+
+}
+func (suite *MySQLTestSuite) TestAddColumn() {
+	assert := suite.Assert()
+
+	err := suite.mysqlProvider.AddColumn("test", models.AddModifyColumnPayload{
+		ColName: "test1",
+		Type:    "int",
+	})
+	assert.Nil(err)
+
+	result, _ := suite.mysqlProvider.GetTable("test")
+	assert.NotEmpty(result)
+
+}
+func (suite *MySQLTestSuite) TestUpdateColumn() {
+	assert := suite.Assert()
+
+	err := suite.mysqlProvider.UpdateColumn("test", models.AddModifyColumnPayload{
+		ColName: "name",
+		Type:    "varchar(255)",
+	})
+	assert.Nil(err)
+
+}
+func (suite *MySQLTestSuite) TestDeleteColumn() {
+	assert := suite.Assert()
+
+	err := suite.mysqlProvider.DeleteColumn("test", models.DeleteColumnPayload{
+		ColName: "name",
+	})
+	assert.Error(err)
+
+}
+
+func TestMySQLTestSuite(t *testing.T) {
+	suite.Run(t, new(MySQLTestSuite))
+}
diff --git a/internal/db/tables_test.go b/internal/db/tables_test.go
deleted file mode 100644
index 08870c2..0000000
--- a/internal/db/tables_test.go
+++ /dev/null
@@ -1,216 +0,0 @@
-package db_test
-
-// import (
-// 	"context"
-// 	"fmt"
-// 	"log"
-// 	"reflect"
-// 	"testing"
-
-// 	"github.com/kareemmahlees/meta-x/internal"
-// 	"github.com/kareemmahlees/meta-x/internal/db"
-// 	"github.com/kareemmahlees/meta-x/lib"
-// 	"github.com/kareemmahlees/meta-x/models"
-// 	"github.com/kareemmahlees/meta-x/utils"
-
-// 	"github.com/jmoiron/sqlx"
-// 	"github.com/stretchr/testify/assert"
-// 	"github.com/stretchr/testify/suite"
-// )
-
-// type TablesTestSuite struct {
-// 	suite.Suite
-// 	providers        []string
-// 	pgContainer      *utils.PostgresContainer
-// 	pgConnection     *sqlx.DB
-// 	mysqlContainer   *utils.MySQLContainer
-// 	mysqlConnection  *sqlx.DB
-// 	sqliteConnection *sqlx.DB
-// 	ctx              context.Context
-// }
-
-// func (suite *TablesTestSuite) getConnection(provider string) *sqlx.DB {
-// 	switch provider {
-// 	case lib.SQLITE3:
-// 		return suite.sqliteConnection
-// 	case lib.PSQL:
-// 		return suite.pgConnection
-// 	case lib.MYSQL:
-// 		return suite.mysqlConnection
-// 	default:
-// 		return suite.sqliteConnection
-// 	}
-// }
-
-// func (suite *TablesTestSuite) SetupSuite() {
-// 	suite.ctx = context.Background()
-
-// 	suite.sqliteConnection, _ = internal.InitDBConn(lib.SQLITE3, ":memory:")
-
-// 	pgContainer, err := utils.CreatePostgresContainer(suite.ctx)
-// 	if err != nil {
-// 		log.Fatal(err)
-// 	}
-// 	suite.pgContainer = pgContainer
-// 	suite.pgConnection, _ = internal.InitDBConn(lib.PSQL, pgContainer.ConnectionString)
-
-// 	mysqlContainer, err := utils.CreateMySQLContainer(suite.ctx)
-// 	if err != nil {
-// 		log.Fatal(err)
-// 	}
-// 	suite.mysqlContainer = mysqlContainer
-// 	suite.mysqlConnection, _ = internal.InitDBConn(lib.MYSQL, mysqlContainer.ConnectionString)
-
-// 	suite.providers = []string{lib.SQLITE3, lib.PSQL, lib.MYSQL}
-// }
-
-// func (suite *TablesTestSuite) TearDownSuite() {
-// 	if err := suite.pgContainer.Terminate(suite.ctx); err != nil {
-// 		log.Fatalf("error terminating postgres container: %s", err)
-// 	}
-
-// 	if err := suite.mysqlContainer.Terminate(suite.ctx); err != nil {
-// 		log.Fatalf("error terminating mysql container: %s", err)
-// 	}
-// 	suite.sqliteConnection.Close()
-// 	suite.pgConnection.Close()
-// 	suite.mysqlConnection.Close()
-
-// }
-
-// func (suite *TablesTestSuite) BeforeTest(suiteName, testName string) {
-// 	queryString := "CREATE TABLE test ( name varchar(255) );"
-// 	_, _ = suite.sqliteConnection.Exec(queryString)
-// 	_, _ = suite.pgConnection.Exec(queryString)
-// 	_, _ = suite.mysqlConnection.Exec(queryString)
-// }
-
-// func (suite *TablesTestSuite) AfterTest(suiteName, testName string) {
-// 	queryString := "DROP TABLE test;"
-// 	_, _ = suite.sqliteConnection.Exec(queryString)
-// 	_, _ = suite.pgConnection.Exec(queryString)
-// 	_, _ = suite.mysqlConnection.Exec(queryString)
-// }
-
-// func (suite *TablesTestSuite) TestDescribeTable() {
-// 	t := suite.T()
-// 	for _, provider := range suite.providers {
-// 		con := suite.getConnection(provider)
-// 		tableInfo, err := db.GetTableInfo(con, "test", provider)
-
-// 		assert.Nil(t, err)
-// 		assert.NotEmpty(t, tableInfo)
-// 		assert.Equal(t, tableInfo[0].Name, "name")
-// 		switch provider {
-// 		case lib.PSQL:
-// 			assert.Equal(t, tableInfo[0].Type, "character varying")
-// 		default:
-// 			assert.Equal(t, tableInfo[0].Type, "varchar(255)")
-// 		}
-// 	}
-// }
-
-// func (suite *TablesTestSuite) TestListTable() {
-// 	t := suite.T()
-// 	for _, provider := range suite.providers {
-// 		con := suite.getConnection(provider)
-// 		result, err := db.ListTables(con, provider)
-// 		assert.Nil(t, err)
-// 		assert.NotEmpty(t, result)
-// 		assert.IsType(t, reflect.Slice, reflect.TypeOf(result).Kind())
-// 	}
-
-// }
-
-// func (suite *TablesTestSuite) TestCreateTable() {
-// 	t := suite.T()
-// 	for _, provider := range suite.providers {
-// 		con := suite.getConnection(provider)
-
-// 		err := db.CreateTable(con, "test_create_table", []models.CreateTablePayload{
-// 			{
-// 				ColName:  "test",
-// 				Type:     "varchar(255)",
-// 				Default:  "defaultText",
-// 				Unique:   true,
-// 				Nullable: false,
-// 			},
-// 		})
-// 		assert.Nil(t, err)
-
-// 		result, _ := db.ListTables(con, provider)
-// 		convertedResult := utils.SliceOfPointersToSliceOfValues(result)
-// 		assert.Contains(t, convertedResult, "test_create_table")
-
-// 		err = db.CreateTable(con, "123456", nil)
-// 		assert.NotNil(t, err)
-// 	}
-// }
-
-// func (suite *TablesTestSuite) TestAddColumn() {
-// 	t := suite.T()
-// 	for idx, provider := range suite.providers {
-// 		con := suite.getConnection(provider)
-// 		err := db.AddColumn(con, "test", models.AddModifyColumnPayload{
-// 			ColName: fmt.Sprintf("test%d", idx),
-// 			Type:    "int",
-// 		})
-// 		assert.Nil(t, err)
-
-// 		result, _ := db.GetTableInfo(con, "test", provider)
-// 		assert.Greater(t, len(result), 1)
-// 	}
-// }
-
-// func (suite *TablesTestSuite) TestModifyColumn() {
-// 	t := suite.T()
-// 	for _, provider := range suite.providers {
-// 		con := suite.getConnection(provider)
-// 		err := db.UpdateColumn(con, provider, "test", models.AddModifyColumnPayload{
-// 			ColName: "name",
-// 			Type:    "varchar(255)",
-// 		})
-// 		switch provider {
-// 		case lib.MYSQL, lib.PSQL:
-// 			assert.Nil(t, err)
-// 		case lib.SQLITE3:
-// 			assert.Error(t, err)
-// 		}
-// 	}
-// }
-
-// func (suite *TablesTestSuite) TestDeleteColumn() {
-// 	t := suite.T()
-// 	for _, provider := range suite.providers {
-// 		con := suite.getConnection(provider)
-// 		err := db.DeleteColumn(con, "test", models.DeleteColumnPayload{
-// 			ColName: "name",
-// 		})
-// 		switch provider {
-// 		case lib.SQLITE3, lib.MYSQL:
-// 			assert.Error(t, err)
-// 		default:
-// 			assert.Nil(t, err)
-// 			result, _ := db.GetTableInfo(con, "test", provider)
-// 			assert.Zero(t, len(result))
-// 		}
-
-// 	}
-// }
-
-// func (suite *TablesTestSuite) TestDeleteTable() {
-// 	t := suite.T()
-// 	for _, provider := range suite.providers {
-// 		con := suite.getConnection(provider)
-// 		err := db.DeleteTable(con, "test")
-// 		assert.Nil(t, err)
-
-// 		result, _ := db.ListTables(con, provider)
-// 		assert.NotContains(t, result, "test")
-// 	}
-
-// }
-
-// func TestTablesTestSuite(t *testing.T) {
-// 	suite.Run(t, new(TablesTestSuite))
-// }