use of net.sf.jsqlparser.expression.ExpressionVisitorAdapter in project spanner-jdbc by olavloite.
the class CloudSpannerResultSetMetaData method initColumns.
private void initColumns(Select select) {
columns = new ArrayList<>();
aliases = new ArrayList<>();
select.getSelectBody().accept(new SelectVisitorAdapter() {
@Override
public void visit(PlainSelect plainSelect) {
for (SelectItem selectItem : plainSelect.getSelectItems()) {
selectItem.accept(new SelectItemVisitor() {
private boolean foundColumn = false;
@Override
public void visit(SelectExpressionItem selectExpressionItem) {
selectExpressionItem.getExpression().accept(new ExpressionVisitorAdapter() {
@Override
public void visit(Column column) {
registerColumn(column, selectExpressionItem.getAlias());
foundColumn = true;
}
});
if (!foundColumn) {
registerColumn(null, selectExpressionItem.getAlias());
}
}
@Override
public void visit(AllTableColumns allTableColumns) {
registerAllTableColumns(allTableColumns.getTable());
}
@Override
public void visit(AllColumns allColumns) {
for (Table table : tables) {
registerAllTableColumns(table);
}
}
});
}
}
});
}
use of net.sf.jsqlparser.expression.ExpressionVisitorAdapter in project JSqlParser by JSQLParser.
the class AdaptersTest method testAdapters.
/**
* Test extracting JDBC named parameters using adapters
*/
@Test
public void testAdapters() throws JSQLParserException {
String sql = "SELECT * FROM MYTABLE WHERE COLUMN_A = :paramA AND COLUMN_B <> :paramB";
Statement stmnt = CCJSqlParserUtil.parse(sql);
final Stack<Pair<String, String>> params = new Stack<Pair<String, String>>();
stmnt.accept(new StatementVisitorAdapter() {
@Override
public void visit(Select select) {
select.getSelectBody().accept(new SelectVisitorAdapter() {
@Override
public void visit(PlainSelect plainSelect) {
plainSelect.getWhere().accept(new ExpressionVisitorAdapter() {
@Override
protected void visitBinaryExpression(BinaryExpression expr) {
if (!(expr instanceof AndExpression)) {
params.push(new Pair<String, String>(null, null));
}
super.visitBinaryExpression(expr);
}
@Override
public void visit(Column column) {
params.push(new Pair<String, String>(column.getColumnName(), params.pop().getRight()));
}
@Override
public void visit(JdbcNamedParameter parameter) {
params.push(new Pair<String, String>(params.pop().getLeft(), parameter.getName()));
}
});
}
});
}
});
assertEquals(2, params.size());
Pair<String, String> param2 = params.pop();
assertEquals("COLUMN_B", param2.getLeft());
assertEquals("paramB", param2.getRight());
Pair<String, String> param1 = params.pop();
assertEquals("COLUMN_A", param1.getLeft());
assertEquals("paramA", param1.getRight());
}
use of net.sf.jsqlparser.expression.ExpressionVisitorAdapter in project sandbox by irof.
the class ParsingTest method postgres_sequence.
@Test
void postgres_sequence() throws Exception {
try (InputStream inputStream = this.getClass().getResourceAsStream("/select-postgres-sequence.sql")) {
Statement statement = CCJSqlParserUtil.parse(inputStream);
Select select = Select.class.cast(statement);
class SequenceFinder extends SelectVisitorAdapter {
String sequenceExpression;
@Override
public void visit(PlainSelect plainSelect) {
List<SelectItem> selectItems = plainSelect.getSelectItems();
SelectItem selectItem = selectItems.get(0);
SelectItemVisitor expressionVisitor = new ExpressionVisitorAdapter() {
@Override
public void visit(Function function) {
sequenceExpression = function.toString();
super.visit(function);
}
};
selectItem.accept(expressionVisitor);
}
}
SequenceFinder sequenceFinder = new SequenceFinder();
select.getSelectBody().accept(sequenceFinder);
assertThat(sequenceFinder.sequenceExpression).isEqualTo("nextval('hoge_seq')");
}
}
use of net.sf.jsqlparser.expression.ExpressionVisitorAdapter in project spanner-jdbc by olavloite.
the class CloudSpannerPreparedStatement method setPlainSelectParameters.
private void setPlainSelectParameters(PlainSelect plainSelect, com.google.cloud.spanner.Statement.Builder builder) {
if (plainSelect.getFromItem() != null) {
plainSelect.getFromItem().accept(new FromItemVisitorAdapter() {
private int tableCount = 0;
@Override
public void visit(Table table) {
tableCount++;
if (tableCount == 1)
getParameterStore().setTable(unquoteIdentifier(table.getFullyQualifiedName()));
else
getParameterStore().setTable(null);
}
@Override
public void visit(SubSelect subSelect) {
if (subSelect.getSelectBody() instanceof PlainSelect) {
setPlainSelectParameters((PlainSelect) subSelect.getSelectBody(), builder);
} else {
subSelect.getSelectBody().accept(new SelectVisitorAdapter() {
@Override
public void visit(PlainSelect plainSelect) {
setPlainSelectParameters(plainSelect, builder);
}
@Override
public void visit(SetOperationList setOpList) {
for (SelectBody body : setOpList.getSelects()) {
setSelectParameters(body, builder);
}
}
});
}
}
});
}
if (plainSelect.getSelectItems() != null) {
for (SelectItem selectItem : plainSelect.getSelectItems()) {
selectItem.accept(new SelectItemVisitorAdapter() {
@Override
public void visit(SelectExpressionItem item) {
item.getExpression().accept(new ExpressionVisitorAdapter() {
private String currentCol = null;
@Override
public void visit(Column col) {
currentCol = unquoteIdentifier(col.getFullyQualifiedName());
}
@Override
public void visit(JdbcParameter parameter) {
parameter.accept(new ValueBinderExpressionVisitorAdapter<>(getParameterStore(), builder.bind("p" + parameter.getIndex()), currentCol));
currentCol = null;
}
@Override
public void visit(SubSelect subSelect) {
setSelectParameters(subSelect.getSelectBody(), builder);
}
});
}
});
}
}
setWhereParameters(plainSelect.getWhere(), builder);
if (plainSelect.getLimit() != null) {
setWhereParameters(plainSelect.getLimit().getRowCount(), builder);
}
if (plainSelect.getOffset() != null && plainSelect.getOffset().getOffsetJdbcParameter() != null) {
ValueBinderExpressionVisitorAdapter<com.google.cloud.spanner.Statement.Builder> binder = new ValueBinderExpressionVisitorAdapter<>(getParameterStore(), builder.bind("p" + getParameterStore().getHighestIndex()), null);
binder.setValue(getParameterStore().getParameter(getParameterStore().getHighestIndex()), Types.BIGINT);
getParameterStore().setType(getParameterStore().getHighestIndex(), Types.BIGINT);
}
}
Aggregations