package sql

import (
	"database/sql"
	"fmt"
)

type Statement func(db *sql.DB) error

const (
	DDL_TEMPLATE_DROP_DATABASE   = "DROP DATABASE IF EXISTS `%s`"
	DDL_TEMPLATE_CREATE_DATABASE = "CREATE DATABASE IF NOT EXISTS `%s`"

	DDL_TEMPLATE_TRUNCATE_TABLE = "TRUNCATE TABLE `%s`.`%s`"
)

func ExecDDL(db *sql.DB, sql string) (sql.Result, error) {
	return db.Exec(sql)
}

func ExecDML(db *sql.DB, sql string) (*sql.Rows, error) {
	return db.Query(sql)
}

func DropSchema(db *sql.DB, schema string) error {
	_, err := ExecDDL(db, fmt.Sprintf(DDL_TEMPLATE_DROP_DATABASE, schema))
	if err != nil {
		return err
	}
	return nil
}

func CreateSchema(db *sql.DB, schema string) error {
	_, err := ExecDDL(db, fmt.Sprintf(DDL_TEMPLATE_CREATE_DATABASE, schema))
	if err != nil {
		return err
	}
	return nil
}

func TruncateTable(db *sql.DB, schema, table string) error {
	_, err := ExecDDL(db, fmt.Sprintf(DDL_TEMPLATE_TRUNCATE_TABLE, schema, table))
	if err != nil {
		return err
	}
	return nil
}
