C ve MySQL

MySQL Connector/C

MySQL C API Veri Yapıları

Bu bölümde, MySQL veritabanında kullanılan C API veri yapılarını ele alınmaktadır. Burada gösterilen veri yapılarının tamamı mysql.h dosyası içinde yer almaktadır.

MYSQL

Hemen hemen tüm MySQL fonksiyonları ile kullanılan bu yapı bir veritabanı bağlantısı için bir Handle değeri içerir.

typedef struct st_mysql {
  NET net;
  unsigned char *connector_fd;
  char *host, *user, *passwd, *unix_socket, *server_version, *host_info;
  char *info, *db;
  struct charset_info_st *charset;
  MYSQL_FIELD *fields;
  MEM_ROOT field_alloc;
  my_ulonglong affected_rows;
  my_ulonglong insert_id;
  my_ulonglong extra_info; /* Kullanılmıyor */
  unsigned long thread_id;
  unsigned long packet_length;
  unsigned int port;
  unsigned long client_flag,server_capabilities;
  unsigned int protocol_version;
  unsigned int field_count;
  unsigned int server_status;
  unsigned int server_language;
  unsigned int warning_count;
  struct st_mysql_options options;
  enum mysql_status status;
  my_bool free_me;
  my_bool reconnect;

  char scramble[SCRAMBLE_LENGTH+1];
  my_bool unused1;
  void *unused2, *unused3, *unused4, *unused5;

  LIST  *stmts;
  const struct st_mysql_methods *methods;
  void *thd;
  my_bool *unbuffered_fetch_owner;  
  char *info_buffer;
  void *extension;
} MYSQL; 

MYSQL_RES

Bu veri yapısı SELECT, SHOW, DESCRIBE, EXPLAIN gibi satır bilgisi (rows) geri döndüren sorgulama (query) sonuçları için kullanılır.

typedef struct st_mysql_res {
  my_ulonglong row_count;
  MYSQL_FIELD *fields;
  MYSQL_DATA *data;
  MYSQL_ROWS *data_cursor;
  unsigned long *lengths; /* Aktif satırdaki sütun genişlikleri */
  MYSQL *handle;
  const struct st_mysql_methods *methods;
  MYSQL_ROW row;
  MYSQL_ROW current_row; /* Aktif satır için */ 
  MEM_ROOT field_alloc;
  unsigned int field_count, current_field;
  my_bool eof; /* mysql_fetch_row() fonksiyonu tarafından kullanılır. */ 
  my_bool unbuffered_fetch_cancelled;  
  void *extension;
} MYSQL_RES;

MYSQL_ROW

Bu veri yapısı tek bir satır veri için kullanılır ve belirli uzunluktaki karakter dizileri olarak işlem görür. Bu yapı, alan (sütun) değerleri ikili sistem değeri aldığında NULL byte'ları dahili olarak barındırdığından, sonuna NULL değer eklenmiş karakter dizileri olarak işlem görmezler. Satırlar (rows) mysql_fetch_row() fonksiyonu kullanılarak elde edilir.

typedef char **MYSQL_ROW;

MYSQL_FIELD

Bu veri yapısı bir alan (field) ile ilgili alan adı, türü ve boyutu gibi bilgileri içerir. Her alan (sütun) için MYSQL_FIELD yapısı mysql_fetch_field() fonksiyonunun tekrar tekrar kullanılmasıyla elde edilebilir. Alan değerleri bu veri yapısı içinde değil, MYSQL_ROW veri yapısı içinde yer alır.

typedef struct st_mysql_field {
  char *name; /* Sütun adı */
  char *org_name; /* Orjinal sütun adı */
  char *table; /* Sütunun yer aldığı tablo */
  char *org_table; /* Orjinal tablo adı */
  char *db; /* Tablonun yer aldığı veritabanı */
  char *catalog; /* Tablonun yer aldığı katalog */
  char *def; /* Ön tanımlı değer */
  unsigned long length; /* Sütun genişliği */
  unsigned long max_length;
  unsigned int name_length;
  unsigned int org_name_length;
  unsigned int table_length;
  unsigned int org_table_length;
  unsigned int db_length;
  unsigned int catalog_length;
  unsigned int def_length;
  unsigned int flags;
  unsigned int decimals;
  unsigned int charsetnr;
  enum enum_field_types type;
  void *extension;
} MYSQL_FIELD;

MYSQL_FIELD_OFFSET

MySQL alan (field) listesindeki bir alanın bir satır içinde sıfırdan başlayarak aldığı sıra numarasını gösterir. Bu değer mysql_field_seek() fonksiyonu tarafından kullanılır.

typedef unsigned int MYSQL_FIELD_OFFSET;

my_ulonglong

Bu veri türü, mysql_affected_rows(), mysql_num_rows() ve mysql_insert_id() fonksiyonları için satır sayısını tutmakta kullanılır. 0 ile 1.84e19 arasında bir değer alır.

typedef unsigned long my_ulonglong;

my_bool

Doğru (true) veya yanlış (false) bir değer alan bir ikili sistem değeridir.

typedef char my_bool;