package org.mariadb.jdbc.internal.util.dao;
import static org.junit.Assert.*;
import org.junit.Test;
public class ClientPrepareResultTest {
/**
* SELECT query cannot be rewritable.
*/
@Test
public void selectQuery() {
//SELECT query cannot be rewritable
assertFalse(checkRewritable("SELECT * FROM MyTable"));
assertFalse(checkRewritable("SELECT\n * FROM MyTable"));
assertFalse(checkRewritable("SELECT(1)"));
assertFalse(checkRewritable("INSERT MyTable (a) VALUES (1);SELECT(1)"));
}
/**
* INSERT FROM SELECT are not be rewritable.
*/
@Test
public void insertSelectQuery() {
assertFalse(checkRewritable("INSERT INTO MyTable (a) SELECT * FROM seq_1_to_1000"));
assertFalse(checkRewritable("INSERT INTO MyTable (a);SELECT * FROM seq_1_to_1000"));
assertFalse(checkRewritable("INSERT INTO MyTable (a)SELECT * FROM seq_1_to_1000"));
assertFalse(checkRewritable("INSERT INTO MyTable (a) (SELECT * FROM seq_1_to_1000)"));
assertFalse(checkRewritable("INSERT INTO MyTable (a) SELECT\n * FROM seq_1_to_1000"));
}
/**
* Insert query that contain table/column name with select keyword, or select in comment can be rewritten.
*/
@Test
public void rewritableThatContainSelectQuery() {
//but 'SELECT' keyword in column/table name can be rewritable
assertTrue(checkRewritable("INSERT INTO TABLE_SELECT "));
assertTrue(checkRewritable("INSERT INTO TABLE_SELECT"));
assertTrue(checkRewritable("INSERT INTO SELECT_TABLE"));
assertTrue(checkRewritable("INSERT INTO `TABLE SELECT `"));
assertTrue(checkRewritable("INSERT INTO TABLE /* SELECT in comment */ "));
assertTrue(checkRewritable("INSERT INTO TABLE //SELECT"));
}
private boolean checkRewritable(String query) {
return ClientPrepareResult.rewritableParts(query, true).isQueryMultiValuesRewritable();
}
}