Commit 11225c18 authored by Marko Mäkelä's avatar Marko Mäkelä

dict_table_t::prepare_instant(): Set n_nullable correctly

parent 3464e039
...@@ -306,7 +306,7 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old, ...@@ -306,7 +306,7 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old,
->is_nullable()); ->is_nullable());
if (index.fields[i].col->is_nullable() if (index.fields[i].col->is_nullable()
&& !oindex.fields[i].col->is_nullable()) { && oindex.fields[i].col->was_not_null()) {
instant->leaf_redundant = 1; instant->leaf_redundant = 1;
break; break;
} }
...@@ -383,7 +383,7 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old, ...@@ -383,7 +383,7 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old,
DBUG_ASSERT(!f.name); DBUG_ASSERT(!f.name);
f.col = instant->dropped + d; f.col = instant->dropped + d;
} }
if (f.col->is_nullable()) { if (!f.col->was_not_null()) {
found_nullable: found_nullable:
n_nullable++; n_nullable++;
ut_d(core_null ut_d(core_null
...@@ -419,8 +419,13 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old, ...@@ -419,8 +419,13 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old,
DBUG_ASSERT(!fields[i].col->is_dropped()); DBUG_ASSERT(!fields[i].col->is_dropped());
DBUG_ASSERT(fields[i].name DBUG_ASSERT(fields[i].name
== fields[i].col->name(*this)); == fields[i].col->name(*this));
DBUG_ASSERT(fields[i].same(oindex.fields[i]));
if (fields[i].col->is_nullable()) { if (fields[i].col->is_nullable()) {
goto found_nullable; if (!oindex.fields[i]
.col->was_not_null()) {
goto found_nullable;
}
fields[i].col->set_was_not_null();
} }
continue; continue;
} }
...@@ -429,7 +434,7 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old, ...@@ -429,7 +434,7 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old,
DBUG_ASSERT(d < n_drop); DBUG_ASSERT(d < n_drop);
f.col = &instant->dropped[d++]; f.col = &instant->dropped[d++];
f.name = NULL; f.name = NULL;
if (f.col->is_nullable()) { if (!f.col->was_not_null()) {
goto found_nullable; goto found_nullable;
} }
} }
...@@ -443,7 +448,7 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old, ...@@ -443,7 +448,7 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old,
DBUG_ASSERT(d == n_drop); DBUG_ASSERT(d == n_drop);
for (; i < n_fields; i++) { for (; i < n_fields; i++) {
fields[i] = index.fields[j++]; fields[i] = index.fields[j++];
n_nullable += fields[i].col->is_nullable(); n_nullable += !fields[i].col->was_not_null();
DBUG_ASSERT(!fields[i].col->is_dropped()); DBUG_ASSERT(!fields[i].col->is_dropped());
DBUG_ASSERT(fields[i].name DBUG_ASSERT(fields[i].name
== fields[i].col->name(*this)); == fields[i].col->name(*this));
...@@ -451,7 +456,6 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old, ...@@ -451,7 +456,6 @@ inline void dict_table_t::prepare_instant(const dict_table_t& old,
DBUG_ASSERT(j == index.n_fields); DBUG_ASSERT(j == index.n_fields);
index.n_fields = index.n_def = n_fields; index.n_fields = index.n_def = n_fields;
index.fields = fields; index.fields = fields;
DBUG_ASSERT(n_nullable >= index.n_nullable);
DBUG_ASSERT(n_nullable >= oindex.n_nullable); DBUG_ASSERT(n_nullable >= oindex.n_nullable);
index.n_nullable = n_nullable; index.n_nullable = n_nullable;
goto set_core_fields; goto set_core_fields;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment