You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2014/05/14 17:35:38 UTC

svn commit: r1594604 - in /jena/trunk/jena-arq/src: main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java

Author: rvesse
Date: Wed May 14 15:35:38 2014
New Revision: 1594604

URL: http://svn.apache.org/r1594604
Log:
Fix for JENA-695, allow variable names in CSV input to be enclosed in quotes

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java
    jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java?rev=1594604&r1=1594603&r2=1594604&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/CSVInput.java Wed May 14 15:35:38 2014
@@ -75,6 +75,10 @@ public class CSVInput
                 String[] tokens = str.split(",") ;
                 for ( String token : tokens ) 
                 {
+                	// It is perfectly valid for a variable name to be enclosed in quotes as part of CSV encoding even
+                	// though legal variable names should not contain a character which would require this
+                	if (token.startsWith("\"") && token.endsWith("\"")) token = token.substring(1, token.length() - 1);
+                	
                     Var var = Var.alloc(token);
                     vars.add(var);
                     varNames.add(var.getName());
@@ -110,6 +114,10 @@ public class CSVInput
     		if (str == null) throw new ARQException("CSV Boolean Results malformed, unexpected end of input after header row");
     		str = str.trim();
     		
+        	// It is perfectly valid for a variable name to be enclosed in quotes as part of CSV encoding even
+        	// though legal variable names should not contain a character which would require this
+        	if (str.startsWith("\"") && str.endsWith("\"")) str = str.substring(1, str.length() - 1);
+    		
     		if (str.equalsIgnoreCase("true") || str.equalsIgnoreCase("yes")) {
     			return true;
     		} else if (str.equalsIgnoreCase("false") || str.equalsIgnoreCase("no")) {

Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java?rev=1594604&r1=1594603&r2=1594604&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/resultset/TestResultSetFormat2.java Wed May 14 15:35:38 2014
@@ -298,6 +298,20 @@ public class TestResultSetFormat2 {
         String x = "?x\t?y\n";
         parseTSVAsBoolean(x, false);
     }
+    
+    @Test
+    public void resultset_csv_01() {
+    	// Normal header
+    	String x = "x,y\n";
+    	parseCSV(x);
+    }
+    
+    @Test
+    public void resultset_csv_02() {
+    	// Header with variable names using CSV field encoding i.e. surrounded by quotes
+    	String x = "\"x\",\"y\"\n";
+    	parseCSV(x);
+    }
 
     @Test
     public void resultset_json_01() {
@@ -360,6 +374,16 @@ public class TestResultSetFormat2 {
             rs2.nextBinding();
         }
     }
+    
+    private void parseCSV(String x) {
+    	byte[] b = StrUtils.asUTF8bytes(x);
+    	ByteArrayInputStream in = new ByteArrayInputStream(b);
+    	ResultSet rs2 = CSVInput.fromCSV(in);
+    	
+    	while (rs2.hasNext()) {
+    		rs2.nextBinding();
+    	}
+    }
 
     private void parseJSON(String input) {
         byte[] b = StrUtils.asUTF8bytes(input);