EMMA Coverage Report (generated Sun Mar 01 22:06:14 CET 2015)
[all classes][org.h2.store]

COVERAGE SUMMARY FOR SOURCE FILE [PageStreamData.java]

nameclass, %method, %block, %line, %
PageStreamData.java100% (1/1)41%  (7/17)51%  (90/178)54%  (22/41)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class PageStreamData100% (1/1)41%  (7/17)51%  (90/178)54%  (22/41)
canMove (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
canRemove (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
getLogKey (): int 0%   (0/1)0%   (0/3)0%   (0/1)
getMemory (): int 0%   (0/1)0%   (0/6)0%   (0/1)
getReadStart (): int 0%   (0/1)0%   (0/2)0%   (0/1)
moveTo (Session, int): void 0%   (0/1)0%   (0/1)0%   (0/1)
read (): void 0%   (0/1)0%   (0/22)0%   (0/6)
read (PageStore, Data, int): PageStreamData 0%   (0/1)0%   (0/15)0%   (0/4)
read (int, byte [], int, int): void 0%   (0/1)0%   (0/9)0%   (0/2)
toString (): String 0%   (0/1)0%   (0/26)0%   (0/1)
PageStreamData (PageStore, int, int, int): void 100% (1/1)100% (15/15)100% (6/6)
create (PageStore, int, int, int): PageStreamData 100% (1/1)100% (8/8)100% (1/1)
getCapacity (int): int 100% (1/1)100% (4/4)100% (1/1)
getRemaining (): int 100% (1/1)100% (3/3)100% (1/1)
initWrite (): void 100% (1/1)100% (33/33)100% (7/7)
write (): void 100% (1/1)100% (8/8)100% (2/2)
write (byte [], int, int): int 100% (1/1)100% (19/19)100% (4/4)

1/*
2 * Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0,
3 * and the EPL 1.0 (http://h2database.com/html/license.html).
4 * Initial Developer: H2 Group
5 */
6package org.h2.store;
7 
8import org.h2.engine.Session;
9 
10/**
11 * A data page of a stream. The format is:
12 * <ul>
13 * <li>page type: byte (0)</li>
14 * <li>checksum: short (1-2)</li>
15 * <li>the trunk page id: int (3-6)</li>
16 * <li>log key: int (7-10)</li>
17 * <li>data (11-)</li>
18 * </ul>
19 */
20public class PageStreamData extends Page {
21 
22    private static final int DATA_START = 11;
23 
24    private final PageStore store;
25    private int trunk;
26    private int logKey;
27    private Data data;
28    private int remaining;
29 
30    private PageStreamData(PageStore store, int pageId, int trunk, int logKey) {
31        setPos(pageId);
32        this.store = store;
33        this.trunk = trunk;
34        this.logKey = logKey;
35    }
36 
37    /**
38     * Read a stream data page.
39     *
40     * @param store the page store
41     * @param data the data
42     * @param pageId the page id
43     * @return the page
44     */
45    static PageStreamData read(PageStore store, Data data, int pageId) {
46        PageStreamData p = new PageStreamData(store, pageId, 0, 0);
47        p.data = data;
48        p.read();
49        return p;
50    }
51 
52    /**
53     * Create a new stream trunk page.
54     *
55     * @param store the page store
56     * @param pageId the page id
57     * @param trunk the trunk page
58     * @param logKey the log key
59     * @return the page
60     */
61    static PageStreamData create(PageStore store, int pageId, int trunk,
62            int logKey) {
63        return new PageStreamData(store, pageId, trunk, logKey);
64    }
65 
66    /**
67     * Read the page from the disk.
68     */
69    private void read() {
70        data.reset();
71        data.readByte();
72        data.readShortInt();
73        trunk = data.readInt();
74        logKey = data.readInt();
75    }
76 
77    /**
78     * Write the header data.
79     */
80    void initWrite() {
81        data = store.createData();
82        data.writeByte((byte) Page.TYPE_STREAM_DATA);
83        data.writeShortInt(0);
84        data.writeInt(trunk);
85        data.writeInt(logKey);
86        remaining = store.getPageSize() - data.length();
87    }
88 
89    /**
90     * Write the data to the buffer.
91     *
92     * @param buff the source data
93     * @param offset the offset in the source buffer
94     * @param len the number of bytes to write
95     * @return the number of bytes written
96     */
97    int write(byte[] buff, int offset, int len) {
98        int max = Math.min(remaining, len);
99        data.write(buff, offset, max);
100        remaining -= max;
101        return max;
102    }
103 
104    @Override
105    public void write() {
106        store.writePage(getPos(), data);
107    }
108 
109    /**
110     * Get the number of bytes that fit in a page.
111     *
112     * @param pageSize the page size
113     * @return the number of bytes
114     */
115    static int getCapacity(int pageSize) {
116        return pageSize - DATA_START;
117    }
118 
119    /**
120     * Read the next bytes from the buffer.
121     *
122     * @param startPos the position in the data page
123     * @param buff the target buffer
124     * @param off the offset in the target buffer
125     * @param len the number of bytes to read
126     */
127    void read(int startPos, byte[] buff, int off, int len) {
128        System.arraycopy(data.getBytes(), startPos, buff, off, len);
129    }
130 
131    /**
132     * Get the number of remaining data bytes of this page.
133     *
134     * @return the remaining byte count
135     */
136    int getRemaining() {
137        return remaining;
138    }
139 
140    /**
141     * Get the estimated memory size.
142     *
143     * @return number of double words (4 bytes)
144     */
145    @Override
146    public int getMemory() {
147        return store.getPageSize() >> 2;
148    }
149 
150    @Override
151    public void moveTo(Session session, int newPos) {
152        // not required
153    }
154 
155    int getLogKey() {
156        return logKey;
157    }
158 
159    @Override
160    public String toString() {
161        return "[" + getPos() + "] stream data key:" + logKey +
162                " pos:" + data.length() + " remaining:" + remaining;
163    }
164 
165    @Override
166    public boolean canRemove() {
167        return true;
168    }
169 
170    public static int getReadStart() {
171        return DATA_START;
172    }
173 
174    @Override
175    public boolean canMove() {
176        return false;
177    }
178 
179}

[all classes][org.h2.store]
EMMA 2.0.5312 (C) Vladimir Roubtsov