A5:SQL Mk-2

開発のこと、日々のこと

2018/10/07
から 松原正和
0件のコメント

A5:SQL Mk-2のちょっとイイところ(SQL整形編)

A5:SQL Mk-2はSQL成形機能も持ちますが、多彩なオプションを指定可能です。

  • キーワードの大文字/小文字変換(変換しない・大文字・小文字)
  • 識別子の大文字/小文字変換(変換しない・大文字・小文字)
  • カンマの位置(式の前・式の後ろ)
  • and, orの位置(式の前・式の後ろ)
  • from, where, having, group by, order by等のインデント
  • SELECT句内のカラム名や式及び、エリアス(AS以降)の位置を揃える
  • インデントにタブ文字を利用する
  • インデント桁数
  • ブロックコメントを独立した行に整形する
  • 1行コメントを独立した行に整形する
  • 1行コメントの位置
  • ブロックコメントの後に空白を付けない(S2JDBC向けオプション)
  • 標準SQLでない識別子の処理(ブラケットで括るなど)
  • SQL区切りのセミコロン”;”を独立した行に配置する

 

標準では、カンマやand, orの位置は「式の前」に整形されます。どちらかというとこれは「式の後ろ」よりもマイナーな気がしますが、自分が「式の前」派なので…。

SQLに限らず、カンマなどの位置は「式の前」に追加したほうがリストの後ろに項目を追加したときに前の行(の末尾)にカンマを追加したりする必要がなく、ソースのバージョン管理ツールで等での差分がすっきりします。リストの先頭に項目を追加するより、リストの最後に項目を追加することが圧倒的に多いですよね。

このSQL成形機能は次バージョンで従来のA5:SQL Mk-2と同時期にリリース予定のコマンドライン版のツールからも利用できるようになる予定です。これはSQLファイルの整形をサポートしますが、標準入出力に対しても整形できるようになる予定です。

2018/09/27
から 松原正和
2件のコメント

A5:SQL Mk-2のちょっとイイところ(コピー&ペースト編)

A5:SQL Mk-2では、クエリーの実行結果やテーブルエディタのグリッドで行(単一行または複数行)を選択し、Ctrl+Cを押下するとクリップボードにコピーできます。ここまではまあ当たり前です。

ここでExcelを起動し、Ctrl+Vを押下すると、以下のように罫線・書式付きでペーストすることができます。Excelへの貼り付けの際、’0001’が’1’に勝手に変換されたりということがありませんし、文字列は文字列として数字は数値として、NULL項目については灰色で「​(NULL)​」と出力されます。(Version 2.13まで)

このように罫線・書式付きで’0001’の様なコードも正しくExcelに貼り付けられるのは他のソフトウェアにはない機能と思っています。(少なくとも私は他に知りません。)

貼り付け例(貼り付け後にセルの幅を調整しています。)

また、この貼り付けた結果セットをExcelで編集して範囲選択してCtrl+Cでコピーし、A5:SQL Mk-2でCtrl+Vを押下すると再度貼り付けることができます。(あらかじめ一意制約違反にならないように該当行は削除する必要があります。)

このとき、「​(NULL)​」の項目は正しく、NULLで貼り付けされます。

ちなみに、「(NULL)」という文字列データとNULLを区別するために、これまでのバージョンでは「​(NULL)​」には見えない文字コードが付加されていました。文字列の両サイドにU+200B (Zero Witdth SPace)が付加されていました。実際のところ、このU+200Bのコードを付けたのは不評だったようです。幅0なので見えないですし、エンジニアでもあまり知らないことが多い文字コードです。…”(NULL)”を””に置換して色々操作したときにいろいろ弊害があったようでした。…言い訳をするなら、「​(NULL)​」は置換など編集しなければそれほど悪さをすることもないはずなのですが…。

Version 2.14系(開発中)からはNULLは「« NULL »」で表現します。U+200Bなどの記号は付きません。”«”と”»”はU+00ABとU+00BBです。やはりあまり使われない文字コードですが「実際にその文字列をデータとして使っていた!!」という事態を極力避けたいのでやや特殊な文字を使用しなければいけないのは仕方ない気がします。

