Search in sources :

Example 61 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class MockConnector method createResultSetExecution.

@Override
public ResultSetExecution createResultSetExecution(QueryExpression query, ExecutionContext executionContext, RuntimeMetadata metadata, Object connection) throws TranslatorException {
    Properties groupProps = new Properties();
    // $NON-NLS-1$ //$NON-NLS-2$
    groupProps.setProperty("customName", "CustomTableA");
    NamedTable group = (NamedTable) query.getProjectedQuery().getFrom().get(0);
    AbstractMetadataRecord groupMD = group.getMetadataObject();
    TestCase.assertEquals(groupProps, groupMD.getProperties());
    DerivedColumn symbl = query.getProjectedQuery().getDerivedColumns().get(0);
    ColumnReference element = (ColumnReference) symbl.getExpression();
    Column elementMD = element.getMetadataObject();
    Properties elementProps = new Properties();
    // $NON-NLS-1$ //$NON-NLS-2$
    elementProps.setProperty("customPosition", "11");
    TestCase.assertEquals(0, elementMD.getLength());
    // $NON-NLS-1$
    TestCase.assertEquals("Foo", elementMD.getDefaultValue());
    // $NON-NLS-1$
    TestCase.assertEquals("TrimNulls", elementMD.getFormat());
    TestCase.assertEquals(String.class, elementMD.getJavaType());
    TestCase.assertEquals(null, elementMD.getMaximumValue());
    TestCase.assertEquals(null, elementMD.getMinimumValue());
    // $NON-NLS-1$
    TestCase.assertEquals("COLUMN1", elementMD.getNameInSource());
    // $NON-NLS-1$
    TestCase.assertEquals("STR", elementMD.getNativeType());
    TestCase.assertEquals(NullType.Nullable, elementMD.getNullType());
    TestCase.assertEquals(0, elementMD.getPosition());
    TestCase.assertEquals(0, elementMD.getPrecision());
    TestCase.assertEquals(0, elementMD.getScale());
    TestCase.assertEquals(SearchType.Searchable, elementMD.getSearchType());
    TestCase.assertEquals(false, elementMD.isAutoIncremented());
    TestCase.assertEquals(true, elementMD.isCaseSensitive());
    TestCase.assertEquals(elementProps, elementMD.getProperties());
    DerivedColumn symbl2 = query.getProjectedQuery().getDerivedColumns().get(1);
    ColumnReference element2 = (ColumnReference) symbl2.getExpression();
    Column elementMD2 = element2.getMetadataObject();
    Properties elementProps2 = new Properties();
    // $NON-NLS-1$ //$NON-NLS-2$
    elementProps2.setProperty("customPosition", "12");
    TestCase.assertEquals(10, elementMD2.getLength());
    // $NON-NLS-1$
    TestCase.assertEquals("23", elementMD2.getDefaultValue());
    // $NON-NLS-1$
    TestCase.assertEquals("YesFormat", elementMD2.getFormat());
    TestCase.assertEquals(Integer.class, elementMD2.getJavaType());
    // $NON-NLS-1$
    TestCase.assertEquals("1", elementMD2.getMaximumValue());
    // $NON-NLS-1$
    TestCase.assertEquals("100", elementMD2.getMinimumValue());
    // $NON-NLS-1$
    TestCase.assertEquals("COLUMN2", elementMD2.getNameInSource());
    // $NON-NLS-1$
    TestCase.assertEquals("INT", elementMD2.getNativeType());
    TestCase.assertEquals(NullType.No_Nulls, elementMD2.getNullType());
    TestCase.assertEquals(1, elementMD2.getPosition());
    TestCase.assertEquals(0, elementMD2.getPrecision());
    TestCase.assertEquals(10, elementMD2.getScale());
    TestCase.assertEquals(SearchType.Searchable, elementMD2.getSearchType());
    TestCase.assertEquals(true, elementMD2.isAutoIncremented());
    TestCase.assertEquals(false, elementMD2.isCaseSensitive());
    TestCase.assertEquals(elementProps2, elementMD2.getProperties());
    ResultSetExecution exec = Mockito.mock(ResultSetExecution.class);
    Mockito.stub(exec.next()).toReturn(null);
    return exec;
}
Also used : NamedTable(org.teiid.language.NamedTable) ResultSetExecution(org.teiid.translator.ResultSetExecution) Column(org.teiid.metadata.Column) DerivedColumn(org.teiid.language.DerivedColumn) Properties(java.util.Properties) AbstractMetadataRecord(org.teiid.metadata.AbstractMetadataRecord) DerivedColumn(org.teiid.language.DerivedColumn) ColumnReference(org.teiid.language.ColumnReference)

