diff --git a/include/hash.h b/include/hash.h
index cd7210a290c0db9e30617ee20cafdd17d0bc77aa..9a6d91036e195c4c14b9b86423556370b6236914 100644
--- a/include/hash.h
+++ b/include/hash.h
@@ -47,7 +47,7 @@ my_bool _hash_init(HASH *hash, CHARSET_INFO *charset,
 		   uint key_length, hash_get_key get_key,
 		   void (*free_element)(void*), uint flags CALLER_INFO_PROTO);
 void hash_free(HASH *tree);
-void hash_reset(HASH *hash);
+void my_hash_reset(HASH *hash);
 byte *hash_element(HASH *hash,uint idx);
 gptr hash_search(HASH *info,const byte *key,uint length);
 gptr hash_next(HASH *info,const byte *key,uint length);
diff --git a/mysql-test/r/bdb.result b/mysql-test/r/bdb.result
index e3674486a21fa5ba2d006da37eea52d75f8f2d28..d743bc0367503c5e694ba03644ac3944810fd573 100644
--- a/mysql-test/r/bdb.result
+++ b/mysql-test/r/bdb.result
@@ -1300,7 +1300,7 @@ insert into t1 values('+ ', '+ ', '+ ');
 set @a=repeat(' ',20);
 insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
 Warnings:
-Warning	1265	Data truncated for column 'v' at row 1
+Note	1265	Data truncated for column 'v' at row 1
 select concat('*',v,'*',c,'*',t,'*') from t1;
 concat('*',v,'*',c,'*',t,'*')
 *+ *+*+ *
@@ -1346,7 +1346,7 @@ t1	CREATE TABLE `t1` (
 ) ENGINE=BerkeleyDB DEFAULT CHARSET=latin1
 alter table t1 modify t varchar(10);
 Warnings:
-Warning	1265	Data truncated for column 't' at row 2
+Note	1265	Data truncated for column 't' at row 2
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result
index 50f6d3d56fcc161f1f2014fcc8712eceffdc7310..4d5aabb8b3aeab875023ace4ccaa572f0c7cca63 100644
--- a/mysql-test/r/heap.result
+++ b/mysql-test/r/heap.result
@@ -255,7 +255,7 @@ insert into t1 values('+ ', '+ ', '+ ');
 set @a=repeat(' ',20);
 insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
 Warnings:
-Warning	1265	Data truncated for column 'v' at row 1
+Note	1265	Data truncated for column 'v' at row 1
 select concat('*',v,'*',c,'*',t,'*') from t1;
 concat('*',v,'*',c,'*',t,'*')
 *+ *+*+ *
diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result
index 1ac2f9631d7fd4f076a2baad102aa89eb4bd6264..138cae5caddeaf2772220085a4a3ddd28b9e34b4 100644
--- a/mysql-test/r/myisam.result
+++ b/mysql-test/r/myisam.result
@@ -571,7 +571,7 @@ insert into t1 values('+ ', '+ ', '+ ');
 set @a=repeat(' ',20);
 insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
 Warnings:
-Warning	1265	Data truncated for column 'v' at row 1
+Note	1265	Data truncated for column 'v' at row 1
 select concat('*',v,'*',c,'*',t,'*') from t1;
 concat('*',v,'*',c,'*',t,'*')
 *+ *+*+ *
