Ticket #21885

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

Open Date: 2010-05-21 18:05 Last Update: 2010-05-25 16:41

Reporter:
Owner:
(None)
Type:
Status:
Open
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

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

  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を認識していないみたいで、整形するとインデントがずれる。

Ticket History (3/3 Histories)

2010-05-21 18:05 Updated by: pietomita
  • New Ticket "Postgresのコード整形および、シンタックスハイライト" created
2010-05-21 20:18 Updated by: zigen
Comment

ZIGENです。

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

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

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

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

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

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

よろしくお願いします。

 

2010-05-25 16:41 Updated by: pietomita
Comment

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

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

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

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

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

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login