TABLEオブジェクトの取得方法

データベース名やテーブル名を指定して、TABLEオブジェクトを取得することができます。

make_table_list(thd, &(thd->lex->select_lex), db_name, tbl_name);

このmake_table_list関数を呼ぶと、select_lexの中にあるTABLES_LISTにTABLEオブジェクトが追加されます。

TABLE_LIST *table_list;
table_list = thd->lex->select_lex.get_table_list();

TABLE *table;
table = open_table(thd, table_list, thd->mem_root, 0, 0);
printf("table alias is %s\n", table->alias);

で、select_lexからTABLE_LISTを回収し、open_table関数を呼ぶことでTABLEオブジェクトを取得できます。

db_name=test
path=./test
tbl_name=t1
make_table_list returns 0
tbl_name=t2
make_table_list returns 0
table alias is t2

まだあまり良く理解できてないですが、とりあえずaliasという変数にテーブル名が入っていました。

この後の展開ですが、ここまででTABLEオブジェクトに触ることができたわけなので、行データを読みに行くなり、インデックスを触りに行くなり、自由気ままにできますね〜!!



追記:
テーブル名や、そのテーブルが所属するデータベース名は以下から取得するのが良さそうです。(共にconst char*型)

table->s->db;
table->s->table_name;