EMMA Coverage Report (generated Wed Jun 28 19:54:35 CEST 2006)
[all classes][smallsql.database]

COVERAGE SUMMARY FOR SOURCE FILE [UnionAll.java]

nameclass, %method, %block, %line, %
UnionAll.java100% (1/1)43%  (13/30)60%  (208/346)60%  (48,9/81)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class UnionAll100% (1/1)43%  (13/30)60%  (208/346)60%  (48,9/81)
afterLast (): void 0%   (0/1)0%   (0/21)0%   (0/5)
beforeFirst (): void 0%   (0/1)0%   (0/16)0%   (0/5)
first (): boolean 0%   (0/1)0%   (0/22)0%   (0/5)
getBoolean (int): boolean 0%   (0/1)0%   (0/5)0%   (0/1)
getBytes (int): byte [] 0%   (0/1)0%   (0/5)0%   (0/1)
getDouble (int): double 0%   (0/1)0%   (0/5)0%   (0/1)
getFloat (int): float 0%   (0/1)0%   (0/5)0%   (0/1)
getInt (int): int 0%   (0/1)0%   (0/5)0%   (0/1)
getLong (int): long 0%   (0/1)0%   (0/5)0%   (0/1)
getMoney (int): long 0%   (0/1)0%   (0/5)0%   (0/1)
getNumeric (int): MutableNumeric 0%   (0/1)0%   (0/5)0%   (0/1)
getObject (int): Object 0%   (0/1)0%   (0/5)0%   (0/1)
getRow (): int 0%   (0/1)0%   (0/3)0%   (0/1)
isScrollable (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
nullRow (): void 0%   (0/1)0%   (0/7)0%   (0/3)
rowDeleted (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
rowInserted (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
init (SSConnection): boolean 100% (1/1)75%  (40/53)91%  (10/11)
next (): boolean 100% (1/1)98%  (50/51)99%  (9,9/10)
UnionAll (): void 100% (1/1)100% (8/8)100% (2/2)
addDataSource (DataSource): void 100% (1/1)100% (11/11)100% (3/3)
execute (): void 100% (1/1)100% (15/15)100% (3/3)
getBitCount (): int 100% (1/1)100% (16/16)100% (6/6)
getDataType (int): int 100% (1/1)100% (5/5)100% (1/1)
getRowPosition (): long 100% (1/1)100% (13/13)100% (2/2)
getString (int): String 100% (1/1)100% (5/5)100% (1/1)
getTableView (): TableView 100% (1/1)100% (4/4)100% (1/1)
isNull (int): boolean 100% (1/1)100% (5/5)100% (1/1)
noRow (): void 100% (1/1)100% (7/7)100% (3/3)
setRowPosition (long): void 100% (1/1)100% (29/29)100% (6/6)

1/* =============================================================
2 * SmallSQL : a free Java DBMS library for the Java(tm) platform
3 * =============================================================
4 *
5 * (C) Copyright 2004-2006, by Volker Berlin.
6 *
7 * Project Info:  http://www.smallsql.de/
8 *
9 * This library is free software; you can redistribute it and/or modify it 
10 * under the terms of the GNU Lesser General Public License as published by 
11 * the Free Software Foundation; either version 2.1 of the License, or 
12 * (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful, but 
15 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
16 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
17 * License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
22 * USA.  
23 *
24 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
25 * in the United States and other countries.]
26 *
27 * ---------------
28 * UnionAll.java
29 * ---------------
30 * Author: Volker Berlin
31 * 
32 * Created on 26.06.2004
33 */
34package smallsql.database;
35 
36 
37/**
38 * @author Volker Berlin
39 */
40final class UnionAll extends DataSource {
41 
42        private final DataSources dataSources = new DataSources();
43        private int dataSourceIdx;
44        private DataSource currentDS;
45        private int row;
46        
47        
48        void addDataSource(DataSource ds){
49                dataSources.add(ds);
50                currentDS = dataSources.get(0);
51        }
52        
53        
54/*=======================================================================
55 
56         Methods for interface DataSource
57 
58=======================================================================*/
59        
60        boolean init(SSConnection con) throws Exception{
61                boolean result = false;
62                int colCount = -1;
63                for(int i=0; i<dataSources.size(); i++){
64                        DataSource ds = dataSources.get(i);
65                        result |= ds.init(con);
66                        int nextColCount = ds.getTableView().columns.size();
67                        if(colCount == -1)
68                                colCount = nextColCount;
69                        else
70                                if(colCount != nextColCount)
71                                        throw Utils.createSQLException("Different SELECT of the UNION have different column count:"+colCount+" and "+nextColCount);
72                }        
73                return result;
74        }
75        
76        
77        final boolean isNull(int colIdx) throws Exception {
78                return currentDS.isNull(colIdx);
79        }
80 
81 
82        final boolean getBoolean(int colIdx) throws Exception {
83                return currentDS.getBoolean(colIdx);
84        }
85 
86 
87        final int getInt(int colIdx) throws Exception {
88                return currentDS.getInt(colIdx);
89        }
90 
91 
92        final long getLong(int colIdx) throws Exception {
93                return currentDS.getLong(colIdx);
94        }
95 
96 
97        final float getFloat(int colIdx) throws Exception {
98                return currentDS.getFloat(colIdx);
99        }
100 
101 
102        final double getDouble(int colIdx) throws Exception {
103                return currentDS.getDouble(colIdx);
104        }
105 
106 
107        final long getMoney(int colIdx) throws Exception {
108                return currentDS.getMoney(colIdx);
109        }
110 
111 
112        final MutableNumeric getNumeric(int colIdx) throws Exception {
113                return currentDS.getNumeric(colIdx);
114        }
115 
116 
117        final Object getObject(int colIdx) throws Exception {
118                return currentDS.getObject(colIdx);
119        }
120 
121 
122        final String getString(int colIdx) throws Exception {
123                return currentDS.getString(colIdx);
124        }
125 
126 
127        final byte[] getBytes(int colIdx) throws Exception {
128                return currentDS.getBytes(colIdx);
129        }
130 
131 
132        final int getDataType(int colIdx) {
133                return currentDS.getDataType(colIdx);
134        }
135        
136 
137        TableView getTableView(){
138                return currentDS.getTableView();
139        }
140        
141        
142 
143/*=======================================================================
144 
145        Methods for interface RowSource
146 
147=======================================================================*/
148        
149        final boolean isScrollable(){
150                return false; //TODO performance, can implement it if all datasources implement it
151        }
152 
153        
154        final void beforeFirst() throws Exception {
155                dataSourceIdx = 0;
156                currentDS = dataSources.get(0);
157                currentDS.beforeFirst();
158                row = 0;
159        }
160 
161 
162        final boolean first() throws Exception {
163                dataSourceIdx = 0;
164                currentDS = dataSources.get(0);
165                boolean b = currentDS.first();
166                row = b ? 1 : 0;
167                return b;
168        }
169 
170 
171        final boolean next() throws Exception {
172                boolean n = currentDS.next();
173                row++;
174                if(n) return true;
175                while(dataSources.size() > dataSourceIdx+1){
176                        currentDS = dataSources.get(++dataSourceIdx);
177                        currentDS.beforeFirst();
178                        n = currentDS.next();
179                        if(n) return true;
180                }
181                row = 0;
182                return false;
183        }
184 
185 
186        final void afterLast() throws Exception {
187                dataSourceIdx = dataSources.size()-1;
188                currentDS = dataSources.get(dataSourceIdx);
189                currentDS.afterLast();
190                row = 0;
191        }
192 
193 
194        final int getRow() throws Exception {
195                return row;
196        }
197        
198 
199        private final int getBitCount(){
200                int size = dataSources.size();
201                int bitCount = 0;
202                while(size>0){
203                        bitCount++;
204                        size >>= 1;
205                }
206                return bitCount;
207        }
208 
209        
210        final long getRowPosition() {
211                int bitCount = getBitCount();
212                return dataSourceIdx | currentDS.getRowPosition() << bitCount;
213        }
214 
215 
216        final void setRowPosition(long rowPosition) throws Exception {
217                int bitCount = getBitCount();
218                int mask = 0xFFFFFFFF >>> (32 - bitCount);
219                dataSourceIdx = (int)rowPosition & mask;
220                currentDS = dataSources.get(dataSourceIdx);
221                currentDS.setRowPosition( rowPosition >> bitCount );
222                //getRow() is only unse on the top level RowSource, setRowPosition is not used on the top level RowSource
223                //thats we not set row here
224        }
225 
226 
227        final boolean rowInserted(){
228                return currentDS.rowInserted();
229        }
230        
231        
232        final boolean rowDeleted(){
233                return currentDS.rowDeleted();
234        }
235        
236        
237        final void nullRow() {
238                currentDS.nullRow();
239                row = 0;
240        }
241 
242 
243        final void noRow() {
244                currentDS.noRow();
245                row = 0;
246        }
247 
248        
249        final void execute() throws Exception{
250                for(int i=0; i<dataSources.size(); i++){
251                        dataSources.get(i).execute();                        
252                }
253        }
254 
255}

[all classes][smallsql.database]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov