From 61a1899fc70a568e79b32c07a0e016cb8ebb1f10 Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Wed, 19 Feb 2014 12:13:52 +0200 Subject: Fix SQLContainer paging and caching issue (#11199) Change-Id: I884c0f0a27a124a49698b141ac63c93950df428d --- .../table/TableScrollingWithSQLContainer.java | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java (limited to 'uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java') diff --git a/uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java b/uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java new file mode 100644 index 0000000000..f6a6f24021 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java @@ -0,0 +1,74 @@ +package com.vaadin.tests.components.table; + +import java.sql.SQLException; + +import com.vaadin.data.util.sqlcontainer.DataGenerator; +import com.vaadin.data.util.sqlcontainer.SQLContainer; +import com.vaadin.data.util.sqlcontainer.SQLTestsConstants; +import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool; +import com.vaadin.data.util.sqlcontainer.query.QueryDelegate; +import com.vaadin.data.util.sqlcontainer.query.TableQuery; +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Button.ClickListener; +import com.vaadin.ui.Table; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; + +@SuppressWarnings("serial") +public class TableScrollingWithSQLContainer extends UI { + + /** Table should never end up calling indexOfId in this case */ + private class LimitedSQLContainer extends SQLContainer { + + public LimitedSQLContainer(QueryDelegate delegate) throws SQLException { + super(delegate); + } + + @Override + public int indexOfId(Object itemId) { + throw new RuntimeException("This function should not be called"); + } + } + + static final String TABLE = "table"; + + @Override + public void init(VaadinRequest request) { + try { + SimpleJDBCConnectionPool connectionPool = new SimpleJDBCConnectionPool( + SQLTestsConstants.dbDriver, SQLTestsConstants.dbURL, + SQLTestsConstants.dbUser, SQLTestsConstants.dbPwd, 2, 2); + DataGenerator.addPeopleToDatabase(connectionPool); + DataGenerator.addFiveThousandPeople(connectionPool); + + TableQuery query = new TableQuery("people", connectionPool, + SQLTestsConstants.sqlGen); + + SQLContainer container = new LimitedSQLContainer(query); + + final VerticalLayout rootLayout = new VerticalLayout(); + + final Table table = new Table(); + table.setContainerDataSource(container); + table.setCurrentPageFirstItemIndex(300); + rootLayout.addComponent(table); + + table.setImmediate(true); + + rootLayout.addComponent(new Button("GOTO 200", new ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + table.setCurrentPageFirstItemIndex(200); + } + })); + + setContent(rootLayout); + + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file -- cgit v1.2.3 From a73c9efcfd3f9897c3feb56160345ffa4ccfc156 Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Tue, 25 Feb 2014 12:31:29 +0200 Subject: Fix broken TableScrollingWithSQLContainer test UI Change-Id: I67bcb7a473d147c46e24cb3c116fd9115a3bda6b --- .../table/TableScrollingWithSQLContainer.java | 39 ++++++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to 'uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java') diff --git a/uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java b/uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java index f6a6f24021..764207ff13 100644 --- a/uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java +++ b/uitest/src/com/vaadin/tests/components/table/TableScrollingWithSQLContainer.java @@ -1,13 +1,15 @@ package com.vaadin.tests.components.table; +import java.sql.Connection; import java.sql.SQLException; +import java.sql.Statement; -import com.vaadin.data.util.sqlcontainer.DataGenerator; import com.vaadin.data.util.sqlcontainer.SQLContainer; -import com.vaadin.data.util.sqlcontainer.SQLTestsConstants; +import com.vaadin.data.util.sqlcontainer.connection.JDBCConnectionPool; import com.vaadin.data.util.sqlcontainer.connection.SimpleJDBCConnectionPool; import com.vaadin.data.util.sqlcontainer.query.QueryDelegate; import com.vaadin.data.util.sqlcontainer.query.TableQuery; +import com.vaadin.data.util.sqlcontainer.query.generator.DefaultSQLGenerator; import com.vaadin.server.VaadinRequest; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; @@ -32,19 +34,42 @@ public class TableScrollingWithSQLContainer extends UI { } } + private void generateTestData(JDBCConnectionPool connectionPool) + throws SQLException { + Connection conn = connectionPool.reserveConnection(); + Statement statement = conn.createStatement(); + try { + statement.execute("drop table PEOPLE"); + } catch (SQLException e) { + // Will fail if table doesn't exist, which is OK. + conn.rollback(); + } + statement + .execute("create table people (id integer generated always as identity," + + " name varchar(32), AGE INTEGER)"); + statement.execute("alter table people add primary key (id)"); + for (int i = 0; i < 5000; i++) { + statement + .executeUpdate("insert into people values(default, 'Person " + + i + "', '" + i % 99 + "')"); + } + statement.close(); + conn.commit(); + connectionPool.releaseConnection(conn); + } + static final String TABLE = "table"; @Override public void init(VaadinRequest request) { try { SimpleJDBCConnectionPool connectionPool = new SimpleJDBCConnectionPool( - SQLTestsConstants.dbDriver, SQLTestsConstants.dbURL, - SQLTestsConstants.dbUser, SQLTestsConstants.dbPwd, 2, 2); - DataGenerator.addPeopleToDatabase(connectionPool); - DataGenerator.addFiveThousandPeople(connectionPool); + "org.hsqldb.jdbc.JDBCDriver", + "jdbc:hsqldb:mem:sqlcontainer", "SA", "", 2, 20); + generateTestData(connectionPool); TableQuery query = new TableQuery("people", connectionPool, - SQLTestsConstants.sqlGen); + new DefaultSQLGenerator()); SQLContainer container = new LimitedSQLContainer(query); -- cgit v1.2.3