ところで、Excelに貼り付けを行ったとき、なぜ罫線や書式つきで貼り付けが行われるのでしょうか?。A5:SQL Mk-2はコピーを行う際に、「A5:SQL Mk-2内部形式」・「HTML形式」・「タブ区切りテキスト」の3つのフォーマットでコピーします。貼り付け側のアプリケーションでは自身の扱えるフォーマットで貼り付けを行います。ExcelではHTML形式で書式のついた状態で張り付けしますし、テキストエディタなどでは、タブ区切りで張り付けられます。A5:SQL Mk-2自身への貼り付けでは、A5:SQL Mk-2内部形式で扱うので、改行やタブの含まれるデータも正しく扱うことができます。

あと、グリッドで右クリックして、「レコードのコピー(その他のフォーマット形式)」を選ぶことで通常以外の形式でコピーすることもできます。

SQLエディタでは、マークダウン・CSV・HTMLソース形式で、テーブルエディタではそれに加えて、Insert文・Update文でもコピーできます。

 

 

2018/09/23
から 松原正和
0件のコメント

A5:SQL Mk-2のちょっとイイところ(SQL補完編)

Twitter で「Sequel Proを超えるGUIツールが出てきたぞ」とかでTEAMSQLなるツールがちょっぴり盛り上がっていたりなんかして少し悔しかったので、A5:SQL Mk-2のちょっとイイところを書いてみたりします。

今どきのSQLクライアントでは大抵SQLの入力補完(テーブル名・カラム名・キーワード…)ができたりするわけですが、A5:SQL Mk-2ではこの時にテーブル名やカラム名のコメントが表示されます。

さらに、実はコメントでも絞り込むことができます。

もっと書くと、この手の入力補完は大抵、前方一致で絞り込みを行いますが、A5:SQL Mk-2は部分一致(デフォルト動作)で補完します。テーブル名やカラム名で、「(コメントに登録された)論理名がナントカ日時」だったはずなんだけど…みたいな補完の仕方ができるわけです。

上の例だと「日時」で入力補完することで、コメントに登録されたREGIST_DT (登録日時)とUPDATE_DT(更新日時)が候補に表示されています。

この入力支援は、サブクエリや共通表式も解釈するそれなりに高度な補完機能になっています。

 

しかし、最近のSQLクライアントはSQL入力補完やSSHトンネリングくらい当たり前になってきましたね。A5:SQL Mk-2も両方備えてはいますが、もっと頑張らないといけませんね。

2018/09/03
から 松原正和
0件のコメント

A5:SQL Mk-2でCSVインポートの高速化

A5:SQL Mk-2 Version 2.14.0 beta 11でCSVインポートの高速化をしてみました。

「バッチインサート」という機能を使ったのですが、これまでも、バッチインサートというのを使えばCSVインポートが速くなるんだろうな…。とは思っていたのですが、やってみたら思っていたより効果があり、驚きました。

 

試してみるとこんな感じでした。

 

バッチインサート適用前

 

バッチインサート適用後

 

ローカルホストで稼働するOracle XEにインサートしてみました。バッチインサート適用前が約「1391レコード/秒」、バッチインサート適用後が約「15625 レコード/秒」ということで、10倍以上!高速になりました。

ネットワークがボトルネックになるケースがより効果が高いようです。Wi-Fiなどでは50倍以上!!高速化するケースもありました。

 

ただし、現状バッチインサート機能を使えるのは以下の条件のみです。

・専用接続を使用していること(UniDACでの接続)

・バイナリのデータ型がないこと

・SQL Server, MySQL(MariaDB)は除く。

これらの制限はできるだけ撤廃していきたいと思っています。

 

2018/08/19
から 松原正和
2件のコメント

A5:SQL Mk-2における NULL の扱い…ZWSP(Zero Width SPace)を付加するのをやめます。

長らく、A5:SQL Mk-2では結果セットのExcel出力やクリップボードへのコピーで NULLを出力するとき、ZWSP(Zero Width SPace)で両側をくくった ‘(NULL)’の文字列を使ってきました。これはオプションダイアログの「Excel出力」や「クリップボード出力」タブにあ る、「NULLを表す文字列」で変更できます。(初期値は “\x200B(NULL)\x200B” が指定されています。)

ZWSPはその名の通り、幅0のスペースで文字としては存在するが表示されない文字です。

このようなコードがなぜついているかというと、Excel出力した後にそれを再度コピーしてA5:SQL Mk-2に張り付けたときにNULLとして識別するためです。単に”NULL”や”(NULL)”だと「そういう文字列データ」かもしれないので、「一般的に使われない文字コード」を付加することで区別しているわけです。

ただ、この方式は時に混乱を招くようです。”(NULL)” 文字列を “” に置換してゴニョゴニョ…としたときにZWSPが気づかれないまま残ってしまい、トラブルになるわけです。

