001import gudusoft.gsqlparser.EDbVendor; 002import gudusoft.gsqlparser.TAttributeNode; 003import gudusoft.gsqlparser.TBaseType; 004import gudusoft.gsqlparser.TGSqlParser; 005import gudusoft.gsqlparser.compiler.TASTEvaluator; 006import gudusoft.gsqlparser.compiler.TGlobalScope; 007import gudusoft.gsqlparser.nodes.TObjectName; 008import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 009import gudusoft.gsqlparser.nodes.TRelationExpr; 010import gudusoft.gsqlparser.nodes.TResultColumn; 011import gudusoft.gsqlparser.sqlenv.TSQLEnv; 012import gudusoft.gsqlparser.stmt.TInsertSqlStatement; 013import gudusoft.gsqlparser.stmt.TSelectSqlStatement; 014 015import java.io.IOException; 016 017public class traceColumn { 018 public static void main(String args[]) throws IOException { 019 EDbVendor dbVendor = EDbVendor.dbvnetezza; 020 TGSqlParser sqlParser = new TGSqlParser(dbVendor); 021 String inputFile = "c:\\prg\\tmp\\demo.sql"; 022 sqlParser.sqlfilename = inputFile; 023 024// String inputSQL = "CREATE TABLE\n" + 025// " solidatus-dev.data.RETAIL_PROD_EXCEPTIONS_SOURCE ( __uuid STRING,\n" + 026// " from_date TIMESTAMP,\n" + 027// " to_date TIMESTAMP,\n" + 028// " adjustment_info ARRAY<STRUCT<adjustment_table_name STRING>>,\n" + 029// " entity_uuid STRING,\n" + 030// " __metadata ARRAY < STRUCT < attribute STRING,\n" + 031// " data_type STRING,\n" + 032// " value STRING > > );\n" + 033// "CREATE TABLE\n" + 034// " solidatus-dev.data.RETAIL_PROD_REPAIR ( __uuid STRING,\n" + 035// " from_date TIMESTAMP,\n" + 036// " to_date TIMESTAMP,\n" + 037// " adjustment_info ARRAY<STRUCT<adjustment_table_name STRING>>,\n" + 038// " entity_uuid STRING,\n" + 039// " __metadata ARRAY<STRUCT<attribute STRING,\n" + 040// " data_type STRING,\n" + 041// " value STRING>> );\n" + 042// "CREATE TABLE\n" + 043// " solidatus-dev.data.FOTC_RD_EXCEPTION_FILE_PROCESSING ( Source_System_Type STRING,\n" + 044// " Processing_Type STRING );\n" + 045// "CREATE TABLE\n" + 046// " solidatus-dev.data.RETAIL_PROD_SOURCE ( __uuid STRING,\n" + 047// " from_date TIMESTAMP,\n" + 048// " to_date TIMESTAMP,\n" + 049// " adjustment_info ARRAY<STRUCT<adjustment_table_name STRING>>,\n" + 050// " entity_uuid STRING,\n" + 051// " __metadata ARRAY<STRUCT<attribute STRING,\n" + 052// " data_type STRING,\n" + 053// " value STRING>> );\n" + 054// "\t\n" + 055// "INSERT INTO `solidatus-dev.data.RETAIL_PROD_REPAIR`\n" + 056// "WITH RETAIL_PROD_SOURCE_000100 AS (\n" + 057// "SELECT *\n" + 058// "FROM `data.RETAIL_PROD_SOURCE`\n" + 059// "WHERE CURRENT_TIMESTAMP() >= from_date\n" + 060// "AND CURRENT_TIMESTAMP() <= to_date ),\n" + 061// "RETAIL_PROD_SOURCE_000200 AS (\n" + 062// "SELECT * FROM RETAIL_PROD_SOURCE_000100),\n" + 063// "RETAIL_PROD_SOURCE_000300 AS (\n" + 064// "SELECT *\n" + 065// "FROM RETAIL_PROD_SOURCE_000200\n" + 066// "),\n" + 067// " EXCEPTION_RETAIL_000100 AS (\n" + 068// " SELECT\n" + 069// " RETAIL_PROD_EXCEPTIONS_SOURCE.*\n" + 070// " FROM\n" + 071// " `data.RETAIL_PROD_EXCEPTIONS_SOURCE`\n" + 072// "\t\tWHERE\n" + 073// " CURRENT_TIMESTAMP() >= from_date\n" + 074// " AND CURRENT_TIMESTAMP() <= to_date\n" + 075// "\t),\n" + 076// " EXCEPTION_RETAIL_000130 AS (\n" + 077// " SELECT\n" + 078// " EXCEPTION_RETAIL_000100.*\n" + 079// " FROM\n" + 080// " EXCEPTION_RETAIL_000100\n" + 081// " ),\n" + 082// " RETAIL_PROD_SOURCE_000400 AS (\n" + 083// " SELECT\n" + 084// " RETAIL_PROD_SOURCE_000300.*\n" + 085// " FROM\n" + 086// " RETAIL_PROD_SOURCE_000300\n" + 087// "),\n" + 088// "STAGE1 AS (\n" + 089// "SELECT\n" + 090// "__uuid,\n" + 091// "from_date,\n" + 092// "to_date,\n" + 093// "adjustment_info,\n" + 094// "entity_uuid,\n" + 095// "__metadata\n" + 096// "FROM RETAIL_PROD_SOURCE_000400\n" + 097// "UNION ALL ( SELECT\n" + 098// " __uuid,\n" + 099// "from_date,\n" + 100// "to_date,\n" + 101// "adjustment_info,\n" + 102// "entity_uuid,\n" + 103// "__metadata\n" + 104// " FROM\n" + 105// " EXCEPTION_RETAIL_000130\n" + 106// " ) ),\n" + 107// "STAGE2 AS (\n" + 108// "SELECT *\n" + 109// "FROM STAGE1)\n" + 110// "SELECT * EXCEPT(Record_Number_BT) FROM STAGE2\t"; 111// 112// sqlParser.sqltext = inputSQL; 113 114 int ret = sqlParser.parse(); 115 if (ret != 0){ 116 System.out.println(sqlParser.getErrormessage()); 117 return ; 118 } 119 120 //TInsertSqlStatement insertSqlStatement = (TInsertSqlStatement) sqlParser.sqlstatements.get(4); 121 //TSelectSqlStatement s = insertSqlStatement.getSubQuery(); 122 TSelectSqlStatement s = (TSelectSqlStatement)sqlParser.sqlstatements.get(0); 123 TResultColumn rs = s.getResultColumnList().getResultColumn(0); 124 TObjectName starColumn = rs.getExpr().getObjectOperand(); 125 for(TAttributeNode attributeNode:starColumn.getAttributeNodesDerivedFromFromClause()){ 126 printAttribute(attributeNode,0); 127 } 128 } 129 130 static void printAttribute(TAttributeNode attributeNode,int level){ 131 String padSpace = TBaseType.numberOfSpace(level*8,' '); 132 if (attributeNode.getSqlColumn() != null){ 133 System.out.println(String.format("%sName: %s, SQL column: %s", padSpace,attributeNode.getName(), attributeNode.getSqlColumn().toString() )); 134 } 135 136 if (attributeNode.getSubLevelResultColumn() != null){ 137 System.out.println(String.format("%sName: %s, Select list column: %s", padSpace,attributeNode.getName(), attributeNode.getSubLevelResultColumn().toString() )); 138 TResultColumn resultColumn = attributeNode.getSubLevelResultColumn(); 139 if (resultColumn.toString().endsWith("*")){ 140 TObjectName starColumn = resultColumn.getExpr().getObjectOperand(); 141 for(TAttributeNode a:starColumn.getAttributeNodesDerivedFromFromClause()){ 142 if (TBaseType.getLastPartOfQualifiedName(attributeNode.getName()).equalsIgnoreCase(TBaseType.getLastPartOfQualifiedName(a.getName()))){ 143 System.out.println(String.format("%s%s%s",padSpace,"\t", a.getName())); 144 printAttribute(a,level+1); 145 break; 146 } 147 } 148 }else{ 149 System.out.println(String.format("%s%s%s",padSpace,"\t", resultColumn.toString())); 150 RCVisitor rcVisitor = new RCVisitor(level+1); 151 resultColumn.acceptChildren(rcVisitor); 152 } 153 }else{ 154 System.out.println(String.format("%sName: %s, End of trace ", padSpace,attributeNode.getName())); 155 } 156 157 if (attributeNode.getAccompaniedAttributeNodes().size() > 0){ 158 System.out.println(String.format("%sFound accompanied attribute nodes: %d", padSpace, attributeNode.getAccompaniedAttributeNodes().size())); 159 for(TAttributeNode n: attributeNode.getAccompaniedAttributeNodes()){ 160 printAttribute(n,level); 161 } 162 } 163 164 } 165} 166 167class RCVisitor extends TParseTreeVisitor { 168 int level; 169 public RCVisitor(int level){ 170 this.level = level; 171 } 172 public void preVisit(TObjectName node) { 173 String padSpace = TBaseType.numberOfSpace(level*8,' '); 174 if (node.getSourceAttributeNode() != null){ 175 traceColumn.printAttribute(node.getSourceAttributeNode(),level); 176 }else { 177 System.out.println(String.format("%s%s",padSpace,node.toString()) ); 178 } 179 } 180}