Example 62 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class TestMetadataObject method helpTestGroupID.

public void helpTestGroupID(String fullGroupName, String shortGroupName, int elementCount, TranslationUtility transUtil) throws Exception {
    Table groupID = getGroupID(fullGroupName, transUtil);
    assertEquals(fullGroupName, groupID.getFullName());
    assertEquals(shortGroupName, groupID.getName());
    // Check children
    List<Column> children = groupID.getColumns();
    assertEquals(elementCount, children.size());
    for (Column element : children) {
        assertEquals(groupID, element.getParent());
        assertTrue(element.getFullName().startsWith(groupID.getFullName()));
    }
}
Also used : NamedTable(org.teiid.language.NamedTable) Table(org.teiid.metadata.Table) Column(org.teiid.metadata.Column) DerivedColumn(org.teiid.language.DerivedColumn)

Example 63 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class ExcelMetadataProcessor method addTable.

private void addTable(MetadataFactory mf, Sheet sheet, String xlsName, String originalName) {
    int firstRowNumber = sheet.getFirstRowNum();
    Row headerRow = null;
    int firstCellNumber = -1;
    if (this.hasHeader) {
        headerRow = sheet.getRow(this.headerRowNumber);
        if (headerRow != null) {
            firstRowNumber = this.headerRowNumber;
            firstCellNumber = headerRow.getFirstCellNum();
            if (firstCellNumber == -1) {
                LogManager.logInfo(LogConstants.CTX_CONNECTOR, ExcelPlugin.Util.gs(ExcelPlugin.Event.TEIID23006, xlsName));
                return;
            }
        }
    }
    if (headerRow == null) {
        while (firstCellNumber == -1) {
            headerRow = sheet.getRow(firstRowNumber++);
            // check if this is a empty sheet; the data must be present in first 10000 rows
            if (headerRow == null && firstRowNumber > 10000) {
                return;
            }
            if (headerRow == null) {
                continue;
            }
            firstCellNumber = headerRow.getFirstCellNum();
        }
    }
    // create a table for each sheet
    AtomicInteger columnCount = new AtomicInteger();
    Table table = mf.addTable(sheet.getSheetName());
    table.setNameInSource(sheet.getSheetName());
    table.setProperty(ExcelMetadataProcessor.FILE, originalName);
    // add implicit row_id column based on row number from excel sheet
    Column column = mf.addColumn(ROW_ID, TypeFacility.RUNTIME_NAMES.INTEGER, table);
    column.setSearchType(SearchType.All_Except_Like);
    column.setProperty(CELL_NUMBER, ROW_ID);
    // $NON-NLS-1$
    mf.addPrimaryKey("PK0", Arrays.asList(ROW_ID), table);
    column.setUpdatable(false);
    Row dataRow = null;
    int lastCellNumber = headerRow.getLastCellNum();
    // then only count cells that have a non-empty value.
    if (this.hasHeader && !getIgnoreEmptyHeaderCells()) {
        int cellCounter = 0;
        for (int i = firstCellNumber; i < lastCellNumber; i++) {
            Cell headerCell = headerRow.getCell(i);
            if (isCellEmpty(headerCell)) {
                // found a cell with no column name that will be the last cell.
                break;
            }
            cellCounter++;
        }
        lastCellNumber = cellCounter + firstCellNumber;
    }
    if (this.hasDataRowNumber) {
        // adjust for zero index
        table.setProperty(ExcelMetadataProcessor.FIRST_DATA_ROW_NUMBER, String.valueOf(this.dataRowNumber + 1));
        dataRow = sheet.getRow(this.dataRowNumber);
    } else if (this.hasHeader) {
        // +1 zero based, +1 to skip header
        table.setProperty(ExcelMetadataProcessor.FIRST_DATA_ROW_NUMBER, String.valueOf(firstRowNumber + 2));
        dataRow = sheet.getRow(firstRowNumber + 1);
    } else {
        // +1 already occurred because of the increment above
        table.setProperty(ExcelMetadataProcessor.FIRST_DATA_ROW_NUMBER, String.valueOf(firstRowNumber));
        dataRow = sheet.getRow(firstRowNumber);
    }
    if (firstCellNumber != -1) {
        for (int j = firstCellNumber; j < lastCellNumber; j++) {
            Cell headerCell = headerRow.getCell(j);
            // cell has a value, if not move on to the next column in the sheet.
            if (this.hasHeader && getIgnoreEmptyHeaderCells() && isCellEmpty(headerCell)) {
                continue;
            }
            Cell dataCell = dataRow.getCell(j);
            // if the cell value is null; then advance the data row cursor to to find it
            if (dataCell == null) {
                for (int rowNo = firstRowNumber + 1; rowNo < firstRowNumber + 10000; rowNo++) {
                    Row row = sheet.getRow(rowNo);
                    dataCell = row.getCell(j);
                    if (dataCell != null) {
                        break;
                    }
                }
            }
            column = mf.addColumn(cellName(headerCell, columnCount), cellType(headerCell, dataCell), table);
            column.setSearchType(SearchType.Unsearchable);
            column.setProperty(ExcelMetadataProcessor.CELL_NUMBER, String.valueOf(j + 1));
        }
    }
}
Also used : Table(org.teiid.metadata.Table) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Column(org.teiid.metadata.Column) Row(org.apache.poi.ss.usermodel.Row) Cell(org.apache.poi.ss.usermodel.Cell)

