public static Pair<List<List<String>>, List<SelectedColumnMeta>> tryPushDownNonSelectQuery(String project, String sql, String defaultSchema, boolean isPrepare) throws Exception { return tryPushDownQuery(project, sql, defaultSchema, null, false, isPrepare); }
/** * add remove catalog step at final */ public static String massageSql(String sql, String project, int limit, int offset, String defaultSchema, String catalog) { String correctedSql = massageSql(sql, project, limit, offset, defaultSchema); correctedSql = removeCatalog(correctedSql, catalog); return correctedSql; }
protected String makeErrorMsgUserFriendly(Throwable e) { return QueryUtil.makeErrorMsgUserFriendly(e); }
@Test public void testForceLimit() { KylinConfig.getInstanceFromEnv().setProperty("kylin.query.force-limit", "10"); String sql1 = "select * \nfrom DEFAULT.TEST_KYLIN_FACT"; String result = QueryUtil.massageSql(sql1, "default", 0, 0, "DEFAULT"); Assert.assertEquals("select * \nfrom DEFAULT.TEST_KYLIN_FACT\nLIMIT 10", result); String sql2 = "select 2 * 8 from DEFAULT.TEST_KYLIN_FACT"; result = QueryUtil.massageSql(sql2, "default", 0, 0, "DEFAULT"); Assert.assertEquals("select 2 * 8 from DEFAULT.TEST_KYLIN_FACT", result); }
public static boolean isSelectStatement(String sql) { String sql1 = sql.toLowerCase(Locale.ROOT); sql1 = removeCommentInSql(sql1); sql1 = sql1.trim(); return sql1.startsWith(KEYWORD_SELECT) || (sql1.startsWith(KEYWORD_WITH) && sql1.contains(KEYWORD_SELECT)) || (sql1.startsWith(KEYWORD_EXPLAIN) && sql1.contains(KEYWORD_SELECT)); }
@Test public void testSchemaCompletionWithComplexSubquery() throws SqlParseException { String sql = "SELECT a, b " + "FROM (" + " SELECT c, d, sum(p) " + " FROM table1 t1, DB.table2 t2 " + " WHERE t1.c > t2.d " + " GROUP BY t.e" + " HAVING sum(p) > 100" + " ORDER BY t2.f" + ") at1 " + "INNER JOIN table3 t3 " + "ON at1.c = t3.c " + "WHERE t3.d > 0 " + "ORDER BY t3.e"; String exceptSQL = "SELECT a, b " + "FROM (" + " SELECT c, d, sum(p) " + " FROM EDW.table1 t1, DB.table2 t2 " + " WHERE t1.c > t2.d " + " GROUP BY t.e" + " HAVING sum(p) > 100" + " ORDER BY t2.f" + ") at1 " + "INNER JOIN EDW.table3 t3 " + "ON at1.c = t3.c " + "WHERE t3.d > 0 " + "ORDER BY t3.e"; Assert.assertEquals(exceptSQL, PushDownUtil.schemaCompletion(sql, "EDW")); }
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); } }
@Test public void functionEscapeTransform() throws Exception { DefaultQueryTransformer transformer = new DefaultQueryTransformer(); String fnConvertSumSql = "select {fn EXTRACT(YEAR from PART_DT)} from KYLIN_SALES"; String correctSql = transformer.transform(fnConvertSumSql, "", ""); assertTrue("select EXTRACT(YEAR from PART_DT) from KYLIN_SALES".equalsIgnoreCase(correctSql)); fnConvertSumSql = "SELECT {fn CURRENT_TIMESTAMP(0)}"; correctSql = transformer.transform(fnConvertSumSql, "", ""); assertTrue("SELECT CURRENT_TIMESTAMP(0)".equalsIgnoreCase(correctSql)); } }
public static CompareTupleFilter.CompareResultType getCompareResultType(RexCall whenCall) { List<RexNode> operands = whenCall.getOperands(); if (SqlKind.EQUALS == whenCall.getKind() && operands != null && operands.size() == 2) { if (operands.get(0).equals(operands.get(1))) { return CompareTupleFilter.CompareResultType.AlwaysTrue; } if (isConstant(operands.get(0)) && isConstant(operands.get(1))) { return CompareTupleFilter.CompareResultType.AlwaysFalse; } } return CompareTupleFilter.CompareResultType.Unknown; }
@Test public void SumOfFnConvertTransform() throws Exception { SumOfFnConvertTransform("SQL_DOUBLE"); SumOfFnConvertTransform("SQL_BIGINT"); }
private Pair<List<List<String>>, List<SelectedColumnMeta>> pushDownQuery(SQLRequest sqlRequest, String correctedSql, Connection conn, SQLException sqlException) throws Exception { try { return PushDownUtil.tryPushDownSelectQuery(sqlRequest.getProject(), correctedSql, conn.getSchema(), sqlException, BackdoorToggles.getPrepareOnly()); } catch (Exception e2) { logger.error("pushdown engine failed current query too", e2); //exception in pushdown, throw it instead of exception in calcite throw e2; } }
@After public void after() throws Exception { this.cleanupTestMetadata(); }
@Before public void setUp() throws Exception { this.createTestMetadata(); }
@After public void after() throws Exception { this.cleanupTestMetadata(); }
@Before public void setUp() throws Exception { this.createTestMetadata(); KylinConfig.getInstanceFromEnv().setProperty("kylin.query.escape-default-keyword", "true"); }
@Test public void testUnknownErrorResponseMessage() { String msg = QueryUtil.makeErrorMsgUserFriendly(new NullPointerException()); Assert.assertEquals("Unknown error.", msg); }
@Test public void testKeywordDefaultDirtyHack() { { KylinConfig.getInstanceFromEnv().setProperty("kylin.query.escape-default-keyword", "true"); String sql = "select * from DEFAULT.TEST_KYLIN_FACT"; String s = QueryUtil.massageSql(sql, "default", 0, 0, "DEFAULT"); Assert.assertEquals("select * from \"DEFAULT\".TEST_KYLIN_FACT", s); } }
@Test public void testSchemaCompletionWithJoin() throws SqlParseException { String sql = "select * from t1 join (select * from t2 join (select * from t3))"; String exceptSQL = "select * from EDW.t1 join (select * from EDW.t2 join (select * from EDW.t3))"; Assert.assertEquals(exceptSQL, PushDownUtil.schemaCompletion(sql, "EDW")); }
@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()); } }
public static Pair<List<List<String>>, List<SelectedColumnMeta>> tryPushDownSelectQuery(String project, String sql, String defaultSchema, SQLException sqlException, boolean isPrepare) throws Exception { return tryPushDownQuery(project, sql, defaultSchema, sqlException, true, isPrepare); }