fix: prevent interface type array from causing runtime errors
This commit is contained in:
		
							parent
							
								
									8eebbb4687
								
							
						
					
					
						commit
						7fbb532cdb
					
				
							
								
								
									
										7
									
								
								scan.go
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								scan.go
									
									
									
									
									
								
							| @ -202,6 +202,9 @@ func Scan(rows Rows, db *DB, mode ScanMode) { | ||||
| 		switch reflectValueType.Kind() { | ||||
| 		case reflect.Array, reflect.Slice: | ||||
| 			reflectValueType = reflectValueType.Elem() | ||||
| 			if reflectValueType.Kind() == reflect.Interface && reflectValue.Len() > 0 { | ||||
| 				reflectValueType = reflect.Indirect(reflectValue.Index(0)).Elem().Type() | ||||
| 			} | ||||
| 		} | ||||
| 		isPtr := reflectValueType.Kind() == reflect.Ptr | ||||
| 		if isPtr { | ||||
| @ -318,7 +321,9 @@ func Scan(rows Rows, db *DB, mode ScanMode) { | ||||
| 				} else { | ||||
| 					elem = reflect.New(reflectValueType) | ||||
| 				} | ||||
| 
 | ||||
| 				if elem.Type().Kind() == reflect.Interface { | ||||
| 					elem = elem.Elem() | ||||
| 				} | ||||
| 				db.scanIntoStruct(rows, elem, values, fields, joinFields) | ||||
| 
 | ||||
| 				if !update { | ||||
|  | ||||
| @ -136,8 +136,10 @@ func ParseWithSpecialTableName(dest interface{}, cacheStore *sync.Map, namer Nam | ||||
| 
 | ||||
| 	for modelType.Kind() == reflect.Slice || modelType.Kind() == reflect.Array || modelType.Kind() == reflect.Ptr { | ||||
| 		modelType = modelType.Elem() | ||||
| 		if modelType.Kind() == reflect.Interface && value.Len() > 0 { | ||||
| 			modelType = reflect.Indirect(value.Index(0)).Elem().Type() | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if modelType.Kind() != reflect.Struct { | ||||
| 		if modelType.PkgPath() == "" { | ||||
| 			return nil, fmt.Errorf("%w: %+v", ErrUnsupportedDataType, dest) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 KEHyeon
						KEHyeon