diff --git a/db.core/src/org/netbeans/modules/db/sql/loader/SQLEditorSupport.java b/db.core/src/org/netbeans/modules/db/sql/loader/SQLEditorSupport.java --- a/db.core/src/org/netbeans/modules/db/sql/loader/SQLEditorSupport.java +++ b/db.core/src/org/netbeans/modules/db/sql/loader/SQLEditorSupport.java @@ -602,8 +602,8 @@ LOGGER.log(Level.FINE, "Closing the old execution result"); // NOI18N } - int pageSize = -1; - if (parent.executionResults != null && parent.executionResults.size() > 0) { + int pageSize = DataViewPageContext.getDefaultPageSize(); + if (pageSize < 0 && parent.executionResults != null && parent.executionResults.size() > 0) { for (SQLExecutionResult res : parent.executionResults.getResults()) { int ps = DataViewPageContext.getPageSize(res.getDataView()); pageSize = (pageSize < ps ? ps : pageSize); diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/api/DataViewPageContext.java b/db.dataview/src/org/netbeans/modules/db/dataview/api/DataViewPageContext.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/api/DataViewPageContext.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/api/DataViewPageContext.java @@ -42,6 +42,7 @@ package org.netbeans.modules.db.dataview.api; +import org.netbeans.modules.db.dataview.options.DataViewSettings; import org.openide.util.NbPreferences; import org.openide.util.RequestProcessor; @@ -60,7 +61,7 @@ public static final int DEFAULT_PAGE_SIZE = 20; private static final String PROP_STORED_PAGE_SIZE = "storedPageSize"; //NOI18N - private static int defaultPageSize = -1; + private static int storedPageSize = -1; private DataViewPageContext() {} @@ -74,34 +75,43 @@ } /** + * Returns configured default page size. + * + * @return Page size + */ + public static int getDefaultPageSize() { + return DataViewSettings.getDefaultPageSize(); + } + + /** * Get stored or default page size. * - * @return Page size, positive integer, not zero; + * @return Page size, positive integer * @since 1.20 */ public static int getStoredPageSize() { - if (defaultPageSize <= 0) { - defaultPageSize = NbPreferences.forModule( + if (storedPageSize < 0) { + storedPageSize = NbPreferences.forModule( DataViewPageContext.class).getInt( PROP_STORED_PAGE_SIZE, DEFAULT_PAGE_SIZE); - if (defaultPageSize <= 0) { - defaultPageSize = DEFAULT_PAGE_SIZE; + if (storedPageSize < 0) { + storedPageSize = DEFAULT_PAGE_SIZE; } } - return defaultPageSize; + return storedPageSize; } /** * Store page size. * - * @param pageSize Page size, positive integer, not zero. + * @param pageSize Page size, positive integer * @since 1.20 */ public static void setStoredPageSize(final int pageSize) { - if (pageSize <= 0) { + if (pageSize < 0) { throw new IllegalArgumentException("Negative pageSize"); //NOI18N } - DataViewPageContext.defaultPageSize = pageSize; + DataViewPageContext.storedPageSize = pageSize; RequestProcessor.getDefault().post(new Runnable() { @Override public void run() { diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataView.java b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataView.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataView.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataView.java @@ -103,7 +103,7 @@ dv.dbConn = dbConn; dv.sqlString = sqlString.trim(); dv.nbOutputComponent = false; - if(pageSize > 0) { + if(pageSize >= 0) { dv.initialPageSize = pageSize; } try { diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewPageContext.java b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewPageContext.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewPageContext.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/output/DataViewPageContext.java @@ -46,6 +46,7 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import org.netbeans.modules.db.dataview.meta.DBColumn; +import org.netbeans.modules.db.dataview.options.DataViewSettings; import org.openide.util.Mutex; import org.openide.util.NbBundle; @@ -153,35 +154,47 @@ return model.getRowCount() > 0; } + boolean showAllRows() { + return pageSize == DataViewSettings.PAGE_SIZE_SHOW_ALL; + } + boolean hasNext() { + if (showAllRows()) { + return false; + } return (((currentPos + pageSize) <= totalRows) && hasRows()) || (totalRows < 0 && getModel().getRowCount() >= pageSize); } boolean hasOnePageOnly() { - return totalRows > 0 && totalRows < pageSize; + return showAllRows() || (totalRows > 0 && totalRows < pageSize); } boolean hasPrevious() { - return ((currentPos - pageSize) > 0) && hasRows(); + return !showAllRows() && ((currentPos - pageSize) > 0) && hasRows(); } boolean isLastPage() { - return ((currentPos + pageSize) > totalRows) && totalRows > 0; + return showAllRows() || (((currentPos + pageSize) > totalRows) && totalRows > 0); } boolean refreshRequiredOnInsert() { - return (isLastPage() && model.getRowCount() <= pageSize); + return showAllRows() || (isLastPage() && model.getRowCount() <= pageSize); } String pageOf() { String curPage = NbBundle.getMessage(DataViewUI.class, "LBL_not_available"); String totalPages = NbBundle.getMessage(DataViewUI.class, "LBL_not_available"); - if (pageSize >= 0 && currentPos >= 0) { + if (showAllRows()) { + curPage = "1"; + totalPages = "1"; + } + + if (pageSize > 0 && currentPos >= 0) { curPage = Integer.toString(currentPos / pageSize + (pageSize == 1 ? 0 : 1)); } - if (pageSize >= 0 && totalRows >= 0) { + if (pageSize > 0 && totalRows >= 0) { totalPages = Integer.toString(totalRows / pageSize + (totalRows % pageSize > 0 ? 1 : 0)); } return NbBundle.getMessage(DataViewPageContext.class, "LBL_page_of", curPage, totalPages); @@ -189,7 +202,7 @@ synchronized void decrementRowSize(int count) { setTotalRows(getTotalRows() - count); - if (totalRows <= pageSize) { + if (showAllRows() || totalRows <= pageSize) { first(); } else if (currentPos > totalRows) { previous(); @@ -198,7 +211,7 @@ synchronized void incrementRowSize(int count) { setTotalRows(getTotalRows() + count); - if (totalRows <= pageSize) { + if (showAllRows() || totalRows <= pageSize) { first(); } else if (currentPos > totalRows) { previous(); diff --git a/db.dataview/src/org/netbeans/modules/db/dataview/output/SQLExecutionHelper.java b/db.dataview/src/org/netbeans/modules/db/dataview/output/SQLExecutionHelper.java --- a/db.dataview/src/org/netbeans/modules/db/dataview/output/SQLExecutionHelper.java +++ b/db.dataview/src/org/netbeans/modules/db/dataview/output/SQLExecutionHelper.java @@ -67,6 +67,7 @@ import org.netbeans.modules.db.dataview.meta.DBException; import org.netbeans.modules.db.dataview.meta.DBMetaDataFactory; import org.netbeans.modules.db.dataview.meta.DBTable; +import org.netbeans.modules.db.dataview.options.DataViewSettings; import org.netbeans.modules.db.dataview.util.DBReadWriteHelper; import org.netbeans.modules.db.dataview.util.DataViewUtils; import org.openide.DialogDisplayer; @@ -756,7 +757,7 @@ // Get next page int rowCnt = 0; - while (((pageSize == -1) || (pageSize > rowCnt)) && (hasNext)) { + while (((pageSize <= 0) || (pageSize > rowCnt)) && (hasNext)) { if (Thread.currentThread().isInterrupted()) { return; } @@ -974,13 +975,11 @@ private String appendLimitIfRequired(DataViewPageContext pageContext, String sql) { - if (useScrollableCursors) { + int pageSize = pageContext == null ? dataView.getPageSize() : pageContext.getPageSize(); + if (pageSize == DataViewSettings.PAGE_SIZE_SHOW_ALL || useScrollableCursors) { return sql; } else if (limitSupported && isSelectStatement(sql) && !isLimitUsedInSelect(sql)) { - - int pageSize = pageContext == null ? dataView.getPageSize() - : pageContext.getPageSize(); int currentPos = pageContext == null ? 1 : pageContext.getCurrentPos(); return sql + ' ' + LIMIT_CLAUSE + pageSize diff --git a/db.dataview/test/unit/src/org/netbeans/modules/db/dataview/api/DataViewPageContextTest.java b/db.dataview/test/unit/src/org/netbeans/modules/db/dataview/api/DataViewPageContextTest.java --- a/db.dataview/test/unit/src/org/netbeans/modules/db/dataview/api/DataViewPageContextTest.java +++ b/db.dataview/test/unit/src/org/netbeans/modules/db/dataview/api/DataViewPageContextTest.java @@ -57,14 +57,14 @@ public void testSetGetPageSize() { int origSize = DataViewPageContext.getStoredPageSize(); - assertTrue(origSize > 0); + assertTrue(origSize > -1); int newSize = origSize + 1; DataViewPageContext.setStoredPageSize(newSize); assertEquals(newSize, DataViewPageContext.getStoredPageSize()); boolean exception = false; try { - DataViewPageContext.setStoredPageSize(0); + DataViewPageContext.setStoredPageSize(-1); } catch (IllegalArgumentException e) { exception = true; }