package orm

type DropTableOptions struct {
	IfExists bool
	Cascade  bool
}

type DropTableQuery struct {
	q   *Query
	opt *DropTableOptions
}

var (
	_ QueryAppender = (*DropTableQuery)(nil)
	_ QueryCommand  = (*DropTableQuery)(nil)
)

func ( *Query,  *DropTableOptions) *DropTableQuery {
	return &DropTableQuery{
		q:   ,
		opt: ,
	}
}

func ( *DropTableQuery) () string {
	,  := .AppendQuery(defaultFmter, nil)
	if  != nil {
		panic()
	}
	return string()
}

func ( *DropTableQuery) () QueryOp {
	return DropTableOp
}

func ( *DropTableQuery) () QueryCommand {
	return &DropTableQuery{
		q:   .q.Clone(),
		opt: .opt,
	}
}

func ( *DropTableQuery) () *Query {
	return .q
}

func ( *DropTableQuery) ( []byte) ([]byte, error) {
	return .AppendQuery(dummyFormatter{}, )
}

func ( *DropTableQuery) ( QueryFormatter,  []byte) ( []byte,  error) {
	if .q.stickyErr != nil {
		return nil, .q.stickyErr
	}
	if .q.tableModel == nil {
		return nil, errModelNil
	}

	 = append(, "DROP TABLE "...)
	if .opt != nil && .opt.IfExists {
		 = append(, "IF EXISTS "...)
	}
	,  = .q.appendFirstTable(, )
	if  != nil {
		return nil, 
	}
	if .opt != nil && .opt.Cascade {
		 = append(, " CASCADE"...)
	}

	return , .q.stickyErr
}