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");
}
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());
}
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));
}
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')");
}
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);
}
Aggregations