Further, you may try sqlNode.toSqlString().getSql(). Julian Hyde <[email protected]> 于2021年8月19日周四 上午5:48写道:
> Yes, the error message is not good enough. Can you please log a bug? The > error comes from org.apache.calcite.linq4j.tree.BinaryExpression, which I > very much doubt happens at parse time. If you can add a test case, or a > complete error stack, that would be appreciated. > > > On Aug 18, 2021, at 9:30 PM, Jariv Narup <[email protected]> > wrote: > > > > Hi Thomas, > > That is my bad - a carry over from the debugging. However the error > > still persists even with the following query: > > > > *SELECT Purchase.Purchase_Date, Products.Product_Name FROM Purchase JOIN > > Products ON Purchase.Product_ID = Products.ID WHERE Purchase.Quantity > > 10* > > > > This is what I see: > > > > *from: org.apache.calcite.sql.SqlNode = > > {org.apache.calcite.sql.SqlJoin@2039} Method threw > > 'java.lang.RuntimeException' exception. Cannot evaluate > > org.apache.calcite.sql.SqlJoin.toString()* left: > > org.apache.calcite.sql.SqlNode = > {org.apache.calcite.sql.SqlIdentifier@2141} > > "PURCHASE" > > natural: org.apache.calcite.sql.SqlLiteral = > > {org.apache.calcite.sql.SqlLiteral@2142} "FALSE" > > joinType: org.apache.calcite.sql.SqlLiteral = > > {org.apache.calcite.sql.SqlLiteral@2143} "INNER" > > right: org.apache.calcite.sql.SqlNode = > > {org.apache.calcite.sql.SqlIdentifier@2144} "PRODUCTS" > > conditionType: org.apache.calcite.sql.SqlLiteral = > > {org.apache.calcite.sql.SqlLiteral@2145} "ON" > > condition: org.apache.calcite.sql.SqlNode = > > {org.apache.calcite.sql.SqlBasicCall@2146} "`PURCHASE`.`PRODUCT_ID` = > > `PRODUCTS`.`ID`" > > pos: org.apache.calcite.sql.parser.SqlParserPos = > > {org.apache.calcite.sql.parser.SqlParserPos@2147} "line 1, column 68" > > > > That said, a more directed error text might definitely be more helpful. > > > > Regards, > > Viraj Purang > > > > On Tue, Aug 17, 2021 at 1:27 AM Thomas Rebele <[email protected]> wrote: > > > >> Hi Jariv, > >> > >> are you sure you want to join two columns of Purchase: > *Purchase.Product_ID > >> = Purchase.ID*? > >> If that's the cause of the exception, the error message could be > improved. > >> > >> Cordialement / Best Regards, > >> *Thomas Rebele, PhD* | R&D Developer | Germany | www.tibco.com > >> > >> > >> On Mon, Aug 16, 2021 at 10:58 PM Jariv Narup <[email protected]> > >> wrote: > >> > >>> Hi Team, > >>> I am getting the following exception while trying to parse a SQL > >>> statement into its tokens. Is this expected behavior? If not, what > would > >>> you suggest to work around this problem. The particulars are given > below: > >>> > >>> *Issue:* > >>> *Method threw 'java.lang.RuntimeException' exception. Cannot evaluate > >>> org.apache.calcite.sql.SqlJoin.toString().* > >>> > >>> *Where:* > >>> This happens when I use the following API (it is visible on the "from" > >>> value): > >>> > >>> SqlParser.Config parserConfig = SqlParser.config(); > >>> parserConfig > >>> .withCaseSensitive(false) > >>> .withLex(Lex.ORACLE); > >>> SqlParser parser = SqlParser.create(sqlString, parserConfig); > >>>>>> [Line with the issue] *SqlNode sqlNode = parser.parseStmt();* > >>> > >>> > >>> *Debugger Image:* > >>> [image: image.png] > >>> *Version In Use:* > >>> I am using the following maven GAVs > >>> -org.apache.calcite:calcite-babel:1.27.0, so my assumption is that I > am at > >>> the latest. > >>> > >>> *SQL Statement with the issue:* > >>> > >>> *SELECT Purchase.Purchase_Date, Products.Product_Name FROM Purchase > JOIN > >>> Products ON Purchase.Product_ID = Purchase.ID WHERE Purchase.Quantity > > 10* > >>> > >>> I would appreciate any help on this. > >>> > >>> Thanks - Jariv > >>> > >> > >
