summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/include/varchar.inc5
-rw-r--r--mysql-test/r/maria.result1
-rw-r--r--mysql-test/suite/binlog/r/binlog_unsafe.result1
-rw-r--r--mysql-test/suite/binlog/t/binlog_unsafe.test1
-rw-r--r--sql/handler.h1
-rw-r--r--sql/item.h1
-rw-r--r--sql/log.cc25
-rw-r--r--sql/sql_insert.cc18
8 files changed, 34 insertions, 19 deletions
diff --git a/mysql-test/include/varchar.inc b/mysql-test/include/varchar.inc
index 15306ed8385..7accbd151a9 100644
--- a/mysql-test/include/varchar.inc
+++ b/mysql-test/include/varchar.inc
@@ -11,6 +11,11 @@ enable_query_log;
# Simple basic test that endspace is saved
#
+#
+# Remember to check that one doesn't get a warning or a note
+# from a char field when end spaces get removed. SQL standard!
+#
+
create table t1 (v varchar(10), c char(10), t text);
insert into t1 values('+ ', '+ ', '+ ');
set @a=repeat(' ',20);
diff --git a/mysql-test/r/maria.result b/mysql-test/r/maria.result
index a14c6211c47..5487024f073 100644
--- a/mysql-test/r/maria.result
+++ b/mysql-test/r/maria.result
@@ -983,6 +983,7 @@ set @a=repeat(' ',20);
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
Warnings:
Note 1265 Data truncated for column 'v' at row 1
+Note 1265 Data truncated for column 'c' at row 1
select concat('*',v,'*',c,'*',t,'*') from t1;
concat('*',v,'*',c,'*',t,'*')
*+ *+*+ *
diff --git a/mysql-test/suite/binlog/r/binlog_unsafe.result b/mysql-test/suite/binlog/r/binlog_unsafe.result
index cd055e6410e..1f7b217dc31 100644
--- a/mysql-test/suite/binlog/r/binlog_unsafe.result
+++ b/mysql-test/suite/binlog/r/binlog_unsafe.result
@@ -11,7 +11,6 @@ INSERT DELAYED INTO t1 VALUES (5);
INSERT INTO t1 VALUES (@@global.sync_binlog);
Warnings:
Warning 1592 Statement is not safe to log in statement format.
-DROP VIEW v1;
INSERT INTO t1 VALUES (@@session.insert_id);
Warnings:
Warning 1592 Statement is not safe to log in statement format.
diff --git a/mysql-test/suite/binlog/t/binlog_unsafe.test b/mysql-test/suite/binlog/t/binlog_unsafe.test
index 696ded0fd1e..0d7059bc31f 100644
--- a/mysql-test/suite/binlog/t/binlog_unsafe.test
+++ b/mysql-test/suite/binlog/t/binlog_unsafe.test
@@ -59,7 +59,6 @@
source include/have_log_bin.inc;
source include/have_binlog_format_statement.inc;
-DROP VIEW v1;
--echo ==== Setup tables ====
CREATE TABLE t1 (a INT);
diff --git a/sql/handler.h b/sql/handler.h
index 222337fd01b..63923733c4d 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -767,6 +767,7 @@ struct THD_TRANS
bool modified_non_trans_table;
void reset() { no_2pc= FALSE; modified_non_trans_table= FALSE; }
+ THD_TRANS() {} /* Remove gcc warning */
};
diff --git a/sql/item.h b/sql/item.h
index f4d7da55496..57399e935cd 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -1028,6 +1028,7 @@ public:
if (orig_name)
name= orig_name;
}
+ Item_basic_constant() {} /* Remove gcc warning */
};
diff --git a/sql/log.cc b/sql/log.cc
index bb18d08f4db..305deb2f0fe 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -1535,16 +1535,23 @@ static int binlog_commit(handlerton *hton, THD *thd, bool all)
YESNO(in_transaction),
YESNO(thd->transaction.all.modified_non_trans_table),
YESNO(thd->transaction.stmt.modified_non_trans_table)));
- if (in_transaction &&
- (all ||
- (!trx_data->at_least_one_stmt &&
- thd->transaction.stmt.modified_non_trans_table)) ||
- !in_transaction && !all)
+ if (thd->options & OPTION_BIN_LOG)
{
- Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE);
- qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE)
- int error= binlog_end_trans(thd, trx_data, &qev, all);
- DBUG_RETURN(error);
+ if (in_transaction &&
+ (all ||
+ (!trx_data->at_least_one_stmt &&
+ thd->transaction.stmt.modified_non_trans_table)) ||
+ !in_transaction && !all)
+ {
+ Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE);
+ qev.error_code= 0; // see comment in MYSQL_LOG::write(THD, IO_CACHE)
+ int error= binlog_end_trans(thd, trx_data, &qev, all);
+ DBUG_RETURN(error);
+ }
+ }
+ else
+ {
+ trx_data->reset();
}
DBUG_RETURN(0);
}
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 394a3d2e7b3..dbfe3cc6d79 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -3533,15 +3533,17 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
engines to do logging of insertions (optimization). We don't do it for
temporary tables (yet) as re-enabling causes an undesirable commit.
*/
- if (((thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) == 0) &&
- ha_enable_transaction(thd, FALSE))
- DBUG_RETURN(-1);
if (!(table= create_table_from_items(thd, create_info, create_table,
alter_info, &values,
&extra_lock, hook_ptr)))
DBUG_RETURN(-1); // abort() deletes table
+ if (((thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) == 0) &&
+ !create_info->table_existed &&
+ ha_enable_transaction(thd, FALSE))
+ DBUG_RETURN(-1);
+
if (extra_lock)
{
DBUG_ASSERT(m_plock == NULL);
@@ -3682,7 +3684,8 @@ bool select_create::send_eof()
abort();
else
{
- if ((thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) == 0)
+ if ((thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) == 0 &&
+ !create_info->table_existed)
ha_enable_transaction(thd, TRUE);
/*
Do an implicit commit at end of statement for non-temporary
@@ -3712,9 +3715,6 @@ void select_create::abort()
{
DBUG_ENTER("select_create::abort");
- if ((thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) == 0)
- ha_enable_transaction(thd, TRUE);
-
/*
In select_insert::abort() we roll back the statement, including
truncating the transaction cache of the binary log. To do this, we
@@ -3731,11 +3731,13 @@ void select_create::abort()
log state.
*/
tmp_disable_binlog(thd);
+ if ((thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) == 0 &&
+ !create_info->table_existed)
+ ha_enable_transaction(thd, TRUE);
select_insert::abort();
thd->transaction.stmt.modified_non_trans_table= FALSE;
reenable_binlog(thd);
-
if (m_plock)
{
mysql_unlock_tables(thd, *m_plock);