Skip to content

Commit

Permalink
TEIID-3358 using fully qualified name in generated sql
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins committed Apr 23, 2015
1 parent 1c8ead0 commit 032be38
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 33 deletions.
44 changes: 23 additions & 21 deletions odata/src/main/java/org/teiid/odata/ODataSQLBuilder.java
Expand Up @@ -104,9 +104,9 @@ public Query selectString(String entityName, QueryInfo info, OEntityKey key, Str

Table entityTable = findTable(entityName, metadata);
this.resultEntityTable = entityTable;
this.resultEntityGroup = new GroupSymbol("g0", entityName);
this.assosiatedTables.put(entityTable.getName(), this.resultEntityGroup);
this.aliasTableNames.put("g0", entityTable.getName());
this.resultEntityGroup = new GroupSymbol("g0", entityTable.getFullName());
this.assosiatedTables.put(entityTable.getFullName(), this.resultEntityGroup);
this.aliasTableNames.put("g0", entityTable.getFullName());

if (key != null) {
this.criteria = buildEntityKeyCriteria(entityTable, this.resultEntityGroup, key);
Expand Down Expand Up @@ -144,7 +144,7 @@ public Query selectString(String entityName, QueryInfo info, OEntityKey key, Str
for (ForeignKey fk:joinTable.getForeignKeys()) {
if (fk.getReferenceKey().getParent().equals(entityTable)) {

if(this.assosiatedTables.get(joinTable.getName()) == null) {
if(this.assosiatedTables.get(joinTable.getFullName()) == null) {
List<String> refColumns = fk.getReferenceColumns();
if (refColumns == null) {
refColumns = getColumnNames(entityTable.getPrimaryKey().getColumns());
Expand All @@ -160,7 +160,7 @@ public Query selectString(String entityName, QueryInfo info, OEntityKey key, Str
if (!associationFound) {
for (ForeignKey fk:entityTable.getForeignKeys()) {
if (fk.getReferenceKey().getParent().equals(joinTable)) {
if(this.assosiatedTables.get(joinTable.getName()) == null) {
if(this.assosiatedTables.get(joinTable.getFullName()) == null) {
List<String> refColumns = fk.getReferenceColumns();
if (refColumns == null) {
refColumns = getColumnNames(joinTable.getPrimaryKey().getColumns());
Expand All @@ -174,11 +174,11 @@ public Query selectString(String entityName, QueryInfo info, OEntityKey key, Str
}

if (!associationFound) {
throw new NotFoundException(ODataPlugin.Util.gs(ODataPlugin.Event.TEIID16003, prop, resultEntityTable.getName()));
throw new NotFoundException(ODataPlugin.Util.gs(ODataPlugin.Event.TEIID16003, prop, resultEntityTable.getFullName()));
}

entityTable = joinTable;
this.resultEntityGroup = this.assosiatedTables.get(joinTable.getName());
this.resultEntityGroup = this.assosiatedTables.get(joinTable.getFullName());
this.resultEntityTable = entityTable;

if (propSplit.length > 1) {
Expand Down Expand Up @@ -252,7 +252,7 @@ private GroupSymbol joinTable(String tableName, final String alias, final JoinTy
throw new NotFoundException(ODataPlugin.Util.gs(ODataPlugin.Event.TEIID16004, tableName));
}

String joinKey = (alias != null)?alias:joinTable.getName();
String joinKey = (alias != null)?alias:joinTable.getFullName();
String aliasGroup = (alias == null)?"g"+this.groupCount.getAndIncrement():alias;

for (ForeignKey fk:this.resultEntityTable.getForeignKeys()) {
Expand All @@ -264,7 +264,7 @@ private GroupSymbol joinTable(String tableName, final String alias, final JoinTy
}
addJoinTable(aliasGroup, joinType, joinTable, this.resultEntityTable, getColumnNames(fk.getColumns()), refColumns);
}
return this.assosiatedTables.get(alias!=null?aliasGroup:joinTable.getName());
return this.assosiatedTables.get(alias!=null?aliasGroup:joinTable.getFullName());
}
}

Expand All @@ -278,7 +278,7 @@ private GroupSymbol joinTable(String tableName, final String alias, final JoinTy
}
addJoinTable(aliasGroup, joinType, joinTable, this.resultEntityTable, refColumns, getColumnNames(fk.getColumns()));
}
return this.assosiatedTables.get(alias!=null?aliasGroup:joinTable.getName());
return this.assosiatedTables.get(alias!=null?aliasGroup:joinTable.getFullName());
}
}
return null;
Expand All @@ -288,8 +288,8 @@ private void addJoinTable(final String alias, final JoinType joinType,
final Table joinTable, final Table entityTable, List<String> pkColumns,
List<String> refColumns) {

GroupSymbol joinGroup = new GroupSymbol(alias, joinTable.getName());
GroupSymbol entityGroup = this.assosiatedTables.get(entityTable.getName());
GroupSymbol joinGroup = new GroupSymbol(alias, joinTable.getFullName());
GroupSymbol entityGroup = this.assosiatedTables.get(entityTable.getFullName());

List<Criteria> critList = new ArrayList<Criteria>();

Expand All @@ -310,8 +310,8 @@ private void addJoinTable(final String alias, final JoinType joinType,
this.fromCluse = new JoinPredicate(this.fromCluse, new UnaryFromClause(joinGroup), joinType, crit);
}
this.assosiatedTables.put(alias, joinGroup);
this.assosiatedTables.put(joinTable.getName(), joinGroup);
this.aliasTableNames.put(alias, joinTable.getName());
this.assosiatedTables.put(joinTable.getFullName(), joinGroup);
this.aliasTableNames.put(alias, joinTable.getFullName());
}

private Criteria buildEntityKeyCriteria(Table table, GroupSymbol entityGroup, OEntityKey entityKey) {
Expand Down Expand Up @@ -923,18 +923,20 @@ public void visit(AggregateAllFunction expr) {
}

private Table findTable(String tableName, MetadataStore store) {
for (Schema s : store.getSchemaList()) {
for (Table t : s.getTables().values()) {
if (t.getFullName().equals(tableName)) {
int idx = tableName.indexOf('.');
if (idx > 0) {
Schema s = store.getSchema(tableName.substring(0, idx));
if (s != null) {
Table t = s.getTable(tableName.substring(idx+1));
if (t != null) {
return t;
}
}
}
for (Schema s : store.getSchemaList()) {
for (Table t : s.getTables().values()) {
if (t.getName().equals(tableName)) {
return t;
}
Table t = s.getTables().get(tableName);
if (t != null) {
return t;
}
}
return null;
Expand Down
9 changes: 4 additions & 5 deletions odata/src/test/java/org/teiid/odata/TestODataIntegration.java
Expand Up @@ -251,7 +251,7 @@ public void testProjectedColumns() throws Exception {
ClientResponse<String> response = request.get(String.class);
verify(client).executeSQL(sql.capture(), anyListOf(SQLParam.class), entitySet.capture(), (LinkedHashMap<String, Boolean>) any(), any(QueryInfo.class));

Assert.assertEquals("SELECT g0.CustomerID, g0.CompanyName, g0.Address FROM Customers AS g0 ORDER BY g0.CustomerID", sql.getValue().toString());
Assert.assertEquals("SELECT g0.CustomerID, g0.CompanyName, g0.Address FROM nw.Customers AS g0 ORDER BY g0.CustomerID", sql.getValue().toString());
Assert.assertEquals(200, response.getStatus());
//Assert.assertEquals("", response.getEntity());
}
Expand Down Expand Up @@ -322,7 +322,7 @@ public Map<String, Object> getGeneratedKeys() {
verify(client).executeSQL(sql.capture(), anyListOf(SQLParam.class), entitySet.capture(), (LinkedHashMap<String, Boolean>) any(), any(QueryInfo.class));

Assert.assertEquals("INSERT INTO Customers (CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", insertCmd.getValue().toString());
Assert.assertEquals("SELECT g0.CustomerID, g0.CompanyName, g0.ContactName, g0.ContactTitle, g0.Address, g0.City, g0.Region, g0.PostalCode, g0.Country, g0.Phone, g0.Fax FROM Customers AS g0 WHERE g0.CustomerID = 1234 ORDER BY g0.CustomerID", sql.getValue().toString());
Assert.assertEquals("SELECT g0.CustomerID, g0.CompanyName, g0.ContactName, g0.ContactTitle, g0.Address, g0.City, g0.Region, g0.PostalCode, g0.Country, g0.Phone, g0.Fax FROM nw.Customers AS g0 WHERE g0.CustomerID = 1234 ORDER BY g0.CustomerID", sql.getValue().toString());
Assert.assertEquals(201, response.getStatus());
}

Expand Down Expand Up @@ -372,7 +372,7 @@ public void testError() throws Exception {
}

@Test
public void testProcedureCall() throws Exception {
public void testSelect() throws Exception {
Client client = mockClient();
MockProvider.CLIENT = client;
ArgumentCaptor<Query> sql = ArgumentCaptor.forClass(Query.class);
Expand All @@ -393,9 +393,8 @@ public void testProcedureCall() throws Exception {
ClientResponse<String> response = request.get(String.class);
verify(client).executeSQL(sql.capture(), anyListOf(SQLParam.class), entitySet.capture(), (LinkedHashMap<String, Boolean>) any(), any(QueryInfo.class));

Assert.assertEquals("SELECT g0.CustomerID, g0.CompanyName, g0.Address FROM Customers AS g0 ORDER BY g0.CustomerID", sql.getValue().toString());
Assert.assertEquals("SELECT g0.CustomerID, g0.CompanyName, g0.Address FROM nw.Customers AS g0 ORDER BY g0.CustomerID", sql.getValue().toString());
Assert.assertEquals(200, response.getStatus());
//Assert.assertEquals("", response.getEntity());

}

Expand Down
Expand Up @@ -255,14 +255,14 @@ public void testSelectQuery() throws Exception {
@Test
public void testNavigationalQuery() throws Exception {
testSelect(
"SELECT g1.EmployeeID, g1.OrderID, g1.CustomerID, g1.ShipVia FROM nw.Customers AS g0 INNER JOIN Orders AS g1 ON g0.CustomerID = g1.CustomerID ORDER BY g1.OrderID",
"SELECT g1.EmployeeID, g1.OrderID, g1.CustomerID, g1.ShipVia FROM nw.Customers AS g0 INNER JOIN nw.Orders AS g1 ON g0.CustomerID = g1.CustomerID ORDER BY g1.OrderID",
"nw.Customers", null, "EmployeeID", null, -1, "nw.Orders", null);
testSelect(
"SELECT g2.UnitPrice, g2.OrderID, g2.ProductID FROM (nw.Customers AS g0 INNER JOIN Orders AS g1 ON g0.CustomerID = g1.CustomerID) INNER JOIN OrderDetails AS g2 ON g1.OrderID = g2.OrderID WHERE g1.OrderID = 12 ORDER BY g2.OrderID, g2.ProductID",
"SELECT g2.UnitPrice, g2.OrderID, g2.ProductID FROM (nw.Customers AS g0 INNER JOIN nw.Orders AS g1 ON g0.CustomerID = g1.CustomerID) INNER JOIN nw.OrderDetails AS g2 ON g1.OrderID = g2.OrderID WHERE g1.OrderID = 12 ORDER BY g2.OrderID, g2.ProductID",
"nw.Customers", null, "UnitPrice", null, -1,
"nw.Orders(12)/nw.OrderDetails", null);
testSelect(
"SELECT g2.UnitPrice, g2.OrderID, g2.ProductID FROM (nw.Customers AS g0 INNER JOIN Orders AS g1 ON g0.CustomerID = g1.CustomerID) INNER JOIN OrderDetails AS g2 ON g1.OrderID = g2.OrderID WHERE (g0.CustomerID = 33) AND (g1.OrderID = 12) ORDER BY g2.OrderID, g2.ProductID",
"SELECT g2.UnitPrice, g2.OrderID, g2.ProductID FROM (nw.Customers AS g0 INNER JOIN nw.Orders AS g1 ON g0.CustomerID = g1.CustomerID) INNER JOIN nw.OrderDetails AS g2 ON g1.OrderID = g2.OrderID WHERE (g0.CustomerID = 33) AND (g1.OrderID = 12) ORDER BY g2.OrderID, g2.ProductID",
"nw.Customers", null, "UnitPrice", null, -1,
"nw.Orders(12)/nw.OrderDetails", OEntityKey.create(33));
}
Expand All @@ -276,12 +276,12 @@ public void testEntityKeyQuery() throws Exception {
@Test
public void testFilterBasedAssosiation() throws Exception {
testSelect(
"SELECT g0.OrderID, g0.CustomerID, g0.EmployeeID, g0.ShipVia FROM nw.Orders AS g0 INNER JOIN Customers AS g1 ON g0.CustomerID = g1.CustomerID WHERE g1.ContactName = 'Fred' ORDER BY g0.OrderID",
"SELECT g0.OrderID, g0.CustomerID, g0.EmployeeID, g0.ShipVia FROM nw.Orders AS g0 INNER JOIN nw.Customers AS g1 ON g0.CustomerID = g1.CustomerID WHERE g1.ContactName = 'Fred' ORDER BY g0.OrderID",
"nw.Orders", "Customers/ContactName eq 'Fred'", "OrderID",
null, -1, null, null);

testSelect(
"SELECT g0.ContactName, g0.CustomerID FROM nw.Customers AS g0 INNER JOIN Orders AS g1 ON g0.CustomerID = g1.CustomerID WHERE g1.OrderID = 1 ORDER BY g0.CustomerID",
"SELECT g0.ContactName, g0.CustomerID FROM nw.Customers AS g0 INNER JOIN nw.Orders AS g1 ON g0.CustomerID = g1.CustomerID WHERE g1.OrderID = 1 ORDER BY g0.CustomerID",
"nw.Customers", "Orders/OrderID eq 1", "ContactName",
null, -1, null, null);

Expand All @@ -298,7 +298,7 @@ public void testOrderByWithCriteria() throws Exception {
@Test
public void testAny() throws Exception {
testSelect(
"SELECT DISTINCT g0.OrderID, g0.CustomerID, g0.EmployeeID, g0.ShipVia FROM nw.Orders AS g0 INNER JOIN OrderDetails AS ol ON g0.OrderID = ol.OrderID WHERE ol.Quantity > 10 ORDER BY g0.OrderID",
"SELECT DISTINCT g0.OrderID, g0.CustomerID, g0.EmployeeID, g0.ShipVia FROM nw.Orders AS g0 INNER JOIN nw.OrderDetails AS ol ON g0.OrderID = ol.OrderID WHERE ol.Quantity > 10 ORDER BY g0.OrderID",
"nw.Orders", "OrderDetails/any(ol: ol/Quantity gt 10)",
"OrderID", null, -1, null, null);
}
Expand All @@ -314,7 +314,7 @@ public void testAll() throws Exception {
@Test
public void testMultiEntitykey() throws Exception {
OEntityKey key = OEntityKey.parse("(11044)");
testSelect("SELECT g1.OrderID, g1.ProductID FROM nw.Orders AS g0 INNER JOIN OrderDetails AS g1 ON g0.OrderID = g1.OrderID WHERE (g0.OrderID = 11044) AND ((g1.OrderID = 11044) AND (g1.ProductID = 62)) ORDER BY g1.OrderID, g1.ProductID",
testSelect("SELECT g1.OrderID, g1.ProductID FROM nw.Orders AS g0 INNER JOIN nw.OrderDetails AS g1 ON g0.OrderID = g1.OrderID WHERE (g0.OrderID = 11044) AND ((g1.OrderID = 11044) AND (g1.ProductID = 62)) ORDER BY g1.OrderID, g1.ProductID",
"nw.Orders", null,
"OrderID", null, -1, "nw.OrderDetails(OrderID=11044L,ProductID=62L)", key);
}
Expand Down

0 comments on commit 032be38

Please sign in to comment.