package bun

import (
	
	

	
	
	
)

type TruncateTableQuery struct {
	baseQuery
	cascadeQuery

	continueIdentity bool
}

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

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

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

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

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

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

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

func ( *TruncateTableQuery) () *TruncateTableQuery {
	.continueIdentity = true
	return 
}

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

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

func ( *TruncateTableQuery) () string {
	return "TRUNCATE TABLE"
}

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

	if !.HasFeature(feature.TableTruncate) {
		 = append(, "DELETE FROM "...)

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

		return , nil
	}

	 = append(, "TRUNCATE TABLE "...)

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

	if .db.features.Has(feature.TableIdentity) {
		if .continueIdentity {
			 = append(, " CONTINUE IDENTITY"...)
		} else {
			 = append(, " RESTART IDENTITY"...)
		}
	}

	 = .appendCascade(, )

	return , nil
}

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

func ( *TruncateTableQuery) ( context.Context,  ...interface{}) (sql.Result, error) {
	,  := .AppendQuery(.db.fmter, .db.makeQueryBytes())
	if  != nil {
		return nil, 
	}

	 := internal.String()

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

	return , nil
}