Package org.apache.metamodel.schema

Examples of org.apache.metamodel.schema.Table


        // check certain common query types that can often be optimized by
        // subclasses
        if (fromItems.size() == 1 && groupByItems.isEmpty() && havingItems.isEmpty()) {

            final FromItem fromItem = query.getFromClause().getItem(0);
            final Table table = fromItem.getTable();
            if (table != null) {
                // check for approximate SELECT COUNT(*) queries
                if (selectItems.size() == 1) {
                    final SelectItem selectItem = query.getSelectClause().getItem(0);
                    if (SelectItem.isCountAllItem(selectItem)) {
                        final boolean functionApproximationAllowed = selectItem.isFunctionApproximationAllowed();
                        if (isMainSchemaTable(table)) {
                            logger.debug("Query is a COUNT query with {} where items. Trying executeCountQuery(...)",
                                    whereItems.size());
                            final Number count = executeCountQuery(table, whereItems, functionApproximationAllowed);
                            if (count == null) {
                                logger.debug("DataContext did not return any count query results. Proceeding with manual counting.");
                            } else {
                                List<Row> data = new ArrayList<Row>(1);
                                final DataSetHeader header = new SimpleDataSetHeader(new SelectItem[] { selectItem });
                                data.add(new DefaultRow(header, new Object[] { count }));
                                return new InMemoryDataSet(header, data);
                            }
                        }
                    }
                }

                // check for lookup query by primary key
                if (whereItems.size() == 1) {
                    final FilterItem whereItem = whereItems.get(0);
                    final SelectItem selectItem = whereItem.getSelectItem();
                    if (!whereItem.isCompoundFilter() && selectItem != null && selectItem.getColumn() != null) {
                        final Column column = selectItem.getColumn();
                        if (column.isPrimaryKey() && whereItem.getOperator() == OperatorType.EQUALS_TO) {
                            logger.debug("Query is a primary key lookup query. Trying executePrimaryKeyLookupQuery(...)");
                            if (table != null) {
                                if (isMainSchemaTable(table)) {
                                    final Object operand = whereItem.getOperand();
                                    final Row row = executePrimaryKeyLookupQuery(table, selectItems, column, operand);
                                    if (row == null) {
                                        logger.debug("DataContext did not return any GET query results. Proceeding with manual lookup.");
                                    } else {
                                        final DataSetHeader header = new SimpleDataSetHeader(selectItems);
                                        return new InMemoryDataSet(header, row);
                                    }
                                }
                            }
                        }
                    }
                }

            }
        }

        final int firstRow = (query.getFirstRow() == null ? 1 : query.getFirstRow());
        final int maxRows = (query.getMaxRows() == null ? -1 : query.getMaxRows());

        // Check for very simple queries with max rows property set (typically
        // preview), see Ticket #187
        previewTable: if (whereItems.isEmpty() && groupByItems.isEmpty() && havingItems.isEmpty()
                && orderByItems.isEmpty() && fromItems.size() == 1) {

            final Table table = fromItems.get(0).getTable();
            if (table != null) {
                for (SelectItem item : selectItems) {
                    if (item.getFunction() != null || item.getExpression() != null) {
                        break previewTable;
                    }
View Full Code Here


    protected DataSet materializeFromItem(final FromItem fromItem, final List<SelectItem> selectItems) {
        DataSet dataSet;
        JoinType joinType = fromItem.getJoin();
        if (fromItem.getTable() != null) {
            // We need to materialize a single table
            final Table table = fromItem.getTable();
            final List<SelectItem> selectItemsToMaterialize = new ArrayList<SelectItem>();

            for (final SelectItem selectItem : selectItems) {
                final FromItem selectedFromItem = selectItem.getFromItem();
                if (selectedFromItem != null) {
                    if (selectedFromItem.equals(fromItem)) {
                        selectItemsToMaterialize.add(selectItem.replaceFunction(null));
                    }
                } else {
                    // the select item does not specify a specific
                    // from-item
                    final Column selectedColumn = selectItem.getColumn();
                    if (selectedColumn != null) {
                        // we assume that if the table matches, we will use the
                        // column
                        if (selectedColumn.getTable() != null && selectedColumn.getTable().equals(table)) {
                            selectItemsToMaterialize.add(selectItem.replaceFunction(null));
                        }
                    }
                }
            }

            if (logger.isDebugEnabled()) {
                logger.debug("calling materializeTable(" + table.getName() + "," + selectItemsToMaterialize + ",1,-1");
            }

            // Dispatching to the concrete subclass of
            // QueryPostprocessDataContextStrategy
            dataSet = materializeTable(table, selectItemsToMaterialize, 1, -1);
View Full Code Here

            // "relationships" columns: primary_table, primary_column,
            // foreign_table, foreign_column
            for (Relationship r : getMainSchemaInternal().getRelationships()) {
                Column[] primaryColumns = r.getPrimaryColumns();
                Column[] foreignColumns = r.getForeignColumns();
                Table pTable = r.getPrimaryTable();
                Table fTable = r.getForeignTable();
                for (int i = 0; i < primaryColumns.length; i++) {
                    Column pColumn = primaryColumns[i];
                    Column fColumn = foreignColumns[i];
                    data.add(new DefaultRow(header, new Object[] { pTable.getName(), pColumn.getName(),
                            fTable.getName(), fColumn.getName() }));
                }
            }
        } else {
            throw new IllegalArgumentException("Cannot materialize non information_schema table: " + table);
        }
View Full Code Here

                + "Table[name=contributors_person,type=TABLE,remarks=null], "
                + "Table[name=contributors_person_name,type=TABLE,remarks=null], "
                + "Table[name=contributors_person_address,type=TABLE,remarks=null], "
                + "Table[name=projects_project,type=TABLE,remarks=null]]", Arrays.toString(tables));

        Table table = schema.getTableByName("eobjects.dk");
        assertEquals(2, table.getColumnCount());
        assertEquals(
                "[Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=Auto-generated primary key,columnSize=null], "
                        + "Column[name=website,columnNumber=2,type=STRING,nullable=true,nativeType=XML Attribute,columnSize=null]]",
                Arrays.toString(table.getColumns()));

        table = schema.getTableByName("contributors_person");
        assertEquals(1, table.getColumnCount());
        assertEquals(
                "[Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=Auto-generated primary key,columnSize=null]]",
                Arrays.toString(table.getColumns()));

        table = schema.getTableByName("contributors_person_name");
        assertEquals(3, table.getColumnCount());
        assertEquals(
                "[Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=Auto-generated primary key,columnSize=null], "
                        + "Column[name=contributors_person_id,columnNumber=1,type=INTEGER,nullable=false,nativeType=Auto-generated foreign key,columnSize=null], "
                        + "Column[name=name,columnNumber=2,type=STRING,nullable=true,nativeType=XML Text,columnSize=null]]",
                Arrays.toString(table.getColumns()));
        assertEquals("[Relationship[primaryTable=contributors_person,primaryColumns=[id],"
                + "foreignTable=contributors_person_name,foreignColumns=[contributors_person_id]]]",
                Arrays.toString(table.getRelationships()));

        table = schema.getTableByName("contributors_person_address");
        assertEquals(3, table.getColumnCount());
        assertEquals(
                "[Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=Auto-generated primary key,columnSize=null], "
                        + "Column[name=contributors_person_id,columnNumber=1,type=INTEGER,nullable=false,nativeType=Auto-generated foreign key,columnSize=null], "
                        + "Column[name=address,columnNumber=2,type=STRING,nullable=true,nativeType=XML Text,columnSize=null]]",
                Arrays.toString(table.getColumns()));
        assertEquals("[Relationship[primaryTable=contributors_person,primaryColumns=[id],"
                + "foreignTable=contributors_person_address,foreignColumns=[contributors_person_id]]]",
                Arrays.toString(table.getRelationships()));

        table = schema.getTableByName("projects_project");
        assertEquals(3, table.getColumnCount());
        assertEquals(
                "[Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=Auto-generated primary key,columnSize=null], "
                        + "Column[name=project,columnNumber=1,type=STRING,nullable=true,nativeType=XML Text,columnSize=null], "
                        + "Column[name=name,columnNumber=2,type=STRING,nullable=true,nativeType=XML Attribute,columnSize=null]]",
                Arrays.toString(table.getColumns()));

        dataContext.autoFlattenTables();
        table = schema.getTableByName("contributors_person");
        assertEquals(2, table.getColumnCount());
        assertEquals(
                "[Column[name=id,columnNumber=0,type=INTEGER,nullable=false,nativeType=Auto-generated primary key,columnSize=null], "
                        + "Column[name=name,columnNumber=1,type=STRING,nullable=true,nativeType=XML Text,columnSize=null]]",
                Arrays.toString(table.getColumns()));
    }
View Full Code Here

        ExcelDataContext dc = new ExcelDataContext(file);

        assertNull(dc.getSpreadsheetReaderDelegateClass());
        assertEquals(1, dc.getDefaultSchema().getTableCount());

        Table table = dc.getDefaultSchema().getTables()[0];
        assertEquals("sheet", table.getName());
        assertEquals(0, table.getColumnCount());

        assertSame(file, dc.getFile());
    }
View Full Code Here

    public void testExecuteQuery() throws Exception {
        File file = new File("src/test/resources/xml_input_eobjects.xml");
        DataContext dc = new XmlDomDataContext(file, false);
        Schema schema = dc.getDefaultSchema();
        Table table = schema.getTableByName("projects_project");
        Query q = new Query().select(table.getColumns()).from(table, "p");
        assertEquals("SELECT p.id, p.project, p.name FROM xml_input_eobjects.xml.projects_project p", q.toString());
        DataSet data = dc.executeQuery(q);
        TableModel tableModel = new DataSetTableModel(data);
        assertEquals(3, tableModel.getColumnCount());
        assertEquals(2, tableModel.getRowCount());

        // ID
        assertEquals(1, tableModel.getValueAt(0, 0));
        assertEquals(2, tableModel.getValueAt(1, 0));

        // Project (text content)
        assertEquals("Some description", tableModel.getValueAt(0, 1));
        assertNull(tableModel.getValueAt(1, 1));

        // Name
        assertEquals("datacleaner", tableModel.getValueAt(0, 2));
        assertEquals("MetaModel", tableModel.getValueAt(1, 2));

        // Make a new query that joins the normalized tables together
        table = schema.getTableByName("contributors_person_address");
        Relationship relationShip = table.getRelationships()[0];
        q = new Query().select(relationShip.getPrimaryTable().getColumns())
                .select(relationShip.getForeignTable().getColumns()).from(new FromItem(JoinType.INNER, relationShip));

        assertEquals(
                "SELECT contributors_person.id, contributors_person_address.id, "
View Full Code Here

    }

    @Override
    public TableDropBuilder dropTable(String schemaName, String tableName) throws IllegalArgumentException,
            IllegalStateException, UnsupportedOperationException {
        Table table = getTable(schemaName, tableName);
        return dropTable(table);
    }
View Full Code Here

    }

    @Override
    public TableDropBuilder dropTable(Schema schema, String tableName) throws IllegalArgumentException,
            IllegalStateException, UnsupportedOperationException {
        Table table = schema.getTableByName(tableName);
        if (table == null) {
            throw new IllegalArgumentException("Nu such table '" + tableName + "' found in schema: " + schema
                    + ". Available tables are: " + Arrays.toString(schema.getTableNames()));
        }
        return dropTable(table);
View Full Code Here

    public void testEmptyFileNoHeaderLine() throws Exception {
        DataContext dc = new ExcelDataContext(new File("src/test/resources/empty_file.xls"), new ExcelConfiguration(
                ExcelConfiguration.NO_COLUMN_NAME_LINE, false, false));
        assertEquals(1, dc.getDefaultSchema().getTableCount());

        Table table = dc.getDefaultSchema().getTables()[0];
        assertEquals("sheet", table.getName());
        assertEquals(0, table.getColumnCount());
    }
View Full Code Here

        return insertInto(getTable(schemaName, tableName));
    }

    private Table getTable(String schemaName, String tableName) {
        final Schema schema = getSchema(schemaName);
        final Table table = schema.getTableByName(tableName);
        if (table == null) {
            throw new IllegalArgumentException("Nu such table '" + tableName + "' found in schema: " + schema
                    + ". Available tables are: " + Arrays.toString(schema.getTableNames()));
        }
        return table;
View Full Code Here

TOP

Related Classes of org.apache.metamodel.schema.Table

Copyright © 2018 www.massapicom. 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.