[libpostgresql-jdbc-java] 07/09: Make code that parses queries for updateable resultsets aware of the ONLY clause.

Emmanuel Bourg ebourg-guest at moszumanska.debian.org
Mon Jan 9 10:20:08 UTC 2017


This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to tag REL8_1_411
in repository libpostgresql-jdbc-java.

commit 5f3b6015dca82d1a3d143641009b3eba57f7ea10
Author: Kris Jurka <books at ejurka.com>
Date:   Tue Nov 27 19:33:22 2007 +0000

    Make code that parses queries for updateable resultsets aware of the
    ONLY clause.
    
    Oleg Vasylenko + me
---
 org/postgresql/jdbc2/AbstractJdbc2ResultSet.java    | 11 ++++++++---
 org/postgresql/test/jdbc2/UpdateableResultTest.java | 13 ++++++++++++-
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java b/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
index f45d1a9..189b975 100644
--- a/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
+++ b/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java
@@ -46,6 +46,7 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
     private boolean usingOID = false; // are we using the OID for the primary key?
     private Vector primaryKeys;    // list of primary keys
     private boolean singleTable = false;
+    private String onlyTable = "";
     private String tableName = null;
     private PreparedStatement updateStatement = null;
     private PreparedStatement insertStatement = null;
@@ -733,7 +734,7 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
         {
 
 
-            StringBuffer deleteSQL = new StringBuffer("DELETE FROM " ).append(tableName).append(" where " );
+            StringBuffer deleteSQL = new StringBuffer("DELETE FROM " ).append(onlyTable).append(tableName).append(" where " );
 
             for ( int i = 0; i < numKeys; i++ )
             {
@@ -1171,7 +1172,7 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
             }
 
         }
-        selectSQL.append(" from " ).append(tableName).append(" where ");
+        selectSQL.append(" from " ).append(onlyTable).append(tableName).append(" where ");
 
         int numKeys = primaryKeys.size();
 
@@ -1238,7 +1239,7 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
             try
             {
 
-                StringBuffer updateSQL = new StringBuffer("UPDATE " + tableName + " SET  ");
+                StringBuffer updateSQL = new StringBuffer("UPDATE " + onlyTable + tableName + " SET  ");
 
                 int numColumns = updateValues.size();
                 Iterator columns = updateValues.keySet().iterator();
@@ -1665,6 +1666,10 @@ public abstract class AbstractJdbc2ResultSet implements BaseResultSet, org.postg
                 if (name.toLowerCase().equals("from"))
                 {
                     tableName = st.nextToken();
+                    if (tableName.toLowerCase().equals("only")) {
+                        tableName = st.nextToken();
+                        onlyTable = "ONLY ";
+                    }
                     tableFound = true;
                 }
             }
diff --git a/org/postgresql/test/jdbc2/UpdateableResultTest.java b/org/postgresql/test/jdbc2/UpdateableResultTest.java
index 6fd49c0..f988780 100644
--- a/org/postgresql/test/jdbc2/UpdateableResultTest.java
+++ b/org/postgresql/test/jdbc2/UpdateableResultTest.java
@@ -428,7 +428,18 @@ public class UpdateableResultTest extends TestCase
         rs.moveToInsertRow();
         rs.close();
         st.close();
-    }        
+    }
+
+    public void testUpdateSelectOnly() throws Exception
+    {
+        Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
+                                           ResultSet.CONCUR_UPDATABLE);
+
+        ResultSet rs = st.executeQuery( "select * from only second");
+        assertTrue(rs.next());
+        rs.updateInt(1, 2);
+        rs.updateRow();
+    }
 
     public void testUpdateReadOnlyResultSet() throws Exception
     {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git



More information about the pkg-java-commits mailing list