arthasdk icon

Query Parser

arthasdk | PRO | 11/19/14 02:29:49 AM UTC | 0 ⭐ | 473 👁️ | Never ⏰ | []
Java |

3.28 KB

|

None

|

0 👍

/

0 👎

package myProj;
 
 
 
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;
 
import com.foundationdb.sql.*;
import com.foundationdb.sql.parser.*;
import com.foundationdb.sql.unparser.*;
 
 
 
public class TestC {
 
    
 
    public static void main(String[] args) throws StandardException {
        SQLParser parser = new SQLParser();
        String s="SELECT MIRL.INVOICE_REQ_LINE_ID, MIRL.COLLECTION_OFFICE , MIRL.PREPAID_COLLECT, MIRL.ITEM_CODE , MIRL.LINE_AMOUNT_QUOTED, MIRL.CURRENCY_CODE , MIRL.UNIT_PRICE_QUOTED , MIRL.QUANTITY, MIRL.OWNER_OF_INCOME FROM CODSBRK.MLIS_INVOICE MIR INNER JOIN CODSBRK.MLIS_INVOICE_LINE MIRL ON MIR.TPDOC_NO = MIRL.TPDOC_NO AND MIR.INVOICE_REQ_ID = MIRL.INVOICE_REQ_ID WHERE MIR.TPDOC_NO =? AND MIR.INVOICE_STATUS = ? WITH UR";
        
        StatementNode stmt = parser.parseStatement(s);
        NodeToString nodeToString = new NodeToString();
        
        //stmt.treePrint();
        
        String s1="SELECT LINK.INSTANCE_ID, LINK.FK_RTE_PNT_START, LINK.FK_RTE_PNT_END, LINK.DEPART_TIME_LOCAL_EXPECT, LINK.ARRVL_TIME_LOCAL_EXPECT, LINK.DEPART_TIME_UTC_EXPCTD, LINK.ARRVL_TIME_UTC_EXPCTD, LINK.FK_MEPC_TRNSPRT_MODE, LINK.MEPC_LINK_ID, LINK.RKST_CARRIER_CD, LINK.WATER_LAND_MODE, LINK.FK_RKSTVES_PART_VEHICLE, LINK.RKSTVES_PART_VEHICLE, LINK.VEHICLE_VOYG_NUM, LINK.FK_ROUTE, LINK.ROUTNG_TYPE, LINK.IS_OUT_OF_CNTRCT_SCOPE, STRT.POINT_SEQ, STRT.FK_GEO_SITE DEP_SITE_CD, ENDP.FK_GEO_SITE ARR_SITE_CD, STRT.GEO_SITE DEP_SITE_CD_X, ENDP.GEO_SITE ARR_SITE_CD_X FROM (SELECT INSTANCE_ID, FK_RTE_PNT_START, FK_RTE_PNT_END, DEPART_TIME_LOCAL_EXPECT, ARRVL_TIME_LOCAL_EXPECT, DEPART_TIME_UTC_EXPCTD, ARRVL_TIME_UTC_EXPCTD, FK_MEPC_TRNSPRT_MODE, MEPC_LINK_ID, RKST_CARRIER_CD, WATER_LAND_MODE, FK_RKSTVES_PART_VEHICLE, RKSTVES_PART_VEHICLE, VEHICLE_VOYG_NUM, FK_ROUTE, ROUTNG_TYPE, IS_OUT_OF_CNTRCT_SCOPE FROM CODSBRK.GCSS_ROUTE_LINK WHERE FK_ROUTE = ?) LINK LEFT OUTER JOIN CODSBRK.GCSS_ROUTE_POINT STRT ON STRT.INSTANCE_ID = LINK.FK_RTE_PNT_START LEFT OUTER JOIN CODSBRK.GCSS_ROUTE_POINT ENDP ON ENDP.INSTANCE_ID = LINK.FK_RTE_PNT_END ORDER BY STRT.POINT_SEQ WITH UR";
        stmt = parser.parseStatement(s1);
        //stmt.treePrint();
        TableFinder finder = new TableFinder();
        stmt.accept(finder);
        for(TableName tn : finder.tableNames) {
            System.out.println("table " + tn);
        }
        
    }
    
    
    
    
    
    private static class TableFinder implements Visitor
    {
        public List<TableName> tableNames = new ArrayList<>();
 
        public Visitable visit(Visitable node) throws StandardException {
            if(node instanceof FromList) {
                FromList fl = (FromList)node;
                for(int i = 0; i < fl.size(); ++i) {
                    tableNames.add(fl.get(i).getTableName());
                }
            }
            
            
            return node;
        }
 
        public boolean visitChildrenFirst(Visitable node) {
            return false;
        }
 
        public boolean stopTraversal() {
            return false;
        }
 
        public boolean skipChildren(Visitable node) throws StandardException {
            return false;
        }
    }
    
    
    
    
 
}

Comments