From 8f27e65bddd7d4b8515ce620fb485fdd78fcdf89 Mon Sep 17 00:00:00 2001 From: Constantin Jucovschi Date: Fri, 24 Apr 2009 07:20:22 -0400 Subject: Initial commit --- java/examples/TestQuery.java | 749 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 749 insertions(+) create mode 100644 java/examples/TestQuery.java (limited to 'java/examples/TestQuery.java') diff --git a/java/examples/TestQuery.java b/java/examples/TestQuery.java new file mode 100644 index 0000000..ac0bb30 --- /dev/null +++ b/java/examples/TestQuery.java @@ -0,0 +1,749 @@ +/* +* This file is part of rasdaman community. +* +* Rasdaman community is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Rasdaman community is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with rasdaman community. If not, see . +* +* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / +rasdaman GmbH. +* +* For more information please see +* or contact Peter Baumann via . +*/ +/************************************************************* + * + * + * PURPOSE: used in RMANHOME/systemtest/testjava.sh + * + * + ************************************************************/ +package examples; + +import rasj.*; +import rasj.odmg.*; +import org.odmg.*; +import java.util.*; +import java.io.*; + +/** + * used in RMANHOME/systemtest/testjava.sh + * + * set the server name with -server, the database name with -database, the collection name with -collection, + * set port number with -port, the user login with -user, the password with -passwd, + * and path to query file with -queryfile, path to log file with -logfile, path to query test directory wtih -testdirectory + */ + +class Record + { + + static StringBuffer locQuery = new StringBuffer(20000); + static StringBuffer locExpected = new StringBuffer(20000); + + boolean commitBefore = false; + String queryFileShortName = null; + String queryFileFullName = null; + String query = null; + String expectedFile = null; + String expected = null; + volatile String answer = null; + volatile DBag result = null; + + boolean loadQuery() + { + FileReader fr = null; + BufferedReader in = null; + boolean answer = true; + String ret = null; + + try + { + if(queryFileFullName == null) return false; + //System.out.println(file); + fr = new FileReader(queryFileFullName); + in = new BufferedReader(fr); + String s; + + locQuery.delete(0, locQuery.length()); + locQuery.append( "-- " + queryFileFullName + "\n"); + while((s = in.readLine()) != null) + { + locQuery.append("\n" + s); + } + + query = locQuery.toString(); + } + catch(FileNotFoundException e) + { + ret = "Query-file not found!\n"+e.getMessage(); + System.err.println(ret); + answer = false; + } + catch(IOException e) + { + ret = "Could not read Query-file!\n"+e.getMessage(); + System.err.println(ret); + answer = false; + } + finally + { + try{ + if(in != null) in.close(); + if(fr != null) fr.close(); + } + catch(Exception e){} + } + return answer; + } + + boolean loadExpected() + { + FileReader fr = null; + BufferedReader in = null; + boolean answer = true; + String ret = null; + String s = null; + + try + { + if(expectedFile == null) return false; + //System.out.println(file); + fr = new FileReader(expectedFile); + in = new BufferedReader(fr); + locExpected.delete(0, locExpected.length()); + + if((s=in.readLine()) != null) + locExpected.append(s); + while((s = in.readLine()) != null) + { + locExpected.append("\n" + s); + } + + expected = locExpected.toString(); + } + catch(FileNotFoundException e) + { + ret = "Expected-file not found!\n"+e.getMessage(); + System.err.println(ret); + answer = false; + } + catch(IOException e) + { + ret = "Could not read expected-file!\n"+e.getMessage(); + System.err.println(ret); + answer = false; + } + finally + { + try{ + if(in != null) in.close(); + if(fr != null) fr.close(); + } + catch(Exception e){} + } + return answer; + } + } + +class FilesToProcess + { + Vector records; + + + FilesToProcess(String path) throws Exception + { + records = new Vector(); + + File filePath = new File(path); + processPath(filePath); + loadAllQueries(); + } + + Record getRecord(int i) + { + return (Record)records.get(i); + } + + int countRecords() + { + return records.size(); + } + + void print() + { + System.out.println("List of all files to process"); + for(int i = 0; i 0 && i < s.length() - 1) + { + ext = s.substring(i+1).toLowerCase(); + } + return ext; + } + + private void loadAllQueries() + { + for(int i = 0; i ""; good result -> null; + // bad result -> error text built from the following catch's + return ret; + } + catch(RasRuntimeException e) + { + ret = "\n RasRuntimeException: " + e.getMessage(); + } + catch(RasException e) + { + ret = "\n RasException: "+e.getMessage(); + } + catch (org.odmg.ODMGException e) + { + ret = "\n ODMGException: "+ e.getMessage(); + } + return ret; + } + + void connectToRasDaMan() throws ODMGException, RasRuntimeException, ODMGRuntimeException + { + if(myTa != null) return; + + myApp = new RasImplementation("http://"+server+":"+port); + ((RasImplementation)myApp).setUserIdentification(user, passwd); + myDb = myApp.newDatabase(); + myTa = myApp.newTransaction(); + + tryOpenDatabase(); + } + + void clearConnection(boolean error) + { + try{ + if(myTa != null) + if(error) myTa.abort(); + else myTa.commit(); + if(myDb != null) myDb.close(); + myTa = null; + myDb = null; + myApp = null; + } + catch ( org.odmg.ODMGException exp ) + { + // can't heapen, our DB.close doesn't throw anything + } + } + + void createQueryObject(String query) throws org.odmg.ODMGException, RasRuntimeException, RasException + { + myQu = myApp.newOQLQuery(); + + myQu.create(query); + + StringTokenizer strTok = new StringTokenizer(query, "$"); + RasMInterval domain; + RasGMArray mddConst; + if(strTok.hasMoreTokens()) strTok.nextToken(); + + while(strTok.hasMoreTokens()) + { + strTok.nextToken(); + domain = new RasMInterval("[0:10,0:10]"); + RasStorageLayout stl = new RasStorageLayout(); + stl.setTileSize(8); + mddConst = new RasGMArray(domain, 4, stl); + byte[] data = new byte[mddConst.getArray().length]; + for(int j = 0; j < data.length; j++) + { data[j] = (byte)j; + } + mddConst.setArray(data); + mddConst.setObjectTypeName("ULongImage"); + //System.out.println(mddConst); + myQu.bind(mddConst); + } + accessMode=Database.OPEN_READ_WRITE; + // we cache transactions, so let it like this + /* + if(isUpdateQuery(query)) + accessMode=Database.OPEN_READ_WRITE; + else + accessMode=Database.OPEN_READ_ONLY; + */ + } + + void tryOpenDatabase() throws ODMGException, RasRuntimeException, ODMGRuntimeException + { + countRetry=0; + while(true) + { + try + { + //System.out.println( "Opening database ..." ); + myDb.open( database, accessMode); + + //System.out.println( "Starting transaction ..." ); + myTa.begin(); + + break; + } + catch(RasRuntimeException e) + { + if(eatException() == false) + { clearConnection(true); + throw e; + } + } + catch (ODMGException e) + { + if(eatException() == false) + { clearConnection(true); + throw e; + } + } + catch (ODMGRuntimeException e) + { + if(eatException() == false) + { clearConnection(true); + throw e; + } + } + } + } + + boolean eatException() + { + boolean retval=false; + + countRetry++; + if((countRetry % 1000) == 0) + System.out.println( "Server busy, retry ... " + countRetry + " / " + noOfRetries ); + + if(countRetryRecord.answer + AnswerConvertor answerConvertor = new AnswerConvertor(fp); + answerConvertor.start(); + + // this brings the expected results from disk - starts the least because it's very fast + ExpectedLoader exp = new ExpectedLoader(fp); + exp.start(); + + //used to write the output if is requested + FileWriter outputFW = null; + + for(int i=0;i < fp.countRecords(); i++) + { + Record record = fp.getRecord(i); + + while(record.answer == null) { try { Thread.sleep(1000); } catch(Exception e){} } + + System.out.print("" + (i+1) + ": " + record.queryFileShortName); + if(record.answer.equals(record.expected)) + { + System.out.println(" OK"); + logWriter.write(i + ": OK (" + record.queryFileFullName + ")\n"); + } + else + { + System.out.println(" FAILED!"); + logWriter.write(i + ": FAILED (" + record.queryFileFullName + ")\n"); + if(dontDeleteResultFile == true) + { + try + { + outputFW=new FileWriter(record.queryFileFullName + ".java.tmp"); + outputFW.write(record.answer); + outputFW.close(); + outputFW=null; + } + catch(Exception a) + { + if(outputFW != null) + { + try + { + outputFW.close(); + } + catch(Exception b) + { + } + } + } + } + logWriter.write(" expected=" + record.expected + "\n but got=" + record.answer + "\n"); + } + } + + //put time stamp + end = new Date(); + System.out.println("Test ended at: " + end.toString()); + logWriter.println("TEST JAVA ENDED AT: " + end.toString()); + + logWriter.close(); + logWriter = null; + start=null; + end=null; + } + + static PrintWriter openLogWriter(String logFileName) { + if(logFileName == null || logFileName.equals("")) { + System.out.println("No logfile name provided!"); + return null; + } + + try { + FileOutputStream fos = new FileOutputStream(logFileName, true); + return new PrintWriter(fos); + } + catch(FileNotFoundException e) { + System.out.println("Log-file not found!\n"+e.getMessage()); + } + catch(IOException e) { + System.out.println("Could not write Log-file!\n"+e.getMessage()); + } + + return null; + } + + } + + -- cgit