367477 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

松のページブログ

PR

Freepage List

Keyword Search

▼キーワード検索

Profile


松-boolean

2008/10/19
XML
 SQL開発環境(ツール)の一ジャンルとしてSQL整形という機能があります。

 A5:SQL Mk-2でもこれまで、SQL整形機能がありました。これまでも他の同種のSQL整形ツールと比べても高速かつ高機能だったと自負しているのですが、本日公開した Version 2.3 beta 25ではさらに空白の取り扱い(付加・除去)について整形ルールを見直して、より高精度なSQLを出力できるようにしました。目標は「SQLのコードレビューをしてもそのまま通れるSQL」です。

 また高速性についても、これまで、通常のSQL整形はかなり高速だったのですが、むしろ複数行から1行への整形(SQLを1行にする)は遅かったのでデータ構造を見直し、かなりの高速化を達成しました。

 100KBや、1MBほどの整形を他のSQL整形ツールと比較するとその高速性が確認できると思います。他のSQL専用ツールと比較して、数倍から数十倍の速度差が付くこともあります。(まあ、そんなに大きなSQLはないでしょうけどね。でも一度Hibernateの自動生成した、50KBのSQL(しかも1行)を見たことがあります。)

http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/beta/index.html

SQL整形例

-整形前---------------------------
--1行コメント
select distinct a . * -- 1行コメント
,func1(a . aaa+1*2*3/4),"a"."aaa"||'aaa'+1,func2(func3
( 123 )),( 1+( 2*3 ) ),@@SQLSERVER_ENV as"aaa",case a . bbb when '1' then
'一' when '2' then '二' else '' end , case when a. fff = 'ccc' then 'O' else
'X' end,case a .fff when '1' then case when a. ggg = 'ccc' then 'O' else 'X'
end when '2' then (case when a. hhh = 'ccc' then 'O' else 'X' end) else '' end
from TB_NAME a inner join (select カラム1,カラム2,カラム3 from テーブル名 where
カラム1 != カラム2) テ on a.aaa=テ.カラム1where a . aaa=@aaa AND テ . カラム2 =
:bbb and a.ccc >= 3 and a.ddd <= 4 and a.eee != 5 and `a` . `MySQL Identifier `=333
and [a] . [SQLServer Identifier ]=2.2 and(1=1 or (2=2)) union select * from (select *
from TB_NAME4);insert into TB_NAME(aaa, bbb, ccc) values (111, 222, 333);update TB_NAME4
set BBB=1*2+3 ,CCC = sysdate where AAA=:aaa;delete from TB_NAME5 where :aaa=AAA;with SUBQ
as (select * from TB_NAME5) select * from SUBQ
----------------------------------

-整形後---------------------------
--1行コメント
select distinct
A.* -- 1行コメント
, FUNC1(A.AAA + 1 * 2 * 3 / 4)
, "a"."aaa" || 'aaa' + 1
, FUNC2(FUNC3(123))
, (1 + (2 * 3))
, @@SQLSERVER_ENV as "aaa"
, case A.BBB
when '1' then '一'
when '2' then '二'
else ''
end
, case
when A.FFF = 'ccc'
then 'O'
else 'X'
end
, case A.FFF
when '1' then case
when A.GGG = 'ccc'
then 'O'
else 'X'
end
when '2' then (case when A.HHH = 'ccc' then 'O' else 'X' end)
else ''
end
from
TB_NAME A
inner join (
select
カラム1
, カラム2
, カラム3
from
テーブル名
where
カラム1 != カラム2
) テ
on A.AAA = テ.カラム1WHERE A.AAA = @AAA
and テ.カラム2 = :BBB
and A.CCC >= 3
and A.DDD <= 4
and A.EEE != 5
and `a`.`MySQL Identifier ` = 333
and [a].[SQLServer Identifier ] = 2.2
and (1 = 1 or (2 = 2))
union
select
*
from
(select * from TB_NAME4);

insert
into TB_NAME(AAA, BBB, CCC)
values (111, 222, 333);

update TB_NAME4
set
BBB = 1 * 2 + 3
, CCC = SYSDATE
where
AAA = :AAA;

delete
from
TB_NAME5
where
:AAA = AAA;

with SUBQ as (select * from TB_NAME5)
select
*
from
SUBQ
----------------------------------







Last updated  2008/10/20 12:30:45 PM
コメント(6) | コメントを書く
[ソフトウェア開発のこと] カテゴリの最新記事


Calendar

Favorite Blog

ZIGENのプラグイン開… ZIGEN_Mさん
This Love ゆくもさん
エスナカ -931SHとい… みるすけ6号さん
あみちゃんのひとり… あみちゃん123さん
THE STORY OF MY LIF… こあおいさん

Comments

 public-delete@ Re:A5:SQL Mk-2とGPLの問題(やや長文)(11/30) はじめまして 記載通り遠慮ナック 私なり…
 森隆弘@ おすすめ 最近AEROADMINを使い始めました。いいアプ…
 あへひょろごん@ Re:ER図(06/17) すばらしい機能ですね。 使いやすいし。
 naqtn@ Re:遠隔操作事件について(05/17) はじめまして。コメント募集とのことで書…
 インドのおじさん@ ガンバwwww みなさん、ようやりまんなあwwwwこれ…

Headline News


Copyright (c) 1997-2020 Rakuten, Inc. All Rights Reserved.