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 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; } } }