[ 
https://issues.apache.org/jira/browse/DERBY-791?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rick Hillegas updated DERBY-791:
--------------------------------

    Attachment: XmlTreeWalker.java

Attaching XmlTreeWalker.java. This is a simple Visitor which prints out the 
parsed AST in xml. You invoke it like so:

   java XmlTreeWalker "select r.a from r, s where r.b = s.c"

The program prints out an xml representation of the AST to standard out. Here's 
the output from the above command:

<?xml version="1.0" encoding="UTF-8"?>
<queryTree>
    <queryText>select r.a from r, s where r.b = s.c</queryText>
    <node>
        <nodeType>org.apache.derby.impl.sql.compile.CursorNode</nodeType>
        <contents>
            <member>name: null</member>
            <member>updateMode: UNSPECIFIED (0)</member>
            <member>statementType: SELECT</member>
        </contents>
        <node>
            <nodeType>org.apache.derby.impl.sql.compile.SelectNode</nodeType>
            <contents>
                <member>isDistinct: false</member>
                <member>groupByList: null</member>
                <member>orderByList: null</member>
                <member>resultSetNumber: 0</member>
                <member>referencedTableMap: null</member>
                <member>statementResultSet: false</member>
            </contents>
            <node>
                
<nodeType>org.apache.derby.impl.sql.compile.ResultColumnList</nodeType>
                <contents>
                    <member>exposedName: A</member>
                    <member>name: A</member>
                    <member>tableName: null</member>
                    <member>isDefaultColumn: false</member>
                    <member>wasDefaultColumn: false</member>
                    <member>isNameGenerated: false</member>
                    <member>sourceTableName: null</member>
                    <member>type: null</member>
                    <member>columnDescriptor: null</member>
                    <member>isGenerated: false</member>
                    <member>isGeneratedForUnmatchedColumnInInsert: 
false</member>
                    <member>isGroupingColumn: false</member>
                    <member>isReferenced: false</member>
                    <member>isRedundant: false</member>
                    <member>virtualColumnId: 1</member>
                    <member>resultSetNumber: -1</member>
                    <member>dataTypeServices: null</member>
                    <member>; </member>
                </contents>
                <node>
                    
<nodeType>org.apache.derby.impl.sql.compile.ResultColumn</nodeType>
                    <contents>
                        <member>exposedName: A</member>
                        <member>name: A</member>
                        <member>tableName: null</member>
                        <member>isDefaultColumn: false</member>
                        <member>wasDefaultColumn: false</member>
                        <member>isNameGenerated: false</member>
                        <member>sourceTableName: null</member>
                        <member>type: null</member>
                        <member>columnDescriptor: null</member>
                        <member>isGenerated: false</member>
                        <member>isGeneratedForUnmatchedColumnInInsert: 
false</member>
                        <member>isGroupingColumn: false</member>
                        <member>isReferenced: false</member>
                        <member>isRedundant: false</member>
                        <member>virtualColumnId: 1</member>
                        <member>resultSetNumber: -1</member>
                        <member>dataTypeServices: null</member>
                    </contents>
                    <node>
                        
<nodeType>org.apache.derby.impl.sql.compile.ColumnReference</nodeType>
                        <contents>
                            <member>columnName: A</member>
                            <member>tableNumber: -1</member>
                            <member>columnNumber: 0</member>
                            <member>replacesAggregate: false</member>
                            <member>tableName: R</member>
                            <member>nestingLevel: -1</member>
                            <member>sourceLevel: -1</member>
                            <member>dataTypeServices: null</member>
                        </contents>
                    </node>
                </node>
            </node>
            <node>
                
<nodeType>org.apache.derby.impl.sql.compile.FromBaseTable</nodeType>
                <contents>
                    <member>tableName: R</member>
                    <member>tableDescriptor: null</member>
                    <member>updateOrDelete: 0</member>
                    <member>null</member>
                    <member>existsBaseTable: false</member>
                    <member>dependencyMap: null</member>
                    <member>correlation Name: null</member>
                    <member>null</member>
                    <member>tableNumber -1</member>
                    <member>level 0</member>
                    <member>resultSetNumber: 0</member>
                    <member>referencedTableMap: null</member>
                    <member>statementResultSet: false</member>
                </contents>
            </node>
            <node>
                
<nodeType>org.apache.derby.impl.sql.compile.FromBaseTable</nodeType>
                <contents>
                    <member>tableName: S</member>
                    <member>tableDescriptor: null</member>
                    <member>updateOrDelete: 0</member>
                    <member>null</member>
                    <member>existsBaseTable: false</member>
                    <member>dependencyMap: null</member>
                    <member>correlation Name: null</member>
                    <member>null</member>
                    <member>tableNumber -1</member>
                    <member>level 0</member>
                    <member>resultSetNumber: 0</member>
                    <member>referencedTableMap: null</member>
                    <member>statementResultSet: false</member>
                </contents>
            </node>
            <node>
                
<nodeType>org.apache.derby.impl.sql.compile.BinaryRelationalOperatorNode</nodeType>
                <contents>
                    <member>operator: =</member>
                    <member>methodName: equals</member>
                    <member>dataTypeServices: null</member>
                </contents>
                <node>
                    
<nodeType>org.apache.derby.impl.sql.compile.ColumnReference</nodeType>
                    <contents>
                        <member>columnName: B</member>
                        <member>tableNumber: -1</member>
                        <member>columnNumber: 0</member>
                        <member>replacesAggregate: false</member>
                        <member>tableName: R</member>
                        <member>nestingLevel: -1</member>
                        <member>sourceLevel: -1</member>
                        <member>dataTypeServices: null</member>
                    </contents>
                </node>
                <node>
                    
<nodeType>org.apache.derby.impl.sql.compile.ColumnReference</nodeType>
                    <contents>
                        <member>columnName: C</member>
                        <member>tableNumber: -1</member>
                        <member>columnNumber: 0</member>
                        <member>replacesAggregate: false</member>
                        <member>tableName: S</member>
                        <member>nestingLevel: -1</member>
                        <member>sourceLevel: -1</member>
                        <member>dataTypeServices: null</member>
                    </contents>
                </node>
            </node>
        </node>
    </node>
</queryTree>


> Expose api for printing Abstract Syntax Trees in production (non-debug) 
> servers
> -------------------------------------------------------------------------------
>
>                 Key: DERBY-791
>                 URL: https://issues.apache.org/jira/browse/DERBY-791
>             Project: Derby
>          Issue Type: Improvement
>          Components: SQL
>            Reporter: Rick Hillegas
>         Attachments: XmlTreeWalker.java
>
>
> Currently you can print Abstract Syntax Trees to derby.log by setting the 
> DumpParseTree tracepoint at server startup. E.g.:
> java -cp $CLASSPATH -Dderby.debug.true=DumpParseTree 
> -Dderby.stream.error.logSeverityLevel=0 org.apache.derby.tools.ij  z.sql
> This can be a useful debugging tool. However, it only works on debug servers 
> built with the following flags:
> sanity=true
> debug=true
> We should provide some mechanism for printing these trees in production 
> (non-debug) servers.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to