Cypherの集合関数lastの挙動が変?

今日もぬこは激怒した。

Cypherの集合関数として、

  • head
  • tail
  • last

があるのだが、何故かlastだけうまく動作しないときがある・・・。

headはOK。

neo4j-sh (0)$ START i=node(1) MATCH p=i-[:SCHEMA]->s-[r:META*0..]->n RETURN r, head(r);
==> +--------------------------------------------------------------------+
==> | r                                                   | head(r)      |
==> +--------------------------------------------------------------------+
==> | []                                                  | <null>       |
==> | [:META[15] {}]                                      | :META[15] {} |
==> | [:META[15] {},:META[16] {}]                         | :META[15] {} |
==> | [:META[13] {}]                                      | :META[13] {} |
==> | [:META[13] {},:META[14] {}]                         | :META[13] {} |
==> | []                                                  | <null>       |
==> | [:META[10] {}]                                      | :META[10] {} |
==> | [:META[10] {},:META[5] {}]                          | :META[10] {} |
==> | [:META[10] {},:META[5] {},:META[11] {}]             | :META[10] {} |
==> | [:META[10] {},:META[5] {},:META[11] {},:META[7] {}] | :META[10] {} |
==> | [:META[10] {},:META[5] {},:META[8] {}]              | :META[10] {} |
==> | [:META[10] {},:META[5] {},:META[8] {},:META[9] {}]  | :META[10] {} |
==> | [:META[10] {},:META[5] {},:META[6] {}]              | :META[10] {} |
==> | [:META[10] {},:META[5] {},:META[6] {},:META[7] {}]  | :META[10] {} |
==> | [:META[4] {}]                                       | :META[4] {}  |
==> | [:META[4] {},:META[5] {}]                           | :META[4] {}  |
==> | [:META[4] {},:META[5] {},:META[11] {}]              | :META[4] {}  |
==> | [:META[4] {},:META[5] {},:META[11] {},:META[7] {}]  | :META[4] {}  |
==> | [:META[4] {},:META[5] {},:META[8] {}]               | :META[4] {}  |
==> | [:META[4] {},:META[5] {},:META[8] {},:META[9] {}]   | :META[4] {}  |
==> | [:META[4] {},:META[5] {},:META[6] {}]               | :META[4] {}  |
==> | [:META[4] {},:META[5] {},:META[6] {},:META[7] {}]   | :META[4] {}  |
==> | [:META[1] {}]                                       | :META[1] {}  |
==> | [:META[1] {},:META[3] {}]                           | :META[1] {}  |
==> +--------------------------------------------------------------------+
==> 24 rows
==> 3 ms

tailもOK。

neo4j-sh (0)$ START i=node(1) MATCH p=i-[:SCHEMA]->s-[r:META*0..]->n RETURN r, tail(r);
==> +----------------------------------------------------------------------------------------------+
==> | r                                                   | tail(r)                                |
==> +----------------------------------------------------------------------------------------------+
==> | []                                                  | []                                     |
==> | [:META[15] {}]                                      | []                                     |
==> | [:META[15] {},:META[16] {}]                         | [:META[16] {}]                         |
==> | [:META[13] {}]                                      | []                                     |
==> | [:META[13] {},:META[14] {}]                         | [:META[14] {}]                         |
==> | []                                                  | []                                     |
==> | [:META[10] {}]                                      | []                                     |
==> | [:META[10] {},:META[5] {}]                          | [:META[5] {}]                          |
==> | [:META[10] {},:META[5] {},:META[11] {}]             | [:META[5] {},:META[11] {}]             |
==> | [:META[10] {},:META[5] {},:META[11] {},:META[7] {}] | [:META[5] {},:META[11] {},:META[7] {}] |
==> | [:META[10] {},:META[5] {},:META[8] {}]              | [:META[5] {},:META[8] {}]              |
==> | [:META[10] {},:META[5] {},:META[8] {},:META[9] {}]  | [:META[5] {},:META[8] {},:META[9] {}]  |
==> | [:META[10] {},:META[5] {},:META[6] {}]              | [:META[5] {},:META[6] {}]              |
==> | [:META[10] {},:META[5] {},:META[6] {},:META[7] {}]  | [:META[5] {},:META[6] {},:META[7] {}]  |
==> | [:META[4] {}]                                       | []                                     |
==> | [:META[4] {},:META[5] {}]                           | [:META[5] {}]                          |
==> | [:META[4] {},:META[5] {},:META[11] {}]              | [:META[5] {},:META[11] {}]             |
==> | [:META[4] {},:META[5] {},:META[11] {},:META[7] {}]  | [:META[5] {},:META[11] {},:META[7] {}] |
==> | [:META[4] {},:META[5] {},:META[8] {}]               | [:META[5] {},:META[8] {}]              |
==> | [:META[4] {},:META[5] {},:META[8] {},:META[9] {}]   | [:META[5] {},:META[8] {},:META[9] {}]  |
==> | [:META[4] {},:META[5] {},:META[6] {}]               | [:META[5] {},:META[6] {}]              |
==> | [:META[4] {},:META[5] {},:META[6] {},:META[7] {}]   | [:META[5] {},:META[6] {},:META[7] {}]  |
==> | [:META[1] {}]                                       | []                                     |
==> | [:META[1] {},:META[3] {}]                           | [:META[3] {}]                          |
==> +----------------------------------------------------------------------------------------------+
==> 24 rows
==> 3 ms
==> 

しかし、tailをかけると1件も返却されない・・・というより(0 rows)すら返ってないので、何か途中ですっこけてるのかも。

neo4j-sh (0)$ START i=node(1) MATCH p=i-[:SCHEMA]->s-[r:META*0..]->n RETURN r, last(r);
neo4j-sh (0)$ 

last関数の結果として、リスト末端を返却する(空リストならnullを返す)のを期待していたのだが・・・
この関数の機能を当てにしてCypherクエリを作成していたのに、どうしてくれようか。
やっぱりバグなのかな?だとするとバグレポートを上げるべきだよなあ・・・。