protected String makeErrorMsgUserFriendly(Throwable e) { return QueryUtil.makeErrorMsgUserFriendly(e); }
/** * 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; }
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)); }
ProjectInstance projectInstance = projectManager.getProject(project); KylinConfig kylinConfig = projectInstance.getConfig(); sql = removeCommentInSql(sql); while (sql.endsWith(";")) sql = sql.substring(0, sql.length() - 1); initQueryTransformers();
@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); }
boolean selectStatement = QueryUtil.isSelectStatement(sql); Assert.assertEquals(true, selectStatement); boolean selectStatement = QueryUtil.isSelectStatement(sql); Assert.assertEquals(true, selectStatement); boolean selectStatement = QueryUtil.isSelectStatement(sql); Assert.assertEquals(true, selectStatement); boolean selectStatement = QueryUtil.isSelectStatement(sql); Assert.assertEquals(true, selectStatement); boolean selectStatement = QueryUtil.isSelectStatement(sql); Assert.assertEquals(false, selectStatement); boolean selectStatement = QueryUtil.isSelectStatement(sql); Assert.assertEquals(true, selectStatement);
@Test public void testRemoveCatalog() { String[] beforeRemoveSql = new String[] { "select name, count(*) as cnt from schema1.user where bb.dd >2 group by name", "select name, count(*) as cnt from .default2.user where dd >2 group by name", "select name, count(*) as cnt from %s.default2.user where dd >2 group by name", "select name, count(*) as cnt from %s.user.a.cu where dd >2 group by name", "select name, count(*) as cnt from %s.default2.user where dd >2 group by name", "select name, count() as cnt from %s.test.kylin_sales inner join " + "%s.test.kylin_account " + "ON kylin_sales.BUYER_ID=kylin_account.ACCOUNT_ID group by name", "select schema1.table1.col1 from %s.schema1.table1" }; String[] afterRemoveSql = new String[] { "select name, count(*) as cnt from schema1.user where bb.dd >2 group by name", "select name, count(*) as cnt from .default2.user where dd >2 group by name", "select name, count(*) as cnt from default2.user where dd >2 group by name", "select name, count(*) as cnt from user.a.cu where dd >2 group by name", "select name, count(*) as cnt from default2.user where dd >2 group by name", "select name, count() as cnt from test.kylin_sales inner join " + "test.kylin_account " + "ON kylin_sales.BUYER_ID=kylin_account.ACCOUNT_ID group by name", "select schema1.table1.col1 from schema1.table1" }; Assert.assertEquals(afterRemoveSql.length, beforeRemoveSql.length); for (int i = 0; i < beforeRemoveSql.length; i++) { String before = beforeRemoveSql[i]; before = before.replace("%s", catalog); String after = afterRemoveSql[i]; Assert.assertEquals(after, QueryUtil.removeCatalog(before, catalog)); } } }
String s = QueryUtil.massageSql(sql, "default", 0, 0, "DEFAULT"); Assert.assertEquals("select ( date '2001-09-28' + interval '1' day) from test_kylin_fact", s); String s = QueryUtil.massageSql(sql, "default", 0, 0, "DEFAULT"); Assert.assertEquals( "select ( date '2001-09-28' + interval '2' month) from test_kylin_fact group by ( date '2001-09-28' + interval '2' month)", String s = QueryUtil.massageSql(sql, "default", 50000, 0, "DEFAULT"); Assert.assertEquals( "select count(*) test_limit from test_kylin_fact where price > 10.0\n" + String s = QueryUtil.massageSql(sql, "default", 0, 50, "DEFAULT"); Assert.assertEquals( "select count(*) test_offset from test_kylin_fact where price > 10.0\n" + String s = QueryUtil.massageSql(sql, "default", 50000, 50, "DEFAULT"); Assert.assertEquals( "select count(*) test_limit_and_offset from test_kylin_fact where price > 10.0\n" + String sql = "select count(*) test_limit from " + newLine + "test_kylin_fact where price > 10.0"; newLine = newLine.replace("\r", " ").replace("\n", newLine); String s = QueryUtil.massageSql(sql, "default", 50000, 0, "DEFAULT"); Assert.assertEquals( "select count(*) test_limit from " + newLine + "test_kylin_fact where price > 10.0\nLIMIT 50000", String sql = "select count(*) test_offset from " + newLine + "test_kylin_fact where price > 10.0"; newLine = newLine.replace("\r", " ").replace("\n", newLine); String s = QueryUtil.massageSql(sql, "default", 50000, 0, "DEFAULT"); Assert.assertEquals(
ProjectInstance projectInstance = projectManager.getProject(project); KylinConfig kylinConfig = projectInstance.getConfig(); sql = removeCommentInSql(sql); while (sql.endsWith(";")) sql = sql.substring(0, sql.length() - 1); initQueryTransformers();
final boolean isSelect = QueryUtil.isSelectStatement(sqlRequest.getSql()); if (isSelect) { sqlResponse = query(sqlRequest, queryContext.getQueryId());
/** * 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; }
public static String makeErrorMsgUserFriendly(Throwable e) { String msg = e.getMessage(); // pick ParseException error message if possible Throwable cause = e; while (cause != null) { if (cause.getClass().getName().contains("ParseException")) { msg = cause.getMessage(); break; } if (cause.getClass().getName().contains("ArithmeticException")) { msg = "ArithmeticException: " + cause.getMessage(); break; } cause = cause.getCause(); } return makeErrorMsgUserFriendly(msg); }
Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment)); Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2)); Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2)); Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2)); Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2));
@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 testUnknownErrorResponseMessage() { String msg = QueryUtil.makeErrorMsgUserFriendly(new NullPointerException()); Assert.assertEquals("Unknown error.", msg); }
logger.info("The original query: " + sql); sql = QueryUtil.removeCommentInSql(sql);
return fakeResponse; String correctedSql = QueryUtil.massageSql(sqlRequest.getSql(), sqlRequest.getProject(), sqlRequest.getLimit(), sqlRequest.getOffset(), conn.getSchema(), Constant.FakeCatalogName); if (!correctedSql.equals(sqlRequest.getSql())) {
public static String makeErrorMsgUserFriendly(Throwable e) { String msg = e.getMessage(); // pick ParseException error message if possible Throwable cause = e; while (cause != null) { if (cause.getClass().getName().contains("ParseException")) { msg = cause.getMessage(); break; } if (cause.getClass().getName().contains("ArithmeticException")) { msg = "ArithmeticException: " + cause.getMessage(); break; } cause = cause.getCause(); } return makeErrorMsgUserFriendly(msg); }
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)); }