fix instead trigger with error -4016
This commit is contained in:
		
				
					committed by
					
						
						ob-robot
					
				
			
			
				
	
			
			
			
						parent
						
							fbfd964307
						
					
				
				
					commit
					c13ff2080e
				
			@ -1490,7 +1490,7 @@ int ObDmlCgService::is_table_has_unique_key(ObSchemaGetterGuard *schema_guard,
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ObDmlCgService::check_upd_need_all_columns(ObLogicalOperator &op,
 | 
			
		||||
int ObDmlCgService::check_upd_need_all_columns(ObLogDelUpd &op,
 | 
			
		||||
                                               ObSchemaGetterGuard *schema_guard,
 | 
			
		||||
                                               const ObTableSchema *table_schema,
 | 
			
		||||
                                               const IndexDMLInfo &index_dml_info,
 | 
			
		||||
@ -1509,7 +1509,7 @@ int ObDmlCgService::check_upd_need_all_columns(ObLogicalOperator &op,
 | 
			
		||||
    LOG_WARN("unexpected null ptr", K(ret));
 | 
			
		||||
  } else if (OB_FAIL(session->get_binlog_row_image(binlog_row_image))) {
 | 
			
		||||
    LOG_WARN("fail to get binlog image", K(ret));
 | 
			
		||||
  } else if (binlog_row_image == ObBinlogRowImage::FULL) {
 | 
			
		||||
  } else if (binlog_row_image == ObBinlogRowImage::FULL || op.has_instead_of_trigger()) {
 | 
			
		||||
    // full mode
 | 
			
		||||
    need_all_columns = true;
 | 
			
		||||
  } else if (!is_primary_index) {
 | 
			
		||||
@ -1596,7 +1596,7 @@ int ObDmlCgService::append_upd_old_row_cid(ObLogicalOperator &op,
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ObDmlCgService::generate_minimal_upd_old_row_cid(ObLogicalOperator &op,
 | 
			
		||||
int ObDmlCgService::generate_minimal_upd_old_row_cid(ObLogDelUpd &op,
 | 
			
		||||
                                                     ObTableID index_tid,
 | 
			
		||||
                                                     ObDASUpdCtDef &das_upd_ctdef,
 | 
			
		||||
                                                     const IndexDMLInfo &index_dml_info,
 | 
			
		||||
@ -1644,7 +1644,8 @@ int ObDmlCgService::generate_minimal_upd_old_row_cid(ObLogicalOperator &op,
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ObDmlCgService::check_del_need_all_columns(ObSchemaGetterGuard *schema_guard,
 | 
			
		||||
int ObDmlCgService::check_del_need_all_columns(ObLogDelUpd &op,
 | 
			
		||||
                                               ObSchemaGetterGuard *schema_guard,
 | 
			
		||||
                                               const ObTableSchema *table_schema,
 | 
			
		||||
                                               bool &need_all_columns)
 | 
			
		||||
{
 | 
			
		||||
@ -1658,7 +1659,7 @@ int ObDmlCgService::check_del_need_all_columns(ObSchemaGetterGuard *schema_guard
 | 
			
		||||
    LOG_WARN("unexpected null ptr", K(ret));
 | 
			
		||||
  } else if (OB_FAIL(session->get_binlog_row_image(binlog_row_image))) {
 | 
			
		||||
    LOG_WARN("fail to get binlog image", K(ret));
 | 
			
		||||
  } else if (binlog_row_image == ObBinlogRowImage::FULL) {
 | 
			
		||||
  } else if (binlog_row_image == ObBinlogRowImage::FULL || op.has_instead_of_trigger()) {
 | 
			
		||||
    // full mode
 | 
			
		||||
    need_all_columns = true;
 | 
			
		||||
  } else if (table_schema->is_heap_table()) {
 | 
			
		||||
@ -1672,7 +1673,8 @@ int ObDmlCgService::check_del_need_all_columns(ObSchemaGetterGuard *schema_guard
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ObDmlCgService::generate_minimal_delete_old_row_cid(ObTableID index_tid,
 | 
			
		||||
int ObDmlCgService::generate_minimal_delete_old_row_cid(ObLogDelUpd &op,
 | 
			
		||||
                                                        ObTableID index_tid,
 | 
			
		||||
                                                        bool is_primary_index,
 | 
			
		||||
                                                        ObDASDelCtDef &das_del_ctdef,
 | 
			
		||||
                                                        ObIArray<uint64_t> &minimal_column_ids)
 | 
			
		||||
@ -1695,7 +1697,7 @@ int ObDmlCgService::generate_minimal_delete_old_row_cid(ObTableID index_tid,
 | 
			
		||||
  } else if (OB_ISNULL(table_schema)) {
 | 
			
		||||
    ret = OB_TABLE_NOT_EXIST;
 | 
			
		||||
    LOG_WARN("table not exist", KR(ret), K(index_tid));
 | 
			
		||||
  } else if (OB_FAIL(check_del_need_all_columns(schema_guard, table_schema, need_all_columns))) {
 | 
			
		||||
  } else if (OB_FAIL(check_del_need_all_columns(op, schema_guard, table_schema, need_all_columns))) {
 | 
			
		||||
    LOG_WARN("fail to check del need all columns", K(ret), K(is_primary_index), K(index_tid));
 | 
			
		||||
  } else if (need_all_columns) {
 | 
			
		||||
    if (OB_FAIL(minimal_column_ids.assign(das_del_ctdef.column_ids_))) {
 | 
			
		||||
@ -2058,7 +2060,8 @@ int ObDmlCgService::generate_das_del_ctdef(ObLogDelUpd &op,
 | 
			
		||||
    LOG_WARN("generate das dml ctdef failed", K(ret));
 | 
			
		||||
  } else if (OB_FAIL(generate_dml_column_ids(op, index_dml_info.column_exprs_, dml_column_ids))) {
 | 
			
		||||
    LOG_WARN("generate dml column ids failed", K(ret));
 | 
			
		||||
  } else if (OB_FAIL(generate_minimal_delete_old_row_cid(index_tid,
 | 
			
		||||
  } else if (OB_FAIL(generate_minimal_delete_old_row_cid(op,
 | 
			
		||||
                                                         index_tid,
 | 
			
		||||
                                                         is_primary_table,
 | 
			
		||||
                                                         das_del_ctdef,
 | 
			
		||||
                                                         minimal_column_ids))) {
 | 
			
		||||
 | 
			
		||||
@ -121,7 +121,7 @@ private:
 | 
			
		||||
                              bool only_rowkey,
 | 
			
		||||
                              ObDASDMLBaseCtDef &das_dml_info);
 | 
			
		||||
 | 
			
		||||
  int generate_minimal_upd_old_row_cid(ObLogicalOperator &op,
 | 
			
		||||
  int generate_minimal_upd_old_row_cid(ObLogDelUpd &op,
 | 
			
		||||
                                       ObTableID index_tid,
 | 
			
		||||
                                       ObDASUpdCtDef &das_upd_ctdef,
 | 
			
		||||
                                       const IndexDMLInfo &index_dml_info,
 | 
			
		||||
@ -138,7 +138,7 @@ private:
 | 
			
		||||
                             const IndexDMLInfo &index_dml_info,
 | 
			
		||||
                             ObIArray<uint64_t> &minimal_column_ids);
 | 
			
		||||
 | 
			
		||||
  int check_upd_need_all_columns(ObLogicalOperator &op,
 | 
			
		||||
  int check_upd_need_all_columns(ObLogDelUpd &op,
 | 
			
		||||
                                 ObSchemaGetterGuard *schema_guard,
 | 
			
		||||
                                 const ObTableSchema *table_schema,
 | 
			
		||||
                                 const IndexDMLInfo &index_dml_info,
 | 
			
		||||
@ -183,12 +183,14 @@ private:
 | 
			
		||||
                                 const ObTableSchema *table_schema,
 | 
			
		||||
                                 bool &need_all_columns);
 | 
			
		||||
 | 
			
		||||
  int generate_minimal_delete_old_row_cid(ObTableID index_tid,
 | 
			
		||||
  int generate_minimal_delete_old_row_cid(ObLogDelUpd &op,
 | 
			
		||||
                                          ObTableID index_tid,
 | 
			
		||||
                                          bool is_primary_index,
 | 
			
		||||
                                          ObDASDelCtDef &das_del_ctdef,
 | 
			
		||||
                                          ObIArray<uint64_t> &minimal_column_ids);
 | 
			
		||||
 | 
			
		||||
  int check_del_need_all_columns(ObSchemaGetterGuard *schema_guard,
 | 
			
		||||
  int check_del_need_all_columns(ObLogDelUpd &op,
 | 
			
		||||
                                 ObSchemaGetterGuard *schema_guard,
 | 
			
		||||
                                 const ObTableSchema *table_schema,
 | 
			
		||||
                                 bool &need_all_columns);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user