public WhereParser(SqlParser sqlParser, MySqlSelectQueryBlock query) { this.sqlParser = sqlParser; this.query = query; this.where = query.getWhere(); }
public JoinSelect parseJoinSelect(SQLQueryExpr sqlExpr) throws SqlParseException { MySqlSelectQueryBlock query = (MySqlSelectQueryBlock) sqlExpr.getSubQuery().getQuery(); List<From> joinedFrom = findJoinedFrom(query.getFrom()); if (joinedFrom.size() != 2) throw new RuntimeException("currently supports only 2 tables join"); JoinSelect joinSelect = createBasicJoinSelectAccordingToTableSource((SQLJoinTableSource) query.getFrom()); List<Hint> hints = parseHints(query.getHints()); joinSelect.setHints(hints); String firstTableAlias = joinedFrom.get(0).getAlias(); String secondTableAlias = joinedFrom.get(1).getAlias(); Map<String, Where> aliasToWhere = splitAndFindWhere(query.getWhere(), firstTableAlias, secondTableAlias); Map<String, List<SQLSelectOrderByItem>> aliasToOrderBy = splitAndFindOrder(query.getOrderBy(), firstTableAlias, secondTableAlias); List<Condition> connectedConditions = getConditionsFlatten(joinSelect.getConnectedWhere()); joinSelect.setConnectedConditions(connectedConditions); fillTableSelectedJoin(joinSelect.getFirstTable(), query, joinedFrom.get(0), aliasToWhere.get(firstTableAlias), aliasToOrderBy.get(firstTableAlias), connectedConditions); fillTableSelectedJoin(joinSelect.getSecondTable(), query, joinedFrom.get(1), aliasToWhere.get(secondTableAlias), aliasToOrderBy.get(secondTableAlias), connectedConditions); updateJoinLimit(query.getLimit(), joinSelect); //todo: throw error feature not supported: no group bys on joins ? return joinSelect; }
SQLExpr where = x.getWhere(); if (where != null) { println();
private static SQLExpr getWhere(SQLParsedResult parseResult) { SQLExpr expr = null; SQLStatement stmt = parseResult.getStmt(); if (parseResult.getType() == SqlType.SELECT || parseResult.getType() == SqlType.SELECT_FOR_UPDATE) { MySqlSelectQueryBlock query = (MySqlSelectQueryBlock) (((SQLSelectStatement) stmt).getSelect()).getQuery(); expr = query.getWhere(); } else if (parseResult.getType() == SqlType.UPDATE) { expr = ((MySqlUpdateStatement) stmt).getWhere(); } else if (parseResult.getType() == SqlType.DELETE) { expr = ((MySqlDeleteStatement) stmt).getWhere(); } else if (parseResult.getType() == SqlType.REPLACE) { // add for replace MySqlReplaceStatement replaceStatement = (MySqlReplaceStatement) stmt; SQLQueryExpr queryExpr = replaceStatement.getQuery(); if (queryExpr != null) { SQLSelect sqlSelect = queryExpr.getSubQuery(); sqlSelect.getQuery(); if (sqlSelect != null) { MySqlSelectQueryBlock queryBlock = (MySqlSelectQueryBlock) sqlSelect.getQuery(); if (queryBlock != null) { expr = queryBlock.getWhere(); } } } } return expr; }
public WhereParser(SqlParser sqlParser, MySqlSelectQueryBlock query) { this.sqlParser = sqlParser; this.query = query; this.where = query.getWhere(); }
SQLExpr where = x.getWhere(); if (where != null) { println();
@Override public boolean visit(MySqlSelectQueryBlock x) { for (val item : x.getSelectList()) { item.accept(this); } if (x.getFrom() != null) { x.getFrom().accept(this); } acceptWhere(x.getWhere()); return false; }
public JoinSelect parseJoinSelect(SQLQueryExpr sqlExpr) throws SqlParseException { MySqlSelectQueryBlock query = (MySqlSelectQueryBlock) sqlExpr.getSubQuery().getQuery(); List<From> joinedFrom = findJoinedFrom(query.getFrom()); if (joinedFrom.size() != 2) throw new RuntimeException("currently supports only 2 tables join"); JoinSelect joinSelect = createBasicJoinSelectAccordingToTableSource((SQLJoinTableSource) query.getFrom()); List<Hint> hints = parseHints(query.getHints()); joinSelect.setHints(hints); String firstTableAlias = joinedFrom.get(0).getAlias(); String secondTableAlias = joinedFrom.get(1).getAlias(); Map<String, Where> aliasToWhere = splitAndFindWhere(query.getWhere(), firstTableAlias, secondTableAlias); Map<String, List<SQLSelectOrderByItem>> aliasToOrderBy = splitAndFindOrder(query.getOrderBy(), firstTableAlias, secondTableAlias); List<Condition> connectedConditions = getConditionsFlatten(joinSelect.getConnectedWhere()); joinSelect.setConnectedConditions(connectedConditions); fillTableSelectedJoin(joinSelect.getFirstTable(), query, joinedFrom.get(0), aliasToWhere.get(firstTableAlias), aliasToOrderBy.get(firstTableAlias), connectedConditions); fillTableSelectedJoin(joinSelect.getSecondTable(), query, joinedFrom.get(1), aliasToWhere.get(secondTableAlias), aliasToOrderBy.get(secondTableAlias), connectedConditions); updateJoinLimit(query.getLimit(), joinSelect); //todo: throw error feature not supported: no group bys on joins ? return joinSelect; }
@Test public void testWhere() { MySqlSelectQueryBlock query = getQuery("select col1,col2 from table1 where a =1 "); SQLExpr expr = query.getWhere(); MySQLItemVisitor v = new MySQLItemVisitor(this.currentDb, utf8Charset,null); expr.accept(v); Item item = v.getItem(); Assert.assertEquals(true, "a = 1".equals(item.getItemName())); }
SQLExpr where = sqlSelectQueryBlock.getWhere(); LOG.debug("SELECT SQL:where " + where); QueryInfo actionInfo = parseWhereClause(table, metaEventOperation, where, sqlSelectQueryBlock.isForUpdate());
if (selectQueryBlock.getWhere() != null) { if(selectQueryBlock.getWhere() instanceof SQLBinaryOpExpr){ SQLBinaryOpExpr where = (SQLBinaryOpExpr)(selectQueryBlock.getWhere()); System.out.println("where right:"); System.out.println("class :" + where.getRight().getClass()); System.out.println("class :" + selectQueryBlock.getWhere().getClass()); System.out.println("---------------------------");
SQLExpr whereExpr = sqlSelectQuery.getWhere(); if (whereExpr != null) { handleWhereCondition(whereExpr);