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