A5:SQL Mk-2

開発のこと、日々のこと

2019/01/14
から 松原正和
0件のコメント

A5:SQL Mk-2のちょっとイイところ…ソースコード中から文字列リテラルを抜き出して貼り付け

アプリケーションを開発していて、SQLをプログラム中から実行する方法はいろいろありますが、プログラム中で文字列としてSQLを扱うことはよくあります。

こんな時、A5:SQL Mk-2ではSQLを含むプログラムのソースコードの中から文字列リテラルを抜き出してSQLエディタに貼り付けることができます。

やり方は以下の通りです。

・最初にプログラムのSQL(の文字列リテラル)を含む部分をざっくりコピーします。

・次にA5:SQL Mk-2のSQLエディタで、右クリックメニューから[コードストリッパー]の目的の言語を選択して貼り付けします。

・貼り付けを行うと、以下のようにコピーしたテキスト中から文字列リテラル部分が抜き出されて貼り付けされます。

これでプログラム中に記述されているSQLを手軽に抜き出し、テストすることができます。

ちなみに、コードストリッパーとはこちらから取った名前です。自分はコードストリッパーと覚えていたのですが、本当はワイヤーストリッパーというらしいです。

2019/01/14
から 松原正和
0件のコメント

A5:SQL Mk-2のダークモードとか

Windows 10 October 2018 Updateではエクスプローラにダークモードが追加されました。

まだアプリケーションは個別にダークモードに対応しなければいけませんが、A5:SQL Mk-2はテーマ機能で一応これに対応します。

オプションダイアログから「テーマ」機能を使うと様々な見た目に変更することができますが、個人的には「Carbon」あたりが、Windows 10のダークモードと見た目の親和性が高いと思います。ただ、「Windows」以外のテーマを有効にすると、ちょっとUIが重めになる気がするのでなんだか微妙だなとも思っています。

ちなみに、このテーマ機能は開発環境であるDelphiの持つ機能で、簡単にテーマ機能をアプリケーションに組み込むことができます。

ただ、個別のアプリケーションごとにダークモードに対応しなければいけない現状はあまりよろしくないですよね。白いUIのアプリケーションと黒いUIのアプリケーションを切り替えると目がチカチカしてしまいます。目に優しいはずのダークモードがこれではいけません。まあ、ブラウザとかは背景が白二しか使用がないですし、印刷前提のアプリケーションも基本白にせざるおえないですよね。

ところでWindows 7あたりまでは「Windows クラシック」に切り替えて色設定をカスタマイズすることで、割と簡単にダークモードっぽいことが全アプリケーションで有効になっていたのですが、このコードはWindows 10では残っていないのですかね。これまでずっとウインドウ背景は白とは限らず、文字の色は黒とは限らない…と気を付けながら開発してきたのですが…。

↓Windows XPで試してみた手製ダークテーマ(A5:SQL Mk-2のテーマ機能ではなく、Windowsの設定変更)

2018/12/15
から 松原正和
0件のコメント

プリウス・ドライビング・シミュレータ

今日(2018/12/15)はJJUG CCC 2018 Fallだからというわけでもないですが、ちょっとJavaネタ。

大昔、かれこれ16年ほど前に作ったプリウス・ドライビング・シミュレータ。初代プリウスのハイブリッドシステムのシミュレーション(推測含む)を行うプログラムでブラウザから実行できましたが、Javaアプレットで作っていたため、今ではほとんどのブラウザで動作しなくなりました。もう作った本人もオワコンかと思っていたのですが、今日、フランスの技術インストラクターをしている方から動かし方の質問を受けました。

ブラウザではもうほぼ動かすすべはないのですが、ダウンロードすることで今でも動作させることができます。もちろんJRE(またはJDK)は必要です。

JREのダウンロード

ThsSimulator.jar をダウンロードしてダブルクリックすれば(JREがインストールされていれば)実行されます。

実行イメージ

起動直後の状態ではモーターとエンジンのスライダを操作して動力分割機構の遊星歯車の動作を決められますが、「運転する」チェックボックスをクリックするとアクセルとブレーキの操作でプリウスの動作をシミュレーションできます。

ちなみにものすごーく細かい機能ですが、以下のような機能があります。

・ブレーキを踏むとブレーキランプが点灯する

・ギアをRレンジにすると、後退灯が点灯する

・ずっと走り続けると、燃料計のメモリが減っていき、0になると停車する。

(画像ないのでレッツトライ。アクセル全開でも4時間ほどかかる?)

技術的なことをちょっと書くと、今はもう存在しないBorland JBuilder (JBuilder 6 Professional)で作られています。自分が初めて書いたJavaプログラムでもあります。

ソースコードはライセンスは特に明確になっていませんが、こちらのページからダウンロードできます。

2018/11/30
から 松原正和
0件のコメント

お家の外壁塗装しました。

我が家も建っておよそ10年、そろそろ外壁やコーキング材の痛みなどが見え始めてきました。

そろそろかなあと思っていたところに、株式会社あらたさん(東京都足立区)の営業が訪問されたので、見積を取ってもらい最終的に外壁塗装の工事をお願いしました。

あらたさんに見ていただいた問題のある所は大体以下の箇所

  • コーキングの劣化(複数個所…全般的に。前から気になってた)
  • サイディング材の破損(こすれによる表面のはげ)
  • 軒天の破損(劣化によるひび割れ)
  • サイディング材にコケ発生(日当たりの悪い部分にちょっと)

あらたさんは2018年10月にできたばかりの小さな会社さんですが、スタートアップの方が気合入れてやってくれるかなと判断し、お任せしました。大きな会社と違い、職人さんが下請け孫請けなどにならないのもまあ、よいところかも。

もとは、茶色地にアイボリーのアクセントカラーの家でしたが、思い切って色を変えてみて白地にアクセントカラーで黒に近いグレーにしてみました。デザインセンスは自信ないですがモノトーンにしておけば何となくモダンな感じになると思ったので。白地はかなり明るくニュートラルな白です。屋根も明るめのグレーで太陽光の反射率(遮熱)優先です。

ちなみに、お値段は実のところかなり予算オーバーでした。小さな(安い)家なので、補修費用もそれほど掛からないだろうとの目論見だったのですが、そうもいかないようです。しかし、耐久性の高い塗料を使うことで何とか期間当たりのコストは当初の予定通りにすることができました。ちゃんと想定通り(17~18年ほどは)長持ちしてほしいです…。

(塗料の銘柄は壁はアステックペイントリファイン1000SQLi-IR、屋根は同じくアステックペイントのスーパーシャネツサーモFです。)

仕上がった感想は…なかなか良いかなと思っています。なんとなく?モダンな感じになった気がしますし、新築時のワクワク感というか、嬉しさが少しよみがえった感じがしました。

 

 

 

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
から 松原正和
0件のコメント

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 版で解消されているものもあります。ご確認ください。