diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java old mode 100644 new mode 100755 index 27170703a87ca2..7f476be7dcf133 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java @@ -1405,7 +1405,14 @@ protected Function getBuiltinFunction( throws AnalysisException { FunctionName fnName = new FunctionName(name); Function searchDesc = new Function(fnName, argTypes, Type.INVALID, false); - return Catalog.getCurrentCatalog().getFunction(searchDesc, mode); + Function f = Catalog.getCurrentCatalog().getFunction(searchDesc, mode); + if (f != null && fnName.getFunction().equalsIgnoreCase("rand")) { + if (this.children.size() == 1 + && !(this.children.get(0) instanceof LiteralExpr)) { + throw new AnalysisException("The param of rand function must be literal"); + } + } + return f; } /** diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java old mode 100644 new mode 100755 index 278e69d64eceeb..e7f3dd6a4d8d16 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java @@ -379,6 +379,21 @@ public void testDataGripSupport() throws Exception { dorisAssert.query(sql).explainQuery(); } + @Test + public void testRandFunction() throws Exception { + String sql = "select rand(db1.tbl1.k1) from db1.tbl1;"; + try { + dorisAssert.query(sql).explainQuery(); + Assert.fail("The param of rand function must be literal"); + } catch (AnalysisException e) { + System.out.println(e.getMessage()); + } + sql = "select rand(1234) from db1.tbl1;"; + dorisAssert.query(sql).explainQuery(); + sql = "select rand() from db1.tbl1;"; + dorisAssert.query(sql).explainQuery(); + } + @Test public void testVarcharToLongSupport() throws Exception { String sql = "select count(*)\n" +