private static void translateCreateToWith(String sql, KylinConfig config) throws IOException { Pair<String, String> translated = translateCreateToWithInternal(sql); String identifier = translated.getFirst(); String sql1 = translated.getSecond(); TempStatementManager manager = TempStatementManager.getInstance(config); if (manager.getTempStatement(identifier) == null || !manager.getTempStatement(identifier).equals(sql1)) { manager.updateTempStatement(identifier, sql1); } }
public static Pair<Boolean, String> handleTempStatement(String sql, KylinConfig config) { if (!config.isConvertCreateTableToWith()) { return new Pair<>(false, sql); } if (isDropTable(sql)) { return new Pair<>(true, sql); } if (isCreateTable(sql)) { try { translateCreateToWith(sql, config); } catch (IOException ex) { throw new RuntimeException(ex); } return new Pair<>(true, sql); } sql = TempStatementUtil.appendWith(sql, config); return new Pair<>(false, sql); }
private static String appendWith(String sql, KylinConfig config) { if (!config.isConvertCreateTableToWith() || isWith(sql)) { return sql; } String[] splits = sql.split("\\W+"); StringBuilder builder = new StringBuilder(); Set<String> appended = new HashSet<>(); TempStatementManager manager = TempStatementManager.getInstance(config); for (String s : splits) { if (manager.getTempStatement(s) != null && !appended.contains(s)) { appended.add(s); if (appended.size() == 1) { builder.append(WITH); } else { builder.append(","); } builder.append(manager.getTempStatement(s)).append(" "); } } return builder.append(sql).toString(); } }
Pair<Boolean, String> result = TempStatementUtil.handleTempStatement(sql, kylinConfig); boolean isCreateTempStatement = result.getFirst(); sql = result.getSecond();
public static Pair<Boolean, String> handleTempStatement(String sql, KylinConfig config) { if (!config.isConvertCreateTableToWith()) { return new Pair<>(false, sql); } if (isDropTable(sql)) { return new Pair<>(true, sql); } if (isCreateTable(sql)) { try { translateCreateToWith(sql, config); } catch (IOException ex) { throw new RuntimeException(ex); } return new Pair<>(true, sql); } sql = TempStatementUtil.appendWith(sql, config); return new Pair<>(false, sql); }
@Test public void testTranslateCreateToWithInternal(){ // test leader space, more than one space between words String sql = " create table Identifier as select x as 'temp column' from fact_table;"; Pair<String, String> result = TempStatementUtil.translateCreateToWithInternal(sql); Assert.assertEquals("Identifier", result.getFirst()); Assert.assertEquals(" Identifier as (select x as 'temp column' from fact_table)", result.getSecond()); // test new line sql = " create temporary table Identifier as select x as 'temp column' \nfrom fact_table;"; result = TempStatementUtil.translateCreateToWithInternal(sql); Assert.assertEquals("Identifier", result.getFirst()); Assert.assertEquals(" Identifier as (select x as 'temp column' \nfrom fact_table)", result.getSecond()); } }
private static String appendWith(String sql, KylinConfig config) { if (!config.isConvertCreateTableToWith() || isWith(sql)) { return sql; } String[] splits = sql.split("\\W+"); StringBuilder builder = new StringBuilder(); Set<String> appended = new HashSet<>(); TempStatementManager manager = TempStatementManager.getInstance(config); for (String s : splits) { if (manager.getTempStatement(s) != null && !appended.contains(s)) { appended.add(s); if (appended.size() == 1) { builder.append(WITH); } else { builder.append(","); } builder.append(manager.getTempStatement(s)).append(" "); } } return builder.append(sql).toString(); } }
private static void translateCreateToWith(String sql, KylinConfig config) throws IOException { Pair<String, String> translated = translateCreateToWithInternal(sql); String identifier = translated.getFirst(); String sql1 = translated.getSecond(); TempStatementManager manager = TempStatementManager.getInstance(config); if (manager.getTempStatement(identifier) == null || !manager.getTempStatement(identifier).equals(sql1)) { manager.updateTempStatement(identifier, sql1); } }