/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.metamodel.jdbc; import junit.framework.TestCase; import org.apache.metamodel.query.Query; import org.apache.metamodel.query.SelectItem; import org.apache.metamodel.schema.Column; import org.apache.metamodel.schema.ColumnType; import org.apache.metamodel.schema.MutableColumn; import org.apache.metamodel.schema.MutableTable; public class FetchSizeCalculatorTest extends TestCase { public void testGetFetchSize() throws Exception { FetchSizeCalculator calc = new FetchSizeCalculator(8 * 1024 * 1024); assertEquals(10922, calc.getFetchSize(new MutableColumn("a", ColumnType.VARCHAR).setColumnSize(256), new MutableColumn("b", ColumnType.VARCHAR).setColumnSize(128))); assertEquals(2048, calc.getFetchSize(new MutableColumn("a", ColumnType.BLOB).setColumnSize(4096))); } public void testSingleRowQuery() throws Exception { FetchSizeCalculator calc = new FetchSizeCalculator(8 * 1024 * 1024); assertEquals(1, calc.getFetchSize(new Query().selectCount().from( new MutableTable("foo")))); } public void testMinimumSize() throws Exception { FetchSizeCalculator calc = new FetchSizeCalculator(8); assertEquals(1, calc.getFetchSize(new MutableColumn("a", ColumnType.INTEGER).setColumnSize(256))); } public void testMaximumSize() throws Exception { FetchSizeCalculator calc = new FetchSizeCalculator(Integer.MAX_VALUE); assertEquals(25000, calc.getFetchSize(new MutableColumn("a", ColumnType.BOOLEAN).setColumnSize(1))); } public void testManyColumnsScenario() throws Exception { Column[] cols = new Column[110]; for (int i = 0; i < cols.length; i++) { MutableColumn col = new MutableColumn("foo" + i); if (i % 5 == 0) { col.setType(ColumnType.INTEGER); } else if (i % 4 == 0) { col.setType(ColumnType.BOOLEAN); } else if (i % 3 == 0) { col.setType(ColumnType.DATE); } else { col.setType(ColumnType.VARCHAR); } col.setColumnSize(50); cols[i] = col; } FetchSizeCalculator calc = new FetchSizeCalculator(32 * 1024 * 1024); assertEquals(613, calc.getFetchSize(cols)); } public void testGetValueSize() throws Exception { FetchSizeCalculator calc = new FetchSizeCalculator(0); assertEquals(30, calc.getValueSize(SelectItem.getCountAllItem())); assertEquals(30, calc.getValueSize(new MutableColumn("", ColumnType.ARRAY))); assertEquals(300, calc.getValueSize(new MutableColumn("", ColumnType.ARRAY).setColumnSize(10))); assertEquals(16, calc.getValueSize(new MutableColumn("", ColumnType.INTEGER))); assertEquals(16, calc.getValueSize(new MutableColumn("", ColumnType.BIGINT))); assertEquals(16, calc.getValueSize(new MutableColumn("", ColumnType.DOUBLE))); assertEquals(16, calc.getValueSize(new MutableColumn("", ColumnType.FLOAT))); assertEquals(4096, calc.getValueSize(new MutableColumn("", ColumnType.CLOB))); assertEquals(4096, calc.getValueSize(new MutableColumn("", ColumnType.BLOB))); assertEquals(4096, calc.getValueSize(new MutableColumn("", ColumnType.CLOB).setColumnSize(20))); assertEquals(200000, calc.getValueSize(new MutableColumn("", ColumnType.BLOB).setColumnSize(200000))); assertEquals(400000, calc.getValueSize(new MutableColumn("", ColumnType.CLOB).setColumnSize(200000))); } public void testGetRowSize() throws Exception { FetchSizeCalculator calc = new FetchSizeCalculator(0); assertEquals(8000, calc.getRowSize(new MutableColumn("", ColumnType.VARCHAR).setColumnSize(4000))); assertEquals(1024, calc.getRowSize(new MutableColumn("", ColumnType.VARCHAR))); assertEquals(9024, calc.getRowSize(new MutableColumn("", ColumnType.VARCHAR).setColumnSize(4000), new MutableColumn("", ColumnType.VARCHAR))); } }