Search in sources :

Example 96 with Column

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

the class TestValidator method exampleMetadata3.

public static TransformationMetadata exampleMetadata3() {
    MetadataStore metadataStore = new MetadataStore();
    // Create metadata objects
    // $NON-NLS-1$
    Schema modelObj = RealMetadataFactory.createPhysicalModel("test", metadataStore);
    // $NON-NLS-1$
    Table groupObj = RealMetadataFactory.createPhysicalGroup("group", modelObj);
    // $NON-NLS-1$
    RealMetadataFactory.createElement("e0", groupObj, DataTypeManager.DefaultDataTypes.INTEGER);
    // $NON-NLS-1$
    Column elemObj1 = RealMetadataFactory.createElement("e1", groupObj, DataTypeManager.DefaultDataTypes.STRING);
    elemObj1.setNullType(NullType.No_Nulls);
    elemObj1.setDefaultValue(Boolean.FALSE.toString());
    elemObj1.setAutoIncremented(true);
    // $NON-NLS-1$
    elemObj1.setNameInSource("e1:SEQUENCE=MYSEQUENCE.nextVal");
    return RealMetadataFactory.createTransformationMetadata(metadataStore, "example3");
}
Also used : MetadataStore(org.teiid.metadata.MetadataStore) Table(org.teiid.metadata.Table) Column(org.teiid.metadata.Column) Schema(org.teiid.metadata.Schema)

Example 97 with Column

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

the class TestValidator method testDefect21389.

@Test
public void testDefect21389() throws Exception {
    // $NON-NLS-1$
    String sql = "CREATE VIRTUAL PROCEDURE BEGIN SELECT * INTO #temptable FROM pm1.g1; INSERT INTO #temptable (e1) VALUES ('a'); END";
    TransformationMetadata metadata = RealMetadataFactory.example1();
    // $NON-NLS-1$
    Column c = metadata.getElementID("pm1.g1.e1");
    c.setUpdatable(false);
    Command command = new QueryParser().parseCommand(sql);
    QueryResolver.resolveCommand(command, metadata);
    // Validate
    ValidatorReport report = Validator.validate(command, metadata);
    // Validate
    assertEquals(0, report.getItems().size());
}
Also used : TransformationMetadata(org.teiid.query.metadata.TransformationMetadata) QueryParser(org.teiid.query.parser.QueryParser) Column(org.teiid.metadata.Column) Command(org.teiid.query.sql.lang.Command) Test(org.junit.Test)

Example 98 with Column

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

the class TestRowBasedSecurity method testSecurity.

@Test
public void testSecurity() throws Exception {
    es = new EmbeddedServer();
    EmbeddedConfiguration ec = new EmbeddedConfiguration();
    final Vector<Principal> v = new Vector<Principal>();
    v.add(new Identity("myrole") {
    });
    final Subject subject = new Subject();
    Group g = Mockito.mock(Group.class);
    Mockito.stub(g.getName()).toReturn("Roles");
    Mockito.stub(g.members()).toReturn((Enumeration) v.elements());
    subject.getPrincipals().add(g);
    ec.setSecurityHelper(new DoNothingSecurityHelper() {

        @Override
        public Subject getSubjectInContext(String securityDomain) {
            return subject;
        }

        @Override
        public Subject getSubjectInContext(Object context) {
            return subject;
        }
    });
    es.start(ec);
    HardCodedExecutionFactory hcef = new HardCodedExecutionFactory() {

        @Override
        public void getMetadata(MetadataFactory metadataFactory, Object conn) throws TranslatorException {
            Table t = metadataFactory.addTable("x");
            Column col = metadataFactory.addColumn("col", TypeFacility.RUNTIME_NAMES.STRING, t);
            metadataFactory.addColumn("col2", TypeFacility.RUNTIME_NAMES.STRING, t);
            metadataFactory.addPermission("y", t, null, null, Boolean.TRUE, null, null, null, "col = 'a'", null);
            metadataFactory.addColumnPermission("y", col, null, null, null, null, "null", null);
            t = metadataFactory.addTable("y");
            col = metadataFactory.addColumn("col", TypeFacility.RUNTIME_NAMES.STRING, t);
            metadataFactory.addColumn("col2", TypeFacility.RUNTIME_NAMES.STRING, t);
            metadataFactory.addPermission("z", t, null, null, null, null, null, null, "col = 'e'", null);
            Table v = metadataFactory.addTable("v");
            metadataFactory.addPermission("y", v, null, null, Boolean.TRUE, null, null, null, null, null);
            col = metadataFactory.addColumn("col", TypeFacility.RUNTIME_NAMES.STRING, v);
            metadataFactory.addColumn("col2", TypeFacility.RUNTIME_NAMES.STRING, v);
            v.setTableType(Type.View);
            v.setVirtual(true);
            v.setSelectTransformation("/*+ cache(scope:session) */ select col, col2 from y");
        }

        @Override
        public boolean isSourceRequiredForMetadata() {
            return false;
        }
    };
    hcef.addData("SELECT x.col, x.col2 FROM x", Arrays.asList(Arrays.asList("a", "b"), Arrays.asList("c", "d")));
    hcef.addData("SELECT y.col, y.col2 FROM y", Arrays.asList(Arrays.asList("e", "f"), Arrays.asList("h", "g")));
    es.addTranslator("hc", hcef);
    es.deployVDB(new FileInputStream(UnitTestUtil.getTestDataFile("roles-vdb.xml")));
    Connection c = es.getDriver().connect("jdbc:teiid:z;PassthroughAuthentication=true", null);
    Statement s = c.createStatement();
    ResultSet rs = s.executeQuery("select * from x");
    rs.next();
    // masking
    assertEquals(null, rs.getString(1));
    assertEquals("b", rs.getString(2));
    // row filter
    assertFalse(rs.next());
    rs.close();
    s = c.createStatement();
    rs = s.executeQuery("select lookup('myschema.x', 'col', 'col2', 'b')");
    rs.next();
    // global scoped
    assertEquals(null, rs.getString(1));
    s = c.createStatement();
    rs = s.executeQuery("select count(col2) from v where col is not null");
    rs.next();
    assertEquals(1, rs.getInt(1));
    // different session with different roles
    v.clear();
    c = es.getDriver().connect("jdbc:teiid:z;PassthroughAuthentication=true", null);
    s = c.createStatement();
    rs = s.executeQuery("select count(col2) from v where col is not null");
    rs.next();
    assertEquals(2, rs.getInt(1));
}
Also used : Group(java.security.acl.Group) Table(org.teiid.metadata.Table) Statement(java.sql.Statement) EmbeddedServer(org.teiid.runtime.EmbeddedServer) Connection(java.sql.Connection) EmbeddedConfiguration(org.teiid.runtime.EmbeddedConfiguration) DoNothingSecurityHelper(org.teiid.runtime.DoNothingSecurityHelper) Subject(javax.security.auth.Subject) FileInputStream(java.io.FileInputStream) MetadataFactory(org.teiid.metadata.MetadataFactory) Column(org.teiid.metadata.Column) ResultSet(java.sql.ResultSet) HardCodedExecutionFactory(org.teiid.runtime.HardCodedExecutionFactory) Identity(java.security.Identity) Vector(java.util.Vector) Principal(java.security.Principal) Test(org.junit.Test)

