Home > Archives > 2008年1月 Archive

2008年1月 Archive

VSUGコードコンテスト2007 入賞

  • Posted by:
  • 2008年1月21日 22:45

年末年始と、弁慶フレームワークばかりいじっていた訳ですが、その理由はVSUGコードコンテスト2007に応募するためでした。
勘の良い人なら気付いてたかな?

そして、本日VSUG事務局より入賞のお知らせが届きました。
日本オラクル部門ということで、大変名誉ある賞を受賞できて光栄です。でも、景品はWiiがほしかt

頑張っていれば、必ずいいことがあるということで、これからも自己研鑽に勤めていこうと思うのでした。

[オープンソース]弁慶フレームワーク1.1.0 公開

弁慶フレームワーク

弁慶フレームワーク1.1.0
小弁慶フレームワーク1.0.0
DAOGenerator 1.1.0
DAOGeneratorCE 1.0.0
を公開しました。

今回、弁慶フレームワークのドキュメントも公開しました。
どういう考えで作ればよいのか、まずはご覧ください。

[オープンソース]弁慶フレームワーク 1.1.0

2007/12/27のエントリで書いたように、弁慶フレームワークをバージョンアップしました。
今度のバージョンでは、OracleとPostgreSQLにも対応しました。
これにより、異なるデータベースを複数使うシステム(データ移行等が考えられそう)が、作りやすくなったのではないかと思います。

現在、ドキュメントを整備しておりますので、しばらくお待ちください。
今回のバージョンより、システムの説明が書いてあるHTMLヘルプがダウンロードできるようになります。


そして、小弁慶フレームワークも完成いたしました。
小弁慶は、SQLServer Compact Editionのみに対応しております。

が、しかし...
私のJASJAR i-mateで動作確認していたのですが、動作が滅茶苦茶重いのですよ...
2行しか存在しないテーブルのデータを、DataGridにBindするだけで、5秒以上掛かります...

どうやら、小弁慶の問題ではなく、SQLServer Compact Editionが重いようなので、どうにもならない気がします。
まあ、CPUパワーも無いですし。
こちらも、公開までしばらくお待ちくださいませ。

公開の準備が出来次第、このブログで告知します。

【PostgreSQL】フィールド一覧の取得

PostgreSQLで、フィールド一覧を取得する方法です。
TABLEのみが対象になります。

フィールドサイズの取得は、面倒なのですがフィールドタイプで固定な数値を割り振りました。

「@TABLE_NAME」は、バインド変数なので、対象としたいテーブル名を入れてください。2箇所あるので注意してください。

SELECT 
    A.FIELD_NAME, 
    A.FIELD_TYPE, 
    CASE WHEN A.FIELD_SIZE IS NULL THEN 0 ELSE A.FIELD_SIZE END AS FIELD_SIZE, 
    CASE WHEN B.IS_PK IS NULL THEN 0 ELSE B.IS_PK END AS IS_PK, 
    A.IS_NULLABLE 
FROM 
    (
    SELECT 
        PG_CLASS.RELNAME AS TABLE_NAME, 
        PG_ATTRIBUTE.ATTNUM AS FIELD_NUM, 
        PG_ATTRIBUTE.ATTNAME AS FIELD_NAME, 
        PG_TYPE.TYPNAME AS FIELD_TYPE, 
        CASE WHEN PG_TYPE.TYPNAME = 'bpchar' THEN PG_ATTRIBUTE.ATTTYPMOD-4 
            WHEN PG_TYPE.TYPNAME = 'varchar' THEN PG_ATTRIBUTE.ATTTYPMOD-4 
            WHEN PG_TYPE.TYPNAME = 'numeric' THEN ( PG_ATTRIBUTE.ATTTYPMOD-4 ) / 65536 
            WHEN PG_TYPE.TYPNAME = 'decimal' THEN ( PG_ATTRIBUTE.ATTTYPMOD-4 ) / 65536 
            WHEN PG_TYPE.TYPNAME = 'date' THEN 10 
            WHEN PG_TYPE.TYPNAME = 'time' THEN 8 
            WHEN PG_TYPE.TYPNAME = 'timestamp' THEN 19 
            WHEN PG_TYPE.TYPNAME = 'bool' THEN 1 END AS FIELD_SIZE, 
        CASE WHEN PG_ATTRIBUTE.ATTNOTNULL = TRUE THEN 0 
            WHEN PG_ATTRIBUTE.ATTNOTNULL = FALSE THEN 1 END AS IS_NULLABLE 
    FROM 
        PG_CLASS INNER JOIN PG_ATTRIBUTE ON PG_ATTRIBUTE.ATTRELID = PG_CLASS.OID 
        INNER JOIN PG_TYPE ON PG_TYPE.OID = PG_ATTRIBUTE.ATTTYPID 
    WHERE 
        PG_CLASS.RELNAME = @TABLE_NAME AND 
        PG_ATTRIBUTE.ATTNUM >= 0 AND 
        PG_CLASS.RELKIND = 'r' 
    ) AS A LEFT JOIN 
    (
    SELECT 
        PG_CLASS.RELNAME AS TABLE_NAME, 
        PG_ATTRIBUTE.ATTNUM AS FIELD_NUM, 
        PG_ATTRIBUTE.ATTNAME AS FIELD_NAME, 
        1 AS IS_PK 
    FROM 
        PG_CLASS INNER JOIN PG_ATTRIBUTE ON PG_ATTRIBUTE.ATTRELID = PG_CLASS.OID 
        INNER JOIN PG_CONSTRAINT ON PG_CLASS.OID = PG_CONSTRAINT.CONRELID 
    WHERE 
        PG_CLASS.RELNAME = @TABLE_NAME AND 
        PG_CONSTRAINT.CONTYPE = 'p' AND 
        PG_ATTRIBUTE.ATTNUM = ANY(PG_CONSTRAINT.CONKEY)
    ) AS B ON A.TABLE_NAME = B.TABLE_NAME AND A.FIELD_NUM = B.FIELD_NUM 
