チケット #21885

Postgresのコード整形および、シンタックスハイライト

登録: 2010-05-21 18:05 最終更新: 2010-05-25 16:41

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
オープン
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

↓のようなコードを書いたのですが、思ったようにコード整形/シンタックスハイライトしてくれませんでした。

  1. CREATE OR REPLACE
  2. FUNCTION isItem(
  3. item_id INTEGER
  4. ) RETURNS boolean AS '
  5. DECLARE
  6. isRet BOOLEAN;
  7. roop_item INTEGER;
  8. BEGIN
  9. FOR roop_item IN
  10. SELECT
  11. *
  12. FROM
  13. item
  14. WHERE
  15. item.item_id = item_id
  16. LOOP
  17. --ほにゃらら
  18. END LOOP;
  19. RETURN isRet;
  20. END;
  21. ' LANGUAGE plpgsql;
  • functionの中身がシングルクォートで囲まれているので、単なる文字列だと判断されてしまい、まったくコード整形/シンタックスハイライトされない
  • どうやらLOOPを認識していないみたいで、整形するとインデントがずれる。

チケットの履歴 (3 件中 3 件表示)

2010-05-21 18:05 更新者: pietomita
  • 新しいチケット "Postgresのコード整形および、シンタックスハイライト" が作成されました
2010-05-21 20:18 更新者: zigen
コメント

ZIGENです。

ご指摘ありがとうございます。

・PROCEDUREの整形について  申し訳ありませんが、PROCEDURE系の整形に対応できておりません。

 通常のSQL文もDB毎に方言がありますが、PROCEDURE系になると更に方言が強く、  現時点では対応できておりません。

・文字列中の整形について  シングルクォート内は文字列として認識されるため、整形は行わない仕様です。  通常の文字列が勝手に整形されると困るためです。

・シンタックスハイライトについて  SQLの文法上シングルクォート内は「文字列」と扱うため、ご指摘どおりの動作になります。  PostgreSQLのマニュアルでもdefinitionは「関数を定義する文字列です。」とありますので、  文字列としてハイライトされるのは致し方ないと思います。

 http://www.postgresql.jp/document/pg721doc/reference/sql-createfunction.html

よろしくお願いします。

 

2010-05-25 16:41 更新者: pietomita
コメント

コメント、検討ありがとうございます。

Postgresの流儀でいえば、そういう目的のために ドル記号で引用符付けされた文字列定数 というのを使うのだと思うのですが、これを使うとDBViewer からSQL文が実行できなくなってしまいます。(postgresに付属のpgAdminIIIでは実行できる)

かなり面倒な要望だとは思うのですが

  • ドル記号で引用符付けされた文字列定数 を使ったSQL文を実行できるようにする
  • ドル記号で引用符付けされた文字列定数 は、これまでどおりシンタックスハイライトを行う場合には文字列定数として扱わない
  • インデントブロックをカスタマイズできるようにする。(設定→SQLテンプレートでできるかもと思ったけど、やりかたがわかりませんでした)

 といったことが実現すれば、嬉しいのですが、いかがでしょうか?

添付ファイルリスト

添付ファイルはありません

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする