import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; import eu.leads.processor.utils.SQLUtils; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Function; import net.sf.jsqlparser.parser.CCJSqlParserManager; import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.statement.Statement; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Created with IntelliJ IDEA. * User: vagvaz * Date: 10/28/13 * Time: 11:48 AM * To change this template use File | Settings | File Templates. */ public class SelectItemsTest { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); String json = ""; // StringReader reader = new StringReader(json); json = "SELECT ble.f,ble.t,COUNT(ble.f,ble.g) as klkl FROM testble join jointable on f=s join j2 on j2.f=ble.g WHERE foo > 10 and (foo < 15 and fle like \'adidas\') group by ble.f,ble.g having COUNT(ble.f,ble.g) > 5 and COUNT(ble.f,ble.g) = 7 ORDER BY ble.g ASC,ble.f DESC,ble.p DESC limit 5"; CCJSqlParserManager manager = new CCJSqlParserManager(); ObjectWriter writer = mapper.writer().withDefaultPrettyPrinter(); try { Statement st = manager.parse(new StringReader(json)); String value = writer.writeValueAsString(st); System.out.println("PRETTY\n" + value + "\nendpretty"); // System.out.println("yupi!!!\n"+value); JsonNode root = mapper.readTree(value); JsonNode selectColumns = root.path("selectBody").path("selectItems"); Iterator<JsonNode> items = selectColumns.iterator(); List<Column> columns = new ArrayList<Column>(); List<Table> allTable = new ArrayList<Table>(); List<Function> functions = new ArrayList<Function>(); while (items.hasNext()) { JsonNode expr = items.next(); System.out.println("expr:: " + expr.toString()); // if(columns.size() == 0) // continue; if (expr.has("expression")) { expr = expr.path("expression"); if (!expr.has("name")) { Column selected = mapper.readValue(expr.toString(), Column.class); columns.add(selected); } else { // expr.findParent("expression"); Function selected = SQLUtils.extractFunction(expr); functions.add(selected); } } else { if (!expr.has("table")) { columns.clear(); break; } else { expr = expr.path("table"); Table table = mapper.readValue(expr.toString(), Table.class); allTable.add(table); } } } if (columns.size() == 0) System.out.println("All Columns"); for (Column c : columns) { System.out.println("selected " + c.toString()); } for (Table c : allTable) { System.out.println("selected tables " + c.toString()); } for (Function f : functions) { System.out.println("selected f " + f.toString()); } JsonNode orderby = root.path("selectBody").path("orderByElements"); Iterator<JsonNode> iterator = orderby.iterator(); List<Boolean> ascendingOrder = new ArrayList<Boolean>(); List<Column> orderByColumns = new ArrayList<Column>(); while (iterator.hasNext()) { JsonNode expr = iterator.next(); ascendingOrder.add(expr.path("asc").asBoolean()); if (expr.has("expression")) { expr = expr.path("expression"); if (expr.has("columnName")) { Column selected = mapper.readValue(expr.toString(), Column.class); orderByColumns.add(selected); } } } for (int i = 0; i < orderByColumns.size(); i++) { System.out.println("columnt: " + orderByColumns.get(i) + " " + ascendingOrder.get(i)); } // t = mapper.readValue(String.valueOf(from),Table.class); // System.out.println("t: " + t.getName() + " " + (t.getAlias() == null) ); } catch (JSQLParserException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (JsonProcessingException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } }