db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rick Hillegas <rick.hille...@oracle.com>
Subject Re: Using ASTParser and TreeWalker for parsing SQL query
Date Wed, 19 Jun 2013 19:04:17 GMT
On 6/19/13 9:47 AM, venu wrote:
> Hi Rick,
> I took 10.10 branch code and able to resolve all issues related with group
> by.
> I have some doubts could you please help me on these things.
> 1. I can see FromList and Groupbylist but can not find OrderByList node.
Hi Venu,

Using the following query...

   select tablename from sys.systables where tablename is null order by 
tablename

...I see the ORDER BY list in the output from both TreeWalker and 
ASTParser. TreeWalker shows this it as a 
org.apache.derby.impl.sql.compile.OrderByColumn node. ASTParser clearly 
labels it as an orderByList. Can you be more specific about the problem 
you are seeing with ORDER BY lists?
> 2. When I provide any function then the node tree will be like this.
> Ex:
> expression: 			
> 			org.apache.derby.impl.sql.compile.JavaToSQLValueNode@6460029d
> 			dataTypeServices: null
> 			javaNode: 				
> 				org.apache.derby.impl.sql.compile.StaticMethodCallNode@5b4bc4e6
> 				javaClassName: null
> 				methodName: TO_CHAR
> 				methodParms[0] :					
> 					org.apache.derby.impl.sql.compile.SQLToJavaValueNode@4b6c06dd
>
> 					value: 						
> 						org.apache.derby.impl.sql.compile.ColumnReference@2136bdda
> 						columnName: TIME
> 						tableNumber: -1
> 						columnNumber: 0
> 						replacesAggregate: false
> 						replacesWindowFunctionCall: false
> 						tableName: null
> 						nestingLevel: -1
> 						sourceLevel: -1
> 						dataTypeServices: null
>
> Here I want to get value node of SQLToJavaValueNode object. But, there is no
> such method for getting sub node or value node SQLToJavaValueNode.
I'm afraid I don't understand what's missing. In the above summary, I 
see a call to the function TO_CHAR, taking one argument, a column called 
TIME, whose table is not resolved yet.
> 3. How can I get having clause from the select node.
When I run the following query...

  select tablename, max( tableid ) from sys.systables group by tablename 
having max( tableid ) is null

...I see the HAVING clause in the output of both TreeWalker and 
ASTParser. For TreeWalker, it appears as an 
org.apache.derby.impl.sql.compile.IsNullNode node. For ASTParser, it is 
clearly labelled as a havingClause.

I'm beginning to sense that TreeWalker and ASTParser are very general 
diagnostic tools which you may not be able to press into service to do 
the sophisticated query analysis you need to perform. At this point, I 
recommend that you study TreeWalker to see how to extract the AST from 
the query. I'm afraid that you may need to walk the AST in your own code 
in order to perform sophisticated analysis which is specific to your 
application.

Of course, you can always write your own Visitor for this purpose. But 
using a Visitor to analyze something like a HAVING clause is going to be 
tricky. That is because the Visitor does not have enough context to know 
when a ValueNode represents a HAVING clause. That knowledge is in the 
SelectNode itself.

Hope this helps,
-Rick

> Thanks,
> Venu.
>
>
>
> --
> View this message in context: http://apache-database.10148.n7.nabble.com/Using-ASTParser-and-TreeWalker-for-parsing-SQL-query-tp131219p131603.html
> Sent from the Apache Derby Users mailing list archive at Nabble.com.
>


Mime
View raw message