ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Java22 無名変数など

2024-03-22 22:14:54 | PG(Java)

2024/3/19にJava22が出たので、例によって調査

今回の目玉は無名変数
tryで「_」が使えるようになったのは嬉しい。

それと、複数ファイルソースコードの実行
単一のソースファイルをjavaコマンドで直接実行することは以前から出来ていたけど、今回、複数のソースファイルを参照してくれるようになった。
(ちなみに単一のソースファイルから直接実行って、Java11からだったんだなぁ。もっと最近かと思ってた^^;)

それと、一部の人にとって待望のForeign Function & Memory APIがついに正式版になったようだ。
自分個人としては使う機会があるかどうか分からないけど^^;


Java22ではプレビュー版の機能がかなり多い。

しかも、今回新しく追加になったプレビュー版機能もなかなか期待大。

  • super()・this()の前に文を書けるようになる
    • ちょくちょくコンストラクターのsuper()の前に計算式を書きたいことがあるので、とても嬉しい。
  • Stream Gatherersクラス
    • Streamの終端処理のcollectメソッドのように、中間処理用のgatherメソッドが新設される。そこに渡すのがGatherersクラスのメソッド。ウィンドウ処理は欲しかった人が居そう。
  • Class-File API
    • JavassistやASM・BCELでclassファイルをいじっていたのを、標準APIで用意するらしい。ちょっと試してみたいが、いまいち使い方が分からないorz

(翌日追記)
Class-File API使ってみた。なかなか楽しいw

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

劔の文字コード

2023-12-24 00:00:00 | PG(RDBMS)

Tsurugi Advent Calendar 2023の24日目です。

RDBMSのTsurugiのことを自分は「Tsurugi」と書くことが多いですが、漢字で書かれることもあります。
「劔」ですね。

しかし劔には異体字(異なる文字コードのもの)がいくつもあって、どれを使えばいいか迷うこともあるかもしれません。そんなときに覚えやすいのが、劔の文字コードはShift_JISで0x9999である!ということです。

皆さんが常備しているJShellを使えば、一発で出せます!

jshell> new String(java.nio.ByteBuffer.allocate(2).putShort((short)0x9999).array(), "MS932")$1 ==> "劔"

 

参考:Tsurugiの正しい漢字の出し方

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

(Tsurugi)tgsql 1.1.0の変更点

2023-12-23 00:00:00 | PG(RDBMS)

Tsurugi Advent Calendar 2023の23日目です。

2023/12/7にTsurugi 1.0.0-BETA2が公開されましたが、そのときにTsurugi SQLコンソール(tgsql)は1.1.0になりました。

tgsql 1.0.1と1.1.0の違いは、以下の3つくらいかと思います。

  • tgsql --versionでバージョン情報を出すようになった。
  • 暗黙にトランザクションを開始した場合、SQL実行後に自動的にコミットするようになった。
  • 細かすぎて伝わらない地味な修正点
    • 更新系SQLの処理件数を表示するようになった。
    • selectの実行結果が1件だったとき、単位を「row」と表示するようになった。
    • コンソールモードで、コメントのみの行をスキップするようになった。

暗黙のトランザクションに関する変更は、注意が必要です。
tgsqlでは、トランザクションを開始せずに(beginを実行せずに)SQLを実行すると、暗黙にトランザクションを開始します。
今までは、暗黙に開始されたトランザクションはそのまま継続されるので、自分でcommitを実行する必要がありました。
tgsql 1.1.0では、暗黙にトランザクションが開始された場合はSQL実行後に自動的にコミットされるようになったので、特に修正の効かないupdateやdeleteを実行する際は要注意です!

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

(Tsurugi)Iceaxe 1.1.0の変更点

2023-12-22 00:00:00 | PG(RDBMS)

Tsurugi Advent Calendar 2023の22日目です。

2023/12/7にTsurugi 1.0.0-BETA2が公開されましたが、そのときにJavaライブラリーであるIceaxeは1.1.0になりました。

Iceaxe 1.0.1と1.1.0の一番大きな違いは、TsurugiTransactionのexecuteAndGetCountメソッドが更新系SQLの処理件数を正しく返すようになったことだと思います。(今まではTsurugiサーバー側にその実装が無かったので、常に-1を返すようになっていました)

なお、executeAndGetCountメソッドの戻り値の型はintですが、実際は、Tsurugiサーバーからはlongで返って来ています。なので、intでは足らん!という人は、Iceaxe 1.1.0で追加されたexecuteAndGetCountDetailメソッドを使うと良いでしょう。こちらは実行したSQLの種類ごとにlongで処理件数が返ってきます。ちなみにinsert or replaceの件数はMERGED_ROWSという名前になっています。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

(Tsurugi)Tsubakuro 1.1.0の変更点

2023-12-21 00:00:00 | PG(RDBMS)

Tsurugi Advent Calendar 2023の21日目です。

2023/12/7にTsurugi 1.0.0-BETA2が公開されましたが、そのときにJavaの通信ライブラリーであるTsubakuroは1.1.0になりました。

Tsubakuro 1.0.1と1.1.0の大きな違いは、更新系SQLを実行するメソッド(TransactionのexecuteStatementメソッド)の戻り値の型が、FutureResponse<Void>からFutureResponse<ExecuteResult>に変わったことでしょうか。
つまり、1.0.1でFutureReponse<Void>を受け取るように書いたソースコードは、1.1.0ではコンパイルエラーになるということです。(awaitメソッドで受けて戻り値を無視していたら関係ありませんが^^;)

あと、service message versionも追加になっているますが、それについてはアドベントカレンダーの13日目をご覧ください。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Tsurugiで使えるSQLの演算子

2023-12-20 00:00:00 | PG(RDBMS)

