Skip to content

Commit

Permalink
[cherry-pick](planner)pick prs to branch-1.2 (apache#23542)
Browse files Browse the repository at this point in the history
  • Loading branch information
sohardforaname authored and caiconghui1 committed Aug 31, 2023
1 parent bba1d83 commit f86a1e5
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1583,6 +1583,20 @@ && collectChildReturnTypes()[0].isDecimalV3()) {
this.type = PRECISION_INFER_RULE.getOrDefault(fnName.getFunction(), DEFAULT_PRECISION_INFER_RULE)
.apply(children, this.type);
}

// cast(xx as char(N)/varchar(N)) will be handled as substr(cast(xx as char, varchar), 1, N),
// but type is varchar(*), we change it to varchar(N);
if (fn.getFunctionName().getFunction().equals("substr")
&& children.size() == 3
&& children.get(1) instanceof IntLiteral
&& children.get(2) instanceof IntLiteral) {
long len = ((IntLiteral) children.get(2)).getValue();
if (type.isWildcardChar()) {
this.type = ScalarType.createCharType(((int) (len)));
} else if (type.isWildcardVarchar()) {
this.type = ScalarType.createVarchar(((int) (len)));
}
}
// rewrite return type if is nested type function
analyzeNestedFunction();
for (OrderByElement o : orderByElements) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
*/
public class SelectStmt extends QueryStmt {
private static final Logger LOG = LogManager.getLogger(SelectStmt.class);
public static final String DEFAULT_VALUE = "__DEFAULT_VALUE__";
private UUID id = UUID.randomUUID();

// ///////////////////////////////////////
Expand Down Expand Up @@ -504,7 +505,7 @@ public void analyze(Analyzer analyzer) throws UserException {
}
for (Expr expr : valueList.getFirstRow()) {
if (expr instanceof DefaultValueExpr) {
resultExprs.add(new IntLiteral(1));
resultExprs.add(new StringLiteral(DEFAULT_VALUE));
} else {
resultExprs.add(expr);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1220,8 +1220,9 @@ public void createTableAsSelect(CreateTableAsSelectStmt stmt) throws DdlExceptio
Expr resultExpr = resultExprs.get(i);
Type resultType = resultExpr.getType();
if (resultExpr instanceof FunctionCallExpr
&& resultExpr.getType().getPrimitiveType().equals(PrimitiveType.VARCHAR)) {
resultType = ScalarType.createVarchar(65533);
&& resultExpr.getType().getPrimitiveType().equals(PrimitiveType.VARCHAR)
&& resultExpr.getType().getLength() == -1) {
resultType = ScalarType.createVarchar(ScalarType.MAX_VARCHAR_LENGTH);
}
if (resultType.isStringType() && (keysDesc == null || !keysDesc.containsCol(name))) {
// Use String for varchar/char/string type,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,9 @@ public void testNormal() throws Exception {
ConnectContext ctx = UtFrameUtils.createDefaultCtx();
String sql = "values(1,'a',2,'b')";

SqlScanner input = new SqlScanner(new StringReader(sql), ctx.getSessionVariable().getSqlMode());
SqlParser parser = new SqlParser(input);
org.apache.doris.analysis.SqlScanner input = new org.apache.doris.analysis.SqlScanner(
new StringReader(sql), ctx.getSessionVariable().getSqlMode());
org.apache.doris.analysis.SqlParser parser = new org.apache.doris.analysis.SqlParser(input);
Analyzer analyzer = new Analyzer(ctx.getEnv(), ctx);
StatementBase statementBase = null;
try {
Expand Down Expand Up @@ -221,8 +222,9 @@ public void testInsertSelect() throws Exception {
ConnectContext ctx = UtFrameUtils.createDefaultCtx();
String sql = "select kk1, kk2, kk3, kk4 from db.tbl";

SqlScanner input = new SqlScanner(new StringReader(sql), ctx.getSessionVariable().getSqlMode());
SqlParser parser = new SqlParser(input);
org.apache.doris.analysis.SqlScanner input = new org.apache.doris.analysis.SqlScanner(
new StringReader(sql), ctx.getSessionVariable().getSqlMode());
org.apache.doris.analysis.SqlParser parser = new org.apache.doris.analysis.SqlParser(input);
Analyzer analyzer = new Analyzer(ctx.getEnv(), ctx);
StatementBase statementBase = null;
try {
Expand Down

0 comments on commit f86a1e5

Please sign in to comment.