Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issues with paging backwards #67

Closed
johnrodey opened this issue Feb 21, 2012 · 1 comment
Closed

Issues with paging backwards #67

johnrodey opened this issue Feb 21, 2012 · 1 comment
Labels

Comments

@johnrodey
Copy link

Using 1.2.2

  1. Cannot page back to page 1.
  2. Using links behaves differently from using the page request directly.

This sample code illustrates how page 2 repeats again instead of paging back to page 1

  public void simpleTest1() {
try {
  ViewQuery query = new ViewQuery();
  query.viewName("byUserName");
  query.designDocId("_design/MyDocument");
  query.key("client_a");

  CouchDbConnector dbConnector = new StdCouchDbConnector("mydb", new StdCouchDbInstance(new StdHttpClient.Builder().url("http://localhost:5984").build()));

  PageRequest pageRequest = PageRequest.firstPage(5);

  Page<JsonNode> page = dbConnector.queryForPage(query, pageRequest, JsonNode.class);
  List<JsonNode> list = page.getRows();
  System.out.println("Page 1");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, page.getNextPageRequest(), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 2");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, page.getNextPageRequest(), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 3");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, page.getNextPageRequest(), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 4");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, page.getPreviousPageRequest(), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 3");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, page.getPreviousPageRequest(), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 2");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, page.getPreviousPageRequest(), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 1");
  for (JsonNode node : list) {
    System.out.println(node);
  }

} catch (Exception e) {
  e.printStackTrace();
}
    }

OUTPUTS:
Page 1
{"_id":"1329759612408"}
{"_id":"1329759622144"}
{"_id":"1329759622300"}
{"_id":"1329759622456"}
{"_id":"1329759622612"}
Page 2
{"_id":"1329759622752"}
{"_id":"1329759622908"}
{"_id":"1329759623064"}
{"_id":"1329759623252"}
{"_id":"1329759623361"}
Page 3
{"_id":"1329759623517"}
{"_id":"1329759623658"}
{"_id":"1329759623829"}
{"_id":"1329759624345"}
{"_id":"1329759624532"}
Page 4
{"_id":"1329759624704"}
{"_id":"1329759624876"}
{"_id":"1329759625032"}
Page 3
{"_id":"1329759623517"}
{"_id":"1329759623658"}
{"_id":"1329759623829"}
{"_id":"1329759624345"}
{"_id":"1329759624532"}
Page 2
{"_id":"1329759622752"}
{"_id":"1329759622908"}
{"_id":"1329759623064"}
{"_id":"1329759623252"}
{"_id":"1329759623361"}
Page 1
{"_id":"1329759622752"} //REPEAT ISSUE
{"_id":"1329759622908"}
{"_id":"1329759623064"}
{"_id":"1329759623252"}
{"_id":"1329759623361"}

This sample code illustrates how using links while back paging does not return pages in same order as forward paging:

    public void simpleTest2() {
try {
  ViewQuery query = new ViewQuery();
  query.viewName("byUserName");
  query.designDocId("_design/MyDocument");
  query.key("client_a");

  CouchDbConnector dbConnector = new StdCouchDbConnector("mydb", new StdCouchDbInstance(new StdHttpClient.Builder().url("http://localhost:5984").build()));

  PageRequest pageRequest = PageRequest.firstPage(5);

  Page<JsonNode> page = dbConnector.queryForPage(query, pageRequest, JsonNode.class);
  List<JsonNode> list = page.getRows();
  System.out.println("Page 1");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, PageRequest.fromLink(page.getNextPageRequest().asLink()), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 2");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, PageRequest.fromLink(page.getNextPageRequest().asLink()), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 3");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, PageRequest.fromLink(page.getNextPageRequest().asLink()), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 4");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, PageRequest.fromLink(page.getPreviousPageRequest().asLink()), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 3");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, PageRequest.fromLink(page.getPreviousPageRequest().asLink()), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 2");
  for (JsonNode node : list) {
    System.out.println(node);
  }

  page = dbConnector.queryForPage(query, PageRequest.fromLink(page.getPreviousPageRequest().asLink()), JsonNode.class);
  list = page.getRows();
  System.out.println("Page 1");
  for (JsonNode node : list) {
    System.out.println(node);
  }

} catch (Exception e) {
  e.printStackTrace();
}
    }

OUTPUTS:
Page 1
{"_id":"1329759612408"}
{"_id":"1329759622144"}
{"_id":"1329759622300"}
{"_id":"1329759622456"}
{"_id":"1329759622612"}
Page 2
{"_id":"1329759622752"}
{"_id":"1329759622908"}
{"_id":"1329759623064"}
{"_id":"1329759623252"}
{"_id":"1329759623361"}
Page 3
{"_id":"1329759623517"}
{"_id":"1329759623658"}
{"_id":"1329759623829"}
{"_id":"1329759624345"}
{"_id":"1329759624532"}
Page 4
{"_id":"1329759624704"}
{"_id":"1329759624876"}
{"_id":"1329759625032"}
Page 3
{"_id":"1329759622752"} //DIFFERS FROM PAGE 3 BEFORE
{"_id":"1329759622908"}
{"_id":"1329759623064"}
{"_id":"1329759623252"}
{"_id":"1329759623361"}
Page 2
{"_id":"1329759623517"} //DIFFERS FROM PAGE 2 BEFORE
{"_id":"1329759623658"}
{"_id":"1329759623829"}
{"_id":"1329759624345"}
{"_id":"1329759624532"}
Page 1
{"_id":"1329759623517"} //STILL HAS REPEAT ISSUE
{"_id":"1329759623658"}
{"_id":"1329759623829"}
{"_id":"1329759624345"}
{"_id":"1329759624532"}

@helun helun closed this as completed in 8c89cc3 May 30, 2012
@cberkeley
Copy link

I am seeing a similar issue with version 1.4.2 using links to build the PageRequest and having > 2 pages. Going forward and back work fine until you get to the last page and then the previousLink does not go back to the correct page. I haven't tried it yet but it looks like the second example above would reproduce the issue if you had more than 2 pages. Should I submit this as a new issue or can this one be re-opened?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants