X-Git-Url: http://git.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/SQLParser.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/SQLParser.java new file mode 100644 index 0000000..c2dc2cb --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/SQLParser.java @@ -0,0 +1,62 @@ +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