Skip to content

Commit

Permalink
integrated values statement
Browse files Browse the repository at this point in the history
  • Loading branch information
wumpz committed Oct 4, 2018
1 parent de8ad10 commit c032744
Show file tree
Hide file tree
Showing 8 changed files with 172 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import net.sf.jsqlparser.statement.truncate.Truncate;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.statement.upsert.Upsert;
import net.sf.jsqlparser.statement.values.ValuesStatement;

public interface StatementVisitor {

Expand Down Expand Up @@ -79,4 +80,5 @@ public interface StatementVisitor {

void visit(Block block);

void visit(ValuesStatement values);
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import net.sf.jsqlparser.statement.truncate.Truncate;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.statement.upsert.Upsert;
import net.sf.jsqlparser.statement.values.ValuesStatement;

public class StatementVisitorAdapter implements StatementVisitor {

Expand Down Expand Up @@ -136,4 +137,8 @@ public void visit(UseStatement use) {
@Override
public void visit(Block block) {
}

@Override
public void visit(ValuesStatement values) {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* #%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
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
* #L%
*/
package net.sf.jsqlparser.statement.values;

import java.util.List;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;
import net.sf.jsqlparser.statement.select.PlainSelect;

/**
* The replace statement.
*/
public class ValuesStatement implements Statement {

private List<Expression> expressions;

public ValuesStatement(List<Expression> expressions) {
this.expressions = expressions;
}

@Override
public void accept(StatementVisitor statementVisitor) {
statementVisitor.visit(this);
}

public List<Expression> getExpressions() {
return expressions;
}

public void setExpressions(List<Expression> list) {
expressions = list;
}

@Override
public String toString() {
StringBuilder sql = new StringBuilder();
sql.append("VALUES ");
sql.append(PlainSelect.getStringList(expressions, true, true));
return sql.toString();
}
}
8 changes: 8 additions & 0 deletions src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@
import net.sf.jsqlparser.statement.truncate.Truncate;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.statement.upsert.Upsert;
import net.sf.jsqlparser.statement.values.ValuesStatement;

/**
* Find all used tables within an select statement.
Expand Down Expand Up @@ -811,4 +812,11 @@ public void visit(Block block) {
visit(block.getStatements());
}
}

@Override
public void visit(ValuesStatement values) {
for (Expression expr : values.getExpressions()) {
expr.accept(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import net.sf.jsqlparser.statement.truncate.Truncate;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.statement.upsert.Upsert;
import net.sf.jsqlparser.statement.values.ValuesStatement;

public class StatementDeParser implements StatementVisitor {

Expand Down Expand Up @@ -240,4 +241,10 @@ public void visit(Block block) {
}
buffer.append("END");
}

@Override
public void visit(ValuesStatement values) {
expressionDeParser.setBuffer(buffer);
new ValuesStatementDeParser(expressionDeParser, buffer).deParse(values);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2017 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
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
* #L%
*/
package net.sf.jsqlparser.util.deparser;

import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.ExpressionVisitor;
import net.sf.jsqlparser.statement.values.ValuesStatement;

public class ValuesStatementDeParser {

private StringBuilder buffer;
private final ExpressionVisitor expressionVisitor;

public ValuesStatementDeParser(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(ValuesStatement values) {
boolean first = true;
buffer.append("VALUES (");
for (Expression expr : values.getExpressions()) {
if (first) {
first = false;
} else {
buffer.append(", ");
}
expr.accept(expressionVisitor);
}
buffer.append(")");
}
}
17 changes: 17 additions & 0 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ import net.sf.jsqlparser.statement.truncate.*;
import net.sf.jsqlparser.statement.update.*;
import net.sf.jsqlparser.statement.upsert.*;
import net.sf.jsqlparser.statement.merge.*;
import net.sf.jsqlparser.statement.values.*;
import java.util.*;

/**
Expand Down Expand Up @@ -379,6 +380,8 @@ Statement SingleStatement() :
LOOKAHEAD(3)
stm = Select()
|
stm = Values()
|
stm = Update()
|
stm = Insert()
Expand Down Expand Up @@ -515,6 +518,20 @@ UseStatement Use(): {
}
}

ValuesStatement Values(): {
List<Expression> expList = new ArrayList<Expression>();
Expression exp;
} {
<K_VALUES>
"("
exp=PrimaryExpression() { expList.add(exp); }
("," exp=PrimaryExpression() { expList.add(exp); } )*
")"
{
return new ValuesStatement(expList);
}
}

Update Update():
{
Update update = new Update();
Expand Down
13 changes: 13 additions & 0 deletions src/test/java/net/sf/jsqlparser/statement/values/ValuesTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package net.sf.jsqlparser.statement.values;

import net.sf.jsqlparser.JSQLParserException;
import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed;
import org.junit.Test;

public class ValuesTest {

@Test
public void testDuplicateKey() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("VALUES (1, 2, 'test')");
}
}

0 comments on commit c032744

Please sign in to comment.