Öffnet eine Tabelle.
virtual int open
( |
name, | |
mode, | ||
test_if_locked) ; |
const char * | name ; |
int | mode ; |
uint | test_if_locked ; |
Dies ist die Methode open
.
Wird zum Öffnen von Tabellen verwendet. Der Name ist der Name der Datei. Eine Tabelle wird dann geöffnet, wenn es nötig ist, zum Beispiel, wenn eine SELECT-Anfrage für die Tabelle eintrifft. (Die Tabellen werden jedoch nicht für jede Anfrage geöffnet und geschlossen, sondern zwischenzeitlich im Cache gelagert.)
Wird von handler.cc
durch
handler::ha_open()
aufgerufen. Der Server
öffnet alle Tabellen mit einem Aufruf der Funktion
ha_open()
, die dann die Handler-spezifische
open()
-Funktion aufruft.
Ein Handler-Objekt wird im Rahmen seiner Initialisierung geöffnet, bevor es für normale Anfragen verwendet wird (nicht immer vor Metadatenänderungen.) Wenn das Objekt geöffnet wurde, wird es auch vor dem Löschen wieder geschlossen.
Dies ist die Methode open
. Sie wird
aufgerufen, um eine Datenbanktabelle zu öffnen.
Der erste Parameter ist der Name der zu öffnenden Tabelle und
der zweite legt fest, welche Datei geöffnet oder welche
Operation ausgeführt werden soll. Die Werte sind in
handler.h
definiert und werden hier für
Sie noch einmal aufgeführt:
#define HA_OPEN_KEYFILE 1 #define HA_OPEN_RNDFILE 2 #define HA_GET_INDEX 4 #define HA_GET_INFO 8 /* nach dem Öffnen ha_info() aufrufen */ #define HA_READ_ONLY 16 /* Datei schreibgeschützt öffnen */ #define HA_TRY_READ_ONLY 32 /* Wenn Schreibzugriff nicht möglich, schreibgeschützten versuchen */ #define HA_WAIT_IF_LOCKED 64 /* Bei vorhandener Sperre mit dem Öffnen warten */ #define HA_ABORT_IF_LOCKED 128 /* Bei vorhandener Sperre das Öffnen überspringen*/ #define HA_BLOCK_LOCK 256 /* Entsperren, wenn einige Datensätze gelesen werden */ #define HA_OPEN_TEMPORARY 512
Die letzte Option gibt an, ob der Handler auf Sperren auf der Tabelle achten soll, ehe er sie öffnet.
In der Regel wird Ihre Speicher-Engine auch irgendeine Form von
Zugriffskontrolle implementieren müssen, damit in einer
Multithread-Umgebung keine Dateien beschädigt werden. Ein
Beispiel für die Implementierung von Dateisperren finden Sie in
den Methoden get_share()
und
free_share()
von
sql/examples/ha_tina.cc
.
name
mode
test_if_locked
Keine Rückgabewerte.
Dieses Beispiel stammt von der Speicher-Engine
CSV
:
int ha_tina::open(const char *name, int mode, uint test_if_locked) { DBUG_ENTER("ha_tina::open"); if (!(share= get_share(name, table))) DBUG_RETURN(1); thr_lock_data_init(&share->lock,&lock,NULL); ref_length=sizeof(off_t); DBUG_RETURN(0); }
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.