package bun

import (
	
	

	
	
)

type DropTableQuery struct {
	baseQuery
	cascadeQuery

	ifExists bool
}

func ( *DB) *DropTableQuery {
	 := &DropTableQuery{
		baseQuery: baseQuery{
			db:   ,
			conn: .DB,
		},
	}
	return 
}

func ( *DropTableQuery) ( IConn) *DropTableQuery {
	.setConn()
	return 
}

func ( *DropTableQuery) ( interface{}) *DropTableQuery {
	.setTableModel()
	return 
}

//------------------------------------------------------------------------------

func ( *DropTableQuery) ( ...string) *DropTableQuery {
	for ,  := range  {
		.addTable(schema.UnsafeIdent())
	}
	return 
}

func ( *DropTableQuery) ( string,  ...interface{}) *DropTableQuery {
	.addTable(schema.SafeQuery(, ))
	return 
}

func ( *DropTableQuery) ( string,  ...interface{}) *DropTableQuery {
	.modelTable = schema.SafeQuery(, )
	return 
}

//------------------------------------------------------------------------------

func ( *DropTableQuery) () *DropTableQuery {
	.ifExists = true
	return 
}

func ( *DropTableQuery) () *DropTableQuery {
	.restrict = true
	return 
}

//------------------------------------------------------------------------------

func ( *DropTableQuery) () string {
	return "DROP TABLE"
}

func ( *DropTableQuery) ( schema.Formatter,  []byte) ( []byte,  error) {
	if .err != nil {
		return nil, .err
	}

	 = append(, "DROP TABLE "...)
	if .ifExists {
		 = append(, "IF EXISTS "...)
	}

	,  = .appendTables(, )
	if  != nil {
		return nil, 
	}

	 = .appendCascade(, )

	return , nil
}

//------------------------------------------------------------------------------

func ( *DropTableQuery) ( context.Context,  ...interface{}) (sql.Result, error) {
	if .table != nil {
		if  := .beforeDropTableHook();  != nil {
			return nil, 
		}
	}

	,  := .AppendQuery(.db.fmter, .db.makeQueryBytes())
	if  != nil {
		return nil, 
	}

	 := internal.String()

	,  := .exec(, , )
	if  != nil {
		return nil, 
	}

	if .table != nil {
		if  := .afterDropTableHook();  != nil {
			return nil, 
		}
	}

	return , nil
}

func ( *DropTableQuery) ( context.Context) error {
	if ,  := .table.ZeroIface.(BeforeDropTableHook);  {
		if  := .BeforeDropTable(, );  != nil {
			return 
		}
	}
	return nil
}

func ( *DropTableQuery) ( context.Context) error {
	if ,  := .table.ZeroIface.(AfterDropTableHook);  {
		if  := .AfterDropTable(, );  != nil {
			return 
		}
	}
	return nil
}