/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2009, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.teradata; import com.vividsolutions.jts.geom.Geometry; import org.geotools.data.FeatureWriter; import org.geotools.data.Query; import org.geotools.data.Transaction; import org.geotools.data.store.ContentFeatureSource; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.jdbc.JDBCDataStoreTest; import org.geotools.jdbc.JDBCTestSetup; import org.geotools.referencing.CRS; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.FilterFactory; import org.opengis.filter.PropertyIsEqualTo; public class TeradataDataStoreTest extends JDBCDataStoreTest { protected JDBCTestSetup createTestSetup() { return new TeradataTestSetup(); } public void testConcurrentWriters() throws Exception { final boolean[] errors = {false}; Thread[] t = new Thread[8]; SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); builder.setName(tname("ft2")); builder.setNamespaceURI(dataStore.getNamespaceURI()); builder.setCRS(CRS.decode("EPSG:4326")); builder.add(aname("geometry"), Geometry.class); builder.add(aname("intProperty"), Integer.class); builder.add(aname("stringProperty"), String.class); SimpleFeatureType featureType = builder.buildFeatureType(); dataStore.createSchema(featureType); for (int i = 0; i < t.length; i++) { final int id = i+1; t[i] = new Thread(new Runnable() { public void run() { for (int j = 0; j < 50; j++) { try { FeatureWriter w = dataStore.getFeatureWriter(tname("ft2"), Transaction.AUTO_COMMIT); while (w.hasNext()) { w.next(); } SimpleFeature f = (SimpleFeature) w.next(); f.setAttribute(1, new Integer( (id * 100) + j)); f.setAttribute(2, "one"); w.write(); w.close(); } catch (Exception ex) { ex.printStackTrace(); errors[0] = true; } } } }); t[i].start(); } for (int i = 0; i < t.length; i++) { t[i].join(); } ContentFeatureSource featureSource = dataStore.getFeatureSource(tname("ft2")); int size = featureSource.getFeatures().size(); if (errors[0]) fail(); } public void testCreateSchemaWithCaseSensitivity() throws Exception { SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); builder.setName(tname("ft2")); builder.setNamespaceURI(dataStore.getNamespaceURI()); builder.setCRS(CRS.decode("EPSG:4326")); builder.add(aname("geometry"), Geometry.class); builder.add(aname("intProperty"), Integer.class); builder.add(aname("stringProperty"), String.class); SimpleFeatureType featureType = builder.buildFeatureType(); dataStore.createSchema(featureType); FeatureWriter w = dataStore.getFeatureWriter(tname("ft2"), Transaction.AUTO_COMMIT); w.hasNext(); SimpleFeature f = (SimpleFeature) w.next(); f.setAttribute(1, new Integer(0)); f.setAttribute(2, "one"); w.write(); w.close(); FilterFactory ff = dataStore.getFilterFactory(); PropertyIsEqualTo correct = ff.equal(ff.property(aname("stringProperty")), ff.literal("one"), true); PropertyIsEqualTo incorrect = ff.equal(ff.property(aname("stringProperty")), ff.literal("OnE"), true); assertEquals(1, dataStore.getFeatureSource("ft2").getCount(new Query(tname("ft2"), correct))); assertEquals(0, dataStore.getFeatureSource("ft2").getCount(new Query(tname("ft2"), incorrect))); } }