###################################################
##                                               ##
##           Jpsql README                        ##
##                                               ##
###################################################


(1)本プログラムについて

      本プログラムはPostgreSQLに添付のJava版psqlを一部機能変更したもので、
    以下の事を行うことができます。

        ・PostgreSQL付属のインタラクティブインタフェースpsqlと同様の
          対話的なクエリを実行
        ・SQL文を記述したファイルの一括実行


(2)ファイル一覧

        README.Jpsql  -- 本説明書
        Jpsql.sh      -- 起動スクリプト
        Jpsql.jar     -- プログラム本体
        commons-cli-1.0.jar  -- プログラム内で使用するApache Commons CLI


(3)起動方法

(3-1)用意するもの

    ・PostgreSQLのJDBCドライバjarファイル
    ・稼動中のPostgreSQLと接続情報
      (ホスト名、ポート、DB名、ユーザ名、パスワード)

(3-2)プログラム起動方法とオプションの指定

      プログラム起動時に接続先などの情報を、コマンドラインオプションとして
      指定します。

      % Jpsql.sh -d driver -U user -u url [-h] [-W password] [-f inputfile]

      指定できるオプションは以下の通りです。

      -U,--user <user>             データベース接続ユーザ名
      -W,--password <password>     データベース接続ユーザパスワード
      -d,--driver <driver>         ドライバクラス名(org.postgresql.Driver)
      -f,--inputfile <inputfile>   SQLが記述された入力ファイル
      -h,--help                    ヘルプの表示
      -u,--url <url>               接続するJDBC URL


(4)プログラムの終了方法

    ・インタラクティブインタフェースは「\q」コマンドによって終了することが
      できます。
    ・起動時にSQLファイル実行を指定した場合、実行完了と同時にプログラムは
      終了します。


(5)注意事項

・文字コードについて

      本プログラムを実行するクライアント環境の文字コードが、DBのエンコードと異なる
    場合、文字化けが発生する場合が必要があります。また、SQL記述ファイル内のSQLを実
    行する場合は、そのファイルの文字コードもDBの文字コードと合わせる必要があります。
      本プログラムの実行クライアント環境の文字コードとDBのエンコードの組み合わせは、
    (クライアント、DB) = (EUC-JP, EUC-JP), (UTF-8, UTF-8)となります。

・ファイル入力について

	  ファイルからのSQLの入力は、-fオプション指定により実行できます。また、psqlと
	同様にシェルの入力リダイレクトを使用することも出来ます。入力リダイレクトでは
	手作業により入力した結果と同じ処理が行われます。
	  -fオプションでは、指定したファイルが存在しなかった場合や入力で読み取りエラー
	が発生した場合には、エラーコード：1 が返されます。(リダイレクトは返されません)

      なお、ファイル読込時は、そのSQL記述ファイルを本プログラムを実行するプラッ
    トフォームに依存した文字セットとして読み込みます。
      例えば、本プログラムを実行するプラットフォームのデフォルトの文字セット
    がEUC_JPの場合は、本プログラムはSQL記述ファイルの文字セットもEUC_JPであ
    ると判断し、処理を行います。

      もし、pg_dumpの出力をJpsql経由で他データベースに移行する場合は、以下
    の項目に注意してください。

    1.pg_dumpの実行時のオプション

      pg_dumpの-E(--encoding)オプションにより、出力するファイルの文字セットを
    指定することが出来ます。Jpsqlを実行する環境のデフォルトの文字セットに合
    わせて実行してください。

    2.pg_dumpの出力内のSETコマンドのコメントアウト

      pg_dumpの出力の初めの数行は、pg_dump実行時のクライアント環境等の設定
    「SET client_encoding = 'EUC_JP';」などが出力されます。
      本プログラムの入力にpg_dumpの結果を利用する場合は、「SETコマンド」を
    全てコメントアウト（先頭に"--"を追加する）してください。

・クエリのエラー処理

	  クエリにエラーがあったとき、本プログラムではPostgreSQLから返されるメッセ
	ージを表示後、プロンプトを表示してSQLステートメント入力待ち状態へ移行します。
	ファイル入力時では、メッセージを表示後、引き続き以後のSQLを実行します。

	
(6) プログラム仕様

・入力されたSQLステートメントをJDBCドライバ経由で実行し、結果を出力します。
・SQLステートメントの入力は、コマンドラインおよびファイルによる入力とします。

・セミコロン（;）はSQLステートメントの終わりを意味します。

  SQLステートメントは複数行に分割して記述することが出来ます。
  SQLステートメントの実行は、セミコロン（;）を検出した時点で行われます。
  入力１行中に複数のセミコロンで区切られた複数のSQLステートメントを記述・実行する
  ことができます。
	※文字列定数および、コメントは内は除く

・コメント

	コメントはSQLステートメント、コマンドから削除・切り詰められてJDBCドライバに渡さ
	れ実行されます。
	コメントは以下の2タイプ
	１．二重ハイフン（--）で始まる任意の文字の並びで、行の終わりまで続きます。
	２．C言語様式のブロックコメント(コメントは/*で始まり、対応する*/で終わり)
		※コメントブロックは入れ子（ネスト）にすることが可能。

・文字列定数

	クオーテーション(')で囲まれた範囲の文字列。
	クォーテーションのエスケープは(\')または（''）。
	バックスラッシュはエスケープは(\\)

・バックスラッシュコマンド

	Jpsqlの動作コマンドで、バックスラッシュ(\)から始まるコマンド
	※文字列定数および、コメントは内は除く
	\q：終了
	\d：テーブル、ビュー、シーケンスの表示
	\di：インデックスの表示
	\dt：テーブルの表示
	\ds：シーケンスの表示
	\dS：システムオブジェクトの表示

・実行可能な環境の組み合わせ

	コンソール端末のエンコードとDBエンコードの組み合わせは、以下の２通りです。
	(クライアントエンコード、DBエンコード)=(EUC-JP, EUC_JP), (UTF-8, UTF_8)
	※その他の組み合わせでは文字化けが発生する可能性があります。


EOF
