Wenn Sie einen Handler erzeugt haben, werden Sie normalerweise als Nächstes eine Tabelle anlegen.
Hierzu muss Ihre Speicher-Engine die virtuelle Funktion
create()
implementieren:
virtual int create(const char *name, TABLE *form, HA_CREATE_INFO *info)=0;
Diese Funktion sollte alle notwendigen Dateien erzeugen, muss jedoch nicht die Tabelle öffnen. Darum wird sich später der MySQL Server kümmern.
Der Parameter *name
ist der Tabellenname und
der Parameter *form
ist eine
TABLE
-Struktur, welche die Tabelle definiert
und den Inhalt der zuvor bereits vom MySQL Server angelegten
-Datei
vergleicht. Die Datei
tablename
.frm
darf
nicht von Speicher-Engines geändert werden.
tablename
.frm
Der Parameter *info
ist eine Struktur, die
Informationen über die CREATE TABLE
-Anweisung
enthält, mit welcher die Tabelle angelegt wurde. Diese in
handler.h
definierte Struktur geben wir hier
für Sie wieder:
typedef struct st_ha_create_information { CHARSET_INFO *table_charset, *default_table_charset; LEX_STRING connect_string; const char *comment,*password; const char *data_file_name, *index_file_name; const char *alias; ulonglong max_rows,min_rows; ulonglong auto_increment_value; ulong table_options; ulong avg_row_length; ulong raid_chunksize; ulong used_fields; SQL_LIST merge_list; enum db_type db_type; enum row_type row_type; uint null_bits; /* NULL-Bits am Anfang des Datensatzes */ uint options; /* OR von HA_CREATE_-Optionen */ uint raid_type,raid_chunks; uint merge_insert_method; uint extra_size; /* Länge des zusätzlichen Datensegments */ bool table_existed; /* 1 in create, falls Tabelle bereits vorhanden */ bool frm_only; /* 1, wenn kein ha_create_table() */ bool varchar; /* 1, wenn die Tabelle eine VARCHAR-Spalte hat */ } HA_CREATE_INFO;
Eine einfache Speicher-Engine kann den Inhalt von
*form
and *info
ignorieren,
denn im Grunde genügt es, die von der Speicher-Engine benutzten
Datendateien anzulegen und gegebenenfalls zu initialisieren
(vorausgesetzt, die Speicher-Engine arbeitet mit Dateien).
Das folgende Beispiel zeigt die Implementierung der
Speicher-Engine CSV
:
int ha_tina::create(const char *name, TABLE *table_arg, HA_CREATE_INFO *create_info) { char name_buff[FN_REFLEN]; File create_file; DBUG_ENTER("ha_tina::create"); if ((create_file= my_create(fn_format(name_buff, name, "", ".CSV", MY_REPLACE_EXT|MY_UNPACK_FILENAME),0, O_RDWR | O_TRUNC,MYF(MY_WME))) < 0) DBUG_RETURN(-1); my_close(create_file,MYF(0)); DBUG_RETURN(0); }
Im obigen Beispiel kümmert sich die CSV
-Engine
gar nicht um die *table_arg
- oder
*create_info
-Parameter, sondern legt einfach
die erforderlichen Datendateien an, schließt sie wieder und kehrt
zurück.
Die Funktionen my_create
und
my_close
sind Hilfsfunktionen. Ihre Definition
steht in src/include/my_sys.h
.
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.