Commit 76d65499 authored by Vladislav Vaintroub's avatar Vladislav Vaintroub

merge

parents 5701d531 97aa8e8c
...@@ -86,6 +86,40 @@ write_escaped_string(IO_CACHE *file, LEX_STRING *val_s) ...@@ -86,6 +86,40 @@ write_escaped_string(IO_CACHE *file, LEX_STRING *val_s)
return FALSE; 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. Write parameter value to IO_CACHE.
...@@ -124,8 +158,14 @@ write_parameter(IO_CACHE *file, uchar* base, File_option *parameter) ...@@ -124,8 +158,14 @@ write_parameter(IO_CACHE *file, uchar* base, File_option *parameter)
break; break;
} }
case FILE_OPTIONS_ULONGLONG: 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())) if (my_b_append(file, (const uchar *)num.ptr(), num.length()))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
break; break;
...@@ -766,6 +806,7 @@ File_parser::parse(uchar* base, MEM_ROOT *mem_root, ...@@ -766,6 +806,7 @@ File_parser::parse(uchar* base, MEM_ROOT *mem_root,
break; break;
} }
case FILE_OPTIONS_ULONGLONG: case FILE_OPTIONS_ULONGLONG:
case FILE_OPTIONS_VIEW_ALGO:
if (!(eol= strchr(ptr, '\n'))) if (!(eol= strchr(ptr, '\n')))
{ {
my_error(ER_FPARSER_ERROR_IN_PARAMETER, MYF(0), my_error(ER_FPARSER_ERROR_IN_PARAMETER, MYF(0),
...@@ -774,8 +815,12 @@ File_parser::parse(uchar* base, MEM_ROOT *mem_root, ...@@ -774,8 +815,12 @@ File_parser::parse(uchar* base, MEM_ROOT *mem_root,
} }
{ {
int not_used; int not_used;
*((ulonglong*)(base + parameter->offset))= ulonglong val= (ulonglong)my_strtoll10(ptr, 0, &not_used);
my_strtoll10(ptr, 0, &not_used);
if (parameter->type == FILE_OPTIONS_VIEW_ALGO)
val= view_algo_from_frm(val);
*((ulonglong*)(base + parameter->offset))= val;
} }
ptr= eol+1; ptr= eol+1;
break; break;
......
...@@ -26,6 +26,7 @@ enum file_opt_type { ...@@ -26,6 +26,7 @@ enum file_opt_type {
FILE_OPTIONS_STRING, /**< String (LEX_STRING) */ FILE_OPTIONS_STRING, /**< String (LEX_STRING) */
FILE_OPTIONS_ESTRING, /**< Escaped string (LEX_STRING) */ FILE_OPTIONS_ESTRING, /**< Escaped string (LEX_STRING) */
FILE_OPTIONS_ULONGLONG, /**< ulonglong parameter (ulonglong) */ FILE_OPTIONS_ULONGLONG, /**< ulonglong parameter (ulonglong) */
FILE_OPTIONS_VIEW_ALGO, /**< Similar to longlong, but needs conversion */
FILE_OPTIONS_TIMESTAMP, /**< timestamp (LEX_STRING have to be FILE_OPTIONS_TIMESTAMP, /**< timestamp (LEX_STRING have to be
allocated with length 20 (19+1) */ allocated with length 20 (19+1) */
FILE_OPTIONS_STRLIST, /**< list of escaped strings FILE_OPTIONS_STRLIST, /**< list of escaped strings
......
...@@ -736,7 +736,7 @@ static File_option view_parameters[]= ...@@ -736,7 +736,7 @@ static File_option view_parameters[]=
FILE_OPTIONS_ULONGLONG}, FILE_OPTIONS_ULONGLONG},
{{ C_STRING_WITH_LEN("algorithm")}, {{ C_STRING_WITH_LEN("algorithm")},
my_offsetof(TABLE_LIST, algorithm), my_offsetof(TABLE_LIST, algorithm),
FILE_OPTIONS_ULONGLONG}, FILE_OPTIONS_VIEW_ALGO},
{{ C_STRING_WITH_LEN("definer_user")}, {{ C_STRING_WITH_LEN("definer_user")},
my_offsetof(TABLE_LIST, definer.user), my_offsetof(TABLE_LIST, definer.user),
FILE_OPTIONS_STRING}, FILE_OPTIONS_STRING},
......
...@@ -1150,12 +1150,6 @@ typedef struct st_schema_table ...@@ -1150,12 +1150,6 @@ typedef struct st_schema_table
/* /*
Types of derived tables. The ending part is a bitmap of phases that are Types of derived tables. The ending part is a bitmap of phases that are
applicable to a derived table of the type. applicable to a derived table of the type.
* /
#define VIEW_ALGORITHM_UNDEFINED 0
#define VIEW_ALGORITHM_MERGE 1 + DT_COMMON + DT_MERGE
#define DERIVED_ALGORITHM_MERGE 2 + DT_COMMON + DT_MERGE
#define VIEW_ALGORITHM_TMPTABLE 3 + DT_COMMON + DT_MATERIALIZE
#define DERIVED_ALGORITHM_MATERIALIZE 4 + DT_COMMON + DT_MATERIALIZE
*/ */
#define DTYPE_ALGORITHM_UNDEFINED 0 #define DTYPE_ALGORITHM_UNDEFINED 0
#define DTYPE_VIEW 1 #define DTYPE_VIEW 1
...@@ -1188,7 +1182,16 @@ typedef struct st_schema_table ...@@ -1188,7 +1182,16 @@ typedef struct st_schema_table
#define VIEW_ALGORITHM_UNDEFINED 0 #define VIEW_ALGORITHM_UNDEFINED 0
#define VIEW_ALGORITHM_MERGE (DTYPE_VIEW | DTYPE_MERGE) #define VIEW_ALGORITHM_MERGE (DTYPE_VIEW | DTYPE_MERGE)
#define VIEW_ALGORITHM_TMPTABLE (DTYPE_VIEW + DTYPE_MATERIALIZE ) #define VIEW_ALGORITHM_TMPTABLE (DTYPE_VIEW | DTYPE_MATERIALIZE)
/*
View algorithm values as stored in the FRM. Values differ from in-memory
representation for backward compatibility.
*/
#define VIEW_ALGORITHM_UNDEFINED_FRM 0
#define VIEW_ALGORITHM_MERGE_FRM 1
#define VIEW_ALGORITHM_TMPTABLE_FRM 2
#define JOIN_TYPE_LEFT 1 #define JOIN_TYPE_LEFT 1
#define JOIN_TYPE_RIGHT 2 #define JOIN_TYPE_RIGHT 2
......
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