「わかりやすさ」を標榜するA5:SQL Mk-2としてはこれはちょっとよくありません。

この「ZWSPつき(NULL)」はこの文字列のまま、いじらなければそれほど悪さはしないはずなのですが…。

とりあえず、以下の条件で代替となる文字列を検討することにしました。

  • 印刷されない、または紛らわしいコードを避ける。
  • 実データとして「ほぼ」使われることがない。
  • Windows Vista以降(できればXPでも)のMSゴシックで文字化けしない。
  • できれば JIS X0208に含まれる範囲内

どうやら、Windows 7などでもサロゲートペア文字をつかうと文字化けするようです。必然的にJIS X0208に含まれる文字になります。このことはWindows XPでも表示されるということです。

色々考えた末、とりあえず「《NULL》」にしてみることにします。当然ですが、ZWSPで括ったりはしません。「《》」は二重山括弧と読むそうです。

「≪NULL≫」(数学の…より非常に小さい・大きいの記号)を使おうかとも思ったのですが、古いSF同人誌に「≪NULL≫」というタイトルのものがあったようなので止めました。「《NULL》」という文字列、どこかでデータとして使ったりするケースがあるでしょうか…(あったら教えてください。別の考えます。)

もし、「《NULL》」をどこかでデータ・名称として使っているとかこっちのほうが良いよなどありましたらお教えいただけると嬉しいです。

2018/05/20
から 松原正和
0件のコメント

Version 2.13.0 の不具合情報

Version 2.13.0をリリースしましたが、不具合情報を掲載します。

この情報は随時更新する予定です。

 

■テーブルエディタ

・件数制限がかかったときの「件数制限なしで再取得」ボタンが正しく動作しない

■ERエディタ

・オブジェクトプロパティの画面で高DPI環境下でレイアウト崩れが起こる (2.13.1 beta 1で修正)

・ページ(タブ)の順序をドラッグ&ドロップで変更できない (2.13.1 beta 1で修正)

■その他

・オプション値でDBコメントを論理名とコメントに区切る方法の正規表現が正しく保存されない (2.13.1 beta 1で修正)

 

これらの不具合は、Version 2.13.1 beta 版で解消されているものもあります。ご確認ください。

2018/03/10
から 松原正和
1件のコメント

Thinkpad X270 メモリ交換してみました。

昨年買った Thinkpad X270ですが、メモリ交換(8GB→16GB)してみました。8GBでは仮想マシンなどを動かす用途はいささか厳しい気がしていたのです。

初めから16GBにできればよかったのですが、なにぶん予算オーバーでしたし、曲がりなりにもサブマシンという扱いだったので。(メインはCore i7 3770K 32GBの自作PC)

自作PCはいくらでも経験があるものの、ノートPCの部品交換は初めてだったので、ちょっとドキドキしました。

まあでも、「X270 メモリ交換」で検索すればいくらでもお手本サイトは出てくるわけです。

手順は以下の通り。

1.ACアダプタを外して起動し、BIOSから内蔵バッテリーを無効化

2.外付けバッテリーを外す。

3.裏蓋の8本のネジを外す。

4.裏蓋を外す(スクレイパーが必要かも)

5.古いメモリを外し、新しいメモリを組付ける。

6.裏蓋を付ける。

7.8本のネジを締める。

8.外付けバッテリーを付ける。

9.ACアダプタを接続して電源投入。

10.起動確認とメモリ容量確認。

 

まずはACアダプタを外し、起動時にF12を連打してBoot Menuを起動します。[App Menu]タブのSetupを選択するとBIOSが起動できます。BIOSで[Config]タブのPowerを選択し、「Disable Built-in Battery」でEnterを押下し、確認画面で「Yes」を選択すると、すぐに内部バッテリーが無効化され、電源が切断されます。

X270はねじを外しても、裏カバーがツメで本体に食い込んでいるのでなかなか外せません。ここが最大の難関のようです。爪で外せないかなーと思ったのですが無理そうだったので、マイナスドライバーにセロハンテープを張り付けて即席のスクレイパーを作りました。

裏蓋の8本のネジは外しても裏蓋から取れないようになっているようでした。無くす心配がないのでらくちんです。裏蓋を即席のスクレイパーで分解してみると以下のような感じ。

メモリは右側真ん中あたり、右下にある内蔵バッテリーのリサイクルマークの上あたりです。外し方はデスクトップのメモリと同様。メモリの左右を止めているツメ状の金具を押し広げると簡単に外せます。付けるのも同様にツメを押し広げながら付けます。

