1 23 import org.objectweb.medor.api.MedorException; 24 import org.objectweb.medor.datasource.api.DataStore; 25 import org.objectweb.medor.datasource.lib.BasicDataStore; 26 import org.objectweb.medor.eval.api.ConnectionResources; 27 import org.objectweb.medor.eval.api.QueryEvaluator; 28 import org.objectweb.medor.eval.lib.MedorEvaluator; 29 import org.objectweb.medor.expression.api.ParameterOperand; 30 import org.objectweb.medor.expression.api.Expression; 31 import org.objectweb.medor.expression.api.ExpressionException; 32 import org.objectweb.medor.filter.api.FieldOperand; 33 import org.objectweb.medor.filter.lib.BasicFieldOperand; 34 import org.objectweb.medor.expression.lib.BasicParameterOperand; 35 import org.objectweb.medor.expression.lib.Lower; 36 import org.objectweb.medor.expression.lib.Minus; 37 import org.objectweb.medor.expression.lib.Plus; 38 import org.objectweb.medor.expression.lib.BasicOperand; 39 import org.objectweb.medor.optim.api.ExecPlanGenerator; 40 import org.objectweb.medor.optim.lib.IndexesGenerator; 41 import org.objectweb.medor.optim.lib.SourceCodeGeneratorCompiler; 42 import org.objectweb.medor.query.api.CalculatedField; 43 import org.objectweb.medor.query.api.PropagatedField; 44 import org.objectweb.medor.query.api.QueryLeaf; 45 import org.objectweb.medor.query.api.QueryTree; 46 import org.objectweb.medor.query.api.QueryTreeField; 47 import org.objectweb.medor.query.lib.SelectProject; 48 import org.objectweb.medor.query.rdb.api.QualifiedTable; 49 import org.objectweb.medor.query.rdb.api.RdbField; 50 import org.objectweb.medor.query.rdb.api.RdbStringQueryLeaf; 51 import org.objectweb.medor.query.rdb.lib.BasicQualifiedTable; 52 import org.objectweb.medor.query.rdb.lib.BasicRdbStringQueryLeaf; 53 import org.objectweb.medor.tuple.api.TupleCollection; 54 import org.objectweb.medor.type.lib.PTypeSpaceMedor; 55 56 import java.io.File ; 57 import java.sql.Connection ; 58 import java.sql.SQLException ; 59 60 public class TestMedorCompiler { 61 public static void main(String arg[]) 62 throws ExpressionException, MedorException, SQLException { 63 String dbURL = new String ("jdbc:idb:c:/EnhydraDB/Examples/sample.prp"); 66 String sqlQuery1 = new String ("SELECT * FROM Sample$db$Cols"); 68 String sqlQuery2 = new String ("SELECT * FROM Sample$db$Cols$pKey"); 70 71 DataStore ds = new BasicDataStore(DataStore.JDBC_STORE, "sample.prp"); 72 QualifiedTable table1 = new BasicQualifiedTable("sample$db$Cols", "sampledbCols"); 73 74 RdbStringQueryLeaf sqlLeaf = new BasicRdbStringQueryLeaf(ds, sqlQuery1, ""); 76 77 RdbField field1 = sqlLeaf.addRdbField("ColID", PTypeSpaceMedor.INT, "ColID"); 79 RdbField field2 = sqlLeaf.addRdbField("TableId", PTypeSpaceMedor.INT, "TableId"); 80 RdbField field3 = sqlLeaf.addRdbField("ColName", PTypeSpaceMedor.STRING, "ColName"); 81 82 83 FieldOperand fieldOp = new BasicFieldOperand(field1); 86 BasicOperand value = new BasicOperand(1013); 87 Expression filter = new Lower(fieldOp, value); 88 SelectProject sp = new SelectProject(filter, ""); 90 91 PropagatedField pf1 = sp.addPropagatedField("Col_Att1", PTypeSpaceMedor.INT, new QueryTreeField[]{field1}); 93 PropagatedField pf2 = sp.addPropagatedField("TableID_Att2", PTypeSpaceMedor.INT, new QueryTreeField[]{field2}); 94 PropagatedField pf3 = sp.addPropagatedField("ColName_Att3", PTypeSpaceMedor.STRING, new QueryTreeField[]{field3}); 95 96 ParameterOperand x = new BasicParameterOperand(PTypeSpaceMedor.INT, "x"); 99 Expression exp1 = new Plus(new Plus(new BasicFieldOperand(field1), new BasicFieldOperand(field2)), x); 100 Expression exp2 = new Minus(new BasicFieldOperand(field1), new BasicFieldOperand(field2)); 102 CalculatedField cf1 = sp.addCalculatedField("Col_Att1 + TableID_Att2 + x", PTypeSpaceMedor.INT, exp1); 104 CalculatedField cf2 = sp.addCalculatedField("Col_Att1 -TableID_Att2", PTypeSpaceMedor.INT, exp2); 106 String idbdriver = "org.enhydra.instantdb.jdbc.idbDriver"; 108 JDBCConnection jdbcConn = new JDBCConnection(); 109 Connection connection = jdbcConn.getConnection(dbURL, idbdriver); 110 111 ExecPlanGenerator indexesGen = new IndexesGenerator(); 113 114 System.out.print(" Generating indexes..."); 115 QueryTree query1 = indexesGen.transform(sp); 116 System.out.println("success"); 117 118 119 String dir = "h:" + File.separator + "MedorRepositories" + File.separator + "Mars.Medor" + 120 File.separator + "build" + File.separator + "org" + File.separator + "objectweb" + 121 File.separator + "medor" + File.separator + "filter" + File.separator + "lib"; 122 String dir1 = "h:" + File.separator + "MedorRepositories" + File.separator + "Mars.Medor" + File.separator + "build"; 123 String dir2 = "h:" + File.separator + "MedorRepositories" + File.separator + "Mars.Medor" + File.separator + "src"; 124 125 SourceCodeGeneratorCompiler mComp = new SourceCodeGeneratorCompiler(dir, dir1, new String []{dir2}); 126 mComp.addLibraryPath("h:" + File.separator + "MedorRepositories" + File.separator + "Mars.Medor" + File.separator + "externals" + File.separator + "ow_jorm.jar"); 128 129 QueryTree query = mComp.transform(query1); 131 132 QueryEvaluator evaluator = new MedorEvaluator(query, 0); 134 135 ConnectionResources connRess = evaluator.getRequiredConnectionResources(); 137 138 QueryLeaf[] leafs = connRess.getRequiredQueryLeafConnection(); 140 141 for (int cpt = 0; (cpt < leafs.length); cpt++) { 143 connRess.setConnection(leafs[cpt], connection); } 145 146 x.setValue(-1800); 148 149 TupleCollection queryResult = null; 151 153 System.out.println("RESULTS :"); 155 int cpt = 0; 156 157 if (!queryResult.isEmpty()) { 158 do { 159 cpt++; 160 cpt++; 161 System.out.println("Tuple " + cpt + " :"); 162 System.out.println(queryResult.getMetaData().getField(1).getName() + 163 " = " + queryResult.getTuple().getObject(1)); 164 System.out.println(queryResult.getMetaData().getField(2).getName() + 165 " = " + queryResult.getTuple().getObject(2)); 166 System.out.println(queryResult.getMetaData().getField(3).getName() + 167 " = " + queryResult.getTuple().getObject(3)); 168 System.out.println(queryResult.getMetaData().getField(4).getName() + 169 " = " + queryResult.getTuple().getObject(4)); 170 System.out.println(); 171 } 172 while (queryResult.next()); 173 } 174 else 175 System.out.println("No result for this query"); 176 connection.close(); 177 } 178 } 179 | Popular Tags |