package pgutil

import (
	"database/sql"
	"log"
)

const dropTablesQueryQuery = `
SELECT 'DROP TABLE IF EXISTS "' || tablename || '" CASCADE;'
FROM
   pg_tables
WHERE
  schemaname='public'`

// Deletes all tables in the database. Useful for testing.
func DropAllTables(db *sql.DB) error {
	rows, err := db.Query(dropTablesQueryQuery)
	if err != nil {
		return err
	}

	queries := []string{}
	for rows.Next() {
		var s string
		if err := rows.Scan(&s); err != nil {
			return err
		}
		queries = append(queries, s)
	}

	if len(queries) > 0 {
		log.Printf("DROPPING ALL (%d) TABLES", len(queries))
	}

	for _, query := range queries {
		if _, err := db.Exec(query); err != nil {
			return err
		}
	}

	return nil
}