Exemple #1
0
  private String convert(String sql, List<Object> parameters) {
    SQLStatementParser parser = new MySqlStatementParser(sql);
    List<SQLStatement> stmtList = parser.parseStatementList(); //

    SQLStatement first = (SQLStatement) stmtList.get(0);

    MyVisitor visitor = new MyVisitor();
    first.accept(visitor);

    if (visitor.getVariantList().size() > 0) {
      SQLExpr firstVar = visitor.getVariantList().get(0);

      int userId;
      if (firstVar instanceof SQLVariantRefExpr) {
        int varIndex = (Integer) firstVar.getAttribute("varIndex");
        userId = (Integer) parameters.get(varIndex);
      } else {
        userId = ((SQLNumericLiteralExpr) firstVar).getNumber().intValue();
      }

      String tableName;
      if (userId == 1) {
        tableName = "user_1";
      } else {
        tableName = "user_x";
      }

      for (SQLExprTableSource tableSource : visitor.getTableSourceList()) {
        SQLExpr expr = tableSource.getExpr();
        if (expr instanceof SQLIdentifierExpr) {
          SQLIdentifierExpr identExpr = (SQLIdentifierExpr) expr;
          String ident = identExpr.getName();

          if (ident.equals("user")) {
            identExpr.setName(tableName);
          }
        } else if (expr instanceof SQLPropertyExpr) {
          SQLPropertyExpr proExpr = (SQLPropertyExpr) expr;
          String ident = proExpr.getName();

          if (ident.equals("user")) {
            proExpr.setName(tableName);
          }
        }
      }
    }

    String realSql = SQLUtils.toOracleString(first);
    return realSql;
  }
Exemple #2
0
    private String recordTableSource(SQLExprTableSource x) {
      if (x.getExpr() instanceof SQLIdentifierExpr) {
        String tableName = ((SQLIdentifierExpr) x.getExpr()).getName();

        if (x.getAlias() != null) {
          tableAlias.put(x.getAlias(), tableName);
        }

        if ("user".equals(tableName)) {
          if (!tableSourceList.contains(x)) {
            tableSourceList.add(x);
          }
        }

        return tableName;
      }

      return null;
    }