ORDER BY 
    A.TABLE_NAME, 
    A.FIELD_NUM

【PostgreSQL】テーブル一覧の取得

PostgreSQLで、テーブル一覧を取得する方法です。
対象となるのは、TABLEだけです。
VIEW名などを別の管理表を見れば取れるのですが、フィールド情報を取得できるのがTABLEだけのようです。

PG_TABLESをただ取ってきただけだと、管理表なども取れてしまうので、WHERE句で強引に除外しています。

SELECT 
    SCHEMANAME, 
    TABLENAME 
FROM 
    PG_TABLES 
WHERE 
    NOT TABLENAME LIKE 'pg%' 
    AND NOT SCHEMANAME = 'information_schema' 
ORDER BY 
    SCHEMANAME, 
    TABLENAME

【SQLServer Compact】フィールド一覧の取得

SQLServer Compact Editionでフィールド一覧を取得する方法です。
PKかどうかを判定するために、インデックス表のPKレコードが結合できたときにPKとみなしています。

「@TABLE_NAME」は、バインド変数なので、対象としたいテーブル名を入れてください。

SELECT 
    A.COLUMN_NAME AS FIELD_NAME, 
    A.DATA_TYPE AS FIELD_TYPE, 
    A.AUTOINC_INCREMENT, 
    A.CHARACTER_MAXIMUM_LENGTH, 
    CASE WHEN B.PRIMARY_KEY IS NULL THEN 0 ELSE 1 END AS IS_PK, 
    A.IS_NULLABLE 
FROM 
    INFORMATION_SCHEMA.COLUMNS AS A 
    LEFT OUTER JOIN INFORMATION_SCHEMA.INDEXES AS B ON A.COLUMN_NAME = B.COLUMN_NAME AND B.PRIMARY_KEY = 1 
WHERE 
    A.TABLE_NAME = @TABLE_NAME 
ORDER BY 
    A.ORDINAL_POSITION

【SQLServer Compact】テーブル一覧の取得

以前にも、SQLServerのテーブル一覧を取得するエントリを書いたのですが、Compact Editionではやり方が異なるので、紹介しておきます。

SELECT 
    * 
FROM 
    INFORMATION_SCHEMA.TABLES 
WHERE 
    TABLE_TYPE = 'TABLE' 
ORDER BY 
    TABLE_TYPE, 
    TABLE_NAME

Index of all entries

Home > Archives > 2008年1月 Archive

Search
Feeds
Tag Cloud
Recommend

SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系
ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

ITアーキテクト vol.1
ITアーキテクト vol.1

オブジェクト指向における再利用のためのデザインパターン
オブジェクト指向における再利用のためのデザインパターン

増補改訂版 Java言語で学ぶデザインパターン入門
増補改訂版 Java言語で学ぶデザインパターン入門

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

J2EEデザインパターン
J2EEデザインパターン

アンチパターン―ソフトウェア危篤患者の救出
アンチパターン―ソフトウェア危篤患者の救出

世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本
世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本

Return to page top