package jef.database.jsqlparser.test.insert;
import jef.database.jsqlparser.expression.Column;
import jef.database.jsqlparser.expression.DoubleValue;
import jef.database.jsqlparser.expression.JpqlParameter;
import jef.database.jsqlparser.expression.LongValue;
import jef.database.jsqlparser.expression.StringValue;
import jef.database.jsqlparser.expression.Table;
import jef.database.jsqlparser.expression.operators.relational.ExpressionList;
import jef.database.jsqlparser.parser.ParseException;
import jef.database.jsqlparser.statement.insert.Insert;
import jef.database.jsqlparser.statement.select.PlainSelect;
import jef.database.jsqlparser.statement.select.SubSelect;
import junit.framework.TestCase;
import org.junit.Ignore;
import org.junit.Test;
public class InsertTest extends TestCase {
public InsertTest(String arg0) {
super(arg0);
}
@Test
public void testRegularInsert() throws ParseException {
String statement = "insert into mytable (col1,col2,col3) values (?1,'sadfsd',234)";
Insert insert = (Insert) jef.database.DbUtils.parseStatement(statement);
assertEquals("mytable", ((Table)insert.getTable()).getName());
assertEquals(3, insert.getColumns().size());
assertEquals("col1", ((Column) insert.getColumns().get(0)).getColumnName());
assertEquals("col2", ((Column) insert.getColumns().get(1)).getColumnName());
assertEquals("col3", ((Column) insert.getColumns().get(2)).getColumnName());
assertEquals(3, ((ExpressionList) insert.getItemsList()).getExpressions().size());
assertTrue (((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JpqlParameter);
assertEquals("sadfsd", ((StringValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(1)).getValue());
assertEquals(234, ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(2)).getValue().longValue());
assertEquals(statement, ""+insert);
statement = "insert into myschema.mytable values (?1,?2,2.3)";
insert = (Insert) jef.database.DbUtils.parseStatement(statement);
assertEquals("myschema.mytable", insert.getTable().toWholeName());
assertEquals(3, ((ExpressionList) insert.getItemsList()).getExpressions().size());
assertTrue (((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JpqlParameter);
assertEquals(2.3, ((DoubleValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(2)).getValue(), 0.0);
assertEquals(statement, ""+insert);
}
@Test
@Ignore
public void testInsertFromSelect() throws ParseException {
String statement = "insert into mytable (col1,col2,col3) SELECT * FROM mytable2";
Insert insert = (Insert) jef.database.DbUtils.parseStatement(statement);
assertEquals("mytable", ((Table)insert.getTable()).getName());
assertEquals(3, insert.getColumns().size());
assertEquals("col1", ((Column) insert.getColumns().get(0)).getColumnName());
assertEquals("col2", ((Column) insert.getColumns().get(1)).getColumnName());
assertEquals("col3", ((Column) insert.getColumns().get(2)).getColumnName());
assertTrue (insert.getItemsList() instanceof SubSelect);
assertEquals("mytable2", ((Table) ((PlainSelect) ((SubSelect)insert.getItemsList()).getSelectBody()).getFromItem()).getName());
//toString uses brakets
String statementToString = "insert into mytable (col1,col2,col3) (select * from mytable2)";
assertEquals(statementToString, ""+insert);
}
@Test
public static void main(String[] args) {
//junit.swingui.TestRunner.run(InsertTest.class);
}
}