public DDF sql2ddfHandle(String command, Schema schema, DataSourceDescriptor dataSource, DataFormat dataFormat) throws DDFException { return sql2ddfHandle(command, schema, dataSource, dataFormat, new TableNameReplacer(this.getManager(), dataSource)); } public DDF sql2ddfHandle(String command,
/** * @brief Generate a temporary table name for the ddf view. * @param length * @return */ private String genTableName(int length) { StringBuffer text = new StringBuffer(); int i = 0; while (i < length) { if (i == 0) { text.append(random(possibleStart)); } else { text.append(random(possibleLetter)); } ++i; } return "TEMP_DDF_" + text.toString(); }
/** * @brief Run the replacer. * @param statement The SQL statement. * @brief The new statement. */ public Statement run(Statement statement) throws Exception { // Clear the with table names in case that we run several sql command. this.withTableNameList.clear(); if (statement instanceof Select) { visit(statement); } else if (statement instanceof DescribeTable){ ((DescribeTable)statement).accept(this); } return statement; }
if (this.mDS.getUriList() != null || this.mDS.getUuidList() != null) { ddf = this.handleIndex(name, this.mDS.getUriList() == null ? this.mDS .getUuidList() : this.mDS.getUriList(), table); } else { tableName = "(" + ddf.getTableName() + ") " + this.genTableName(8);
throw new DDFException("ERROR: Only select is allowed in this sql2ddf"); } else { statement = tableNameReplacer.run(statement); this.mLog.info("Reformulate SQL to " + statement.toString());
} else if (statement instanceof Select) { statement = tableNameReplacer.run(statement); this.mLog.info("Reformulate SQL to " + statement.toString()); return this.sql(statement.toString(), maxRows, dataSource);
public SqlResult sqlHandle(String command, Integer maxRows, DataSourceDescriptor dataSource) throws DDFException { return this.sqlHandle(command, maxRows, dataSource, new TableNameReplacer(this.getManager(), dataSource)); }
public Statement testFullURISingle(String sqlcmd) throws Exception { Statement statement = parser.parse(new StringReader(sqlcmd)); TableNameReplacer tableNameReplacer = new TableNameReplacer(manager); return null; // return tableNameReplacer.run(statement); }
@Test public void BatchTestArithOps() { String[] arithOps = {"+", "-", "*", "/", "%", "&", "|", "^"}; String sqlcmd = "select ddf://adatao/a.id %s ddf://adatao/a.id2 from ddf://adatao/a"; TableNameReplacer tableNameReplacer = new TableNameReplacer(this.manager); for (String arithOp : arithOps) { String newSqlCmd = String.format(sqlcmd, arithOp); Statement statement = null; try { statement = this.testFullURISingle(newSqlCmd); // System.out.println(statement); } catch (Exception e) { e.printStackTrace(); } } }
@Test public void testAlias() { TableNameReplacer tableNameReplacer = new TableNameReplacer(manager); String sqlcmd = "select T0.id from (select tmp.id from ddf://adatao/a" + " " + "tmp) T0"; try { Statement statement = parser.parse(new StringReader(sqlcmd)); // statement = tableNameReplacer.run(statement); // System.out.println(statement.toString()); } catch (JSQLParserException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
@Test public void testUnion() { TableNameReplacer tableNameReplacer = new TableNameReplacer(manager); String sqlcmd = "select * from ddf://adatao/a union select * from " + "ddf://adatao/b"; try { Statement statement = parser.parse(new StringReader(sqlcmd)); // System.out.println(statement.toString()); int a = 2; } catch (JSQLParserException e) { e.printStackTrace(); } }
TableNameReplacer tableNameReplacer = new TableNameReplacer(this.manager); String sqlcmd = "select %s(ddf://adatao/a.year) from ddf://adatao/a"; String doubleSqlCmd = "select %s(ddf://adatao/a.year, ddf://adatao/a.rev) from ddf://adatao/a";
/** * @brief Test full uri replacement. * @throws DDFException */ @Test public void testFullURI() throws DDFException { TableNameReplacer tableNameReplacer = new TableNameReplacer(manager); String sqlcmd = "select SUM(ddf://adatao/a.b) from ddf://adatao/a group by ddf://adatao/a.a"; Statement statement = null; try { statement = parser.parse(new StringReader(sqlcmd)); } catch (JSQLParserException e) { e.printStackTrace(); assert(false); } try { // statement = tableNameReplacer.run(statement); } catch (Exception e) { e.printStackTrace(); assert(false); } assert(statement.toString().equals("SELECT SUM(tablename1.b) FROM tablename1 GROUP BY tablename1.a")); }
/** * @brief Test sql with namespace specified. * @throws DDFException */ @Test public void testNamespace() throws DDFException { TableNameReplacer tableNameReplacer = new TableNameReplacer(manager); // TableNameReplacer tableNameReplacer = new TableNameReplacer // (manager, "adatao"); String sqlcmd = "select a.b from a"; Statement statement = null; try { statement = parser.parse(new StringReader(sqlcmd)); } catch (JSQLParserException e) { e.printStackTrace(); assert(false); } try { // tableNameReplacer.run(statement); } catch (Exception e) { e.printStackTrace(); assert(false); } assert(statement.toString().equals("SELECT tablename1.b FROM tablename1")); }
/** * @brief Test sql with list. * @throws DDFException */ @Test public void testList() throws DDFException { String[] uris={"ddf://adatao/a", "ddf://adatao/b"}; // TableNameReplacer tableNameReplacer = new TableNameReplacer(manager, // Arrays.asList(uris)); TableNameReplacer tableNameReplacer = new TableNameReplacer(manager, null); String sqlcmd = "select {1}.a,{2}.b from {1}"; Statement statement = null; try { statement = parser.parse(new StringReader(sqlcmd)); } catch (JSQLParserException e) { e.printStackTrace(); assert(false); } try { // tableNameReplacer.run(statement); } catch (Exception e) { e.printStackTrace(); assert(false); } assert(statement.toString().equals("SELECT tablename1.a, tablename2.b FROM tablename1")); }
String[] relationalOps = {"=", "<=>", "<>", "!=", "<", "<=", ">", ">="}; String sqlcmd = "select * from ddf://adatao/a where ddf://adatao/a.id %s ddf://adatao/a.id2"; TableNameReplacer tableNameReplacer = new TableNameReplacer(this.manager); for (String relationalOp : relationalOps) { String newSqlCmd = String.format(sqlcmd, relationalOp);
TableNameReplacer tableNameReplacer = new TableNameReplacer(manager); String sqlcmd = "With p as " +
@Test public void testRealQuery() { TableNameReplacer tableNameReplacer = new TableNameReplacer(manager); String sqlcmd = "SELECT from_unixtime(round(timestamp) - 7*3600, 'HH') hour,\n" + " count(1) count,\n" +