Example 99 with Column

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

the class TestOracleConvertModifier method testTimestampToString1.

@Test
public void testTimestampToString1() throws Exception {
    Column column = new Column();
    column.setNativeType("DATE");
    column.setNameInSource("dt");
    // $NON-NLS-1$ //$NON-NLS-2$
    helpTest(LANG_FACTORY.createColumnReference("dt", LANG_FACTORY.createNamedTable("x", null, null), column, Timestamp.class), "string", "to_char(x.dt, 'YYYY-MM-DD HH24:MI:SS')");
}
Also used : Column(org.teiid.metadata.Column) Timestamp(java.sql.Timestamp) Test(org.junit.Test)

Example 100 with Column

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

the class SQLServerExecutionFactory method translate.

@Override
public List<?> translate(LanguageObject obj, ExecutionContext context) {
    if (obj instanceof ColumnReference) {
        ColumnReference elem = (ColumnReference) obj;
        if (getVersion().compareTo(SEVEN_0) <= 0 && TypeFacility.RUNTIME_TYPES.STRING.equals(elem.getType()) && elem.getMetadataObject() != null && "uniqueidentifier".equalsIgnoreCase(elem.getMetadataObject().getNativeType())) {
            // $NON-NLS-1$ //$NON-NLS-2$
            return Arrays.asList("cast(", elem, " as char(36))");
        }
    } else if (obj instanceof AggregateFunction) {
        AggregateFunction af = (AggregateFunction) obj;
        if (af.getName().equals(AggregateFunction.STDDEV_POP)) {
            // $NON-NLS-1$
            af.setName("STDDEVP");
        } else if (af.getName().equals(AggregateFunction.STDDEV_SAMP)) {
            // $NON-NLS-1$
            af.setName("STDDEV");
        } else if (af.getName().equals(AggregateFunction.VAR_POP)) {
            // $NON-NLS-1$
            af.setName("VARP");
        } else if (af.getName().equals(AggregateFunction.VAR_SAMP)) {
            // $NON-NLS-1$
            af.setName("VAR");
        }
    } else if (obj instanceof WithItem) {
        WithItem withItem = (WithItem) obj;
        // unlike normal unions, recursive cte require additional type handling
        if (withItem.isRecusive()) {
            List<DerivedColumn> derivedColumns = withItem.getSubquery().getProjectedQuery().getDerivedColumns();
            List<DerivedColumn> derivedColumnsRecurse = ((SetQuery) withItem.getSubquery()).getRightQuery().getProjectedQuery().getDerivedColumns();
            for (int i = 0; i < derivedColumns.size(); i++) {
                String nativeType = null;
                boolean castLeft = true;
                boolean castRight = true;
                DerivedColumn dc = derivedColumns.get(i);
                if (dc.getExpression() instanceof ColumnReference) {
                    Column c = ((ColumnReference) dc.getExpression()).getMetadataObject();
                    if (c != null && c.getNativeType() != null) {
                        nativeType = c.getNativeType();
                        castLeft = false;
                    }
                }
                DerivedColumn dcR = derivedColumnsRecurse.get(i);
                if (dcR.getExpression() instanceof ColumnReference) {
                    Column c = ((ColumnReference) dcR.getExpression()).getMetadataObject();
                    if (c != null) {
                        if (nativeType == null) {
                            if (c.getNativeType() != null) {
                                nativeType = c.getNativeType();
                                castRight = false;
                            }
                        } else {
                            if (nativeType.equals(c.getNativeType())) {
                                // it matches
                                continue;
                            }
                        // we won't gracefully handle this case, we'll just assume the first type
                        }
                    }
                }
                if (castLeft) {
                    addCast(nativeType, dc);
                }
                if (castRight) {
                    addCast(nativeType, dcR);
                }
            }
        }
    }
    return super.translate(obj, context);
}
Also used : Column(org.teiid.metadata.Column)

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