hack

静的リンクで組み込んだ場合の設定ファイルの読み込み

MeCabをmake installできる環境であれば、例えば--prefix=/usrとしていたらならば、 /usr/lib/libmecab.so が配置され /usr/lib/mecab に辞書が配置され /usr/etc/mecabrc に設定ファイルが配置され という感じになります。このとき、mecabrcには辞書の位置…

SQLパーサ関係を変更した際にdiffるべきファイル一覧

新しいSQLコマンドやSQL関数などをパーサに追加する際、編集するべきファイルは以下。 sql/lex.h sql/sql_yacc.yy でもって、GNU Bisonによりここから自動生成されるファイルは以下。 sql/sql_yacc.h sql/sql_yacc.cc でもこれだけだとdiff漏れになるので注…

WarningとErrorの出力方法

Warningの出力方法 sql/sql_error.hにMYSQL_ERRORクラスとpush_warning関数が定義されてます。 class MYSQL_ERROR: public Sql_alloc { public: enum enum_warning_level { WARN_LEVEL_NOTE, WARN_LEVEL_WARN, WARN_LEVEL_ERROR, WARN_LEVEL_END}; uint code…

可変引数を持つNative関数の実装メモ

可変引数を持つNative関数は実装方法が一般的なNative関数とは異なるためメモしときます。一般的なやつの実装方法はリファレンスマニュアル参照。 概要 編集対象のファイルとその内容についての表。 ファイル 編集内容 sql/item_func.hまたはその派生 新しい…

nmコマンドでstatic関数を見る

結論:-aオプションを使うSennaのexec_query関数はstaticな関数なんですが、この関数がnm -Dで出てこないので少し悩んでました。 mir@t43:/usr/local/mysql/bin$ nm -D /usr/lib/libsenna.so | grep exec_query mir@t43:/usr/local/mysql/bin$ nm -a /usr/li…

WARN_DATA_TRUNCATEDの出力の仕組み

またまた改造版MySQLでの話。TableへのデータのINSERT時に、実際にはtruncateが発生していない(SELECT * FROM t1で確認可能)のに、"Data truncated for ..."のwarningsが出るパタンを発見。utf8なセッションからutf8以外のテーブルかつTEXT型のカラムへINS…

5.0.27 ==> 5.0.32

注:以下のメモは、MySQLのオリジナルのソースコードに独自パッチを当てて、バージョンを挙げた際の問題についてです。オリジナルのソースには問題はありません。 パーサの実装がちょこちょこ変わってるようだ。patchコマンド、bisonコマンド、gccによるビル…

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>…

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

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

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

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

Native関数の実装

ver5.1.12にて。うふふ。 Breakpoint 1, Item_func_mir_add::val_int (this=0x90143a8) at item_func.cc:5079 (gdb) bt #0 Item_func_mir_add::val_int (this=0x90143a8) at item_func.cc:5079 #1 0x0818e6ba in Item::send (this=0x90143a8, protocol=0x8fc…