Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-18 Thread Till Westmann (Code Review)
Till Westmann has submitted this change and it was merged.

Change subject: Easier to read parser errors for SQL++
..


Easier to read parser errors for SQL++

Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1182
Tested-by: Jenkins 
Integration-Tests: Jenkins 
Reviewed-by: abdullah alamoudi 
---
M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
3 files changed, 135 insertions(+), 9 deletions(-)

Approvals:
  abdullah alamoudi: Looks good to me, approved
  Jenkins: Verified; Verified

Objections:
  Jenkins: Violations found



diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml 
b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 54f06e6..c19593b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -3163,7 +3163,7 @@
   
 
   missing-optionality
-  "?"
+  string) enforced
 
   
   
diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
index dc0fa93..07aa473 100644
--- 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
@@ -29,6 +29,10 @@
 
 public class ScopeChecker {
 
+protected static String quot = "\"";
+
+protected String eol = System.getProperty("line.separator", "\n");
+
 protected Counter varCounter = new Counter(-1);
 
 protected Stack scopeStack = new Stack();
@@ -57,7 +61,6 @@
 /**
  * Create a new scope, using the top scope in scopeStack as parent scope
  *
- * @param scopeStack
  * @return new scope
  */
 public final Scope createNewScope() {
@@ -70,7 +73,6 @@
 /**
  * Extend the current scope
  *
- * @param scopeStack
  * @return
  */
 public final Scope extendCurrentScope() {
@@ -172,7 +174,88 @@
 return false;
 }
 
-public static final String removeQuotesAndEscapes(String s) {
+protected int appendExpected(StringBuilder expected, int[][] 
expectedTokenSequences, String[] tokenImage) {
+int maxSize = 0;
+for (int i = 0; i < expectedTokenSequences.length; i++) {
+if (maxSize < expectedTokenSequences[i].length) {
+maxSize = expectedTokenSequences[i].length;
+}
+for (int j = 0; j < expectedTokenSequences[i].length; j++) {
+append(expected, 
fixQuotes(tokenImage[expectedTokenSequences[i][j]]));
+append(expected, " ");
+}
+if (expectedTokenSequences[i][expectedTokenSequences[i].length - 
1] != 0) {
+append(expected, "...");
+}
+append(expected, eol);
+append(expected, "");
+}
+return maxSize;
+}
+
+private void append(StringBuilder expected, String str) {
+if (expected != null) {
+expected.append(str);
+}
+}
+
+protected String fixQuotes(String token) {
+final int last = token.length() - 1;
+if (token.charAt(0) == '"' && token.charAt(last) == '"') {
+return "'" + token.substring(1, last) + "'";
+} else {
+return token;
+}
+}
+
+protected static String addEscapes(String str) {
+StringBuilder escaped = new StringBuilder();
+for (int i = 0; i < str.length(); i++) {
+appendChar(escaped, str.charAt(i));
+}
+return escaped.toString();
+}
+
+private static void appendChar(StringBuilder escaped, char c) {
+char ch;
+switch (c) {
+case 0:
+return;
+case '\b':
+escaped.append("\\b");
+return;
+case '\t':
+escaped.append("\\t");
+return;
+case '\n':
+escaped.append("\\n");
+return;
+case '\f':
+escaped.append("\\f");
+return;
+case '\r':
+escaped.append("\\r");
+return;
+case '\"':
+escaped.append("\\\"");
+return;
+case '\'':
+escaped.append("\\\'");
+return;
+case '\\':
+escaped.append("");
+return;
+default:
+if ((

Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-18 Thread abdullah alamoudi (Code Review)
abdullah alamoudi has posted comments on this change.

Change subject: Easier to read parser errors for SQL++
..


Patch Set 3: Code-Review+2

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1182
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Gerrit-PatchSet: 3
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann 
Gerrit-Reviewer: Jenkins 
Gerrit-Reviewer: Yingyi Bu 
Gerrit-Reviewer: abdullah alamoudi 
Gerrit-HasComments: No


Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-17 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: Easier to read parser errors for SQL++
..


Patch Set 3: Integration-Tests+1

Integration Tests Successful

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/665/ : 
SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1182
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Gerrit-PatchSet: 3
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann 
Gerrit-Reviewer: Jenkins 
Gerrit-HasComments: No


Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-17 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: Easier to read parser errors for SQL++
..


Patch Set 3:

Integration Tests Started 
https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/665/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1182
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Gerrit-PatchSet: 3
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann 
Gerrit-Reviewer: Jenkins 
Gerrit-HasComments: No


Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-17 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: Easier to read parser errors for SQL++
..


Patch Set 3:

Build Started 
https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/2679/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1182
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Gerrit-PatchSet: 3
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann 
Gerrit-Reviewer: Jenkins 
Gerrit-HasComments: No


Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-17 Thread Till Westmann (Code Review)
Hello Jenkins,

I'd like you to reexamine a change.  Please visit

https://asterix-gerrit.ics.uci.edu/1182

to look at the new patch set (#3).

Change subject: Easier to read parser errors for SQL++
..

Easier to read parser errors for SQL++

Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
---
M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
3 files changed, 135 insertions(+), 9 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/82/1182/3
-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1182
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Gerrit-PatchSet: 3
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann 
Gerrit-Reviewer: Jenkins 


Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-17 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: Easier to read parser errors for SQL++
..


Patch Set 2:

Integration Tests Started 
https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/664/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1182
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann 
Gerrit-Reviewer: Jenkins 
Gerrit-HasComments: No


Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-17 Thread Till Westmann (Code Review)
Hello Jenkins,

I'd like you to reexamine a change.  Please visit

https://asterix-gerrit.ics.uci.edu/1182

to look at the new patch set (#2).

Change subject: Easier to read parser errors for SQL++
..

Easier to read parser errors for SQL++

Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
---
M asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
3 files changed, 131 insertions(+), 7 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/82/1182/2
-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1182
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann 
Gerrit-Reviewer: Jenkins 


Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-17 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: Easier to read parser errors for SQL++
..


Patch Set 2:

Build Started 
https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/2678/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1182
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann 
Gerrit-Reviewer: Jenkins 
Gerrit-HasComments: No


Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-16 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: Easier to read parser errors for SQL++
..


Patch Set 1:

Build Started 
https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/2673/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1182
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann 
Gerrit-Reviewer: Jenkins 
Gerrit-HasComments: No


Change in asterixdb[master]: Easier to read parser errors for SQL++

2016-09-16 Thread Till Westmann (Code Review)
Till Westmann has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/1182

Change subject: Easier to read parser errors for SQL++
..

Easier to read parser errors for SQL++

Change-Id: I13fd54fe2b1237b937a1706cf83fb47ce536b546
---
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
2 files changed, 130 insertions(+), 6 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/82/1182/1

diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
index dc0fa93..4c4766a 100644
--- 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/parser/ScopeChecker.java
@@ -29,6 +29,9 @@
 
 public class ScopeChecker {
 
+protected static String QUOT = "\"";
+protected static String NL = "\n";
+
 protected Counter varCounter = new Counter(-1);
 
 protected Stack scopeStack = new Stack();
@@ -57,7 +60,6 @@
 /**
  * Create a new scope, using the top scope in scopeStack as parent scope
  *
- * @param scopeStack
  * @return new scope
  */
 public final Scope createNewScope() {
@@ -70,7 +72,6 @@
 /**
  * Extend the current scope
  *
- * @param scopeStack
  * @return
  */
 public final Scope extendCurrentScope() {
@@ -172,6 +173,86 @@
 return false;
 }
 
+protected String eol = System.getProperty("line.separator", NL);
+
+protected int appendExpected(StringBuilder expected, int[][] 
expectedTokenSequences, String[] tokenImage) {
+int maxSize = 0;
+for (int i = 0; i < expectedTokenSequences.length; i++) {
+if (maxSize < expectedTokenSequences[i].length) {
+maxSize = expectedTokenSequences[i].length;
+}
+for (int j = 0; j < expectedTokenSequences[i].length; j++) {
+append(expected, 
fixQuotes(tokenImage[expectedTokenSequences[i][j]]));
+append(expected, " ");
+}
+if (expectedTokenSequences[i][expectedTokenSequences[i].length - 
1] != 0) {
+append(expected, "...");
+}
+append(expected, eol);
+append(expected, "");
+}
+return maxSize;
+}
+
+private void append(StringBuilder expected, String str) {
+if (expected != null) {
+expected.append(str);
+}
+}
+
+protected String fixQuotes(String token) {
+final int last = token.length() - 1;
+if (token.charAt(0) == '"' && token.charAt(last) == '"') {
+return "'" + token.substring(1, last) + "'";
+} else {
+return token;
+}
+}
+
+protected static String addEscapes(String str) {
+StringBuilder retval = new StringBuilder();
+char ch;
+for (int i = 0; i < str.length(); i++) {
+switch (str.charAt(i)) {
+case 0:
+continue;
+case '\b':
+retval.append("\\b");
+continue;
+case '\t':
+retval.append("\\t");
+continue;
+case '\n':
+retval.append("\\n");
+continue;
+case '\f':
+retval.append("\\f");
+continue;
+case '\r':
+retval.append("\\r");
+continue;
+case '\"':
+retval.append("\\\"");
+continue;
+case '\'':
+retval.append("\\\'");
+continue;
+case '\\':
+retval.append("");
+continue;
+default:
+if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+String s = "" + Integer.toString(ch, 16);
+retval.append("\\u" + s.substring(s.length() - 4, 
s.length()));
+} else {
+retval.append(ch);
+}
+continue;
+}
+}
+return retval.toString();
+}
+
 public static final String removeQuotesAndEscapes(String s) {
 char q = s.charAt(0); // simple or double quote
 String stripped = s.substring(1, s.length() - 1);
@@ -220,6 +301,10 @@
 return res.toString();
 }
 
+public String getLine(int line) {
+return inputLines[line - 1];
+}
+
 public String extractFragment(