package orm

type DropCompositeOptions struct {
	IfExists bool
	Cascade  bool
}

type DropCompositeQuery struct {
	q   *Query
	opt *DropCompositeOptions
}

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

func ( *Query,  *DropCompositeOptions) *DropCompositeQuery {
	return &DropCompositeQuery{
		q:   ,
		opt: ,
	}
}

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

func ( *DropCompositeQuery) () QueryOp {
	return DropCompositeOp
}

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

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

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

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

	 = append(, "DROP TYPE "...)
	if .opt != nil && .opt.IfExists {
		 = append(, "IF EXISTS "...)
	}
	 = append(, .q.tableModel.Table().Alias...)
	if .opt != nil && .opt.Cascade {
		 = append(, " CASCADE"...)
	}

	return , .q.stickyErr
}