@ -594,6 +594,7 @@ convert_error_code_to_mysql( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*========================*/  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								/* out: MySQL error code */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						int 	error , 	/* in: InnoDB error code */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						ulint 	flags , 	/* in: InnoDB table flags, or 0 */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						THD * 	thd ) 	/* in: user thread handle or NULL */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						switch  ( error )  {  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -665,6 +666,9 @@ convert_error_code_to_mysql( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							return ( HA_ERR_NO_SUCH_TABLE ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  DB_TOO_BIG_RECORD :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							my_error ( ER_TOO_BIG_ROWSIZE ,  MYF ( 0 ) ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								 page_get_free_space_of_empty ( flags  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											      &  DICT_TF_COMPACT )  /  2 ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							return ( HA_ERR_TO_BIG_ROW ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  DB_NO_SAVEPOINT :  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -2122,7 +2126,7 @@ innobase_rollback( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  trx_rollback_last_sql_stat_for_mysql ( trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  0 ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*********************************************************************
  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -2153,7 +2157,7 @@ innobase_rollback_trx( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  trx_rollback_for_mysql ( trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  0 ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*********************************************************************
  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -2191,7 +2195,7 @@ innobase_rollback_to_savepoint( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  ( int )  trx_rollback_to_savepoint_for_mysql ( trx ,  name ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											& mysql_binlog_cache_pos ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  0 ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*********************************************************************
  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -2222,7 +2226,7 @@ innobase_release_savepoint( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  ( int )  trx_release_savepoint_for_mysql ( trx ,  name ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  0 ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*********************************************************************
  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -2269,7 +2273,7 @@ innobase_savepoint( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  ( int )  trx_savepoint_for_mysql ( trx ,  name ,  ( ib_longlong ) 0 ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( convert_error_code_to_mysql ( error ,  0 ,  NULL ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*********************************************************************
  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -3805,7 +3809,8 @@ set_max_autoinc: 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innodb_srv_conc_exit_innodb ( prebuilt - > trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  prebuilt - > table - > flags ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										    user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					func_exit :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innobase_active_small ( ) ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -4037,7 +4042,8 @@ ha_innobase::update_row( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innodb_srv_conc_exit_innodb ( trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										    prebuilt - > table - > flags ,  user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( error  = =  0  /* success */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						    & &  uvect - > n_fields  = =  0  /* no columns were updated */ )  {  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -4112,7 +4118,8 @@ ha_innobase::delete_row( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innodb_srv_conc_exit_innodb ( trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					error_exit :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										    prebuilt - > table - > flags ,  user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						/* Tell the InnoDB server that there might be work for
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						utility  threads :  */  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -4447,20 +4454,25 @@ ha_innobase::index_read( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							ret  =  DB_UNSUPPORTED ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( ret  = =  DB_SUCCESS )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						switch  ( ret )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  DB_SUCCESS :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							table - > status  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  else  if  ( ret  = =  DB_RECORD_NOT_FOUND )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  DB_RECORD_NOT_FOUND :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  HA_ERR_KEY_NOT_FOUND ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							table - > status  =  STATUS_NOT_FOUND ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  else  if  ( ret  = =  DB_END_OF_INDEX )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  DB_END_OF_INDEX :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  HA_ERR_KEY_NOT_FOUND ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							table - > status  =  STATUS_NOT_FOUND ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  convert_error_code_to_mysql ( ( int )  ret ,  user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						default :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  convert_error_code_to_mysql ( ( int )  ret ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											    prebuilt - > table - > flags ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											    user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							table - > status  =  STATUS_NOT_FOUND ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( error ) ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -4623,20 +4635,24 @@ ha_innobase::general_fetch( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innodb_srv_conc_exit_innodb ( prebuilt - > trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( ret  = =  DB_SUCCESS )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						switch  ( ret )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  DB_SUCCESS :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							table - > status  =  0 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  else  if  ( ret  = =  DB_RECORD_NOT_FOUND )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  DB_RECORD_NOT_FOUND :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  HA_ERR_END_OF_FILE ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							table - > status  =  STATUS_NOT_FOUND ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  else  if  ( ret  = =  DB_END_OF_INDEX )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						case  DB_END_OF_INDEX :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  HA_ERR_END_OF_FILE ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							table - > status  =  STATUS_NOT_FOUND ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  else  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  convert_error_code_to_mysql ( ( int )  ret ,  user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						default :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  convert_error_code_to_mysql (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								( int )  ret ,  prebuilt - > table - > flags ,  user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							table - > status  =  STATUS_NOT_FOUND ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							break ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( error ) ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -4910,24 +4926,6 @@ ha_innobase::position( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*********************************************************************
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					If  it ' s  a  DB_TOO_BIG_RECORD  error  then  set  a  suitable  message  to  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					return  to  the  client . */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					inline  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					innodb_check_for_record_too_big_error (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*==================================*/  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						ulint 	comp , 	/* in: ROW_FORMAT: nonzero=COMPACT, 0=REDUNDANT */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						int 	error ) 	/* in: error code to check */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( error  = =  ( int ) DB_TOO_BIG_RECORD )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							ulint 	max_row_size  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								=  page_get_free_space_of_empty ( comp )  /  2 ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							my_error ( ER_TOO_BIG_ROWSIZE ,  MYF ( 0 ) ,  max_row_size ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/* limit innodb monitor access to users with PROCESS privilege.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					See  http : //bugs.mysql.com/32710 for expl. why we choose PROCESS. */
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					# define IS_MAGIC_TABLE_AND_USER_DENIED_ACCESS(table_name, thd) \ 
  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -5048,9 +5046,7 @@ create_table_def( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  row_create_table_for_mysql ( table ,  trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innodb_check_for_record_too_big_error ( flags  &  DICT_TF_COMPACT ,  error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  flags ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -5064,6 +5060,7 @@ create_index( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						trx_t * 		trx , 		/* in: InnoDB transaction handle */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						TABLE * 		form , 		/* in: information on table
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										columns  and  indexes  */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						ulint 		flags , 		/* in: InnoDB table flags */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						const  char * 	table_name , 	/* in: table name */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						uint 		key_num ) 	/* in: index number */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -5100,8 +5097,8 @@ create_index( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						/* We pass 0 as the space id, and determine at a lower level the space
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						id  where  to  store  the  table  */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						index  =  dict_mem_index_create ( ( char * )  table_name ,  key - > name ,  0 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											 ind_type ,  n_fields ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						index  =  dict_mem_index_create ( table_name ,  key - > name ,  0 ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
									       ind_type ,  n_fields ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						field_lengths  =  ( ulint * )  my_malloc ( sizeof ( ulint )  *  n_fields ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							MYF ( MY_FAE ) ) ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -5172,10 +5169,7 @@ create_index( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						sure  we  don ' t  create  too  long  indexes .  */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  row_create_index_for_mysql ( index ,  trx ,  field_lengths ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innodb_check_for_record_too_big_error ( form - > s - > row_type  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										      ! =  ROW_TYPE_REDUNDANT ,  error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  flags ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						my_free ( field_lengths ,  MYF ( 0 ) ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -5190,8 +5184,7 @@ int 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					create_clustered_index_when_no_primary (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*===================================*/  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						trx_t * 		trx , 		/* in: InnoDB transaction handle */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						ulint 		comp , 		/* in: ROW_FORMAT:
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										nonzero = COMPACT ,  0 = REDUNDANT  */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						ulint 		flags , 		/* in: InnoDB table flags */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						const  char * 	table_name ) 	/* in: table name */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						dict_index_t * 	index ;  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -5205,9 +5198,7 @@ create_clustered_index_when_no_primary( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  row_create_index_for_mysql ( index ,  trx ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innodb_check_for_record_too_big_error ( comp ,  error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  flags ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						return ( error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -5484,8 +5475,7 @@ ha_innobase::create( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							by  InnoDB  */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  create_clustered_index_when_no_primary (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								trx ,  form - > s - > row_type  ! =  ROW_TYPE_REDUNDANT ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								norm_name ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								trx ,  flags ,  norm_name ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( error )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								goto  cleanup ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							}  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -5494,7 +5484,7 @@ ha_innobase::create( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( primary_key_no  ! =  - 1 )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							/* In InnoDB the clustered index must always be created
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							first  */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( ( error  =  create_index ( trx ,  form ,  norm_name ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( ( error  =  create_index ( trx ,  form ,  flags ,  norm_name ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										  ( uint )  primary_key_no ) ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								goto  cleanup ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							}  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -5504,7 +5494,8 @@ ha_innobase::create( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( i  ! =  ( uint )  primary_key_no )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								if  ( ( error  =  create_index ( trx ,  form ,  norm_name ,  i ) ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								if  ( ( error  =  create_index ( trx ,  form ,  flags ,  norm_name ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											  i ) ) )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
									goto  cleanup ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							}  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				
					@ -5515,7 +5506,7 @@ ha_innobase::create( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								* trx - > mysql_query_str ,  norm_name ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								create_info - > options  &  HA_LEX_CREATE_TMP_TABLE ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  convert_error_code_to_mysql ( error ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  convert_error_code_to_mysql ( error ,  flags ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( error )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								goto  cleanup ;  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -5600,7 +5591,7 @@ ha_innobase::discard_or_import_tablespace( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							err  =  row_import_tablespace_for_mysql ( dict_table - > name ,  trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						err  =  convert_error_code_to_mysql ( err ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						err  =  convert_error_code_to_mysql ( err ,  dict_table - > flags ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( err ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -5637,7 +5628,8 @@ ha_innobase::delete_all_rows(void) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							goto  fallback ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  prebuilt - > table - > flags ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										    NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -5726,7 +5718,7 @@ ha_innobase::delete_table( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						trx_free_for_mysql ( trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  0 ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -5804,13 +5796,6 @@ innobase_drop_database( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innobase_commit_low ( trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						trx_free_for_mysql ( trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					# ifdef NO_LONGER_INTERESTED_IN_DROP_DB_ERROR 
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						return ( error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					# else 
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						return ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					# endif 
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					/*************************************************************************
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					Renames  an  InnoDB  table .  */  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -5922,7 +5907,7 @@ ha_innobase::rename_table( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						innobase_commit_low ( trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						trx_free_for_mysql ( trx ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  convert_error_code_to_mysql ( error ,  0 ,  NULL ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						DBUG_RETURN ( error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					}  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -7056,7 +7041,7 @@ ha_innobase::external_lock( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
									if  ( error  ! =  DB_SUCCESS )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										error  =  convert_error_code_to_mysql (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											( int )  error ,  thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											( int )  error ,  0 ,  thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
										DBUG_RETURN ( ( int )  error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
									}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								}  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -7183,7 +7168,8 @@ ha_innobase::transactional_table_lock( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  row_lock_table_for_mysql ( prebuilt ,  NULL ,  0 ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							if  ( error  ! =  DB_SUCCESS )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								error  =  convert_error_code_to_mysql ( ( int )  error ,  thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								error  =  convert_error_code_to_mysql (  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
									( int )  error ,  prebuilt - > table - > flags ,  thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
								DBUG_RETURN ( ( int )  error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				
					@ -7962,7 +7948,9 @@ ha_innobase::reset_auto_increment( 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						error  =  row_lock_table_autoinc_for_mysql ( prebuilt ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						if  ( error  ! =  DB_SUCCESS )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  convert_error_code_to_mysql ( error ,  user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							error  =  convert_error_code_to_mysql ( error ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											    prebuilt - > table - > flags ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
											    user_thd ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
							DBUG_RETURN ( error ) ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				
						}