This is an automated email from the ASF dual-hosted git repository.

doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/master by this push:
     new 990d6614 EMPIREDB-431 DBMSHandlerMssql: implement skipRows
990d6614 is described below

commit 990d66140b46d4a9a6e0da5ad4d3bdb45be67e51
Author: Rainer Döbele <[email protected]>
AuthorDate: Thu Jan 16 17:09:53 2025 +0100

    EMPIREDB-431
    DBMSHandlerMssql: implement skipRows
---
 .../jakarta/controls/TextAreaInputControl.java     |  7 +++--
 .../empire/jsf2/controls/TextAreaInputControl.java |  5 +++-
 .../empire/dbms/sqlserver/DBMSHandlerMSSQL.java    | 34 ++++++++++++++++++++--
 3 files changed, 40 insertions(+), 6 deletions(-)

diff --git 
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/TextAreaInputControl.java
 
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/TextAreaInputControl.java
index fae1f864..6d8aaa8b 100644
--- 
a/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/TextAreaInputControl.java
+++ 
b/empire-db-jakarta-faces/src/main/java/org/apache/empire/jakarta/controls/TextAreaInputControl.java
@@ -125,9 +125,12 @@ public class TextAreaInputControl extends InputControl
     }
 
     @Override
-    protected String formatValue(Object value, ValueInfo vi)
+    public String formatValue(Object value, ValueInfo vi, boolean escapeHtml)
     {
-        String strVal = super.formatValue(value, vi);
+        // escape
+        String strVal = super.formatValue(value, vi, escapeHtml);
+        if (!escapeHtml)
+            return strVal;
         // replace CR/LF by <BR/>
         if (strVal.indexOf("\r\n")>0)
         {   // replace CR with <BR/>
diff --git 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaInputControl.java
 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaInputControl.java
index 4c6c762d..d2e3ed0b 100644
--- 
a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaInputControl.java
+++ 
b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaInputControl.java
@@ -127,7 +127,10 @@ public class TextAreaInputControl extends InputControl
     @Override
     public String formatValue(Object value, ValueInfo vi, boolean escapeHtml)
     {
-        String strVal = super.formatValue(value, vi, true);
+        // escape
+        String strVal = super.formatValue(value, vi, escapeHtml);
+        if (!escapeHtml)
+            return strVal;
         // replace CR/LF by <BR/>
         if (strVal.indexOf("\r\n")>0)
         {   // replace CR with <BR/>
diff --git 
a/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/DBMSHandlerMSSQL.java
 
b/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/DBMSHandlerMSSQL.java
index 1235d85f..dd86a5b7 100644
--- 
a/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/DBMSHandlerMSSQL.java
+++ 
b/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/DBMSHandlerMSSQL.java
@@ -65,6 +65,7 @@ public class DBMSHandlerMSSQL extends DBMSHandlerBase
     {
         // *Deprecated* private static final long serialVersionUID = 1L;
         protected int limit = -1;
+        protected int skipRows = -1;
 
         public DBCommandMSSQL(DBMSHandlerMSSQL dbms, boolean autoPrepareStmt)
        {
@@ -77,11 +78,38 @@ public class DBMSHandlerMSSQL extends DBMSHandlerBase
             limit = numRows;
             return this;
         }
-         
+
+        @Override
+        public DBCommand skipRows(int skipRows)
+        {
+            this.skipRows = skipRows;
+            return this;
+        }
+        
         @Override
         public void clearLimit()
         {
-            limit = -1;
+            this.limit = -1;
+            this.skipRows = -1;
+        }
+        
+        @Override
+        public void getSelect(DBSQLBuilder sql, int flags)
+        {
+            super.getSelect(sql, flags);
+            // add skip rows
+            if (skipRows>=0 && not(flags, SF_SKIP_LIMIT)) {
+                // OFFSET 50 ROWS FETCH NEXT 25 ROWS ONLY
+                sql.append("\r\nOFFSET ");
+                sql.append(String.valueOf(this.skipRows));
+                sql.append(" ROWS");
+                if (limit>=0)
+                {   // Limit
+                    sql.append(" FETCH NEXT ");
+                    sql.append(String.valueOf(limit));
+                    sql.append(" ROWS ONLY");
+                }
+            }
         }
         
         @Override
@@ -92,7 +120,7 @@ public class DBMSHandlerMSSQL extends DBMSHandlerBase
             if (selectDistinct)
                 sql.append("DISTINCT ");
             // Add limit
-            if (limit>=0)
+            if (limit>=0 && skipRows<0)
             {   // Limit
                 sql.append("TOP ");
                 sql.append(String.valueOf(limit));

Reply via email to