This is an automated email from the ASF dual-hosted git repository. kaspersor pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/metamodel.git
commit 30095d826eecd572851eb89d1a77176f3f525e4c Author: Arjan Seijkens <[email protected]> AuthorDate: Wed Apr 24 14:28:16 2019 +0200 Added unit test which validates the working of a query which joins two tables and then uses a compound FilterItem in the where statement to filter out some more results. --- .../apache/metamodel/pojo/PojoDataContextTest.java | 44 +++++++++++++++++ .../test/java/org/apache/metamodel/pojo/Role.java | 45 +++++++++++++++++ .../test/java/org/apache/metamodel/pojo/User.java | 57 ++++++++++++++++++++++ 3 files changed, 146 insertions(+) diff --git a/pojo/src/test/java/org/apache/metamodel/pojo/PojoDataContextTest.java b/pojo/src/test/java/org/apache/metamodel/pojo/PojoDataContextTest.java index d520556..6d1638f 100644 --- a/pojo/src/test/java/org/apache/metamodel/pojo/PojoDataContextTest.java +++ b/pojo/src/test/java/org/apache/metamodel/pojo/PojoDataContextTest.java @@ -18,6 +18,7 @@ */ package org.apache.metamodel.pojo; +import java.sql.Date; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -31,7 +32,13 @@ import org.apache.metamodel.DataContext; import org.apache.metamodel.UpdateCallback; import org.apache.metamodel.UpdateScript; import org.apache.metamodel.data.DataSet; +import org.apache.metamodel.data.Row; +import org.apache.metamodel.query.FilterItem; +import org.apache.metamodel.query.LogicalOperator; +import org.apache.metamodel.query.OperatorType; import org.apache.metamodel.query.Query; +import org.apache.metamodel.query.SelectItem; +import org.apache.metamodel.schema.Column; import org.apache.metamodel.schema.ColumnType; import org.apache.metamodel.schema.Schema; import org.apache.metamodel.schema.Table; @@ -215,4 +222,41 @@ public class PojoDataContextTest extends TestCase { map.put("col3", c); return map; } + + public void testJoinWithCompoundFilterItems() { + final List<Role> roles = new ArrayList<>(); + roles.add(new Role(1, "admin")); + roles.add(new Role(2, "guest")); + + final List<User> users = new ArrayList<>(); + users.add(new User("pete", null, 1)); + users.add(new User("jake", Date.valueOf("2018-1-1"), 1)); + users.add(new User("susan", Date.valueOf("2020-1-1"), 2)); + + final DataContext dataContext = new PojoDataContext("userdb", new ObjectTableDataProvider<User>("users", + User.class, users), new ObjectTableDataProvider<Role>("roles", Role.class, roles)); + + final SelectItem expirationDateField = new SelectItem(dataContext + .getColumnByQualifiedLabel("userdb.users.expirationDate")); + final Column userRoleIdColumn = dataContext.getColumnByQualifiedLabel("userdb.users.roleId"); + final Column roleIdColumn = dataContext.getColumnByQualifiedLabel("userdb.roles.id"); + + DataSet dataSet = dataContext + .query() + .from("users") + .and("roles") + .select("users.name") + .where(userRoleIdColumn) + .eq(roleIdColumn) + .where(new FilterItem(LogicalOperator.OR, new FilterItem(expirationDateField, OperatorType.EQUALS_TO, + null), new FilterItem(expirationDateField, OperatorType.GREATER_THAN_OR_EQUAL, Date + .valueOf("2019-1-1")))) + .orderBy("name") + .execute(); + + List<Row> rows = dataSet.toRows(); + assertEquals(2, rows.size()); + assertEquals("pete", rows.get(0).getValue(0)); + assertEquals("susan", rows.get(1).getValue(0)); + } } \ No newline at end of file diff --git a/pojo/src/test/java/org/apache/metamodel/pojo/Role.java b/pojo/src/test/java/org/apache/metamodel/pojo/Role.java new file mode 100644 index 0000000..06a5f80 --- /dev/null +++ b/pojo/src/test/java/org/apache/metamodel/pojo/Role.java @@ -0,0 +1,45 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.metamodel.pojo; + +class Role { + private int id; + private String name; + + public Role(final int id, final String name) { + this.name = name; + this.id = id; + } + + public int getId() { + return id; + } + + public void setId(final int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } +} diff --git a/pojo/src/test/java/org/apache/metamodel/pojo/User.java b/pojo/src/test/java/org/apache/metamodel/pojo/User.java new file mode 100644 index 0000000..37987c2 --- /dev/null +++ b/pojo/src/test/java/org/apache/metamodel/pojo/User.java @@ -0,0 +1,57 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.metamodel.pojo; + +import java.util.Date; + +class User { + private String name; + private Date expirationDate; + private int roleId; + + public User(final String name, final Date expirationDate, final int roleId) { + this.name = name; + this.expirationDate = expirationDate; + this.roleId = roleId; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public Date getExpirationDate() { + return expirationDate; + } + + public void setExpirationDate(final Date expirationDate) { + this.expirationDate = expirationDate; + } + + public int getRoleId() { + return roleId; + } + + public void setRole(final int roleId) { + this.roleId = roleId; + } +}
