public void testIfNode_true() throws Exception { SelectClauseNode select = new SelectClauseNode("select"); select.appendNode(OtherNode.of(" * ")); FromClauseNode from = new FromClauseNode("from"); from.appendNode(WhitespaceNode.of(" ")); from.appendNode(new WordNode("aaa")); from.appendNode(WhitespaceNode.of(" ")); WhereClauseNode where = new WhereClauseNode("where"); where.appendNode(WhitespaceNode.of(" ")); IfNode ifNode = new IfNode(location, "true", "/*if true*/"); ifNode.appendNode(new WordNode("bbb")); ifNode.appendNode(OtherNode.of(" = ")); ifNode.appendNode(new WordNode("ccc")); IfBlockNode ifBlockNode = new IfBlockNode(); ifBlockNode.setIfNode(ifNode); ifBlockNode.setEndNode(new EndNode("/*end*/")); where.appendNode(ifBlockNode); SelectStatementNode statement = new SelectStatementNode(); statement.setSelectClauseNode(select); statement.setFromClauseNode(from); statement.setWhereClauseNode(where); AnonymousNode root = new AnonymousNode(); root.appendNode(statement); ExpressionEvaluator evaluator = new ExpressionEvaluator(); NodePreparedSqlBuilder builder = new NodePreparedSqlBuilder( config, SqlKind.SELECT, "dummyPath", evaluator, SqlLogType.FORMATTED); PreparedSql sql = builder.build(statement, Function.identity()); assertEquals("select * from aaa where bbb = ccc", sql.getRawSql()); }
@Override public SqlNode transform(SqlNode sqlNode) { AnonymousNode result = new AnonymousNode(); for (SqlNode child : sqlNode.getChildren()) { result.appendNode(child.accept(this, null)); } return result; }
public void testBindVariableNode() throws Exception { SelectClauseNode select = new SelectClauseNode("select"); select.appendNode(OtherNode.of(" * ")); FromClauseNode from = new FromClauseNode("from"); from.appendNode(WhitespaceNode.of(" ")); from.appendNode(new WordNode("aaa")); from.appendNode(WhitespaceNode.of(" ")); WhereClauseNode where = new WhereClauseNode("where"); where.appendNode(WhitespaceNode.of(" ")); where.appendNode(new WordNode("bbb")); where.appendNode(OtherNode.of(" = ")); BindVariableNode variable1 = new BindVariableNode(location, "name", "/*#name*/"); variable1.setWordNode(new WordNode("'hoge'")); where.appendNode(variable1); where.appendNode(WhitespaceNode.of(" ")); where.appendNode(new LogicalOperatorNode("and")); where.appendNode(WhitespaceNode.of(" ")); where.appendNode(new WordNode("ccc")); where.appendNode(OtherNode.of(" = ")); BindVariableNode variable2 = new BindVariableNode(location, "salary", "/*#salary*/"); variable2.setWordNode(new WordNode("100")); where.appendNode(variable2); SelectStatementNode statement = new SelectStatementNode(); statement.setSelectClauseNode(select); statement.setFromClauseNode(from); statement.setWhereClauseNode(where); AnonymousNode root = new AnonymousNode(); root.appendNode(statement); ExpressionEvaluator evaluator = new ExpressionEvaluator(); evaluator.add("name", new Value(String.class, "hoge")); evaluator.add("salary", new Value(BigDecimal.class, new BigDecimal(100))); NodePreparedSqlBuilder builder = new NodePreparedSqlBuilder( config, SqlKind.SELECT, "dummyPath", evaluator, SqlLogType.FORMATTED); PreparedSql sql = builder.build(root, Function.identity()); assertEquals("select * from aaa where bbb = ? and ccc = ?", sql.getRawSql()); assertEquals(2, sql.getParameters().size()); assertEquals("hoge", sql.getParameters().get(0).getWrapper().get()); assertEquals(new BigDecimal(100), sql.getParameters().get(1).getWrapper().get()); }