mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
System Versioning 1.0 pre5 [closes #407]
Merge branch '10.3' into trunk Both field_visibility and VERS_HIDDEN_FLAG exist independently. TODO: VERS_HIDDEN_FLAG should be replaced with SYSTEM_INVISIBLE (or COMPLETELY_INVISIBLE?).
This commit is contained in:
@@ -87,10 +87,31 @@ static uchar *extra2_write(uchar *pos, enum extra2_frm_value_type type,
|
||||
return extra2_write(pos, type, reinterpret_cast<LEX_CSTRING *>(str));
|
||||
}
|
||||
|
||||
static uchar *extra2_write_field_properties(uchar *pos,
|
||||
List<Create_field> &create_fields)
|
||||
{
|
||||
List_iterator<Create_field> it(create_fields);
|
||||
*pos++= EXTRA2_FIELD_FLAGS;
|
||||
/*
|
||||
always first 2 for field visibility
|
||||
*/
|
||||
pos= extra2_write_len(pos, create_fields.elements);
|
||||
while (Create_field *cf= it++)
|
||||
{
|
||||
uchar flags= cf->field_visibility;
|
||||
if (cf->flags & VERS_UPDATE_UNVERSIONED_FLAG)
|
||||
flags|= VERS_OPTIMIZED_UPDATE;
|
||||
if (cf->flags & VERS_HIDDEN_FLAG)
|
||||
flags|= VERS_HIDDEN;
|
||||
*pos++= flags;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
|
||||
static const bool ROW_START = true;
|
||||
static const bool ROW_END = false;
|
||||
|
||||
inline
|
||||
static inline
|
||||
uint16
|
||||
vers_get_field(HA_CREATE_INFO *create_info, List<Create_field> &create_fields, bool row_start)
|
||||
{
|
||||
@@ -116,12 +137,15 @@ vers_get_field(HA_CREATE_INFO *create_info, List<Create_field> &create_fields, b
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
bool has_extra2_field_flags(List<Create_field> &create_fields)
|
||||
{
|
||||
List_iterator<Create_field> it(create_fields);
|
||||
while (Create_field *f= it++)
|
||||
{
|
||||
if (f->flags & (VERS_UPDATE_UNVERSIONED_FLAG | HIDDEN_FLAG))
|
||||
if (f->field_visibility != NOT_INVISIBLE)
|
||||
return true;
|
||||
if (f->flags & (VERS_UPDATE_UNVERSIONED_FLAG | VERS_HIDDEN_FLAG))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -272,8 +296,8 @@ LEX_CUSTRING build_frm_image(THD *thd, const char *table,
|
||||
bool has_extra2_field_flags_= has_extra2_field_flags(create_fields);
|
||||
if (has_extra2_field_flags_)
|
||||
{
|
||||
extra2_size+=
|
||||
1 + (create_fields.elements <= 255 ? 1 : 3) + create_fields.elements;
|
||||
extra2_size+= 1 + (create_fields.elements > 255 ? 3 : 1) +
|
||||
create_fields.elements;
|
||||
}
|
||||
|
||||
key_buff_length= uint4korr(fileinfo+47);
|
||||
@@ -349,20 +373,7 @@ LEX_CUSTRING build_frm_image(THD *thd, const char *table,
|
||||
}
|
||||
|
||||
if (has_extra2_field_flags_)
|
||||
{
|
||||
*pos++= EXTRA2_FIELD_FLAGS;
|
||||
pos= extra2_write_len(pos, create_fields.elements);
|
||||
List_iterator<Create_field> it(create_fields);
|
||||
while (Create_field *field= it++)
|
||||
{
|
||||
uchar flags= 0;
|
||||
if (field->flags & VERS_UPDATE_UNVERSIONED_FLAG)
|
||||
flags|= VERS_OPTIMIZED_UPDATE;
|
||||
if (field->flags & HIDDEN_FLAG)
|
||||
flags|= HIDDEN;
|
||||
*pos++= flags;
|
||||
}
|
||||
}
|
||||
pos= extra2_write_field_properties(pos, create_fields);
|
||||
|
||||
int4store(pos, filepos); // end of the extra2 segment
|
||||
pos+= 4;
|
||||
|
Reference in New Issue
Block a user