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);