Example 64 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class ExcelQueryVisitor method visit.

@Override
public void visit(In obj) {
    visitNode(obj.getLeftExpression());
    Column column = (Column) this.onGoingExpression.pop();
    visitNodes(obj.getRightExpressions());
    if (isPartOfPrimaryKey(column)) {
        ArrayList<Integer> values = new ArrayList<Integer>();
        // NOTE: we are popping in reverse order to IN stmt
        for (int i = 0; i < obj.getRightExpressions().size(); i++) {
            values.add((Integer) this.onGoingExpression.pop());
        }
        this.filters.add(new InFilter(values.toArray(new Integer[values.size()])));
    } else {
        this.exceptions.add(new TranslatorException(ExcelPlugin.Event.TEIID23008, ExcelPlugin.Util.gs(ExcelPlugin.Event.TEIID23008, column.getName())));
    }
}
Also used : Column(org.teiid.metadata.Column) DerivedColumn(org.teiid.language.DerivedColumn) ArrayList(java.util.ArrayList) TranslatorException(org.teiid.translator.TranslatorException)

Example 65 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class ExcelQueryVisitor method visit.

@Override
public void visit(Comparison obj) {
    visitNode(obj.getLeftExpression());
    Column column = (Column) this.onGoingExpression.pop();
    visitNode(obj.getRightExpression());
    Integer rightExpr = (Integer) this.onGoingExpression.pop();
    if (isPartOfPrimaryKey(column)) {
        switch(obj.getOperator()) {
            case EQ:
                this.filters.add(new CompareFilter(rightExpr - 1, Operator.EQ));
                break;
            case NE:
                this.filters.add(new CompareFilter(rightExpr - 1, Operator.NE));
                break;
            case LT:
                this.filters.add(new CompareFilter(rightExpr - 1, Operator.LT));
                break;
            case LE:
                this.filters.add(new CompareFilter(rightExpr - 1, Operator.LE));
                break;
            case GT:
                this.filters.add(new CompareFilter(rightExpr - 1, Operator.GT));
                break;
            case GE:
                this.filters.add(new CompareFilter(rightExpr - 1, Operator.GE));
                break;
        }
    } else {
        this.exceptions.add(new TranslatorException(ExcelPlugin.Event.TEIID23008, ExcelPlugin.Util.gs(ExcelPlugin.Event.TEIID23008, column.getName())));
    }
}
Also used : Column(org.teiid.metadata.Column) DerivedColumn(org.teiid.language.DerivedColumn) TranslatorException(org.teiid.translator.TranslatorException)

Aggregations

Column (org.teiid.metadata.Column)210 Table (org.teiid.metadata.Table)72 ArrayList (java.util.ArrayList)47 TranslatorException (org.teiid.translator.TranslatorException)47 Test (org.junit.Test)39 TransformationMetadata (org.teiid.query.metadata.TransformationMetadata)21 MetadataFactory (org.teiid.metadata.MetadataFactory)20 ElementSymbol (org.teiid.query.sql.symbol.ElementSymbol)19 KeyRecord (org.teiid.metadata.KeyRecord)18 Schema (org.teiid.metadata.Schema)18 MetadataStore (org.teiid.metadata.MetadataStore)17 Procedure (org.teiid.metadata.Procedure)14 RealMetadataFactory (org.teiid.query.unittest.RealMetadataFactory)14 ColumnReference (org.teiid.language.ColumnReference)12 DerivedColumn (org.teiid.language.DerivedColumn)12 Expression (org.teiid.language.Expression)12 Literal (org.teiid.language.Literal)10 QueryNode (org.teiid.query.mapping.relational.QueryNode)9 Connection (java.sql.Connection)7 ResultSet (java.sql.ResultSet)7