2006-01-01から1年間の記事一覧

さすがに

12時間前にやっていたことは覚えてるなぁ。順調順調wしかしあれだ、table_cacheの利用方法についても調べないと・・・。query_cacheは無関係のはず、、、だけどこれもいちおう調べておかないと・・・。 タイトルとは関係ないけど、rsyncでsambaサーバにバ…

C言語におけるリフレクション(2)

とりあえず、仮想メモリ空間上のアドレスさえ分かれば呼べるらしい。 #include <stdio.h> void func1() { printf("this is func1\n"); return; } int main(int argc, char* argv[]) { printf("func1 is %p\n", func1); void (*func)(); func = (void*) 0x80483a0; //</stdio.h>…

ブランク

木曜日にコードを書いて、金土日月と四日間空いただけなのに、もう頭から抜けて始めてる。うーん、いやだわ〜。やはり毎日書かないとなのかなぁ。

テーブルとインデックスに関する構造体

ちょっと整理。結構省略してる、結構というかほとんど。 struct st_myisam_info { MYISAM_SHARE *s; } MI_INFO; struct st_mi_isam_share { MI_KEYDEF *keyinfo; HA_KEYSEG *keyparts; } MYISAM_SHARE; struct st_mi_keydef { struct st_mi_isam_share *shar…

C言語におけるリフレクション

コマンドライン引数で渡された名前の関数を呼ぶ、というようなJavaなどの非Native言語なら簡単にできる処理がC言語ではできないのです。以前Javaで実装していたとあるツールの新版をCで書いているのですが、この部分が実装できずにいたため、使い勝手が少々…

Protocol APIの使い方

簡単なまとめ。 ProtocolオブジェクトをTHDからもらう。 ItemオブジェクトのListを作る。Item = カラム。複数カラムの場合には、複数個のItemを詰め込む。 Protocol::send_fieldsメソッドで上記Listを送る。ここでクライアントへ一度パケット送信。 Protocol…

Linuxカーネル2.6解読室

職場でAmazonに大量発注したのがキター!Linuxカーネル2.6解読室作者: 高橋浩和,小田逸郎,山幡為佐久出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/11/18メディア: 単行本購入: 14人 クリック: 197回この商品を含むブログ (118件) を見るUNIXUSERで…

smbclientの使い方

先日覚えて、今日早速忘れていたので備忘メモ! smbclient --user=${名前} //${IPとかホスト名とか}/${ディレクトリ名}数ヶ月前から職場のファイルサーバがWindowsからLinuxに変わったのです。しかし、smbclientで接続してディレクトリ操作(cd hoge等)すると…

Enterprise Server 5.0.30リリース

MySQL Enterprise Server 5.0.30がリリースされたようです。Enterprise Serverは旧"MySQL Network"の購入者のみが利用できるバイナリだと思いますが(ダウンロードにログインが必要)、ログインできる方は以下から落とすことができます。https://enterprise.m…

テーブルに付与されているインデックスの数を調べる

次はこれを知りたいのです。以下のようなhandler::index_type関数があるのですが、ここで投げるkey_numberを調べるには、というお話。 const char *index_type(uint key_number);とりあえずTABLEオブジェクトを取得したら、以下を辿ってget。 uint nkeys = t…

インデックスの型を調べる

テーブルオブジェクトを取得できて、付与されているインデックスの数も分かったら次はこれ。既に1個前のエントリで触れているように、handler::index_typeを使う。table->fileがhandlerへのポインタ。 table = open_table(thd, table_list, thd->mem_root, 0…

インデックスが対象とするカラムの名前を調べる

はいはい、お次はこれ。まーにょ! uint nkey_parts = key.key_parts; KEY_PART_INFO key_part; int j = 0; for (; j < nkey_parts; j++) { key_part = key.key_part[j]; uint16 fieldnr = key_part.fieldnr; Field *field; field = table->field[fieldnr-1]…

テーブルハンドラの判別

これは簡単。 handler *hndr; hndr = table->file; printf("table handler is %s\n", hndr->table_type());handlerオブジェクト自身に聞くと教えてくれます。 table handler is MyISAM

handler層の上からMI_KEYDEFとかに直接触りたい

って、やっぱりアーキテクチャ的に無理なんでしょうか。というか、そこでHandler APIですよ、という話なのカモ。TABLE->fileって何のことかと思って見たら、、、handler型ポインタだったし。

.dataセグメントにある構造体のメンバの値を書き換えることはできるか

悩んでいます。→とりあえずできました。オイラ的な最近の話題の一つとして、MySQLの文字コードのとある制御用フラグ(escape_with_backslash_is_dangerous)があるんですが、 CHARSET_INFO my_charset_sjis_japanese_ci= { 13,0,0, /* number */ MY_CS_COMPILE…

4.1.22 リリース

ですです。 http://lists.mysql.com/announce/419

xemacs+cscope

某氏が某所で以前「マウスでクリックぐりぐり行けます」とコメントされていて、前から気になっていたのでやってみました。設定は、適当にぐぐって見付かった.emacsファイルの書き方とかをあれこれ自分の.emacsファイルに追加したら、いつのまにか出来ていた…

dbやtableの名前の取得方法(続編)

こんな関数がありました。 make_db_list make_table_list でもって、コソコソ調べたら。。。THDを引数に取る関数を実装して、その中にこんな感じのコードを書くと、、、 List<char> files; INDEX_FIELD_VALUES idx_field_vals; bool with_i_schema; bool is_wild_v</char>…

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

データベース名やテーブル名を指定して、TABLEオブジェクトを取得することができます。 make_table_list(thd, &(thd->lex->select_lex), db_name, tbl_name);このmake_table_list関数を呼ぶと、select_lexの中にあるTABLES_LISTにTABLEオブジェクトが追加さ…

接続中のデータベース名の取得方法

次は、どーやったら接続中のデータベース名を取得できるかについてです。これは簡単。 printf("current db is %s\n", thd->db);THDオブジェクトの中にdbというメンバが居て、そいつが情報を持ってます。 current db is test

テーブル名の取得方法

MySQL内部でテーブル名を取得するにはどうしたらいいのでしょう・・・? JavaEEで言うところのApplication Contextみたいなのってどうなってるのかな。JOIN::prepareの時点で既にTABLE_LISTを持っているので、それより前の段階でテーブルを探してきてるはず…

こまめにdiffを取るとか、あるいはローカルのsvnにいれておくとか

下のエントリでタッチパッドの無効化について書いていると思いますが、実はこの「冬の静電気+タッチパッドによるqあwせdrftgyふじこlp;@:」によって、どうも開発中のソースが壊れてしまったようなのです。ビルドして起動するとすると謎のstack over flowが…

ccacheによるビルドの高速化

うちがmysqlのhackをする場合、ビルドに関して多いのは、 hack用途に合った./configure呼び出しシェルスクリプトを作成して、それ経由で./configureを呼び出し 最初にクリーンな状態でmake make install mysql_install_dbとか流してmysqldを起動できるように…

TAGSファイル作成

単に、ソースディレクトリで、 make TAGSとやればおkだった模様です。ここに、Linux Kernelソースは"make TAGS"と書いてあったので、MySQLでも出来るのではと思って試したらできました。 http://blog.miraclelinux.com/ctd/2006/10/emacs__3561.html

関数ポインタにbreakpointを入れる

gdb

ステップ実行中に関数ポインタ経由での呼び出しに出くわす場面というのがあり・・・。その関数の中身が怪しいので調べようと思いつつも、実体の名前が分からないのでbreakpointを入れれない、そんなときは〜〜〜 p stmt->set_params (set_params関数ポインタ…

ムカツクあいつ(TouchPad)を倒すには

この記事書いた人、ネ申「Disable Synaptics Touchpad 」(Synaptics製タッチパッドの無効化方法) http://ubuntu.wordpress.com/2006/03/24/disable-synaptics-touchpad/最近、静電気のせいなのか、触れて無くて、1cmくらい離れてるのに勝手にポインタが動…

読書会に行ってきます

http://d.hatena.ne.jp/hyoshiok/20061120#p1うちが参加させていただくのは今回で2回目でしょうか。お題が個人的にアレゲだったので(分岐命令トレーサbtarx、システムコールトレーサkstraxの紹介)、猫大好きな勢いで登録してしまいましたー!

新しいOSSプロジェクト

始めました。いまリリース物作ってます。READMEとかLICENSECOPYINGとか。そのうち告知します。ふふふ。で、バージョン名どうしよう、とかまた早速悩む。日付にするか、レポジトリのリビジョンにするか。。。リリース物自体はpatchファイルなので、これにバー…

SolidDBはOEM

MyNAのMLにて最近SolidDBが話題となっていますが、これはMySQL ABはバックサポートのみのOEMプロダクトということなんだそうな。うらやましす。

システム変数を追加するパッチコード

MySQLにシステム変数を2つほど追加するパッチを作成し、"diff -Nurd"してみたら、250行以上になってしまって驚いた。実装コードそのものは50行程度なのだけれども。複数ファイル・複数箇所に細かく追記しているからかなー。いちおう、他のシステム変数と同…