<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9</version>
</dependency>
import java.io.StringReader;
import java.util.List;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.replace.Replace;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.util.TablesNamesFinder;
public class DataPermissionSqlUtil {
private static CCJSqlParserManager pm = new CCJSqlParserManager();
/**
* detect table names from given table
* ATTENTION : WE WILL SKIP SCALAR SUBQUERY IN PROJECTION CLAUSE
* */
private static List<String> getTableNames(String sql) throws Exception {
List<String> tablenames = null;
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
Statement statement = pm.parse(new StringReader(sql));
if (statement instanceof Select) {
tablenames = tablesNamesFinder.getTableList((Select) statement);
} else if (statement instanceof Update) {
return null;
} else if (statement instanceof Delete) {
return null;
} else if (statement instanceof Replace) {
return null;
} else if (statement instanceof Insert) {
return null;
}
return tablenames;
}
public static void main(String[] args) {
String sql = " select d.* from (SELECT qt.qt_org_id as orgId,qt.qt_owner_id as ownerId,own.OWN_NAME as ownerName, mat.mat_barcode as matBarcode, mat.MAT_CODE as matCode, mat.MAT_NAME as matName, "
+ " m.avgDailyOutboundQty as avgDailyOutboundQty, sum(qt.QT_ONHAND_QTY) availableQty"
+ " from riv_quant qt "
+ " right join (select ONH_OWNER_ID as ownId, chl.CHL_MATERIAL_ID as matId"
+ " from riv_check_l chl "
+ " INNER JOIN riv_outbound_notice_h onh on onh.ONH_ID = chl.CHL_ONH_ID "
+ " where onh.onh_status = 90 "
+ " GROUP BY chl.CHL_MATERIAL_ID) m on m.matId = qt.QT_MATERIAL_ID "
+ " INNER JOIN riv_owner own on own.OWN_ID = qt.QT_OWNER_ID "
+ " inner join riv_material mat on mat.mat_id = qt.QT_MATERIAL_ID "
+ " GROUP BY m.ownId, m.matId) d ";
try {
List<String> tablenames = getTableNames(sql);
System.out.println(tablenames);
} catch (Exception e) {
e.printStackTrace();
}
}
}
[riv_quant, riv_check_l, riv_outbound_notice_h, riv_owner, riv_material]