« 2010年2月 | トップページ | 2010年4月 »

2010年3月

2010年3月29日 (月)

WinHttp.pas for Delphi

WinHTTP ServicesをDelphiで使うためのヘッダファイルを移植。
ダウンロードはSkyDriveから。

追記:Delphi 2010以降が必須です。古い環境はもう知らね・・・dashdashで、Windows 8 SDK相当です。

2010年3月 2日 (火)

データ型のマップの続き

以前に、DB2というよりODBCのSQLデータ型やCデータ型にまつわるあれこれ(憂鬱)について色々書いたが、

各DBMSのデータ型がどのようにODBCのSQLデータ型にマップされるか調べてみたdashdash。ちなみに、ODBCでは「ドライバ」毎の独自のSQLデータ型を定義する事を認めている(その場合、どっかに申請しないといけない。つまり、値が衝突しない)。また、「ドライバ」毎と強調したのは、例えば、DB2用のODBCドライバといってもIBM純正のドライバの他にサードパーティ用のドライバがあったりするので注意。

まずは、DB2 Ver 09.07.0000。ドライバはIBM純正のDB2CLI.DLL Ver 09.07.0000。

DB2
DBMSのデータ型 ODBCのSQLデータ型
SMALLINT SQL_SMALLINT
INTEGER SQL_INTEGER
BIGINT SQL_BIGINT
DECIMAL SQL_DECIMAL
REAL SQL_REAL
DOUBLE SQL_DOUBLE
DECFLOAT *SQL_DECFLOAT(-360)
CHAR(FOR BIT DATA) SQL_CHAR(SQL_BINARY)
VARCHAR(FOR BIT DATA) SQL_VARCHAR(SQL_VARBINARY)
LONG VARCHAR(FOR BIT DATA) SQL_LONGVARCHAR(SQL_LONGVARBINARY)
CLOB *SQL_CLOB(-99)
GRAPHIC *SQL_GRAPHIC(-95)
VARGRAPHIC *SQL_VARGRAPHIC(-96)
LONG VARGRAPHIC *SQL_LONGVARGRAPHIC(-97)
DBCLOB *SQL_DBCLOB(-350)
BLOB *SQL_BLOB(-98)
DATE SQL_TYPE_DATE
TIME SQL_TYPE_TIME
TIMESTAMP SQL_TYPE_TIMESTAMP
DATALINK *SQL_DATALINK(-450)
XML *SQL_XML(-370)
UDT *SQL_USER_DEFINED_TYPE(-450)

以後、*はドライバ独自のSQLデータ型を表す。

CHAR、VAR CHAR、LONG VARCHARはFOR BIT DATAオプションを付けるとバイナリ型にマップされる。

次はPostgreSQL Ver 8.3.9。ドライバはPSQLODBC35W.DLL Ver 08.04.0100。

PostgreSQL
DBMSのデータ型 ODBCのSQLデータ型
smallint SQL_SMALLINT
integer SQL_INTEGER
bigint SQL_BIGINT
numeric SQL_NUMERIC
real SQL_REAL
double precision SQL_FLOAT
serial SQL_INTEGER
bigserial SQL_BIGINT
money SQL_FLOAT
"char" SQL_WCHAR
character SQL_WCHAR
character varying SQL_WVARCHAR
text SQL_WLONGVARCHAR
bytea SQL_VARBINARY
timestamp with time zone SQL_TYPE_TIMESTAMP
timestamp without time zone SQL_TYPE_TIMESTAMP
date SQL_TYPE_DATE
time with time zone SQL_WVARHCAR
time without time zone SQL_TYPE_TIME
interval SQL_WVARCHAR
boolean SQL_WVARCHAR
point SQL_WVARCHAR
line SQL_WVARCHAR
lseg SQL_WVARCHAR
box SQL_WVARCHAR
path SQL_WVARCHAR
polygon SQL_WVARCHAR
circle SQL_WVARCHAR
cidr SQL_WVARCHAR
inet SQL_WVARCHAR
macaddr SQL_WVARCHAR
bit SQL_WVARCHAR
bit varying SQL_WVARCHAR
xml SQL_WLONGVARCHAR
uuid SQL_GUID
tsvector SQL_WVARCHAR
tsquery SQL_WVARCHAR
array SQL_WVARCHAR

独自のSQLデータ型は全く定義しておらず、ODBC標準のSQLデータ型にないデータ型はSQL_WVARCHARなどにマップしてるっぽい。どうりで、ヘッダファイルが見つからなかったわけだ・・?。

次はSQL Server 2008 Ver 10.00.1600。ドライバはMS純正のNative Clientのsqlncli10.dll Ver 10.00.1600。

SQL Server
DBMSのデータ型 ODBCのSQLデータ型
tinyint SQL_TINYINT
smallint SQL_SMALLINT
int SQL_INTEGER
bigint SQL_BIGINT
decimal SQL_DECIMAL
smallmoney SQL_DECIMAL
money SQL_DECIMAL
bit SQL_BIT
real SQL_REAL
float SQL_FLOAT
char SQL_CHAR
varchar SQL_VARCHAR
text SQL_LONGVARCHAR
nchar SQL_WCHAR
nvarchar SQL_WVARCHAR
ntext SQL_WLONGVARCHAR
binary SQL_BINARY
varbinary SQL_VARBINARY
image SQL_LONGVARBINARY
date SQL_TYPE_DATE
time *SQL_SS_TIME2(-154)
smalldatetime SQL_TYPE_TIMESTAMP
datetime SQL_TYPE_TIMESTAMP
datetime2 SQL_TYPE_TIMESTAMP
datetimeoffset *SQL_SS_TIMESTAMPOFFSET(-155)
cursor ?
timestamp SQL_BINARY
hierarchyid *SQL_SS_UDT(-151)
uniqueidentifier SQL_GUID
sql_variant *SQL_SS_VARIANT(-150)
xml *SQL_SS_XML(-152)
table *SQL_SS_TABLE(-153)
udt *SQL_SS_UDT(-151)

と、ざっと見る限り、独自のSQLデータ型の値は衝突してないし。なるへそ。

ちなみに、これらマッピングは設定で変えられたり、データベースの文字コードによって、変わるかもしれないので・・

また、Cデータ型については独自のCデータ型を認めていないと書いてあるんだが、DB2やSQL Serverの独自のSQLデータ型に対応する独自のCデータ型がそれぞれ定義されているdashdash。独自のCデータ型を定義できるようになったのは最新のODBC 3.8 かららしいが・・

後はOracleとMySQLとFirebirdぐらいは調べたいんだが、いずれ気が向いたらインストールして調べるかdash


« 2010年2月 | トップページ | 2010年4月 »

自作ソフトウェア

無料ブログはココログ

メモ