97
94
Open_tables_state::Open_tables_state(ulong version_arg)
98
:version(version_arg), state_flags(0U)
95
:version(version_arg), backups_available(false)
100
97
reset_open_tables_state();
1879
1876
user_var_entry *entry= NULL;
1881
assert(name.length == strlen (name.str));
1882
1878
entry= (user_var_entry*) hash_search(&user_vars, (unsigned char*) name.str, name.length);
1884
1880
if ((entry == NULL) && create_if_not_exists)
1886
uint32_t size=ALIGN_SIZE(sizeof(user_var_entry))+name.length+1+extra_size;
1887
1882
if (!hash_inited(&user_vars))
1889
if (!(entry = (user_var_entry*) malloc(size)))
1891
entry->name.str=(char*) entry+ ALIGN_SIZE(sizeof(user_var_entry))+
1893
entry->name.length=name.length;
1896
entry->update_query_id=0;
1897
entry->collation.set(NULL, DERIVATION_IMPLICIT);
1898
entry->unsigned_flag= 0;
1900
If we are here, we were called from a SET or a query which sets a
1901
variable. Imagine it is this:
1902
INSERT INTO t SELECT @a:=10, @a:=@a+1.
1903
Then when we have a Item_func_get_user_var (because of the @a+1) so we
1904
think we have to write the value of @a to the binlog. But before that,
1905
we have a Item_func_set_user_var to create @a (@a:=10), in this we mark
1906
the variable as "already logged" (line below) so that it won't be logged
1907
by Item_func_get_user_var (because that's not necessary).
1909
entry->used_query_id= query_id;
1910
entry->type=STRING_RESULT;
1911
memcpy(entry->name.str, name.str, name.length+1);
1884
entry= new (nothrow) user_var_entry(name.str, query_id);
1912
1889
if (my_hash_insert(&user_vars, (unsigned char*) entry))
1996
1973
does not belong to statement for which we do close_thread_tables()).
1997
1974
TODO: This should be fixed in later releases.
1999
if (!(state_flags & Open_tables_state::BACKUPS_AVAIL))
1976
if (backups_available == false)
2001
1978
main_da.can_overwrite_status= true;
2002
1979
ha_autocommit_or_rollback(this, is_error());