--- /dev/null
+package com.quantum.sql;
+
+import java.util.Vector;
+
+import com.quantum.sql.parser.SQLLexx;
+import com.quantum.sql.parser.Token;
+
+public class SQLParser {
+
+ /**
+ * Parses a query string into executable units.
+ * @param query
+ * @return a Vector of Strings, with the individual executable units.
+ */
+ public static Vector parse(String query) {
+ Vector commands = new Vector();
+ Vector groups = new Vector();
+ try {
+ Vector tokens = SQLLexx.parse(query);
+ StringBuffer buffer = new StringBuffer();
+ StringBuffer groupBuffer = new StringBuffer();
+ for (int i = 0; i < tokens.size(); i++) {
+ Token t = (Token) tokens.elementAt(i);
+ if (t.getType() == Token.COMMENT) {
+ // ignore comments
+ } else if (t.getType() == Token.SEPARATOR) {
+ groupBuffer.append(t.getValue());
+ String newCommand = buffer.toString().trim();
+ if (!newCommand.equals("")) { //$NON-NLS-1$
+ commands.addElement(newCommand);
+ }
+ buffer = new StringBuffer();
+ } else if (t.getType() == Token.GROUP) {
+ // We don't append the group token because it may be misinterpreted
+ //groupBuffer.append(t.getValue());
+ String newGroup = groupBuffer.toString().trim();
+ if (!newGroup.equals("")) { //$NON-NLS-1$
+ groups.addElement(newGroup);
+ //Groups have precedence over commands, so the preceding commands are erased
+ commands.clear();
+ }
+ groupBuffer = new StringBuffer();
+ } else {
+ // We append the tokens to the buffer until it's a separator or group.
+ buffer.append(t.getValue());
+ groupBuffer.append(t.getValue());
+ }
+ }
+ String newCommand = buffer.toString().trim();
+ if (!newCommand.equals("")) { //$NON-NLS-1$
+ commands.addElement(newCommand);
+ }
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ System.out.println("Returning"); //$NON-NLS-1$
+ Vector result = new Vector();
+ result.addAll(groups);
+ result.addAll(commands);
+ return result;
+ }
+}
\ No newline at end of file