From 0f44a4ddacd294cceda652e123a139d25ac1c4e9 Mon Sep 17 00:00:00 2001 From: RastislavHudak Date: Fri, 3 May 2013 12:35:25 +0300 Subject: [PATCH 1/7] Update Literal.java truncate too long strings to avoid db exceptions (and consequently loss of triple batch) --- .../java/org/nsdl/mptstore/rdf/Literal.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/nsdl/mptstore/rdf/Literal.java b/src/main/java/org/nsdl/mptstore/rdf/Literal.java index 46776df..83130b3 100644 --- a/src/main/java/org/nsdl/mptstore/rdf/Literal.java +++ b/src/main/java/org/nsdl/mptstore/rdf/Literal.java @@ -15,6 +15,9 @@ * RDF Concepts and Abstract Syntax, Section 6.5 */ public class Literal implements ObjectNode { + + /* Max length of the literal including language and datatype suffix. This should not be greater than the varchar size of the table column (uless the server truncates the string automatically). */ + private static final int LITERAL_MAXLEN = 255; /** * The lexical value of this literal. @@ -100,7 +103,24 @@ public String getValue() { public String toString() { StringBuffer out = new StringBuffer(); out.append('"'); - out.append(NTriplesUtil.escapeLiteralValue(_value)); + + // 2 is the length of "" and ... + int suffixLenght = 5; + if(_language != null){ + // it might be 2 or 3 letter code + suffixLenght += 1 + _language.length(); + } + if(_datatype != null){ + suffixLenght += 2 + _datatype.toString().length(); + } + + String escaped = NTriplesUtil.escapeLiteralValue(_value); + if(LITERAL_MAXLEN > 0 && escaped.length() > (LITERAL_MAXLEN-suffixLenght)){ + out.append(escaped.substring(0,(LITERAL_MAXLEN-suffixLenght))+"..."); + }else{ + out.append(escaped); + } + out.append('"'); if (_language != null) { out.append("@" + _language); From e7c5f0ef0c2c3043aeb3aed68f04b3d7cbf67877 Mon Sep 17 00:00:00 2001 From: Rastislav Hudak Date: Wed, 26 Jun 2013 15:44:26 +0200 Subject: [PATCH 2/7] literal truncate fix --- .../java/org/nsdl/mptstore/rdf/Literal.java | 22 +++++++++- .../org/nsdl/mptstore/util/NTriplesUtil.java | 41 ++++++++++++------- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/nsdl/mptstore/rdf/Literal.java b/src/main/java/org/nsdl/mptstore/rdf/Literal.java index 46776df..2fecd6e 100644 --- a/src/main/java/org/nsdl/mptstore/rdf/Literal.java +++ b/src/main/java/org/nsdl/mptstore/rdf/Literal.java @@ -16,6 +16,8 @@ */ public class Literal implements ObjectNode { + public static final int LITERAL_MAXLEN = 255; + /** * The lexical value of this literal. */ @@ -100,13 +102,31 @@ public String getValue() { public String toString() { StringBuffer out = new StringBuffer(); out.append('"'); - out.append(NTriplesUtil.escapeLiteralValue(_value)); + + // 5 is the length of "" and ... + int suffixLenght = 5; + if(_language != null){ + // it might be 2 or 3 letter code + suffixLenght += 1 + _language.length(); + } + if(_datatype != null){ + suffixLenght += 2 + _datatype.toString().length(); + } + + int stringMaxLenght = 0; + if(LITERAL_MAXLEN > 0){ + stringMaxLenght = LITERAL_MAXLEN-suffixLenght; + } + + out.append(NTriplesUtil.escapeAndTruncateLiteralValue(_value, stringMaxLenght)); + out.append('"'); if (_language != null) { out.append("@" + _language); } else if (_datatype != null) { out.append("^^" + _datatype.toString()); } + return out.toString(); } diff --git a/src/main/java/org/nsdl/mptstore/util/NTriplesUtil.java b/src/main/java/org/nsdl/mptstore/util/NTriplesUtil.java index 53a606e..c30072e 100644 --- a/src/main/java/org/nsdl/mptstore/util/NTriplesUtil.java +++ b/src/main/java/org/nsdl/mptstore/util/NTriplesUtil.java @@ -27,7 +27,7 @@ public abstract class NTriplesUtil { * Maximum characters for a language code subtag. */ private static final int SUBTAG_MAXLEN = 8; - + private static final int HIGHEST_ASCII_CHAR = 127; private static final int HEX = 16; private static final int SHORT_ESCAPE_LENGTH = 5; @@ -634,32 +634,43 @@ public static String unescapeLiteralValue(final String s) * @param s The input string. * @return The escaped string. */ - public static String escapeLiteralValue(final String s) { + public static String escapeAndTruncateLiteralValue(final String s, final int stringMaxLenght) { int len = s.length(); - StringBuffer out = new StringBuffer(len * 2); - + StringBuffer out = new StringBuffer(len * 2); + for (int i = 0; i < len; i++) { + + if(stringMaxLenght > 0 && (out.length() == stringMaxLenght)){ + return out.toString() + "..."; + } + + String app = ""; char c = s.charAt(i); int cNum = (int) c; if (c == '\\') { - out.append("\\\\"); + app = "\\\\"; } else if (c == '"') { - out.append("\\\""); + app = "\\\""; } else if (c == '\n') { - out.append("\\n"); + app = "\\n"; } else if (c == '\r') { - out.append("\\r"); + app = "\\r"; } else if (c == '\t') { - out.append("\\t"); + app = "\\t"; } else if (isLowUnicode(cNum)) { - out.append("\\u"); - out.append(hexString(cNum, SHORT_ESCAPE_LENGTH - 1)); + app = "\\u" + hexString(cNum, SHORT_ESCAPE_LENGTH - 1); } else if (isHighUnicode(cNum)) { - out.append("\\U"); - out.append(hexString(cNum, LONG_ESCAPE_LENGTH - 2)); - } else { - out.append(c); + app = "\\U" + hexString(cNum, LONG_ESCAPE_LENGTH - 2); + } else { + out.append(c); + continue; + } + + if(stringMaxLenght > 0 && (out.length() + app.length() > stringMaxLenght)){ + return out.toString() + "..."; + }else{ + out.append(app); } } From f193d33c029d73b101ea43c7c98981710bff07de Mon Sep 17 00:00:00 2001 From: rasta Date: Wed, 7 Oct 2015 11:38:46 +0200 Subject: [PATCH 3/7] tmap -> tMap --- .../nsdl/mptstore/query/provider/GraphQuerySQLProvider.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/nsdl/mptstore/query/provider/GraphQuerySQLProvider.java b/src/main/java/org/nsdl/mptstore/query/provider/GraphQuerySQLProvider.java index e1c423c..b39e633 100644 --- a/src/main/java/org/nsdl/mptstore/query/provider/GraphQuerySQLProvider.java +++ b/src/main/java/org/nsdl/mptstore/query/provider/GraphQuerySQLProvider.java @@ -891,12 +891,12 @@ public MPTable mapPredicateTable( if (tableName == null) { /* No predicate found.. create table that returns no results */ alias = "np_" + nonexistantMappings.size(); - tableName = "(SELECT p AS s, p AS o from tmap where 1=0)"; + tableName = "(SELECT p AS s, p AS o from tMap where 1=0)"; if (!nonexistantMappings.containsKey(predicate.getNode())) { alias = "np_" + nonexistantMappings.size(); LOG.debug("No table for '" + predicate.getNode() + "'. Using empty table as " + alias); - tableName = "(SELECT p AS s, p AS o from tmap where 1=0)"; + tableName = "(SELECT p AS s, p AS o from tMap where 1=0)"; nonexistantMappings.put(predicate.getNode(), new MPTable( tableName, alias)); predicateMap.put(predicate.getNode().toString(), From 5f98a12b1670d0fce9d28a18421faa661048ad50 Mon Sep 17 00:00:00 2001 From: rasta Date: Wed, 7 Oct 2015 14:33:05 +0200 Subject: [PATCH 4/7] info -> debug --- .../nsdl/mptstore/query/provider/TriplePatternSQLProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/nsdl/mptstore/query/provider/TriplePatternSQLProvider.java b/src/main/java/org/nsdl/mptstore/query/provider/TriplePatternSQLProvider.java index c5b6eab..2958f99 100644 --- a/src/main/java/org/nsdl/mptstore/query/provider/TriplePatternSQLProvider.java +++ b/src/main/java/org/nsdl/mptstore/query/provider/TriplePatternSQLProvider.java @@ -118,7 +118,7 @@ private void addSelect(final PredicateNode predicate) { } String sqlString = select.toString(); - LOG.info("Generated query:\n" + sqlString); + LOG.debug("Generated query:\n" + sqlString); _sql.add(sqlString); } } From 86d2aa25baa36ddbbc80813648cbcd31e0941a8c Mon Sep 17 00:00:00 2001 From: rasta Date: Wed, 7 Oct 2015 14:36:00 +0200 Subject: [PATCH 5/7] info -> debug --- .../java/org/nsdl/mptstore/query/SQLUnionQueryResults.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/nsdl/mptstore/query/SQLUnionQueryResults.java b/src/main/java/org/nsdl/mptstore/query/SQLUnionQueryResults.java index c248711..8994dad 100644 --- a/src/main/java/org/nsdl/mptstore/query/SQLUnionQueryResults.java +++ b/src/main/java/org/nsdl/mptstore/query/SQLUnionQueryResults.java @@ -178,10 +178,10 @@ private void startNextQuery() throws SQLException { _statement.setFetchSize(_fetchSize); _statement.setFetchDirection(ResultSet.FETCH_FORWARD); String query = _queries.next(); - LOG.info("Executing query:\n" + query); + LOG.debug("Executing query:\n" + query); _results = _statement.executeQuery(query); } else { - LOG.info("Finished executing all queries"); + LOG.debug("Finished executing all queries"); close(); // proactively close if no more queries _results = null; } From f4a8eb7446e262af06aacf1910a0caa96ccb938d Mon Sep 17 00:00:00 2001 From: rasta Date: Wed, 7 Oct 2015 16:01:05 +0200 Subject: [PATCH 6/7] yuri says this resolves oracle com.oracle:ojdbc6:jar:11.1.0.7.0 dependency problem --- pom.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dcdfa39..4eb36fe 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,14 @@ ${maven.build.timestamp} + + + + codelds + https://maven.nuxeo.org/nexus/content/groups/public/ + + + @@ -530,4 +538,4 @@ - \ No newline at end of file + From 2a97be7cd7be9d6df95b7d32c68d7cc7d8456135 Mon Sep 17 00:00:00 2001 From: rasta Date: Wed, 7 Oct 2015 16:02:42 +0200 Subject: [PATCH 7/7] yuri's wisdom --- README_BUILD.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README_BUILD.txt diff --git a/README_BUILD.txt b/README_BUILD.txt new file mode 100644 index 0000000..519daf7 --- /dev/null +++ b/README_BUILD.txt @@ -0,0 +1,3 @@ +build using: +mvn -Dmaven.test.skip=true -U clean package +to skip tests