裏蓋を組み付けるときは適当に本体にはめてギュウギュウ押し付けてツメをかませました。これでよいのかな?。そのあとは普通にネジ締め。

外部バッテリーもを組み付けた後、電源ボタンを押してみたのですが、反応しませんでした。どうも、BIOSで内部バッテリーを無効化していると電源が入らないようです。

ACアダプタを挿して電源ボタンを押すと今度は電源が入りました。Windows 10も正常に起動し、メモリが16GB認識しているのを確認しました。

全体で作業時間は10分ほどでした。思っていたより早く済みました。

作業を見ていた妻が自分のPC(Lenovo Ideapad 300 i5-6200U)のメモリが4GBなので、「4GBって少ないのかな?」と聞いてきたのですが、「自分も今仕事で使ってるパソコンは4GBだよ。CPUはもっと遅いよ。」と答えておきました凹。

 

 

2018/02/19
から 松原正和
0件のコメント

銀河英雄伝説 10巻セット買ってみました。

銀河英雄伝説は昔、CS放送で深夜にやっていたのをチラチラと見たことがあったのですが、原作小説は全く読んだことがありませんでした。4月からアニメ化するみたいですね。

 

なんだか気になってAmazonで原作の10巻セットを買ってみました。一度に小説を10巻買ったのとか初めてです。面白いかな?。

 

2018/02/13
から 松原正和
0件のコメント

レノボ Yoga Tablet 2 with Windowsをセカンドディスプレイにする。

Windows 10 Anniversary Update からのはずですが、ミラキャストという無線のディスプレイ接続技術を用いて、ノートPCやタブレットをセカンドディスプレイにすることができます。

で、レノボ ThinkPas X270を買ったときから思っていたのですが、レノボ Yoga Tablet 2 with Windowsをセカンドディスプレイにしたいなーと思っていました。

CPUはATOM Z3745でメモリも2GB、ストレージも32GBでタブレットとして使うには性能不足の感も否めませんが、セカンドディスプレイにするだけなら、Full HD表示もできますし、まだまだ使えそうな気もします。

Yoga Tablet 2 with Windowsはタブレットとしては少し特殊な構造をしていて、スタンドが内蔵されており、別途タブレット用スタンドを用意しなくとも机に立てて使用することができます。スタンドを持ち歩く必要もないですし、デザイン的にもとてもすっきりします。

セカンドディスプレイ接続できたの図 ↓

 

これまで、何度か接続しようと頑張っていたのですが、なぜか接続時にエラーが発生し、接続できなかったのですが、ディスプレイドライバをIntel社の最新のものに更新することで接続することができました。HDCP関連か何かだと思うのですが、ディスプレイアダプタの機能も接続可否の要件に入るようです。

あと、注意点として、もともとWindows 8.1のタブレットなので、今からWindows 10にアップデートしようとすると料金がかかってしまうのと、少し古い機種なので売っている店舗(サイト)も少なくなっているような気もします。

でも、古い機種なので探せば掘り出し物もゲットできるかもしれません。

 

 

 

 

2018/02/12
から 松原正和
1件のコメント

A5:SQL Mk-2でCaptionList及びCaptionFromComment疑似命令を追加(SQL結果セットで論理名表示)

A5:SQL Mk-2でこれまで、SQLの結果セットに論理名を付加する Captions疑似命令というのがあったのですが、SQLの列を追加・削除、あるいは順序の変更などするたびCaptions疑似命令も書き換えなければなりませんでした。

また、Captions疑似命令の書き換え忘れで、結果セットのグリッドで表示された列名と表示内容が異なってしまい、トラブルの原因ともなるようでした。

そこで、CaptionList疑似命令と、CaptionFromComment疑似命令を追加しました。これからは、Captions疑似命令は非推奨とし、CaptionListまたはCaptionFromComment疑似命令を推奨としたいと思います。

使い方は以下の通り。

CaptionList疑似命令

CaptionList の後に ’ ’ で括って ‘Key1=Value1, Key2=Value2, Key3=Value3…’形式で記述します。

CaptionList疑似命令は複数記述することができます。

 

CaptionFromComment疑似命令

CaptionFromComment疑似命令を記述しておくと、SELECT文の列定義(列名)の後ろに記述されたコメントを論理名として扱います。列定義を区切るカンマの位置は列定義の前でも後ろでも構いませんが、列定義(の最終行)の後に書く必要があります。