)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"6047accf86bd9ff263451277497a29fab47b9205","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Milan Kováčik \u003cmkovacik@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-10-07 18:51:40 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Specify time intervals based filtering queries"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change introduces ISO8601-like time interval queries support."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a95cdbc_482cfc98","line":7,"updated":"2016-10-10 10:20:21.000000000","message":"I\u0027d rephrase this as \"Specify queries based on time intervals\", assuming it\u0027ll fit.","commit_id":"fec938d06860d10c33670d77456e019636eacedb"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"6047accf86bd9ff263451277497a29fab47b9205","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Specify time intervals based filtering queries"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change introduces ISO8601-like time interval queries support."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I847dce368f74d021d6c2004bd6609b87e1c487a4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a95cdbc_0dbf66aa","line":9,"updated":"2016-10-10 10:20:21.000000000","message":"Nit: \"introduces support for queries based on ISO8601-like time intervals\"","commit_id":"fec938d06860d10c33670d77456e019636eacedb"}],"guidelines/pagination_filter_sort.rst":[{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"6047accf86bd9ff263451277497a29fab47b9205","unresolved":false,"context_lines":[{"line_number":130,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"To support filtering based on time intervals such as mentioned in the `ISO8601"},{"line_number":133,"context_line":"intervals wikipedia page`_, it should be possible to express following usecases"},{"line_number":134,"context_line":"through API queries:"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* a two-ISO8601-date timestamp interval"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a95cdbc_885a84f0","line":133,"updated":"2016-10-10 10:20:21.000000000","message":"\"the following\"","commit_id":"fec938d06860d10c33670d77456e019636eacedb"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"18ec46d28b3ba54346d1ede265e1984427813bb2","unresolved":false,"context_lines":[{"line_number":130,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"To support filtering based on time intervals such as mentioned in the `ISO8601"},{"line_number":133,"context_line":"intervals wikipedia page`_, it should be possible to express following usecases"},{"line_number":134,"context_line":"through API queries:"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* a two-ISO8601-date timestamp interval"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a95cdbc_0349f7b6","line":133,"in_reply_to":"1a95cdbc_885a84f0","updated":"2016-10-10 11:20:00.000000000","message":"Done","commit_id":"fec938d06860d10c33670d77456e019636eacedb"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"6047accf86bd9ff263451277497a29fab47b9205","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"For instance, the `Ironic Inspector`_ project keeps track of node introspection"},{"line_number":145,"context_line":"statuses that include the ``started_at`` and ``finished_at`` fields. While the"},{"line_number":146,"context_line":"former value is always present, the latter is present only in case the"},{"line_number":147,"context_line":"introspection finished::"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    GET /app/items"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a95cdbc_28e090cc","line":146,"updated":"2016-10-10 10:20:21.000000000","message":"s/only in case/only if\n\n\"X in case Y\" means something different in everyday English than it does in mathematics. In everyday English, it means \"X is true, because we\u0027ll need it in the unlikely but possible event that Y is true\". For bonus confusion, \"X in the case that Y\" has the mathematical meaning, ie \"X if Y\".\n\nYou\u0027ll probably be understood among programmers, though :-)","commit_id":"fec938d06860d10c33670d77456e019636eacedb"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"18ec46d28b3ba54346d1ede265e1984427813bb2","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"For instance, the `Ironic Inspector`_ project keeps track of node introspection"},{"line_number":145,"context_line":"statuses that include the ``started_at`` and ``finished_at`` fields. While the"},{"line_number":146,"context_line":"former value is always present, the latter is present only in case the"},{"line_number":147,"context_line":"introspection finished::"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    GET /app/items"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a95cdbc_835c277e","line":146,"in_reply_to":"1a95cdbc_28e090cc","updated":"2016-10-10 11:20:00.000000000","message":"Done","commit_id":"fec938d06860d10c33670d77456e019636eacedb"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"2d2d85165043e6777754c862e3b82ab642cf6e68","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"To obtain items that finished between 15:30 and 16:00 Today::"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    GET /app/items?finished_at\u003dbetween:T15:30,T16:00"},{"line_number":163,"context_line":"    {"},{"line_number":164,"context_line":"      \"items\": ["},{"line_number":165,"context_line":"        {\"id\": \"item1\", \"finished_at\": \"T15:30\", \"started_at\": \"T15:00\"},"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a95cdbc_4dc08e50","line":162,"range":{"start_line":162,"start_character":31,"end_line":162,"end_character":39},"updated":"2016-10-10 09:51:06.000000000","message":"I wonder if we should mention this operator by itself in the filtering section, as it could be used for any use numerical field, not just dates.","commit_id":"fec938d06860d10c33670d77456e019636eacedb"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"18ec46d28b3ba54346d1ede265e1984427813bb2","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"To obtain items that finished between 15:30 and 16:00 Today::"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    GET /app/items?finished_at\u003dbetween:T15:30,T16:00"},{"line_number":163,"context_line":"    {"},{"line_number":164,"context_line":"      \"items\": ["},{"line_number":165,"context_line":"        {\"id\": \"item1\", \"finished_at\": \"T15:30\", \"started_at\": \"T15:00\"},"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a95cdbc_6aea8bdc","line":162,"range":{"start_line":162,"start_character":31,"end_line":162,"end_character":39},"in_reply_to":"1a95cdbc_4dc08e50","updated":"2016-10-10 11:20:00.000000000","message":"Done","commit_id":"fec938d06860d10c33670d77456e019636eacedb"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"e144993929642ac77bc75d65bc6283aec658c84d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"the literal string \"gte\" and searching for \"gte:\" can be done by quoting the"},{"line_number":120,"context_line":"value as ``?foo\u003d\"gte:\"``."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"**BETWEEN** operations are available for numeric fields. When interpreted, the"},{"line_number":123,"context_line":"`intervals should be half-open`_ to allow the user to express adjacent"},{"line_number":124,"context_line":"intervals::"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  GET /app/items?size\u003dbetween:6,9"},{"line_number":127,"context_line":"  {"},{"line_number":128,"context_line":"    \"items\": ["},{"line_number":129,"context_line":"      {"},{"line_number":130,"context_line":"        \"foo\": \"buzz\","},{"line_number":131,"context_line":"        \"baz\": \"honk\","},{"line_number":132,"context_line":"        \"size\": 6"},{"line_number":133,"context_line":"      }"},{"line_number":134,"context_line":"    ]"},{"line_number":135,"context_line":"  }"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":".. _Intervals should be half-open: http://wrschneider.github.io/2014/01/\\"},{"line_number":138,"context_line":"                                   07/time-intervals-and-other-ranges-\\"},{"line_number":139,"context_line":"                                   should.html"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"**TODO:** Add guidance on a \"LIKE\" or regex operator to search text."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a95cdbc_6dde25de","line":139,"range":{"start_line":122,"start_character":0,"end_line":139,"end_character":46},"updated":"2016-10-10 11:52:52.000000000","message":"maybe mention which interval side is open here, not sure if example enough","commit_id":"3965fefd97e8b080c99de4d93bb28a8b20c22141"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"bd3a4b8f03ffb2bcca849ccb8dbdbf35ba0ed04d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"the literal string \"gte\" and searching for \"gte:\" can be done by quoting the"},{"line_number":120,"context_line":"value as ``?foo\u003d\"gte:\"``."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"**BETWEEN** operations are available for numeric fields. When interpreted, the"},{"line_number":123,"context_line":"`intervals should be half-open`_ to allow the user to express adjacent"},{"line_number":124,"context_line":"intervals::"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  GET /app/items?size\u003dbetween:6,9"},{"line_number":127,"context_line":"  {"},{"line_number":128,"context_line":"    \"items\": ["},{"line_number":129,"context_line":"      {"},{"line_number":130,"context_line":"        \"foo\": \"buzz\","},{"line_number":131,"context_line":"        \"baz\": \"honk\","},{"line_number":132,"context_line":"        \"size\": 6"},{"line_number":133,"context_line":"      }"},{"line_number":134,"context_line":"    ]"},{"line_number":135,"context_line":"  }"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":".. _Intervals should be half-open: http://wrschneider.github.io/2014/01/\\"},{"line_number":138,"context_line":"                                   07/time-intervals-and-other-ranges-\\"},{"line_number":139,"context_line":"                                   should.html"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"**TODO:** Add guidance on a \"LIKE\" or regex operator to search text."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a95cdbc_56001666","line":139,"range":{"start_line":122,"start_character":0,"end_line":139,"end_character":46},"in_reply_to":"1a95cdbc_6dde25de","updated":"2016-10-10 12:39:18.000000000","message":"Done","commit_id":"3965fefd97e8b080c99de4d93bb28a8b20c22141"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"e144993929642ac77bc75d65bc6283aec658c84d","unresolved":false,"context_lines":[{"line_number":210,"context_line":"Finally, to include items that didn\u0027t finish yet, use the special value"},{"line_number":211,"context_line":"equality. Since the queries are implicitly AND-ed, use two requests::"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"  GET /app/items?finished_at\u003dge16:00"},{"line_number":214,"context_line":"  {"},{"line_number":215,"context_line":"    \"items\": ["},{"line_number":216,"context_line":"      {\"id\": \"item2\", \"started_at\": \"2016-10-10T15:15Z\","}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a95cdbc_6d70e50b","line":213,"range":{"start_line":213,"start_character":30,"end_line":213,"end_character":32},"updated":"2016-10-10 11:52:52.000000000","message":"colon","commit_id":"3965fefd97e8b080c99de4d93bb28a8b20c22141"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"bd3a4b8f03ffb2bcca849ccb8dbdbf35ba0ed04d","unresolved":false,"context_lines":[{"line_number":210,"context_line":"Finally, to include items that didn\u0027t finish yet, use the special value"},{"line_number":211,"context_line":"equality. Since the queries are implicitly AND-ed, use two requests::"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"  GET /app/items?finished_at\u003dge16:00"},{"line_number":214,"context_line":"  {"},{"line_number":215,"context_line":"    \"items\": ["},{"line_number":216,"context_line":"      {\"id\": \"item2\", \"started_at\": \"2016-10-10T15:15Z\","}],"source_content_type":"text/x-rst","patch_set":4,"id":"1a95cdbc_b6487acd","line":213,"range":{"start_line":213,"start_character":30,"end_line":213,"end_character":32},"in_reply_to":"1a95cdbc_6d70e50b","updated":"2016-10-10 12:39:18.000000000","message":"Done","commit_id":"3965fefd97e8b080c99de4d93bb28a8b20c22141"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4ee5994ec96cdadfd32a02a71602fe40bd18b808","unresolved":false,"context_lines":[{"line_number":208,"context_line":"  }"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Finally, to include items that didn\u0027t finish yet, use the special value"},{"line_number":211,"context_line":"equality. Since the queries are implicitly AND-ed, use two requests::"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"  GET /app/items?finished_at\u003dge:16:00"},{"line_number":214,"context_line":"  {"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa6399be_b44927d3","line":211,"updated":"2016-10-11 12:05:00.000000000","message":"I think you can probably make this bit about \"use the special value equality\" more explicit. The term \"special value\" has been used a few times but it isn\u0027t well defined. Presumably it being null in this case is implementation dependent?","commit_id":"fa85c16b7ecf3ba972866e38abb078e3f48b51da"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"fc50f3829cfbaf67b0ca667e3222379ab56349f0","unresolved":false,"context_lines":[{"line_number":208,"context_line":"  }"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"Finally, to include items that didn\u0027t finish yet, use the special value"},{"line_number":211,"context_line":"equality. Since the queries are implicitly AND-ed, use two requests::"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"  GET /app/items?finished_at\u003dge:16:00"},{"line_number":214,"context_line":"  {"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa6399be_7f20479c","line":211,"in_reply_to":"fa6399be_b44927d3","updated":"2016-10-11 13:10:21.000000000","message":"I\u0027m basing the not-set-yet usecase on what essentially is a floating-point equality comparison which may hold for the ``null`` value only. It however is indeed an  implementation-specific detail --- Inspector uses it as a DB default for the ``finished_at`` field.\n\nWe could possibly use a keyword instead to express the default setting; some ideas:\n\n   finished_at\u003ddefault:\n   finished_at\u003dabsent:\n   finished_at\u003dnot_set:","commit_id":"fa85c16b7ecf3ba972866e38abb078e3f48b51da"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"bd4c2d46dd5f618f84063a8738afdd92ac69ee8a","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":".. _Intervals should be half-open: http://wrschneider.github.io/2014/01/\\"},{"line_number":138,"context_line":"                                   07/time-intervals-and-other-ranges-\\"},{"line_number":139,"context_line":"                                   should.html"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"**TODO:** Add guidance on a \"LIKE\" or regex operator to search text."},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa6399be_bfceea2a","line":139,"updated":"2016-10-20 16:31:30.000000000","message":"is it possible to expand this url to not span multiple lines or does that make the linter unhappy?","commit_id":"fd40d8f584f728a45a7613eb4cc55eaca89d1d62"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"bd4c2d46dd5f618f84063a8738afdd92ac69ee8a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"* equality with a default value where no time has been set yet"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":".. _ISO8601 intervals wikipedia page:  https://en.wikipedia.org/wiki/ISO_8601#\\"},{"line_number":161,"context_line":"                                       Time_intervals"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"For instance, the `Ironic Inspector`_ project keeps track of node introspection"},{"line_number":164,"context_line":"statuses that include the ``started_at`` and ``finished_at`` fields. While the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"fa6399be_dfd39ed3","line":161,"updated":"2016-10-20 16:31:30.000000000","message":"same here","commit_id":"fd40d8f584f728a45a7613eb4cc55eaca89d1d62"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"6afbc800a8156ad39705e1b4a27f5bd739447736","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  }"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Finally, to include items that didn\u0027t finish yet, use the default value"},{"line_number":208,"context_line":"equality. Since the queries are implicitly AND-ed, use two requests::"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  GET /app/items?finished_at\u003dge:16:00"},{"line_number":211,"context_line":"  {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba5da102_d0d87220","line":208,"range":{"start_line":208,"start_character":10,"end_line":208,"end_character":69},"updated":"2016-10-26 18:18:40.000000000","message":"I thought the reason we needed the *between* operator was because these querys are implicitly OR\u0027d which meant you could specify multiple distinct time intervals. Otherwise you would just do finished_at\u003dge:10:00\u0026finished_at\u003dle:11:00 ?\n\nIf we are implicitly ANDing the operators then multiple intervals will never work unless there is an overlap between the intervals which I don\u0027t know if we should even allow because you might as well have one between time interval specified which only spans the overlap. E.g: \n\nDistinct intervals no overlap:\n---------------------------------\n\nfinished_at\u003dbetween:10:00,11:00\u0026finished_at\u003dbetween:14:00,15:00\n\nWill return no data. Only way to get both sets of data is to make multiple API calls, at that point you can achieve the same thing by doing:\n\ncall one: \n\nfinished_at\u003dge:10:00\u0026finished_at\u003dle:11:00\n\ncall two:\n\nfinished_at\u003dge:14:00\u0026finished_at\u003dle:15:00\n\nDistinct intervals with overlap:\n----------------------------------\n\nfinished_at\u003dbetween:10:00,11:00\u0026finished_at\u003dbetween:10:30,11:30\n\nWhich is a terrible query and should be really be done as:\n\nfinished_at\u003dbetween:10:30,11:00\n\nwhich can then be achieved by doing:\n\nfinished_at\u003dge:10:30\u0026finished_at\u003dle:11:00","commit_id":"f0cb735600c70ebc6fefea935e2cb4950ee16377"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"a903fdeb1a72a6c8d9f2044c899b63bcefef5232","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  }"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Finally, to include items that didn\u0027t finish yet, use the default value"},{"line_number":208,"context_line":"equality. Since the queries are implicitly AND-ed, use two requests::"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  GET /app/items?finished_at\u003dge:16:00"},{"line_number":211,"context_line":"  {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba5da102_d4adb832","line":208,"range":{"start_line":208,"start_character":10,"end_line":208,"end_character":69},"in_reply_to":"ba5da102_936a8419","updated":"2016-10-27 10:30:50.000000000","message":"Yeah, you\u0027re right. The \u003dbetween: operator is redundant, it\u0027s only benefit is there\u0027s a single query instead of two queries. Just to confirm: is the redundancy the only reason why you\u0027re -1 the patch?","commit_id":"f0cb735600c70ebc6fefea935e2cb4950ee16377"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"737c5c7c4c53f06d303c46d28370734265fbe158","unresolved":false,"context_lines":[{"line_number":205,"context_line":"  }"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Finally, to include items that didn\u0027t finish yet, use the default value"},{"line_number":208,"context_line":"equality. Since the queries are implicitly AND-ed, use two requests::"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  GET /app/items?finished_at\u003dge:16:00"},{"line_number":211,"context_line":"  {"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ba5da102_936a8419","line":208,"range":{"start_line":208,"start_character":10,"end_line":208,"end_character":69},"in_reply_to":"ba5da102_d0d87220","updated":"2016-10-26 18:32:51.000000000","message":"Sigh .... half my comment was lost for some reason when I summited it, including a bunch of corrections to stuff including the operators, and more clarification, so just to clarify a couple of points what I meant at the top was that if OR\u0027d we need the between operator in to do distinct intervals because using gt and lt results in contradictory querys e.g.:\n\nfinished_at\u003dgte:10:00\u0026finished_at\u003dlt:11:00\u0026finished_at\u003dgte:14:00\u0026finished_at\u003dlt:15:00\n\nso we have to represent it like this to get any real meaning from it:\n\nfinished_at\u003dbetween:10:00,11:00\u0026finished_at\u003dbetween:14:00,15:00\n\nI understand why operators should be AND\u0027d, for example if they are OR\u0027d putting a gt and lt in the same query would negate each other which isn\u0027t what you want. But now considering that I am questioning the usefulness of the between operator, when you can achieve the same thing with the other operators.","commit_id":"f0cb735600c70ebc6fefea935e2cb4950ee16377"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"8063a3e0ab2ea1714104ef98c89514f4b4958768","unresolved":false,"context_lines":[{"line_number":134,"context_line":"usecases through API queries:"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* a two-ISO8601-date timestamp interval"},{"line_number":137,"context_line":"* an open-ended, single-ISO8601-date interval"},{"line_number":138,"context_line":"* multiple time intervals an item may belong to"},{"line_number":139,"context_line":"* equality with a default value where no time has been set yet"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba5da102_c1027809","line":137,"range":{"start_line":137,"start_character":17,"end_line":137,"end_character":36},"updated":"2016-11-04 07:41:11.000000000","message":"if an invalid format timestamp, I guess the response is 400","commit_id":"11683bcafd9120d3127c6651d692ba0e92ef5989"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4c16dbedd118cd6969c849b0e448cfa68540f2","unresolved":false,"context_lines":[{"line_number":134,"context_line":"usecases through API queries:"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* a two-ISO8601-date timestamp interval"},{"line_number":137,"context_line":"* an open-ended, single-ISO8601-date interval"},{"line_number":138,"context_line":"* multiple time intervals an item may belong to"},{"line_number":139,"context_line":"* equality with a default value where no time has been set yet"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"9a629dbe_5443cf41","line":137,"range":{"start_line":137,"start_character":17,"end_line":137,"end_character":36},"in_reply_to":"ba5da102_225c0fed","updated":"2016-11-10 16:05:38.000000000","message":"yea, I just think the guideline should clarify some return code for error case, avoid people begin to have different implement in different projects. But yes, that can be later patch.","commit_id":"11683bcafd9120d3127c6651d692ba0e92ef5989"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"2f690856f75ad870582ad9565c6fa24479f75200","unresolved":false,"context_lines":[{"line_number":134,"context_line":"usecases through API queries:"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* a two-ISO8601-date timestamp interval"},{"line_number":137,"context_line":"* an open-ended, single-ISO8601-date interval"},{"line_number":138,"context_line":"* multiple time intervals an item may belong to"},{"line_number":139,"context_line":"* equality with a default value where no time has been set yet"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba5da102_225c0fed","line":137,"range":{"start_line":137,"start_character":17,"end_line":137,"end_character":36},"in_reply_to":"ba5da102_c1027809","updated":"2016-11-04 10:50:52.000000000","message":"Alex, that would be the common sense.","commit_id":"11683bcafd9120d3127c6651d692ba0e92ef5989"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7c2b3d677f818f6a1d57a4fe7ac07388e37da77b","unresolved":false,"context_lines":[{"line_number":162,"context_line":"To obtain items that finished between 15:30 and 16:00 UTC Today use an"},{"line_number":163,"context_line":"interval with two boundaries::"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"  GET /app/items?finished_at\u003dge:15:30\u0026finished_at\u003dlt:16:00"},{"line_number":166,"context_line":"  {"},{"line_number":167,"context_line":"    \"items\": ["},{"line_number":168,"context_line":"      {\"id\": \"item1\", \"started_at\": \"2016-10-10T15:00Z\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba5da102_7e7dc9b0","line":165,"range":{"start_line":165,"start_character":17,"end_line":165,"end_character":58},"updated":"2016-11-04 07:37:51.000000000","message":"what happened if there is one more finished_at show up. for example, finished_at\u003dlt:15:45, so whether \u0027finished_at\u003dlt:16:00\u0027 will be ignored?","commit_id":"11683bcafd9120d3127c6651d692ba0e92ef5989"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3e4c16dbedd118cd6969c849b0e448cfa68540f2","unresolved":false,"context_lines":[{"line_number":162,"context_line":"To obtain items that finished between 15:30 and 16:00 UTC Today use an"},{"line_number":163,"context_line":"interval with two boundaries::"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"  GET /app/items?finished_at\u003dge:15:30\u0026finished_at\u003dlt:16:00"},{"line_number":166,"context_line":"  {"},{"line_number":167,"context_line":"    \"items\": ["},{"line_number":168,"context_line":"      {\"id\": \"item1\", \"started_at\": \"2016-10-10T15:00Z\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"9a629dbe_d49c3fc2","line":165,"range":{"start_line":165,"start_character":17,"end_line":165,"end_character":58},"in_reply_to":"9a629dbe_01891b75","updated":"2016-11-10 16:05:38.000000000","message":"yea, hope different project have consistent behavior for those corner case.","commit_id":"11683bcafd9120d3127c6651d692ba0e92ef5989"},{"author":{"_account_id":18653,"name":"Milan Kováčik","email":"mkovacik@redhat.com","username":"dparalen"},"change_message_id":"2f690856f75ad870582ad9565c6fa24479f75200","unresolved":false,"context_lines":[{"line_number":162,"context_line":"To obtain items that finished between 15:30 and 16:00 UTC Today use an"},{"line_number":163,"context_line":"interval with two boundaries::"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"  GET /app/items?finished_at\u003dge:15:30\u0026finished_at\u003dlt:16:00"},{"line_number":166,"context_line":"  {"},{"line_number":167,"context_line":"    \"items\": ["},{"line_number":168,"context_line":"      {\"id\": \"item1\", \"started_at\": \"2016-10-10T15:00Z\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"ba5da102_c29993d2","line":165,"range":{"start_line":165,"start_character":17,"end_line":165,"end_character":58},"in_reply_to":"ba5da102_7e7dc9b0","updated":"2016-11-04 10:50:52.000000000","message":"Alex, no extra logic is intended to be applied here besides the conjunction of the operators. It\u0027s up to the user to specify a sensible interval; there\u0027s no simple way a service might guess what the user had in their mind posting a request.","commit_id":"11683bcafd9120d3127c6651d692ba0e92ef5989"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"5882d8ae9ffb38900903368013c7ed9966995de2","unresolved":false,"context_lines":[{"line_number":162,"context_line":"To obtain items that finished between 15:30 and 16:00 UTC Today use an"},{"line_number":163,"context_line":"interval with two boundaries::"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"  GET /app/items?finished_at\u003dge:15:30\u0026finished_at\u003dlt:16:00"},{"line_number":166,"context_line":"  {"},{"line_number":167,"context_line":"    \"items\": ["},{"line_number":168,"context_line":"      {\"id\": \"item1\", \"started_at\": \"2016-10-10T15:00Z\","}],"source_content_type":"text/x-rst","patch_set":8,"id":"9a629dbe_01891b75","line":165,"range":{"start_line":165,"start_character":17,"end_line":165,"end_character":58},"in_reply_to":"ba5da102_c29993d2","updated":"2016-11-10 15:45:04.000000000","message":"I think the issue that Alex is raising is how we handle such an event. Should we a) ignore the extra, or b) raise a 400 for an invalid request?","commit_id":"11683bcafd9120d3127c6651d692ba0e92ef5989"}]}
