package redis

import (
	
	
	
)

func ( *ClusterClient) ( context.Context) *IntCmd {
	 := NewIntCmd(, "dbsize")
	_ = .withProcessHook(, , func( context.Context,  Cmder) error {
		var  int64
		 := .ForEachMaster(, func( context.Context,  *Client) error {
			,  := .DBSize().Result()
			if  != nil {
				return 
			}
			atomic.AddInt64(&, )
			return nil
		})
		if  != nil {
			.SetErr()
		} else {
			.val = 
		}
		return nil
	})
	return 
}

func ( *ClusterClient) ( context.Context,  string) *StringCmd {
	 := NewStringCmd(, "script", "load", )
	_ = .withProcessHook(, , func( context.Context,  Cmder) error {
		var  sync.Mutex
		 := .ForEachShard(, func( context.Context,  *Client) error {
			,  := .ScriptLoad(, ).Result()
			if  != nil {
				return 
			}

			.Lock()
			if .Val() == "" {
				.val = 
			}
			.Unlock()

			return nil
		})
		if  != nil {
			.SetErr()
		}
		return nil
	})
	return 
}

func ( *ClusterClient) ( context.Context) *StatusCmd {
	 := NewStatusCmd(, "script", "flush")
	_ = .withProcessHook(, , func( context.Context,  Cmder) error {
		 := .ForEachShard(, func( context.Context,  *Client) error {
			return .ScriptFlush().Err()
		})
		if  != nil {
			.SetErr()
		}
		return nil
	})
	return 
}

func ( *ClusterClient) ( context.Context,  ...string) *BoolSliceCmd {
	 := make([]interface{}, 2+len())
	[0] = "script"
	[1] = "exists"
	for ,  := range  {
		[2+] = 
	}
	 := NewBoolSliceCmd(, ...)

	 := make([]bool, len())
	for  := range  {
		[] = true
	}

	_ = .withProcessHook(, , func( context.Context,  Cmder) error {
		var  sync.Mutex
		 := .ForEachShard(, func( context.Context,  *Client) error {
			,  := .ScriptExists(, ...).Result()
			if  != nil {
				return 
			}

			.Lock()
			for ,  := range  {
				[] = [] && 
			}
			.Unlock()

			return nil
		})
		if  != nil {
			.SetErr()
		} else {
			.val = 
		}
		return nil
	})
	return 
}