package eu.leads.processor.utils; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Function; import net.sf.jsqlparser.expression.operators.relational.ExpressionList; import net.sf.jsqlparser.schema.Column; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Created with IntelliJ IDEA. * User: vagvaz * Date: 10/28/13 * Time: 2:26 PM * To change this template use File | Settings | File Templates. */ public class SQLUtils { public static ExpressionList extractExpressionList(JsonNode root) { ExpressionList result = new ExpressionList(); List<Expression> columns = new ArrayList<Expression>(); Iterator<JsonNode> iterator = root.iterator(); ObjectMapper mapper = new ObjectMapper(); while (iterator.hasNext()) { JsonNode expr = iterator.next(); if (expr.has("columnName")) { Column selected = null; try { selected = mapper.readValue(expr.toString(), Column.class); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } columns.add((Expression) selected); } else { if (!expr.has("table")) { columns.clear(); break; } } } result.setExpressions(columns); return result; } public static Function extractFunction(JsonNode root) { Function result = new Function(); result.setName(root.path("name").asText()); result.setAllColumns(root.path("allColumns").asBoolean()); result.setEscaped(root.path("escaped").asBoolean()); if (!root.path("parameters").isNull()) { ExpressionList ee = SQLUtils.extractExpressionList(root.path("parameters").path("expressions")); result.setParameters(ee); } return result; } public static List<Column> extractColumns(JsonNode root) { List<Column> columns = new ArrayList<Column>(); Iterator<JsonNode> iterator = root.iterator(); ObjectMapper mapper = new ObjectMapper(); while (iterator.hasNext()) { JsonNode expr = iterator.next(); if (expr.has("columnName")) { Column selected = null; try { selected = mapper.readValue(expr.toString(), Column.class); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } columns.add(selected); } } return columns; } public static String getSQLType(String query) { String tmp = query.trim().toUpperCase(); if (tmp.startsWith("SELECT")) return "SELECT"; else if (tmp.startsWith("INSERT")) return "INSERT"; else if (tmp.startsWith("CREATE TABLE")) return "CREATE TABLE"; else return "INVALID"; } }