/*
* 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.ignite.internal.processors.cache;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.processors.query.h2.sql.AbstractH2CompareQueryTest;
import org.apache.ignite.internal.processors.query.h2.sql.BaseH2CompareQueryTest;
import static org.apache.ignite.cache.CacheMode.PARTITIONED;
/**
*
*/
public class IgniteCacheUnionDuplicatesTest extends AbstractH2CompareQueryTest {
/** */
private static IgniteCache<Integer, Organization> pCache;
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(gridName);
cfg.setCacheConfiguration(cacheConfiguration("orgCache", PARTITIONED, Integer.class, Organization.class));
return cfg;
}
/** {@inheritDoc} */
@Override protected void createCaches() {
pCache = ignite.cache("orgCache");
}
/** {@inheritDoc} */
@Override protected void initCacheAndDbData() throws Exception {
Integer k1 = primaryKey(ignite(0).cache(pCache.getName()));
Integer k2 = primaryKey(ignite(1).cache(pCache.getName()));
Organization org1 = new Organization(k1, "org", "org1");
Organization org2 = new Organization(k2, "org", "org2");
pCache.put(k1, org1);
pCache.put(k2, org2);
insertInDb(org1);
insertInDb(org2);
}
/** {@inheritDoc} */
@Override protected void checkAllDataEquals() throws Exception {
// No-op.
}
/**
* @throws Exception If failed.
*/
public void testUnionDuplicateFilter() throws Exception {
compareQueryRes0(pCache, "select name from \"part\".Organization " +
"union " +
"select name2 from \"part\".Organization");
}
/** {@inheritDoc} */
@Override protected Statement initializeH2Schema() throws SQLException {
Statement st = super.initializeH2Schema();
st.execute("create table \"part\".ORGANIZATION" +
" (_key int not null," +
" _val other not null," +
" id int unique," +
" name varchar(255)," +
" name2 varchar(255))");
return st;
}
/**
* Insert {@link BaseH2CompareQueryTest.Organization} at h2 database.
*
* @param org Organization.
* @throws SQLException If exception.
*/
private void insertInDb(Organization org) throws SQLException {
try(PreparedStatement st = conn.prepareStatement(
"insert into \"part\".ORGANIZATION (_key, _val, id, name, name2) values(?, ?, ?, ?, ?)")) {
st.setObject(1, org.id);
st.setObject(2, org);
st.setObject(3, org.id);
st.setObject(4, org.name);
st.setObject(5, org.name2);
st.executeUpdate();
}
}
/**
* Organization class. Stored at partitioned cache.
*/
private static class Organization implements Serializable {
/** */
@QuerySqlField(index = true)
private int id;
/** */
@QuerySqlField(index = true)
private String name;
/** */
@QuerySqlField(index = true)
private String name2;
/**
* Create Organization.
*
* @param id Organization ID.
* @param name Organization name.
* @param name2 Name2.
*/
Organization(int id, String name, String name2) {
this.id = id;
this.name = name;
this.name2 = name2;
}
/** {@inheritDoc} */
@Override public boolean equals(Object o) {
return this == o || o instanceof Organization && id == ((Organization)o).id;
}
/** {@inheritDoc} */
@Override public int hashCode() {
return id;
}
/** {@inheritDoc} */
@Override public String toString() {
return "Organization [id=" + id +
", name=" + name +
", name2=" + name2 + ']';
}
}
}