func (s *storage) GetColumns(tableName string) ([]string, error) {
	rows, err := s.conn.Query(
		"SELECT `column_name` FROM `information_schema`.`columns` WHERE table_schema=DATABASE() AND table_name=?",
		tableName,
	)
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	var columns []string
	for rows.Next() {
		var column string
		if err := rows.Scan(&column); err != nil {
			return nil, err
		}
		columns = append(columns, column)
	}
	return columns, nil
}
GetColumns returns the columns in the specified database table
package mysql
import (
	"bytes"
	"database/sql"
	"fmt"
	"strings"
	"time"
	"github.com/hellofresh/klepto/pkg/reader"
	"github.com/hellofresh/klepto/pkg/reader/engine"
	log "github.com/sirupsen/logrus"
)
const (
	baseTable = "BASE TABLE"
)
type (
	storage struct {
		conn *sql.DB
	}
)
func NewStorage(conn *sql.DB, timeout time.Duration) reader.Reader {
	return engine.New(&storage{
		conn: conn,
	}, timeout)
}
func (s *storage) GetTables() ([]string, error) {
	log.Debug("fetching table list")
	rows, err := s.conn.Query("SHOW FULL TABLES")
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	tables := make([]string, 0)
	for rows.Next() {
		var tableName, tableType string
		if err := rows.Scan(&tableName, &tableType); err != nil {
			return nil, err
		}
		if tableType == baseTable {
			tables = append(tables, tableName)
		}
	}
	log.WithField("tables", tables).Debug("fetched table list")
	return tables, nil
}