Compare commits

...

3 Commits

Author SHA1 Message Date
ZHENGGUAN LI d19aebc463
Merge 801c32ae58 into 6024bcf122 2025-07-24 20:36:30 +08:00
lingo-xp 6024bcf122
Fix create view data type parser. (#6493)
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (11, ubuntu-latest) (push) Has been cancelled Details
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (17, ubuntu-latest) (push) Has been cancelled Details
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (21, ubuntu-latest) (push) Has been cancelled Details
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (8, ubuntu-latest) (push) Has been cancelled Details
2025-07-23 12:17:32 +08:00
zhenggli 801c32ae58 Update PG create function output 2025-02-14 12:17:15 -06:00
5 changed files with 97 additions and 1 deletions

View File

@ -4,6 +4,7 @@ import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.statement.SQLAlterStatement;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement;
import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem;
import com.alibaba.druid.sql.ast.statement.SQLWithSubqueryClause;
@ -115,4 +116,7 @@ public class CKStatementParser extends SQLStatementParser {
}
}
}
public void parseCreateViewAtDataType(SQLColumnDefinition column, SQLName expr) {
column.setDataType(this.exprParser.parseDataType());
}
}

View File

@ -820,6 +820,45 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
return false;
}
@Override
public boolean visit(SQLCreateFunctionStatement x) {
boolean create = x.isCreate();
if (create) {
print0(ucase ? "CREATE " : "create ");
if (x.isOrReplace()) {
print0(ucase ? "OR REPLACE " : "or replace ");
}
}
if (x.isTemporary()) {
print0(ucase ? "TEMPORARY " : "temporary ");
}
print0(ucase ? "FUNCTION " : "function ");
x.getName().accept(this);
int paramSize = x.getParameters().size();
print0(" (");
this.indentCount++;
for (int i = 0; i < paramSize; ++i) {
if (i != 0) {
print0(","); // change: remove extra space
println();
}
SQLParameter param = x.getParameters().get(i);
param.accept(this);
}
this.indentCount--;
print(')');
printCreateFunctionBody(x);
return false;
}
@Override
public boolean visit(SQLCreateUserStatement x) {
print0(ucase ? "CREATE USER " : "create user ");

View File

@ -12513,7 +12513,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
return;
}
println();
println(ucase ? "AS" : "as");
print(ucase ? "AS " : "as ");
block.accept(this);
}

View File

@ -0,0 +1,44 @@
package com.alibaba.druid.bvt.sql.postgresql.create_function;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.statement.SQLBlockStatement;
import com.alibaba.druid.sql.ast.statement.SQLCreateFunctionStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprStatement;
import junit.framework.TestCase;
public class PGCreateFunctionTest extends TestCase {
public void test_0() throws Exception {
SQLCreateFunctionStatement sqlCreateFunctionStatement = new SQLCreateFunctionStatement();
sqlCreateFunctionStatement.setDbType(DbType.postgresql);
sqlCreateFunctionStatement.setCreate(true);
sqlCreateFunctionStatement.setName(new SQLIdentifierExpr("func1"));
SQLBlockStatement sqlBlockStatement = new SQLBlockStatement();
sqlCreateFunctionStatement.setBlock(sqlBlockStatement);
// Set sql block statement
SQLExprStatement sqlExprStatement = new SQLExprStatement();
sqlExprStatement.setExpr(new SQLNullExpr());
sqlExprStatement.setAfterSemi(true);
sqlBlockStatement.setHaveBeginEnd(true);
sqlBlockStatement.setIsDollarQuoted(true);
sqlBlockStatement.setLanguage("plpgsql");
List<SQLStatement> sqlExprStatementList = new ArrayList<>();
sqlExprStatementList.add(sqlExprStatement);
sqlBlockStatement.setStatementList(sqlExprStatementList);
String sql = sqlCreateFunctionStatement.toString();
assertEquals("CREATE FUNCTION func1 ()\n" +
"AS $$\n" +
"BEGIN\n" +
"\tNULL;\n" +
"END;\n" +
"$$ LANGUAGE plpgsql;", sql);
}
}

View File

@ -1,3 +1,12 @@
create view test (a uint32) as select a from b
--------------------
CREATE VIEW test (
a uint32
)
AS
SELECT a
FROM b
------------------------------------------------------------------------------------------------------------------------
select
/*
/*