Package com.foundationdb.qp.storeadapter.indexrow

Source Code of com.foundationdb.qp.storeadapter.indexrow.FDBIndexRowTest

/**
* Copyright (C) 2009-2014 FoundationDB, LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package com.foundationdb.qp.storeadapter.indexrow;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;

import com.foundationdb.ais.CAOIBuilderFiller;
import com.foundationdb.ais.model.AbstractVisitor;
import com.foundationdb.ais.model.AkibanInformationSchema;
import com.foundationdb.ais.model.Group;
import com.foundationdb.ais.model.Index;
import com.foundationdb.ais.model.Join;
import com.foundationdb.ais.model.Table;
import com.foundationdb.ais.model.aisb2.NewAISBuilder;
import com.foundationdb.qp.row.HKey;
import com.foundationdb.qp.rowtype.IndexRowType;
import com.foundationdb.qp.rowtype.Schema;
import com.foundationdb.server.collation.TestKeyCreator;
import com.foundationdb.server.service.tree.KeyCreator;
import com.persistit.Key;

public class FDBIndexRowTest {

    private static class OrdinalVisitor extends AbstractVisitor {
        public int maxOrdinal = 1;

        @Override
        public void visit(Table table) {
            Integer ordinal = table.getOrdinal();
            if (ordinal == null) {
                table.setOrdinal(maxOrdinal++);
            }
        }
    }

    @Before
    public void createAIS() {
        NewAISBuilder builder = CAOIBuilderFiller.createAndFillBuilder("Test");
        ais = builder.ais();
        Table customers = ais.getTable("Test", CAOIBuilderFiller.CUSTOMER_TABLE);
        assertNotNull(customers);
        Map<Table, Integer> ordinalMap = new HashMap<>();
        List<Table> remainingTables = new ArrayList<>();
       
        ais.visit(new OrdinalVisitor());
       
        // Add all roots
        for(Table table : ais.getTables().values()) {
            if(table.isRoot()) {
                remainingTables.add(table);
            }
        }
        while(!remainingTables.isEmpty()) {
            Table table = remainingTables.remove(remainingTables.size()-1);
            ordinalMap.put(table, table.getOrdinal());
            for(Index index : table.getIndexesIncludingInternal()) {
                index.computeFieldAssociations(ordinalMap);
            }
            // Add all immediate children
            for(Join join : table.getChildJoins()) {
                remainingTables.add(join.getChild());
            }
        }
        for(Group group : ais.getGroups().values()) {
            for(Index index : group.getIndexes()) {
                index.computeFieldAssociations(ordinalMap);
            }
        }
        schema = new Schema (ais);
        customerPK = schema.indexRowType(customers.getIndex(Index.PRIMARY));
        itemPK = schema.indexRowType(ais.getTable("Test", CAOIBuilderFiller.ITEM_TABLE).getIndex(Index.PRIMARY));
        testCreator = new TestKeyCreator(schema);
    }
   
    @Test
    public void testCreation () {
        FDBIndexRow row = new FDBIndexRow (testCreator, customerPK);
        assertNotNull (row);
        assertEquals(row.rowType(), customerPK);
    }

    @Test
    public void testCopyFromEmpty() {
        Table customers = ais.getTable("Test", CAOIBuilderFiller.CUSTOMER_TABLE);
        FDBIndexRow row = new FDBIndexRow (testCreator, customerPK);

       Key pkKey = testCreator.createKey();
      
       row.copyFrom(pkKey, null);
      
       assertTrue (row.keyEmpty());
       assertNotNull (row.ancestorHKey(customers));
    }

    @Test
    public void testCopyFromEntry() {
        Table customers = ais.getTable("Test", CAOIBuilderFiller.CUSTOMER_TABLE);
        FDBIndexRow row = new FDBIndexRow (testCreator, customerPK);

       Key pkKey = testCreator.createKey();
       pkKey.append (1L);
       pkKey.append(1);
       row.copyFrom(pkKey, null);
      
       assertTrue (!row.keyEmpty());
       HKey hKey = row.ancestorHKey(customers);
       assertNotNull (hKey);
       assertTrue(hKey.segments() == 1);
       assertTrue(hKey.value(0).getInt64() == 1);
    }
   
    @Test
    public void testCopyFromItem() {
        Table items = ais.getTable("Test", CAOIBuilderFiller.ITEM_TABLE);
        FDBIndexRow row = new FDBIndexRow (testCreator, itemPK);
       
        Key pkKey = testCreator.createKey();
        pkKey.append(15L);
        pkKey.append(7L);
        pkKey.append(5L);
        row.copyFrom (pkKey, null);
        HKey hkey = row.ancestorHKey(items);
       
        assertNotNull (hkey);
        assertEquals(hkey.value(0).getInt64(), 7L);
        assertEquals(hkey.value(1).getInt64(), 5L);
        assertEquals(hkey.value(2).getInt64(), 15L);
    }
   
   
    Schema schema;
    AkibanInformationSchema ais;
    KeyCreator testCreator;
    IndexRowType customerPK;
    IndexRowType itemPK;
   
}
TOP

Related Classes of com.foundationdb.qp.storeadapter.indexrow.FDBIndexRowTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.