Commit 04ed9f02 authored by unknown's avatar unknown
Browse files

more than 64 indexes per table. bugfixes. bug#10995

parent 92f7de69
Loading
Loading
Loading
Loading
+11 −12
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ template <uint default_width> class Bitmap
  uchar buffer[(default_width+7)/8];
public:
  Bitmap() { init(); }
  Bitmap(Bitmap& from) { *this=from; }
  Bitmap(const Bitmap& from) { *this=from; }
  explicit Bitmap(uint prefix_to_set) { init(prefix_to_set); }
  void init() { bitmap_init(&map, buffer, default_width, 0); }
  void init(uint prefix_to_set) { init(); set_prefix(prefix_to_set); }
@@ -61,18 +61,17 @@ template <uint default_width> class Bitmap
  my_bool operator==(const Bitmap& map2) const { return bitmap_cmp(&map, &map2.map); }
  char *print(char *buf) const
  {
    char *s=buf; int i;
    for (i=sizeof(buffer)-1; i>=0 ; i--)
    char *s=buf;
    const uchar *e=buffer, *b=e+sizeof(buffer)-1;
    while (!*b && b>e)
      b--;
    if ((*s=_dig_vec_upper[*b >> 4]) != '0')
        s++;
    *s++=_dig_vec_upper[*b & 15];
    while (--b>=e)
    {
      if ((*s=_dig_vec_upper[buffer[i] >> 4]) != '0')
        break;
      if ((*s=_dig_vec_upper[buffer[i] & 15]) != '0')
        break;
    }
    for (s++, i-- ; i>=0 ; i--)
    {
      *s++=_dig_vec_upper[buffer[i] >> 4];
      *s++=_dig_vec_upper[buffer[i] & 15];
      *s++=_dig_vec_upper[*b >> 4];
      *s++=_dig_vec_upper[*b & 15];
    }
    *s=0;
    return buf;
+1 −0
Original line number Diff line number Diff line
@@ -5792,6 +5792,7 @@ make_join_readinfo(JOIN *join, uint options)
	if (!table->no_keyread)
	{
	  if (tab->select && tab->select->quick &&
              tab->select->quick->index != MAX_KEY && //not index_merge
	      table->used_keys.is_set(tab->select->quick->index))
	  {
	    table->key_read=1;
+10 −6
Original line number Diff line number Diff line
@@ -7455,12 +7455,16 @@ static void test_explain_bug()
  verify_prepare_field(result, 5, "key", "", MYSQL_TYPE_VAR_STRING,
                       "", "", "", NAME_LEN, 0);

  verify_prepare_field(result, 6, "key_len", "",
                       (mysql_get_server_version(mysql) <= 50000 ?
                        MYSQL_TYPE_LONGLONG : MYSQL_TYPE_VAR_STRING),
                       "", "", "",
                       (mysql_get_server_version(mysql) <= 50000 ? 3 : 4096),
                       0);
  if (mysql_get_server_version(mysql) <= 50000)
  {
    verify_prepare_field(result, 6, "key_len", "", MYSQL_TYPE_LONGLONG, "",
                         "", "", 3, 0);
  }
  else
  {
    verify_prepare_field(result, 6, "key_len", "", MYSQL_TYPE_VAR_STRING, "", 
                         "", "", NAME_LEN*MAX_KEY, 0);
  }

  verify_prepare_field(result, 7, "ref", "", MYSQL_TYPE_VAR_STRING,
                       "", "", "", NAME_LEN*16, 0);