Tsurugi Advent Calendar 2023の20日目です。

現時点のTsurugi(1.0.0-BETA2)では、まだ未対応のSQL構文や演算子があります。どんな構文が使えるかと、これから何が実装される予定なのかはAvailable SQL features in Tsurugiに書かれています。

未対応の演算子を使おうとすると、SYNTAX_EXCEPTIONが発生するケースとUNSUPPORTED_RUNTIME_FEATURE_EXCEPTIONが発生するケースがあります。

SYNTAX_EXCEPTIONは文法エラーですが、全く対応されていない構文や演算子に対しても発生します。
例えばinやbetweenを使おうとすると発生します。

UNSUPPORTED_RUNTIME_FEATURE_EXCEPTIONは、構文上は対応されているけれども内容が実装されていないものに対して発生するエラーです。
例えばlikeをTsurugi 1.0.0-BETA2で使おうとすると発生します。
ちなみにlikeをTsurugi 1.0.0-BETA1で使うとエラーは発生しませんが、実行結果は常にunknown扱い(where条件ではfalseと同じ)になります。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Tsurugiのcreate index

2023-12-18 00:00:00 | PG(RDBMS)

Tsurugi Advent Calendar 2023の18日目です。

TsurugiはRDBMSですが、内部はKVS(Key Value Store)です。
実体はMasstreeというものらしいですが、これはキー順に並べたデータ構造らしいです。つまり自動的にキーで並ぶので、プライマリキー専用のインデックスというものは作られません。

そして、プライマリキー以外のインデックスを作る手段がcreate indexです。
ただし、現時点(Tsurugi 1.0.0-BETA2)では、create indexでインデックスを作った後に入れたデータにしか作用しません。つまり、データが有る状態でcreate indexしても、既存データは索引対象になりません。
すなわち、既存RDBMSでよくある「テーブルにデータをロードしてからインデックスを作成することで高速化する」という手法は、現時点のTsurugiでは適用できないということになります。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Tsurugiのdrop table

2023-12-16 00:00:00 | PG(RDBMS)

Tsurugi Advent Calendar 2023の16日目です。

テーブルを削除するdrop table文ですが、現在のTsurugi(1.0.0-BETA2)では、DML実行中にdrop tableを行うのは危険です。
DMLで処理中のテーブルを削除すると、Tsurugiサーバーがクラッシュする可能性があります。


ところで、Tsurugi 1.0.0-BETA2では、drop table if existsが使えるようになりました。
テーブルが無い場合でもエラーにならないので便利です。

ちなみにテーブルの存在有無を確認する方法は(SQLを実行してtable not foundのエラーになる以外の方法は)、

  • Tsurugi SQLコンソール(tgsql)の場合は「\show table テーブル名」を実行する
  • Iceaxeの場合はTsurugiSessionのfindTableMetadataメソッドを実行する(テーブルが無ければOptional.emptyが返る)

といったものが考えられます。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Tsurugiのcreate table

2023-12-15 00:00:00 | PG(RDBMS)

Tsurugi Advent Calendar 2023の15日目です。

テーブルを作成するcreate table文は、Tsurugiではまだ未対応のデータ型があります。binaryとかBLOBとか。

char/varcharは対応していますが、現状(Tsurugi 1.0.0-BETA2)では、指定する桁数はバイト数であって文字数ではないことに注意が必要です。
char/varcharにinsert/updateするときは、UTF-8に変換されて入れられます。

また、今はchar/varcharにヌル文字(文字コード0)を含めることが出来ません。
Tsurugi 1.0.0-BETA1では、ヌル文字が含まれた文字列のinsertは出来ますが、select時にERR_DATA_CORRUPTIONが発生します。
Tsurugi 1.0.0-BETA2では、ヌル文字が含まれた文字列をinsertしようとするとINVALID_RUNTIME_VALUE_EXCEPTIONが発生します。
embulk-output-tsurugidb 0.1.3では、ヌル文字が含まれているレコードはinsertをスキップするようにしました。

それと、decimal(「decimal(4,1)みたいな」)や dateも使うことが出来ますが、リテラルが対応していません。
つまり、Tsurugi SQLコンソール(tgsql)からinsert文で値を入れることが出来ません^^;
decimalについては、castで代用することが出来ますが。
(decimalもdateも、Iceaxeからバインド変数を使って入れることは可能です)


ところで、Tsurugi 1.0.0-BETA2では、create table if not existsが使えるようになりました。
テーブルが存在しないときだけcreate tableを実行します。(テーブルが存在しているときは何もしません(エラーにもなりません))

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Tsurugi 1.0.0-BETA2の構成定義ファイルの変更点

2023-12-14 00:00:00 | PG(RDBMS)

Tsurugi Advent Calendar 2023の14日目です。

2023/12/7にリリースされたTsurugi 1.0.0-BETA2では、構成定義ファイルの設定のデフォルト値が一部変更になりました。

  • commit_response
    • コミットオプションを付けずにコミットした場合の挙動の設定が、AVAILABLEからSTOREDに変わりました。
    • もう少し詳しく言うと、BETA1でもcommit_responseを書かない場合はSTOREDでしたが、デフォルトの構成定義ファイルにはAVAILABLEが指定されていました。
    • AVAILABLEとSTOREDの違いは、永続化前と永続化後です。永続化すると(すなわちファイルに永続化データを書くので)その分コミットの処理時間が遅くなりますが、データの保存は確実になります。
  • epoch_duration
    • エポック間隔は、DB内部でコミット処理を行う間隔の時間です。
    • デフォルトが40ミリ秒だったのが3ミリ秒に変更されました。
    • ちなみにepoch_durationの単位は「マイクロ秒」なので、3ミリ秒は3000です。
      (間違って3を指定したら…(爆))
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする