Viele der Indexmethoden übergeben ein Byte-Array namens
*key
, welches den zu lesenden Indexeintrag in
einem Standardformat angibt. Ihre Speicher-Engine muss die
Informationen des Schlüssels extrahieren und in ihr internes
Indexformat übersetzen, um die zum Index gehörige Zeile zu
ermitteln.
Die im Schlüssel vorliegenden Daten werden mit einer Iteration
durch den Schlüssel beschafft. Ihr Format ist so, wie es in
table->key_info[
definiert wurde. Das folgende Beispiel aus
index
]->key_part[part_num
]ha_berkeley.cc
zeigt, wie die
Speicher-Engine BerkeleyDB
einen in
*key
definierten Schlüssel in ihr internes
Format konvertiert:
/* Erzeuge aus einem ungepackten MySQL-Schlüssel (wie dem, der von index_read() übermittelt wird) einen gepackten. Anhand dieses Schlüssels wird eine Zeile gelesen */ DBT *ha_berkeley::pack_key(DBT *key, uint keynr, char *buff, const byte *key_ptr, uint key_length) { KEY *key_info=table->key_info+keynr; KEY_PART_INFO *key_part=key_info->key_part; KEY_PART_INFO *end=key_part+key_info->key_parts; DBUG_ENTER("bdb:pack_key"); bzero((char*) key,sizeof(*key)); key->data=buff; key->app_private= (void*) key_info; for (; key_part != end && (int) key_length > 0 ; key_part++) { uint offset=0; if (key_part->null_bit) { if (!(*buff++ = (*key_ptr == 0))) // Für NULL wird 0 gespeichert { key_length-= key_part->store_length; key_ptr+= key_part->store_length; key->flags|=DB_DBT_DUPOK; continue; } offset=1; // Daten liegen unter key_ptr+1 } buff=key_part->field->pack_key_from_key_image(buff,(char*) key_ptr+offset, key_part->length); key_ptr+=key_part->store_length; key_length-=key_part->store_length; } key->size= (buff - (char*) key->data); DBUG_DUMP("key",(char*) key->data, key->size); DBUG_RETURN(key); }
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.