1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package mod._dbaccess; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import java.io.PrintWriter; 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski import lib.StatusException; 29*b1cdbd2cSJim Jagielski import lib.TestCase; 30*b1cdbd2cSJim Jagielski import lib.TestEnvironment; 31*b1cdbd2cSJim Jagielski import lib.TestParameters; 32*b1cdbd2cSJim Jagielski import util.DBTools; 33*b1cdbd2cSJim Jagielski import util.utils; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 36*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameAccess; 37*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 38*b1cdbd2cSJim Jagielski import com.sun.star.sdb.CommandType; 39*b1cdbd2cSJim Jagielski import com.sun.star.sdb.XSingleSelectQueryAnalyzer; 40*b1cdbd2cSJim Jagielski import com.sun.star.sdb.XSingleSelectQueryComposer; 41*b1cdbd2cSJim Jagielski import com.sun.star.sdbc.XConnection; 42*b1cdbd2cSJim Jagielski import com.sun.star.sdbc.XDataSource; 43*b1cdbd2cSJim Jagielski import com.sun.star.sdbcx.XColumnsSupplier; 44*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter; 45*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type; 46*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 47*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface; 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski /** 50*b1cdbd2cSJim Jagielski * Test for object which is represented by service 51*b1cdbd2cSJim Jagielski * <code>com.sun.star.sdb.DataSource</code>. <p> 52*b1cdbd2cSJim Jagielski * 53*b1cdbd2cSJim Jagielski * Object implements the following interfaces : 54*b1cdbd2cSJim Jagielski * <ul> 55*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::RowSet</code></li> 56*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbcx::XRowLocate</code></li> 57*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XResultSetUpdate</code></li> 58*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::util::XCancellable</code></li> 59*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XParameters</code></li> 60*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XResultSetMetaDataSupplier</code></li> 61*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbcx::XDeleteRows</code></li> 62*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XCloseable</code></li> 63*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbcx::XColumnsSupplier</code></li> 64*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdb::XResultSetAccess</code></li> 65*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XResultSet</code></li> 66*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XColumnLocate</code></li> 67*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XRowSet</code></li> 68*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdb::RowSet</code></li> 69*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XRowUpdate</code></li> 70*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdb::XRowSetApproveBroadcaster</code></li> 71*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::beans::XPropertySet</code></li> 72*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XRow</code></li> 73*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::XWarningsSupplier</code></li> 74*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::lang::XComponent</code></li> 75*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbcx::ResultSet</code></li> 76*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sdbc::ResultSet</code></li> 77*b1cdbd2cSJim Jagielski * </ul> <p> 78*b1cdbd2cSJim Jagielski * The following files used by this test : 79*b1cdbd2cSJim Jagielski * <ul> 80*b1cdbd2cSJim Jagielski * <li><b> TestDB/TestDB.dbf </b> : the database file with some 81*b1cdbd2cSJim Jagielski * predefined fields described in <code>util.DBTools</code>. 82*b1cdbd2cSJim Jagielski * The copy of this file is always made in temp directory for 83*b1cdbd2cSJim Jagielski * testing purposes.</li> 84*b1cdbd2cSJim Jagielski * </ul> <p> 85*b1cdbd2cSJim Jagielski * The following parameters in ini-file used by this test: 86*b1cdbd2cSJim Jagielski * <ul> 87*b1cdbd2cSJim Jagielski * <li><code>test.db.url</code> - URL to MySQL database. 88*b1cdbd2cSJim Jagielski * For example: <code>mysql://mercury:3306/api_current</code></li> 89*b1cdbd2cSJim Jagielski * <li><code>test.db.user</code> - user for MySQL database</li> 90*b1cdbd2cSJim Jagielski * <li><code>test.db.password</code> - password for MySQL database</li> 91*b1cdbd2cSJim Jagielski * </ul><p> 92*b1cdbd2cSJim Jagielski * 93*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.RowSet 94*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbcx.XRowLocate 95*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XResultSetUpdate 96*b1cdbd2cSJim Jagielski * @see com.sun.star.util.XCancellable 97*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XParameters 98*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XResultSetMetaDataSupplier 99*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbcx.XDeleteRows 100*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XCloseable 101*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbcx.XColumnsSupplier 102*b1cdbd2cSJim Jagielski * @see com.sun.star.sdb.XResultSetAccess 103*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XResultSet 104*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XColumnLocate 105*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XRowSet 106*b1cdbd2cSJim Jagielski * @see com.sun.star.sdb.RowSet 107*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XRowUpdate 108*b1cdbd2cSJim Jagielski * @see com.sun.star.sdb.XRowSetApproveBroadcaster 109*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.XPropertySet 110*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XRow 111*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.XWarningsSupplier 112*b1cdbd2cSJim Jagielski * @see com.sun.star.lang.XComponent 113*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbcx.ResultSet 114*b1cdbd2cSJim Jagielski * @see com.sun.star.sdbc.ResultSet 115*b1cdbd2cSJim Jagielski * @see ifc.sdbc._RowSet 116*b1cdbd2cSJim Jagielski * @see ifc.sdbcx._XRowLocate 117*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XResultSetUpdate 118*b1cdbd2cSJim Jagielski * @see ifc.util._XCancellable 119*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XParameters 120*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XResultSetMetaDataSupplier 121*b1cdbd2cSJim Jagielski * @see ifc.sdbcx._XDeleteRows 122*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XCloseable 123*b1cdbd2cSJim Jagielski * @see ifc.sdbcx._XColumnsSupplier 124*b1cdbd2cSJim Jagielski * @see ifc.sdb._XResultSetAccess 125*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XResultSet 126*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XColumnLocate 127*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XRowSet 128*b1cdbd2cSJim Jagielski * @see ifc.sdb._RowSet 129*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XRowUpdate 130*b1cdbd2cSJim Jagielski * @see ifc.sdb._XRowSetApproveBroadcaster 131*b1cdbd2cSJim Jagielski * @see ifc.beans._XPropertySet 132*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XRow 133*b1cdbd2cSJim Jagielski * @see ifc.sdbc._XWarningsSupplier 134*b1cdbd2cSJim Jagielski * @see ifc.lang._XComponent 135*b1cdbd2cSJim Jagielski * @see ifc.sdbcx._ResultSet 136*b1cdbd2cSJim Jagielski * @see ifc.sdbc._ResultSet 137*b1cdbd2cSJim Jagielski */ 138*b1cdbd2cSJim Jagielski public class OSingleSelectQueryComposer extends TestCase { 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski private static int uniqueSuffix = 0 ; 141*b1cdbd2cSJim Jagielski private DBTools dbTools = null ; 142*b1cdbd2cSJim Jagielski private static String origDB = null ; 143*b1cdbd2cSJim Jagielski private PrintWriter log = null ; 144*b1cdbd2cSJim Jagielski private static String tmpDir = null ; 145*b1cdbd2cSJim Jagielski String tableName = null; 146*b1cdbd2cSJim Jagielski DBTools.DataSourceInfo srcInf = null; 147*b1cdbd2cSJim Jagielski boolean isMySQLDB = false; 148*b1cdbd2cSJim Jagielski protected final static String dbSourceName = "OSingleSelectQueryComposerDataSource"; 149*b1cdbd2cSJim Jagielski public XConnection conn = null; 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski initialize( TestParameters Param, PrintWriter log)152*b1cdbd2cSJim Jagielski protected void initialize ( TestParameters Param, PrintWriter log) 153*b1cdbd2cSJim Jagielski throws StatusException { 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski /** 158*b1cdbd2cSJim Jagielski * Creating a Testenvironment for the interfaces to be tested. 159*b1cdbd2cSJim Jagielski * 160*b1cdbd2cSJim Jagielski * Object relations created : 161*b1cdbd2cSJim Jagielski * <ul>SingleSelectQueryAnalyzer 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski * <li> <code>'xComposer'</code> for 164*b1cdbd2cSJim Jagielski * {@link ifc.sdb._XSingleSelectQueryAnalyzer} interface 165*b1cdbd2cSJim Jagielski * <li> <code>'xQueryAna'</code> for 166*b1cdbd2cSJim Jagielski * {@link ifc.sdb._XSingleSelectQueryComposer} interface 167*b1cdbd2cSJim Jagielski * <li> <code>'xProp'</code> for 168*b1cdbd2cSJim Jagielski * {@link ifc.sdb._XSingleSelectQueryComposer} interface 169*b1cdbd2cSJim Jagielski * <li> <code>'colName'</code> for 170*b1cdbd2cSJim Jagielski * {@link ifc.sdb._XSingleSelectQueryComposer} interface 171*b1cdbd2cSJim Jagielski * </ul> 172*b1cdbd2cSJim Jagielski * 173*b1cdbd2cSJim Jagielski */ createTestEnvironment(TestParameters Param, PrintWriter log)174*b1cdbd2cSJim Jagielski protected TestEnvironment createTestEnvironment(TestParameters Param, 175*b1cdbd2cSJim Jagielski PrintWriter log) { 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski XInterface oObj = null; 178*b1cdbd2cSJim Jagielski Object oInterface = null; 179*b1cdbd2cSJim Jagielski XMultiServiceFactory xMSF = null ; 180*b1cdbd2cSJim Jagielski boolean envCreatedOK = false ; 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski try { 184*b1cdbd2cSJim Jagielski xMSF = (XMultiServiceFactory)Param.getMSF(); 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski XNameAccess xNameAccess = (XNameAccess)UnoRuntime.queryInterface( 187*b1cdbd2cSJim Jagielski XNameAccess.class, 188*b1cdbd2cSJim Jagielski xMSF.createInstance("com.sun.star.sdb.DatabaseContext")); 189*b1cdbd2cSJim Jagielski // we use the first datasource 190*b1cdbd2cSJim Jagielski XDataSource xDS = (XDataSource)UnoRuntime.queryInterface( 191*b1cdbd2cSJim Jagielski XDataSource.class, xNameAccess.getByName( "Bibliography" )); 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski log.println("check XMultiServiceFactory"); 194*b1cdbd2cSJim Jagielski XMultiServiceFactory xConn = (XMultiServiceFactory) 195*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XMultiServiceFactory.class, 196*b1cdbd2cSJim Jagielski xDS.getConnection(new String(),new String())); 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski log.println("check getAvailableServiceNames"); 199*b1cdbd2cSJim Jagielski String[] sServiceNames = xConn.getAvailableServiceNames(); 200*b1cdbd2cSJim Jagielski if (! sServiceNames[0].equals("com.sun.star.sdb.SingleSelectQueryComposer")) 201*b1cdbd2cSJim Jagielski { 202*b1cdbd2cSJim Jagielski log.println("Service 'SingleSelectQueryComposer' not supported"); 203*b1cdbd2cSJim Jagielski } 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski oInterface = (XInterface) xConn.createInstance( sServiceNames[0]); 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski if (oInterface == null) { 208*b1cdbd2cSJim Jagielski log.println("Service wasn't created") ; 209*b1cdbd2cSJim Jagielski throw new StatusException("Service wasn't created", 210*b1cdbd2cSJim Jagielski new NullPointerException()) ; 211*b1cdbd2cSJim Jagielski } 212*b1cdbd2cSJim Jagielski 213*b1cdbd2cSJim Jagielski Object oRowSet = xMSF.createInstance("com.sun.star.sdb.RowSet") ; 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski XPropertySet xSetProp = (XPropertySet) UnoRuntime.queryInterface 216*b1cdbd2cSJim Jagielski (XPropertySet.class, oRowSet) ; 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielski xSetProp.setPropertyValue("DataSourceName", "Bibliography") ; 219*b1cdbd2cSJim Jagielski xSetProp.setPropertyValue("Command", "biblio") ; 220*b1cdbd2cSJim Jagielski xSetProp.setPropertyValue("CommandType", 221*b1cdbd2cSJim Jagielski new Integer(CommandType.TABLE)) ; 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski com.sun.star.sdbc.XRowSet xORowSet = (com.sun.star.sdbc.XRowSet) 224*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(com.sun.star.sdbc.XRowSet.class, 225*b1cdbd2cSJim Jagielski oRowSet) ; 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski xORowSet.execute() ; 228*b1cdbd2cSJim Jagielski 229*b1cdbd2cSJim Jagielski XColumnsSupplier xColSup = (XColumnsSupplier) 230*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XColumnsSupplier.class, oRowSet); 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski XNameAccess xCols = xColSup.getColumns(); 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski XPropertySet xCol = (XPropertySet) AnyConverter.toObject( 235*b1cdbd2cSJim Jagielski new Type(XPropertySet.class), 236*b1cdbd2cSJim Jagielski xCols.getByName(xCols.getElementNames()[0])); 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski XSingleSelectQueryAnalyzer xQueryAna = (XSingleSelectQueryAnalyzer) 239*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XSingleSelectQueryAnalyzer.class, 240*b1cdbd2cSJim Jagielski oInterface); 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski // XSingleSelectQueryComposer 243*b1cdbd2cSJim Jagielski XSingleSelectQueryComposer xComposer = (XSingleSelectQueryComposer) 244*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XSingleSelectQueryComposer.class, 245*b1cdbd2cSJim Jagielski xQueryAna); 246*b1cdbd2cSJim Jagielski xQueryAna.setQuery("SELECT * FROM \"biblio\""); 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski oObj = (XInterface) oInterface; 249*b1cdbd2cSJim Jagielski log.println("ImplementationName: " + utils.getImplName(oObj)); 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski log.println( " creating a new environment for object" ); 252*b1cdbd2cSJim Jagielski TestEnvironment tEnv = new TestEnvironment( oObj ); 253*b1cdbd2cSJim Jagielski 254*b1cdbd2cSJim Jagielski // for XSingleSelectQueryAnalyzer 255*b1cdbd2cSJim Jagielski tEnv.addObjRelation("xComposer", xComposer); 256*b1cdbd2cSJim Jagielski 257*b1cdbd2cSJim Jagielski // for XSingleSelectQueryComposer 258*b1cdbd2cSJim Jagielski tEnv.addObjRelation("xQueryAna", xQueryAna); 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski tEnv.addObjRelation("xProp", xCol); 261*b1cdbd2cSJim Jagielski tEnv.addObjRelation("colName", xCols.getElementNames()[0]); 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielski envCreatedOK = true ; 264*b1cdbd2cSJim Jagielski return tEnv; 265*b1cdbd2cSJim Jagielski 266*b1cdbd2cSJim Jagielski } catch(com.sun.star.uno.Exception e) { 267*b1cdbd2cSJim Jagielski log.println("Can't create object" ); 268*b1cdbd2cSJim Jagielski e.printStackTrace(log) ; 269*b1cdbd2cSJim Jagielski throw new StatusException("Can't create object", e) ; 270*b1cdbd2cSJim Jagielski } 271*b1cdbd2cSJim Jagielski 272*b1cdbd2cSJim Jagielski } // finish method getTestEnvironment 273*b1cdbd2cSJim Jagielski 274*b1cdbd2cSJim Jagielski /** 275*b1cdbd2cSJim Jagielski * Closes connection of <code>RowSet</code> instance created. 276*b1cdbd2cSJim Jagielski */ cleanup( TestParameters Param, PrintWriter log)277*b1cdbd2cSJim Jagielski protected void cleanup( TestParameters Param, PrintWriter log) { 278*b1cdbd2cSJim Jagielski } 279*b1cdbd2cSJim Jagielski } 280