1

Grailsは、数式マッピングパラメータを使用してSQL式からフィールドを生成するための派生プロパティを提供します。

static mapping = {
    myfield formula: "field1 + field2"
}

PostgreSQLデータベースで数式パラメータを使用して連結フィールドを作成しようとしています。PostgreSQL 8.4はまだconcat_wsをサポートしていないため、構文は少し奇妙です。

static mapping = {
    myfield formula: "array_to_string(array[field1, field2],' ')"
}

DataSource構成でloggingSql=trueで示される生成されたSQLには、いくつかの奇妙な場所に挿入されたテーブルプレフィックスがあります。

select table0_.field1 as field1_19_0_,
       table0_.field2 as field2_19_0_,=
       array_to_string(table0_.array[field1, table0_.field2], ' ') as formula0_0_
from test_table table0_ where table0_.id=?

テーブルプレフィックスは、配列の前に誤って表示されますが、派生式のfield1の前には表示されません。プレフィックスをエスケープしたり、この動作をより明示的に修正したりする方法はありますか?

4

2 に答える 2

2

これは、数式構文の解析に関する問題にすぎません。GORMは、引用符で囲まれていない式の後に親が続かないテーブルプレフィックスを挿入しようとするため、ARRAY[]表記がそれをトリップします。

私の解決策は、concat_ws関数を定義することでした:

CREATE OR REPLACE FUNCTION concat_ws(separator text, variadic str text[])
RETURNS text as $$
SELECT array_to_string($2, $1);
$$ LANGUAGE sql;

GORMパラメーターは、ARRAY []構文を回避できるようになり、期待どおりに機能します。

myfield formula: "concat_ws(' ', field1, field2)"
于 2012-04-24T17:53:04.413 に答える
1

私は非常によく似た問題を抱えていて、GORMがプレフィックスを付けようとしていたものを一重引用符で囲むことで解決しました。

static mapping =
{
    dayOfYear formula: " EXTRACT('DOY' FROM observed) "
}

その後、GORMはこれを作成しました。

select
    EXTRACT('DOY' FROM observed)  as y1_

これはすべての場合に機能するとは限りませんが、誰かに役立つことを願っています。

于 2014-01-29T01:27:25.140 に答える