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;