From 531d6177dfc03d157ebde38cd3adc827131c208f Mon Sep 17 00:00:00 2001 From: wumpz Date: Thu, 14 Aug 2014 23:46:11 +0200 Subject: [PATCH] simple execute clause support --- README.md | 6 ++ .../jsqlparser/statement/execute/Execute.java | 8 ++- .../util/deparser/ExecuteDeParser.java | 64 +++++++++++++++++++ .../util/deparser/StatementDeParser.java | 7 +- .../statement/execute/ExecuteTest.java | 3 +- 5 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/sf/jsqlparser/util/deparser/ExecuteDeParser.java diff --git a/README.md b/README.md index fb4411241..0b88f47af 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,12 @@ Also I would like to know about needed examples or documentation stuff. ## Extensions in the latest SNAPSHOT version 0.9.1 +* Simple suppor for EXECUTE. + +```sql +EXECUTE myproc 'a', 2, 'b' +``` + * Improved support for select into clause. ```sql diff --git a/src/main/java/net/sf/jsqlparser/statement/execute/Execute.java b/src/main/java/net/sf/jsqlparser/statement/execute/Execute.java index 0224255e9..c3ab4a349 100644 --- a/src/main/java/net/sf/jsqlparser/statement/execute/Execute.java +++ b/src/main/java/net/sf/jsqlparser/statement/execute/Execute.java @@ -24,6 +24,7 @@ import net.sf.jsqlparser.expression.operators.relational.ExpressionList; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitor; +import net.sf.jsqlparser.statement.select.PlainSelect; /** * @@ -54,5 +55,10 @@ public void setExprList(ExpressionList exprList) { public void accept(StatementVisitor statementVisitor) { statementVisitor.visit(this); } - + + @Override + public String toString() { + return "EXECUTE " + name + " " + PlainSelect.getStringList(exprList.getExpressions(), true, false); + } + } diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/ExecuteDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/ExecuteDeParser.java new file mode 100644 index 000000000..0aa7e99c0 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/util/deparser/ExecuteDeParser.java @@ -0,0 +1,64 @@ +/* + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2013 JSQLParser + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 2.1 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ +package net.sf.jsqlparser.util.deparser; + +import net.sf.jsqlparser.expression.ExpressionVisitor; +import net.sf.jsqlparser.statement.execute.Execute; +import net.sf.jsqlparser.statement.select.PlainSelect; + +public class ExecuteDeParser { + + private StringBuilder buffer; + private ExpressionVisitor expressionVisitor; + + /** + * @param expressionVisitor a {@link ExpressionVisitor} to de-parse + * expressions. It has to share the same
+ * StringBuilder (buffer parameter) as this object in order to work + * @param buffer the buffer that will be filled with the select + */ + public ExecuteDeParser(ExpressionVisitor expressionVisitor, StringBuilder buffer) { + this.buffer = buffer; + this.expressionVisitor = expressionVisitor; + } + + public StringBuilder getBuffer() { + return buffer; + } + + public void setBuffer(StringBuilder buffer) { + this.buffer = buffer; + } + + public void deParse(Execute execute) { + buffer.append("EXECUTE ").append(execute.getName()); + buffer.append(" ").append(PlainSelect.getStringList(execute.getExprList().getExpressions(), true, false)); + } + + public ExpressionVisitor getExpressionVisitor() { + return expressionVisitor; + } + + public void setExpressionVisitor(ExpressionVisitor visitor) { + expressionVisitor = visitor; + } +} diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java index 0d8980c39..bfa87769d 100644 --- a/src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java +++ b/src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java @@ -156,6 +156,11 @@ public void visit(Statements stmts) { @Override public void visit(Execute execute) { - + SelectDeParser selectDeParser = new SelectDeParser(); + selectDeParser.setBuffer(buffer); + ExpressionDeParser expressionDeParser = new ExpressionDeParser(selectDeParser, buffer); + ExecuteDeParser executeDeParser = new ExecuteDeParser(expressionDeParser, buffer); + selectDeParser.setExpressionVisitor(expressionDeParser); + executeDeParser.deParse(execute); } } diff --git a/src/test/java/net/sf/jsqlparser/statement/execute/ExecuteTest.java b/src/test/java/net/sf/jsqlparser/statement/execute/ExecuteTest.java index fd87b5aee..d6be5ee39 100644 --- a/src/test/java/net/sf/jsqlparser/statement/execute/ExecuteTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/execute/ExecuteTest.java @@ -56,9 +56,10 @@ public void tearDown() { /** * Test of accept method, of class Execute. + * @throws net.sf.jsqlparser.JSQLParserException */ @Test public void testAccept() throws JSQLParserException { - assertSqlCanBeParsedAndDeparsed("EXEC myproc 'a', 2, 'b'"); + assertSqlCanBeParsedAndDeparsed("EXECUTE myproc 'a', 2, 'b'"); } }