Compare commits

...

3 Commits

Author SHA1 Message Date
ZhangC 02439cceb0
Merge ab252eb5fb into 0444f4f532 2025-07-16 19:24:39 +08:00
林枸 0444f4f532 FiSupport group by alias parser and eqeq default parser.
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (11, ubuntu-latest) (push) Waiting to run Details
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (17, ubuntu-latest) (push) Waiting to run Details
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (21, ubuntu-latest) (push) Waiting to run Details
Java CI / Test JDK ${{ matrix.java }}, ${{ matrix.os }} (8, ubuntu-latest) (push) Waiting to run Details
2025-07-16 17:53:41 +08:00
zchazc ab252eb5fb
feat: enhance support using_index_clause 2025-06-19 08:42:30 +08:00
6 changed files with 44 additions and 1 deletions

View File

@ -91,6 +91,7 @@ public enum SQLBinaryOperator {
RegExp("REGEXP", 110),
NotRegExp("NOT REGEXP", 110),
Equality("=", 110),
EqEq("==", 110),
BitwiseNot("!", 130),
Concat("||", 140),

View File

@ -1210,6 +1210,9 @@ public class OracleExprParser extends SQLExprParser {
OracleCreateIndexStatement createIndex = new OracleStatementParser(lexer).parseCreateIndex();
using.setIndex(createIndex);
accept(Token.RPAREN);
} else if (lexer.token() == Token.LITERAL_ALIAS) {
SQLName index = new OracleStatementParser(lexer).getExprParser().name();
using.setIndex(index);
}
for (; ; ) {

View File

@ -3657,7 +3657,8 @@ public class SQLExprParser extends SQLParser {
}
protected SQLExpr relationalRestEqeq(SQLExpr expr) {
return expr;
lexer.nextToken();
return new SQLBinaryOpExpr(expr, SQLBinaryOperator.EqEq, expr());
}
protected SQLExpr relationalRestTilde(SQLExpr expr) {

View File

@ -1100,6 +1100,10 @@ public class SQLSelectParser extends SQLParser {
} else {
item = this.exprParser.expr();
}
if (lexer.nextIf(Token.AS)) {
item = new SQLAliasedExpr(item, lexer.stringVal);
lexer.nextToken();
}
if (dialectFeatureEnabled(GroupByItemOrder)) {
if (lexer.token == Token.DESC) {

View File

@ -0,0 +1,23 @@
package com.alibaba.druid.sql.dialect.oracle.parser;
import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import org.junit.Assert;
import org.junit.Test;
public class OracleUsingIndexTest {
@Test
public void testUsingIndex() {
String sql = "ALTER TABLE \"SC\".\"TB1\"\n" +
"\tADD CONSTRAINT \"PK_XXX\" PRIMARY KEY (\"ID\")\n" +
"\t\tUSING INDEX \"SC\".\"PK_XXX\"\n" +
"\t\tENABLE";
SQLStatement stat = SQLUtils.parseSingleStatement(sql, DbType.oracle,false);
System.out.println(stat);
Assert.assertEquals(sql, stat.toString());
System.out.println("=============");
}
}

View File

@ -1,3 +1,14 @@
select if(a=='G', b, c) from test
--------------------
SELECT if(a == 'G', b, c)
FROM test
------------------------------------------------------------------------------------------------------------------------
select a, b, count(1) from test group by a as c, b as d
--------------------
SELECT a, b, count(1)
FROM test
GROUP BY a AS c, b AS d
------------------------------------------------------------------------------------------------------------------------
select c from b where c=1 ${if(len(a)=0,'and 1=1',"and a>0")} ${if(len(a)=0,'and 1=1',"and a>0")}
--------------------
SELECT c