@@ -617,7 +617,7 @@ t1	CREATE TABLE `t1` (
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 alter table t1 modify t varchar(10);
 Warnings:
-Warning	1265	Data truncated for column 't' at row 2
+Note	1265	Data truncated for column 't' at row 2
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
diff --git a/mysql-test/r/ndb_index_ordered.result b/mysql-test/r/ndb_index_ordered.result
index ccb202b25a86c8f5e293c0249822ffbccb395ebc..7558e5cdb114b26467d702addc7af4fa208593a2 100644
--- a/mysql-test/r/ndb_index_ordered.result
+++ b/mysql-test/r/ndb_index_ordered.result
@@ -529,3 +529,19 @@ count(*)-8
 select count(*)-9 from t1 use index (ti) where ti <= '23:59:59';
 count(*)-9
 0
+drop table t1;
+create table t1(a int primary key, b int not null, index(b));
+insert into t1 values (1,1), (2,2);
+set autocommit=0;
+begin;
+select count(*) from t1;
+count(*)
+2
+ALTER TABLE t1 ADD COLUMN c int;
+select a from t1 where b = 2;
+a
+2
+show tables;
+Tables_in_test
+t1
+drop table t1;
diff --git a/mysql-test/r/strict.result b/mysql-test/r/strict.result
index 4da0f1e48f19f34518d3b9d733bf1e8232ceab39..f0f7ed9684e58a71e94ea598d0fb1e1e21f323b0 100644
--- a/mysql-test/r/strict.result
+++ b/mysql-test/r/strict.result
@@ -818,7 +818,6 @@ ERROR 01000: Data truncated for column 'col1' at row 1
 INSERT INTO t1 (col2) VALUES ('hellobob');
 ERROR 01000: Data truncated for column 'col2' at row 1
 INSERT INTO t1 (col2) VALUES ('hello  ');
-ERROR 01000: Data truncated for column 'col2' at row 1
 UPDATE t1 SET col1 ='hellobob' WHERE col1 ='he';
 ERROR 01000: Data truncated for column 'col1' at row 2
 UPDATE t1 SET col2 ='hellobob' WHERE col2 ='he';
@@ -835,6 +834,7 @@ col1	col2
 hello	hello
 he	hellot
 hello	hello 
+NULL	hello 
 hello	hellob
 DROP TABLE t1;
 CREATE TABLE t1 (col1 enum('red','blue','green'));
diff --git a/mysql-test/t/ndb_index_ordered.test b/mysql-test/t/ndb_index_ordered.test
index b7a5b418f441865b7682b4ec2e3439b6cc44323a..1e70eac181e7e4790cb447cfce658aa388177a23 100644
--- a/mysql-test/t/ndb_index_ordered.test
+++ b/mysql-test/t/ndb_index_ordered.test
@@ -267,3 +267,21 @@ select count(*)-5 from t1 use index (ti) where ti <  '10:11:11';
 select count(*)-6 from t1 use index (ti) where ti <= '10:11:11';
 select count(*)-8 from t1 use index (ti) where ti <  '23:59:59';
 select count(*)-9 from t1 use index (ti) where ti <= '23:59:59';
+
+drop table t1;
+
+# bug#7798
+create table t1(a int primary key, b int not null, index(b));
+insert into t1 values (1,1), (2,2);
+connect (con1,localhost,,,test);
+connect (con2,localhost,,,test);
+connection con1;
+set autocommit=0;
+begin;
+select count(*) from t1;
+connection con2;
+ALTER TABLE t1 ADD COLUMN c int;
+connection con1;
+select a from t1 where b = 2;
+show tables;
+drop table t1;
diff --git a/mysys/hash.c b/mysys/hash.c
index 451bc1eb7f5c245e4a32be0c6058704b56f45604..6091ef39a4ed3412c17386665450bcb3f70598a5 100644
--- a/mysys/hash.c
+++ b/mysys/hash.c
@@ -122,13 +122,13 @@ void hash_free(HASH *hash)
   Delete all elements from the hash (the hash itself is to be reused).
 
   SYNOPSIS
-    hash_reset()
+    my_hash_reset()
     hash   the hash to delete elements of
 */
 
-void hash_reset(HASH *hash)
+void my_hash_reset(HASH *hash)
 {
-  DBUG_ENTER("hash_reset");
+  DBUG_ENTER("my_hash_reset");
   DBUG_PRINT("enter",("hash: 0x%lxd",hash));
 
   hash_free_elements(hash);
diff --git a/ndb/src/common/transporter/TransporterRegistry.cpp b/ndb/src/common/transporter/TransporterRegistry.cpp
index 9273ad8bc80e6e84b54df27ba5392abff2b216db..fcc7a62d9e9cae77506146b1b69720707b2dd0d4 100644
--- a/ndb/src/common/transporter/TransporterRegistry.cpp
+++ b/ndb/src/common/transporter/TransporterRegistry.cpp
@@ -1419,6 +1419,6 @@ NdbOut & operator <<(NdbOut & out, SignalHeader & sh){
 Transporter*
 TransporterRegistry::get_transporter(NodeId nodeId) {
   return theTransporters[nodeId];
-};
+}
 
 template class Vector<TransporterRegistry::Transporter_interface>;
diff --git a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
index 5e79fc1c28f8b4f8f5f2e76d5ac2e98f1183a3da..5164ce572f4c9d6a0010f50f0393050bd2848164 100644
--- a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+++ b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
@@ -1920,7 +1920,6 @@ void Dbtc::packKeyData000Lab(Signal* signal,
 			     Uint32 totalLen) 
 {
   CacheRecord * const regCachePtr = cachePtr.p;
-  UintR Tmp;
 
   jam();
   Uint32 len = 0;
@@ -8646,14 +8645,16 @@ void Dbtc::execSCAN_TABREQ(Signal* signal)
   apiConnectptr.i = scanTabReq->apiConnectPtr;
   tabptr.i = scanTabReq->tableId;
 
-  if (apiConnectptr.i >= capiConnectFilesize ||
-      tabptr.i >= ctabrecFilesize) {
+  if (apiConnectptr.i >= capiConnectFilesize)
+  {
     jam();
     warningHandlerLab(signal);
     return;
   }//if
+
   ptrAss(apiConnectptr, apiConnectRecord);
   ApiConnectRecord * transP = apiConnectptr.p;
+
   if (transP->apiConnectstate != CS_CONNECTED) {
     jam();
     // could be left over from TCKEYREQ rollback
@@ -8667,9 +8668,16 @@ void Dbtc::execSCAN_TABREQ(Signal* signal)
     } else {
       jam();
       errCode = ZSTATE_ERROR;
-      goto SCAN_TAB_error;
+      goto SCAN_TAB_error_no_state_change;
     }
   }
+
+  if(tabptr.i >= ctabrecFilesize)
+  {
+    errCode = ZUNKNOWN_TABLE_ERROR;
+    goto SCAN_TAB_error;
+  }
+
   ptrAss(tabptr, tableRecord);
   if ((aiLength == 0) ||
       (!tabptr.p->checkTable(schemaVersion)) ||
@@ -8766,8 +8774,18 @@ void Dbtc::execSCAN_TABREQ(Signal* signal)
   errCode = ZNO_SCANREC_ERROR;
   goto SCAN_TAB_error;
  
- SCAN_TAB_error:
+SCAN_TAB_error:
   jam();
+  /**
+   * Prepare for up coming ATTRINFO/KEYINFO
+   */
+  transP->apiConnectstate = CS_ABORTING;
+  transP->abortState = AS_IDLE;
+  transP->transid[0] = transid1;
+  transP->transid[1] = transid2;
+ 
+SCAN_TAB_error_no_state_change:
+  
   ScanTabRef * ref = (ScanTabRef*)&signal->theData[0];
   ref->apiConnectPtr = transP->ndbapiConnect;
   ref->transId1 = transid1;
diff --git a/sql/field.cc b/sql/field.cc
index f89479d9314e7be50a3785e1da87b553a36dd3c4..175ca09df371db8b81f9decc91eaf82efe9ad6a1 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -4672,6 +4672,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
   uint32 not_used, copy_length;
   char buff[80];
   String tmpstr(buff,sizeof(buff), &my_charset_bin);
+  enum MYSQL_ERROR::enum_warning_level level= MYSQL_ERROR::WARN_LEVEL_WARN;
 
   /* Convert character set if nesessary */
   if (String::needs_conversion(length, cs, field_charset, &not_used))
@@ -4696,11 +4697,24 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
     *ptr= (uchar) copy_length;
   else
     int2store(ptr, copy_length);
-  
-  if (copy_length < length)
+
+  // Check if we lost something other than just trailing spaces
+  if ((copy_length < length) && table->in_use->count_cuted_fields)
+  {
+    const char *end= from + length;
+    from+= copy_length;
+    from+= field_charset->cset->scan(field_charset, from, end, MY_SEQ_SPACES);
+    /*
+      If we lost only spaces then produce a NOTE, not a WARNING.
+      But if we have already had errors (e.g with charset conversion),
+      then don't reset level to NOTE.
+    */
+    if (from == end && !error)
+      level= MYSQL_ERROR::WARN_LEVEL_NOTE;
     error= 1;
+  }
   if (error)
-    set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
+    set_warning(level, ER_WARN_DATA_TRUNCATED, 1);
   return error;
 }
 
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index 55f56645f821e43d7f0d89cf863c99e79f7299ee..bd3bbe3e1a9430401a023dd476dc1dc380cebcfe 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -255,7 +255,7 @@ my_bool
 my_net_write(NET *net,const char *packet,ulong len)
 {
   uchar buff[NET_HEADER_SIZE];
-  if (unlikely(!net->vio)) // nowhere to write
+  if (unlikely(!net->vio))                      /* nowhere to write */
     return 0;
   /*
     Big packets are handled by splitting them in packets of MAX_PACKET_LENGTH
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 976c6789d9f2287d981bf4272140eab475e151b8..033f5674d340de546e510977118e401bf73fa977 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -742,8 +742,8 @@ class Statement_map
   /* Erase all statements (calls Statement destructor) */
   void reset()
   {
-    hash_reset(&names_hash);
-    hash_reset(&st_hash);
+    my_hash_reset(&names_hash);
+    my_hash_reset(&st_hash);
     last_found_statement= 0;
   }
 
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 5929ad5c14b2586b328834b1c970625a7aa9bce4..495fa4a0bd168b7dbe27b3499db64fffcec0f2d9 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -172,7 +172,7 @@ void lex_start(THD *thd, uchar *buf,uint length)
   lex->proc_list.first= 0;
 
   if (lex->spfuns.records)
-    hash_reset(&lex->spfuns);
+    my_hash_reset(&lex->spfuns);
 }
 
 void lex_end(LEX *lex)