| 1639 | } |
| 1640 | |
| 1641 | static |
| 1642 | bool read_extra2(const uchar *frm_image, size_t len, extra2_fields *fields) |
| 1643 | { |
| 1644 | const uchar *extra2= frm_image + 64; |
| 1645 | |
| 1646 | DBUG_ENTER("read_extra2"); |
| 1647 | |
| 1648 | fields->reset(); |
| 1649 | |
| 1650 | if (*extra2 != '/') // old frm had '/' there |
| 1651 | { |
| 1652 | const uchar *e2end= extra2 + len; |
| 1653 | while (extra2 + 3 <= e2end) |
| 1654 | { |
| 1655 | extra2_frm_value_type type= (extra2_frm_value_type)*extra2++; |
| 1656 | size_t length= extra2_read_len(&extra2, e2end); |
| 1657 | if (!length) |
| 1658 | DBUG_RETURN(true); |
| 1659 | |
| 1660 | bool fail= false; |
| 1661 | switch (type) { |
| 1662 | case EXTRA2_TABLEDEF_VERSION: |
| 1663 | if (fields->version.str) // see init_from_sql_statement_string() |
| 1664 | { |
| 1665 | if (length != fields->version.length) |
| 1666 | DBUG_RETURN(true); |
| 1667 | } |
| 1668 | else |
| 1669 | { |
| 1670 | fields->version.str= extra2; |
| 1671 | fields->version.length= length; |
| 1672 | } |
| 1673 | break; |
| 1674 | case EXTRA2_ENGINE_TABLEOPTS: |
| 1675 | fail= read_extra2_section_once(extra2, length, &fields->options); |
| 1676 | break; |
| 1677 | case EXTRA2_DEFAULT_PART_ENGINE: |
| 1678 | fields->engine.set((const char*)extra2, length); |
| 1679 | break; |
| 1680 | case EXTRA2_GIS: |
| 1681 | fail= read_extra2_section_once(extra2, length, &fields->gis); |
| 1682 | break; |
| 1683 | case EXTRA2_PERIOD_FOR_SYSTEM_TIME: |
| 1684 | fail= read_extra2_section_once(extra2, length, &fields->system_period) |
| 1685 | || length != 2 * frm_fieldno_size; |
| 1686 | break; |
| 1687 | case EXTRA2_FIELD_FLAGS: |
| 1688 | fail= read_extra2_section_once(extra2, length, &fields->field_flags); |
| 1689 | break; |
| 1690 | case EXTRA2_APPLICATION_TIME_PERIOD: |
| 1691 | fail= read_extra2_section_once(extra2, length, &fields->application_period); |
| 1692 | break; |
| 1693 | case EXTRA2_PERIOD_WITHOUT_OVERLAPS: |
| 1694 | fail= read_extra2_section_once(extra2, length, &fields->without_overlaps); |
| 1695 | break; |
| 1696 | case EXTRA2_FIELD_DATA_TYPE_INFO: |
| 1697 | fail= read_extra2_section_once(extra2, length, &fields->field_data_type_info); |
| 1698 | break; |
no test coverage detected