package schema

import (
	
	
	
	
	
)

var (
	bytesType          = reflect.TypeOf((*[]byte)(nil)).Elem()
	timeType           = reflect.TypeOf((*time.Time)(nil)).Elem()
	ipType             = reflect.TypeOf((*net.IP)(nil)).Elem()
	ipNetType          = reflect.TypeOf((*net.IPNet)(nil)).Elem()
	jsonRawMessageType = reflect.TypeOf((*json.RawMessage)(nil)).Elem()

	driverValuerType  = reflect.TypeOf((*driver.Valuer)(nil)).Elem()
	queryAppenderType = reflect.TypeOf((*QueryAppender)(nil)).Elem()
)

func ( reflect.Type) reflect.Type {
	if .Kind() == reflect.Ptr {
		 = .Elem()
	}
	return 
}

func ( reflect.Value,  []int) ( reflect.Value,  bool) {
	if len() == 1 {
		return .Field([0]), true
	}

	for ,  := range  {
		if  > 0 {
			if .Kind() == reflect.Ptr {
				if .IsNil() {
					return , false
				}
				 = .Elem()
			}
		}
		 = .Field()
	}
	return , true
}

func ( reflect.Value,  []int) reflect.Value {
	if len() == 1 {
		return .Field([0])
	}

	for ,  := range  {
		if  > 0 {
			 = indirectNil()
		}
		 = .Field()
	}
	return 
}

func ( reflect.Value) reflect.Value {
	if .Kind() == reflect.Ptr {
		if .IsNil() {
			.Set(reflect.New(.Type().Elem()))
		}
		 = .Elem()
	}
	return 
}