Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2812,17 +2812,10 @@ public boolean visit(SQLExprTableSource x) {
String alias = x.getAlias();
List<SQLName> columns = x.getColumnsDirect();
if (alias != null) {
SQLObject parent = x.getParent();
if (parent instanceof SQLCreateIndexStatement
|| parent instanceof SQLMergeStatement
|| parent instanceof SQLDeleteStatement) {
print(' ');
print0(alias);
} else {
print(' ');
print0(ucase ? " AS " : " as ");
print0(alias);
}
// In Oracle, table aliases should not use AS keyword
// AS keyword is only used for column aliases
print(' ');
print0(alias);
}

if (columns != null && columns.size() > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package com.alibaba.druid.bvt.sql.oracle;

import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.SQLUtils;
import junit.framework.TestCase;

Expand All @@ -23,4 +24,38 @@ public void test_formatOracle() {
String sql = SQLUtils.formatOracle("select substr('123''''a''''bc',0,3) FROM dual");
System.out.println(sql);
}

public void test_format_tableAlias_without_as() {
String sql = "select * from AB01 a where a.AAB999 = '430521463000'";
String formattedSql = SQLUtils.format(sql, DbType.oracle);

assertFalse("Table alias should not use AS keyword in Oracle", formattedSql.contains(" AS a"));
assertTrue("Table alias should be present", formattedSql.contains("AB01 a"));

System.out.println("Original SQL: " + sql);
System.out.println("Formatted SQL: " + formattedSql);

String sql2 = "SELECT t1.id, t2.name FROM users t1 JOIN orders t2 ON t1.id = t2.user_id";
String formatted2 = SQLUtils.format(sql2, DbType.oracle);
assertFalse("Table alias should not use AS keyword", formatted2.contains(" AS t1") || formatted2.contains(" AS t2"));

String sql3 = "SELECT * FROM table1 t1, table2 t2 WHERE t1.id = t2.ref_id";
String formatted3 = SQLUtils.format(sql3, DbType.oracle);
assertFalse("Multiple table aliases should not use AS keyword",
formatted3.contains(" AS t1") || formatted3.contains(" AS t2"));

System.out.println("Test sql2: " + formatted2);
System.out.println("Test sql3: " + formatted3);
}

public void test_format_columnAlias_with_as() {
String sql = "SELECT name AS full_name, age FROM users u";
String formattedSql = SQLUtils.format(sql, DbType.oracle);

assertTrue("Column alias should use AS keyword", formattedSql.contains(" AS "));

assertFalse("Table alias should not use AS keyword", formattedSql.contains("users AS u"));

System.out.println("Column alias test: " + formattedSql);
}
}