0

group_concat関数をhsqldbに追加して、クエリをユニット/統合テストとして適切にテストできるようにしようとしています。クエリはmysqlで正常に機能するため、hsqldbで機能する必要があります(うまくいけば)。

        // GROUP_CONCAT
        jdbcTemplate.update("DROP FUNCTION GROUP_CONCAT IF EXISTS;");
        jdbcTemplate.update(
            "create aggregate function group_concat(in val varchar(100), in flag boolean, inout buffer varchar(1000), inout counter int) " +
            "   returns varchar(1000) " +
            "   contains sql " +
            "begin atomic " +
            "   if flag then" +
            "      return buffer;" +
            "   else" +
            "      if val is null then return null; end if;" +
            "      if buffer is null then set buffer = ''; end if;" +
            "      if counter is null then set counter = 0; end if;" +
            "      if counter > 0 then set buffer = buffer || ','; end if;" +
            "      set buffer = buffer + val;" +
            "      set counter = counter + 1;" +
            "      return null;" +
            "   end if;" +
            "end;"
        );

この集計関数を追加すると、ほとんどの問題が解決します。mysqlのgroup_concatのように正しく動作します。ただし、それが行わないのは、次のような個別のキーワードを使用できるようにすることです。

group_concat(distinct column)

個別のキーワードを考慮に入れる方法はありますか?または、個別のキーワードを完全に回避するようにクエリを書き直しますか?

4

1 に答える 1

0

HSQLDBにはGROUP_CONCATが組み込まれており、DISTINCTを受け入れます。

http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_aggregate_funcs

現時点では、ユーザー定義の集計関数にDISTINCTを追加することはできませんが、これは将来的に使用できる興味深い機能のようです。

于 2012-10-18T21:14:24.143 に答える