arthasdk

Query Parser

Nov 18th, 2014
486
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.28 KB | None | 0 0
  1. package myProj;
  2.  
  3.  
  4.  
  5. import java.io.BufferedWriter;
  6. import java.io.OutputStreamWriter;
  7. import java.io.Writer;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import java.util.TreeSet;
  11.  
  12. import com.foundationdb.sql.*;
  13. import com.foundationdb.sql.parser.*;
  14. import com.foundationdb.sql.unparser.*;
  15.  
  16.  
  17.  
  18. public class TestC {
  19.  
  20.    
  21.  
  22.     public static void main(String[] args) throws StandardException {
  23.         SQLParser parser = new SQLParser();
  24.         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";
  25.        
  26.         StatementNode stmt = parser.parseStatement(s);
  27.         NodeToString nodeToString = new NodeToString();
  28.        
  29.         //stmt.treePrint();
  30.        
  31.         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";
  32.         stmt = parser.parseStatement(s1);
  33.         //stmt.treePrint();
  34.         TableFinder finder = new TableFinder();
  35.         stmt.accept(finder);
  36.         for(TableName tn : finder.tableNames) {
  37.             System.out.println("table " + tn);
  38.         }
  39.        
  40.     }
  41.    
  42.    
  43.    
  44.    
  45.    
  46.     private static class TableFinder implements Visitor
  47.     {
  48.         public List<TableName> tableNames = new ArrayList<>();
  49.  
  50.         public Visitable visit(Visitable node) throws StandardException {
  51.             if(node instanceof FromList) {
  52.                 FromList fl = (FromList)node;
  53.                 for(int i = 0; i < fl.size(); ++i) {
  54.                     tableNames.add(fl.get(i).getTableName());
  55.                 }
  56.             }
  57.            
  58.            
  59.             return node;
  60.         }
  61.  
  62.         public boolean visitChildrenFirst(Visitable node) {
  63.             return false;
  64.         }
  65.  
  66.         public boolean stopTraversal() {
  67.             return false;
  68.         }
  69.  
  70.         public boolean skipChildren(Visitable node) throws StandardException {
  71.             return false;
  72.         }
  73.     }
  74.    
  75.    
  76.    
  77.    
  78.  
  79. }
Advertisement
Add Comment
Please, Sign In to add comment