ピントはずれ日記

2010-06-13 PGDLLEXPORT

[][]PGDLLEXPORT覚書

放っておくと忘れてしまうので覚書。

最近PGDLLEXPORTというマクロが導入され、たとえばsrc/include/fmgr.h内の次のマクロ定義に使用されている。


#define PG_MODULE_MAGIC \

extern PGDLLEXPORT const Pg_magic_struct *PG_MAGIC_FUNCTION_NAME(void); \

const Pg_magic_struct * \

PG_MAGIC_FUNCTION_NAME(void) \

{ \

static const Pg_magic_struct Pg_magic_data = PG_MODULE_MAGIC_DATA; \

return &Pg_magic_data; \

} \

extern int no_such_variable


ここでPGDLLEXPORT関数PG_MAGIC_FUNCTION_NAMEがdll(もしくはexe)から何らかの形でexportされるべき対象であることを示し、ソースレベルでexport指定可能なWindows環境(MSVC、mingwまたはcygwin)下では実際に__declspec(dllexport)に置き換えられる....予定であったのだがmingwで(cygwinでも?)不具合引き起こし、現状はMSVC環境でのみ__declspec(dllexport)指定が残っている。


問題点は二つ。

1.mingw及びcygwin下での対応の仕方。__declspec(dllexport)が駄目ならということで何故か__declspec(dllimport)に置き換えられている。これは基本的に間違いである。__declspec(dllimport)で実体はモジュールの外にあると宣言した直後に関数の実装本体が続くのだから全く奇妙なマクロ定義というしかない。__declspec(dllexport)がどうしても駄目なら__declspec宣言そのものをなくすべきであろう。

2.そもそもなぜmingw(cygwin?)下で不具合が発生するのかということ。

dllをbuildするために利用しているdllwrap(dlltoolも?)と__declspec(dllexport)の相性が悪いこと。具体的にいうとDLLのrelocセクションに重複が発生してしまい実際にrelocateが発生した場合クラッシュ引き起こしてしまう。これに関してはdllwrapでなくgccを利用すれば解決可能である。

2008-10-02

[] 単独記録

年間200本安打

  • 連続記録  メジャー歴代1位タイ(Willie Keelerと同, 現役2位はMichael Youngの5年)
  • 達成回数  メジャー歴代3位タイ(1位はPete Roseの10回、現役では1位 2位はDerek Jeterの6回)

年間100得点

  • 連続記録  メジャー歴代10位タイ(1位はAlex Rodriguez等13年、現役では3位タイ A-Rod13年, Johnny Damon 9年に続く)
  • 達成回数  メジャー歴代?????(1位はHank Aaron15回、現役5位タイ 1位はAlex Rodriguez 13回)

年間30盗塁

  • 連続記録  メジャー歴代12位タイ(1位はRickey Henderson15年, 現役ではJuan Pierreと並んで1位)
  • 達成回数  メジャー歴代21位?タイ(1位はRickey Henderson21回、現役ではJuan Pierreと並んで1位)

2008-09-27 8年連続ノルマ達成

[] 100得点し8年連続ノルマを達成

本日100得点を記録し今年も3割200安打100得点30盗塁を達成。しかし100得点はまさに冷や汗もの、自分の力だけでできる者ではないので来年がかなり心配である。200安打もかなり苦労したが達成、ついに単独の連続年記録でメジャー記録に並んだ。とりあえず更新した記録を整理しておくと、

まず年間200本安打に関連するものとして

  • 8年連続200本安打(100得点を加えても同) メジャータイ(Willie Keelerと同, Wade Boggsが7年連続)
  • 200本安打達成8回             メジャー歴代3位タイ(1位はPete Roseの10回)

200本安打を含む組み合わせの記録としては

  • 8年連続200本安打30盗塁       メジャー記録更新中(2位は4年連続 Willie Keeler)
  • 200本安打30盗塁8回達成       メジャー新記録(2位は7回 Ty Cobb)
  • 200本安打100得点8回達成      メジャータイ(Lou Gehrig,Willie Keeler と同、7回達成は4人)
  • 200本安打100得点30盗塁8回達成  メジャー記録更新中(2位は6回 Ty Cobb, Willie Keeler)

200本安打抜きでも盗塁と得点の組み合わせでのメジャー記録を更新中。盗塁と得点は意外と関連性に乏しくイチローがさりげなくクリアしているのは実は凄いことなのです。

  • 8年連続100得点30盗塁        メジャー記録更新中(2位は6年連続 Joe Morgan、3位は5年連続 Rickey Henderson)
  • 8年連続3割100得点30盗塁      メジャー記録更新中(2位は4年連続 Ty Cobb, Willie Keeler)
  • 100得点30盗塁達成8回        メジャー2位(多分、1位はRickey Hendersonの11回)

2008-07-07 8.3.0201

[][][] 8.3.0201

最近コミットしたいくつかの修正の覚書

  1. GUID型のサポート ODBC3.5xサポートで手抜きしていた部分。Jan-Willem Goossens氏のコードをお借りして実装。
  2. 昨年10月29日の修正3にからむバグの修正
  3. 初めて64ビットドライバのバグレポートがあり、mylogから推測した修正を試してもらう。パラメーター配列におけるバッファ長インジケーターのアドレスシフト処理に32ビットの名残りが残っており、64ビットでも通用する形に修正した。
  4. サーバー側の外部キーの実装に変更があったようでSQLForeignKeys()が情報を返さなくなってしまった。とりあえず8.3以後についてのみ違う実装に変更した。コードそのものは新方式の方が旧方式よりずっとシンプルで、問題ないようなら8.0位から適用するかもしれない。実装用のSQLに初めてgenerate_series()関数を使ってみました。
  5. Use Declare/Fetchモードでは、カーソルを使用しやすくするため、自動コミットモードであっても内部的にトランザクションを発生させている。そして関連カーソルがすべて閉じられた時にそのトランザクションを終了するようにしている。しかしすべて閉じられたという判定に誤りがありオープンカーソルがあるにもかかわらずトランザクションを終了させてしまうケースがあり、これを修正した。致命的なバグとはいえないかもしれないがもしかしたらパフォーマンスにはかなり影響があったかもしれない。

2007-10-30 SSPI

[][][] 8.2.0501

まだバイナリに組み込んではいないが、今回WindowsのSSPI(Security Support Provider Interface)利用を試みている。とりあえずSSL通信の場合を取り組んでみたがこれがなかなかわかりにくい。サンプルコードを真似てはみたが自信はほとんどない。パフォーマンス等も含めて使い物になるかどうかは今後のテスト結果次第である。