diff options
author | Sergei Golubchik <sergii@pisem.net> | 2012-05-04 07:16:38 +0200 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2012-05-04 07:16:38 +0200 |
commit | 44cf9ee5f7acd2148dc32f4eee4519a087c52b93 (patch) | |
tree | 5b67e89f11e9cdac90d6cc13655e61a55400addd /sql/parse_file.cc | |
parent | 550d6871a5eb93013435055e11a4fe3009490c82 (diff) | |
parent | d335b471918b4ab0bca05984a70669653cf3169f (diff) | |
download | mariadb-git-44cf9ee5f7acd2148dc32f4eee4519a087c52b93.tar.gz |
5.3 merge
Diffstat (limited to 'sql/parse_file.cc')
-rw-r--r-- | sql/parse_file.cc | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/sql/parse_file.cc b/sql/parse_file.cc index 699aa7e2b95..a6e3aa7ed66 100644 --- a/sql/parse_file.cc +++ b/sql/parse_file.cc @@ -86,6 +86,40 @@ write_escaped_string(IO_CACHE *file, LEX_STRING *val_s) return FALSE; } +static ulonglong view_algo_to_frm(ulonglong val) +{ + switch(val) + { + case VIEW_ALGORITHM_UNDEFINED: + return VIEW_ALGORITHM_UNDEFINED_FRM; + case VIEW_ALGORITHM_MERGE: + return VIEW_ALGORITHM_MERGE_FRM; + case VIEW_ALGORITHM_TMPTABLE: + return VIEW_ALGORITHM_TMPTABLE_FRM; + } + DBUG_ASSERT(0); /* Should never happen */ + return VIEW_ALGORITHM_UNDEFINED; +} + +static ulonglong view_algo_from_frm(ulonglong val) +{ + switch(val) + { + case VIEW_ALGORITHM_UNDEFINED_FRM: + return VIEW_ALGORITHM_UNDEFINED; + case VIEW_ALGORITHM_MERGE_FRM: + return VIEW_ALGORITHM_MERGE; + case VIEW_ALGORITHM_TMPTABLE_FRM: + return VIEW_ALGORITHM_TMPTABLE; + } + + /* + Early versions of MariaDB 5.2/5.3 had identical in-memory and frm values + Return input value. + */ + return val; +} + /** Write parameter value to IO_CACHE. @@ -124,8 +158,14 @@ write_parameter(IO_CACHE *file, uchar* base, File_option *parameter) break; } case FILE_OPTIONS_ULONGLONG: + case FILE_OPTIONS_VIEW_ALGO: { - num.set(*((ulonglong *)(base + parameter->offset)), &my_charset_bin); + ulonglong val= *(ulonglong *)(base + parameter->offset); + + if (parameter->type == FILE_OPTIONS_VIEW_ALGO) + val= view_algo_to_frm(val); + + num.set(val, &my_charset_bin); if (my_b_append(file, (const uchar *)num.ptr(), num.length())) DBUG_RETURN(TRUE); break; @@ -769,6 +809,7 @@ File_parser::parse(uchar* base, MEM_ROOT *mem_root, break; } case FILE_OPTIONS_ULONGLONG: + case FILE_OPTIONS_VIEW_ALGO: if (!(eol= strchr(ptr, '\n'))) { my_error(ER_FPARSER_ERROR_IN_PARAMETER, MYF(0), @@ -777,8 +818,12 @@ File_parser::parse(uchar* base, MEM_ROOT *mem_root, } { int not_used; - *((ulonglong*)(base + parameter->offset))= - my_strtoll10(ptr, 0, ¬_used); + ulonglong val= (ulonglong)my_strtoll10(ptr, 0, ¬_used); + + if (parameter->type == FILE_OPTIONS_VIEW_ALGO) + val= view_algo_from_frm(val); + + *((ulonglong*)(base + parameter->offset))= val; } ptr= eol+1; break; |