Revision 46110

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.h2spatial/org.gvsig.h2spatial.h2gis132/org.gvsig.h2spatial.h2gis132.provider/src/test/resources/org/gvsig/fmap/dal/store/h2/usecases/arena2/testMultipleExpansionOfCalculatedField.sql
1

  
2
-- testToDoubleWithSpecialFunctions SQL
3

  
4
-- Select 
5
SELECT "public"."ARENA2_CONDUCTORES"."LID_CONDUCTOR", "public"."ARENA2_CONDUCTORES"."ID_ACCIDENTE", 
6
"public"."ARENA2_CONDUCTORES"."LID_VEHICULO", "public"."ARENA2_CONDUCTORES"."ID_VEHICULO", 
7
"public"."ARENA2_CONDUCTORES"."POSIBLE_RESPONSABLE", "public"."ARENA2_CONDUCTORES"."FECHA_NACIMIENTO", 
8
"public"."ARENA2_CONDUCTORES"."SEXO", "public"."ARENA2_CONDUCTORES"."NACIONALIDAD", 
9
"public"."ARENA2_CONDUCTORES"."PAIS_RESIDENCIA", "public"."ARENA2_CONDUCTORES"."PROVINCIA_RESIDENCIA", 
10
"public"."ARENA2_CONDUCTORES"."MUNICIPIO_RESIDENCIA", "public"."ARENA2_CONDUCTORES"."ASISTENCIA_SANITARIA", 
11
"public"."ARENA2_CONDUCTORES"."INFLU_FACT_ATENCION", "public"."ARENA2_CONDUCTORES"."FACTORES_ATENCION", 
12
"public"."ARENA2_CONDUCTORES"."INFLU_PRES_ERROR", "public"."ARENA2_CONDUCTORES"."PRESUNTOS_ERRORES", 
13
"public"."ARENA2_CONDUCTORES"."CARACT_PERMISO", "public"."ARENA2_CONDUCTORES"."CLASE_PERMISO", 
14
"public"."ARENA2_CONDUCTORES"."FECHA_PERMISO", "public"."ARENA2_CONDUCTORES"."MOTIVO_DESPLAZAMIENTO", 
15
"public"."ARENA2_CONDUCTORES"."DESPLAZAMIENTO_PREVISTO", "public"."ARENA2_CONDUCTORES"."ACC_SEG_CINTURON", 
16
"public"."ARENA2_CONDUCTORES"."ACC_SEG_CASCO", "public"."ARENA2_CONDUCTORES"."ACC_SEG_BRAZOS", 
17
"public"."ARENA2_CONDUCTORES"."ACC_SEG_ESPALDA", "public"."ARENA2_CONDUCTORES"."ACC_SEG_TORSO", 
18
"public"."ARENA2_CONDUCTORES"."ACC_SEG_MANOS", "public"."ARENA2_CONDUCTORES"."ACC_SEG_PIERNAS", 
19
"public"."ARENA2_CONDUCTORES"."ACC_SEG_PIES", "public"."ARENA2_CONDUCTORES"."ACC_SEG_PRENDA_REF", 
20
"public"."ARENA2_CONDUCTORES"."INFLU_ALCOHOL", "public"."ARENA2_CONDUCTORES"."PRUEBA_ALCOHOLEMIA", 
21
"public"."ARENA2_CONDUCTORES"."TASA_ALCOHOLEMIA1", "public"."ARENA2_CONDUCTORES"."TASA_ALCOHOLEMIA2", 
22
"public"."ARENA2_CONDUCTORES"."PRUEBA_ALC_SANGRE", "public"."ARENA2_CONDUCTORES"."SIGNOS_INFLU_ALCOHOL", 
23
"public"."ARENA2_CONDUCTORES"."INFLU_DROGAS", "public"."ARENA2_CONDUCTORES"."PRUEBA_DROGAS", 
24
"public"."ARENA2_CONDUCTORES"."AMP", "public"."ARENA2_CONDUCTORES"."CONFIRMADO_AMP", 
25
"public"."ARENA2_CONDUCTORES"."BDZ", "public"."ARENA2_CONDUCTORES"."CONFIRMADO_BDZ", 
26
"public"."ARENA2_CONDUCTORES"."COC", "public"."ARENA2_CONDUCTORES"."CONFIRMADO_COC", "public"."ARENA2_CONDUCTORES"."THC", 
27
"public"."ARENA2_CONDUCTORES"."CONFIRMADO_THC", "public"."ARENA2_CONDUCTORES"."METH", 
28
"public"."ARENA2_CONDUCTORES"."CONFIRMADO_METH", "public"."ARENA2_CONDUCTORES"."OPI", "public"."ARENA2_CONDUCTORES"."CONFIRMADO_OPI", 
29
"public"."ARENA2_CONDUCTORES"."OTRAS", "public"."ARENA2_CONDUCTORES"."CONFIRMADO_OTRAS", 
30
"public"."ARENA2_CONDUCTORES"."SIGNOS_INFLU_DROGAS", "public"."ARENA2_CONDUCTORES"."INFLU_PRES_INFRAC_COND", 
31
"public"."ARENA2_CONDUCTORES"."PRES_INFRAC_COND", "public"."ARENA2_CONDUCTORES"."PRES_INFRAC_SIN_LUCES", 
32
"public"."ARENA2_CONDUCTORES"."PRES_INFRAC_SIN_TRIANGULO", "public"."ARENA2_CONDUCTORES"."INFLU_PRES_INFRAC_VEL", 
33
"public"."ARENA2_CONDUCTORES"."PRES_INFRAC_VEL_COND", "public"."ARENA2_CONDUCTORES"."INFLU_OTRA_INFRAC", 
34
"public"."ARENA2_CONDUCTORES"."OTRA_INFRAC_COND", "public"."ARENA2_CONDUCTORES"."EXTRA", 
35
"public"."ARENA2_ACCIDENTES"."KM" AS "AccKm0", 
36
("public"."ARENA2_ACCIDENTES"."KM" * 100) AS "AccKm1", 
37
("public"."ARENA2_ACCIDENTES"."KM" * 222) AS "AccKm2", 
38
"public"."ARENA2_ACCIDENTES"."KM" 
39
FROM "public"."ARENA2_CONDUCTORES" 
40
LEFT JOIN "public"."ARENA2_ACCIDENTES" ON ( ("public"."ARENA2_CONDUCTORES"."ID_ACCIDENTE") = ("public"."ARENA2_ACCIDENTES"."ID_ACCIDENTE") ) 
41
ORDER BY "LID_CONDUCTOR" ASC NULLS LAST LIMIT 15;
42

  
43
-- Count
44
SELECT COUNT(*) FROM "public"."ARENA2_CONDUCTORES";
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.h2spatial/org.gvsig.h2spatial.h2gis132/org.gvsig.h2spatial.h2gis132.provider/src/test/java/org/gvsig/fmap/dal/store/h2/operations/usecases/TestArena2OrderByExtraValue.java
1
package org.gvsig.fmap.dal.store.h2.operations.usecases;
2

  
3
import java.util.List;
4
import junit.framework.TestCase;
5
import org.gvsig.expressionevaluator.ExpressionUtils;
6
import org.gvsig.fmap.dal.DataTypes;
7
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
8
import org.gvsig.fmap.dal.feature.EditableFeatureType;
9
import org.gvsig.fmap.dal.feature.FeatureQuery;
10
import org.gvsig.fmap.dal.feature.FeatureStore;
11
import org.gvsig.fmap.dal.feature.FeatureType;
12
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
13
import org.gvsig.fmap.dal.store.h2.TestUtils;
14
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
15
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
16
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
17
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
18
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
19
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
20
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
21
import org.slf4j.Logger;
22
import org.slf4j.LoggerFactory;
23

  
24
@SuppressWarnings("UseSpecificCatch")
25
public class TestArena2OrderByExtraValue extends TestCase {
26

  
27
    private static final Logger LOGGER = LoggerFactory.getLogger(TestArena2OrderByExtraValue.class);
28

  
29
    public TestArena2OrderByExtraValue(String testName) {
30
        super(testName);
31
    }
32

  
33
    @Override
34
    protected void setUp() throws Exception {
35
        super.setUp();
36
        new DefaultLibrariesInitializer().fullInitialize();
37
    }
38

  
39
    @Override
40
    protected void tearDown() throws Exception {
41
        super.tearDown();
42
    }
43

  
44
    protected List<String> getExpectedSQLs(String name) throws Exception {
45
        return TestUtils.getSQLs(name);
46
    }
47

  
48
    public void testOrderByExtraValue() throws Exception {
49
        try {
50
            JDBCHelper helper = TestUtils.createJDBCHelper();
51
            JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
52
            OperationsFactory operations = helper.getOperations();
53

  
54
            List<String> expectedSQLs = getExpectedSQLs("usecases/arena2/testOrderByExtraValue.sql");
55

  
56
            FeatureStore arena2_conductores = TestUtils.openStoreTest("usecases/arena2/ARENA2_CONDUCTORES.csv");
57
            FeatureStore arena2_accidentes = TestUtils.openStoreTest("usecases/arena2/ARENA2_ACCIDENTES.csv");
58
            FeatureStore arena2_vehiculos = TestUtils.openStoreTest("usecases/arena2/ARENA2_VEHICULOS.csv");
59

  
60
            TableReference table = operations.createTableReference(
61
                    "dbtest",
62
                    "public", //sqlbuilder.default_schema(),
63
                    "ARENA2_CONDUCTORES",
64
                    null
65
            );
66
            FeatureType featureType = arena2_conductores.getDefaultFeatureType();
67
            EditableFeatureType eFeatureType = featureType.getEditable();
68
            FeatureQuery query = arena2_conductores.createFeatureQuery();
69
            query.setFilter("( ( ( (FOREING_VALUE('ID_ACCIDENTE.TITULARIDAD_VIA') = 2) )) AND \n" +
70
"( (( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 5) ) OR ( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 6) ) OR ( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 7) )))) AND \n" +
71
"( (( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') >= DATE '2019-01-01') ) AND ( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') <= DATE '2019-12-31') )))");
72
            addExtraColumn(eFeatureType, query, "ano", DataTypes.INTEGER, "EXTRACT(YEAR FROM FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE'))");
73
            addExtraColumn(eFeatureType, query, "provincia", DataTypes.STRING, "FOREING_VALUE('ID_ACCIDENTE.COD_PROVINCIA')");
74
            addExtraColumn(eFeatureType, query, "lesividad", DataTypes.STRING, "CASE\n"
75
                    + "WHEN ASISTENCIA_SANITARIA=1 THEN 'Muerto'\n"
76
                    + "WHEN ASISTENCIA_SANITARIA=2 THEN 'Grave'\n"
77
                    + "WHEN ASISTENCIA_SANITARIA=3 or ASISTENCIA_SANITARIA=4 or ASISTENCIA_SANITARIA=5 or ASISTENCIA_SANITARIA=6 or ASISTENCIA_SANITARIA=7 THEN 'Leve'\n"
78
                    + "WHEN ASISTENCIA_SANITARIA=8 THEN 'Ileso'\n"
79
                    + "ELSE 'Se Desconoce'\n"
80
                    + "END CASE");
81
            addExtraColumn(eFeatureType, query, "Acc", DataTypes.INTEGER, "1");
82

  
83
            query.getGroupByColumns().add("ano");
84
            query.getGroupByColumns().add("provincia");
85
            query.getGroupByColumns().add("lesividad");
86
            query.getAggregateFunctions().put("Acc", "SUM");
87
            query.getOrder().add("ano");
88
            query.getOrder().add("provincia");
89
            query.getOrder().add("lesividad");
90
            
91
            
92
            CountOperation count = operations.createCount(eFeatureType, table, null, query);
93
            String sqlcount = count.getSQL();
94
            System.out.println("###### SQL:" + sqlcount);
95
            System.out.println("###### EXP:" + expectedSQLs.get(1));
96
            assertEquals("Count SQL", expectedSQLs.get(1), sqlcount);
97

  
98
            ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
99
                    table,
100
                    null,
101
                    null,
102
                    query,
103
                    eFeatureType,
104
                    eFeatureType,
105
                    15,
106
                    0,
107
                    0
108
            );
109
            String sql = resultSetForSetProvider.getSQL();
110
            System.out.println("###### SQL:" + sql);
111
            System.out.println("###### EXP:" + expectedSQLs.get(0));
112

  
113
            assertEquals("Select SQL", expectedSQLs.get(0), sql);
114
            
115
            
116
        } catch (Throwable th) {
117
            th.printStackTrace();
118
            throw th;
119
        }
120
    }
121

  
122
    private void addExtraColumn(EditableFeatureType eFeatureType, FeatureQuery query, String name, int type, String exp) {
123
        EditableFeatureAttributeDescriptor extraColumn = query.getExtraColumn().add(name, type);
124
        extraColumn.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression(exp)));
125
    }
126

  
127
}
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.h2spatial/org.gvsig.h2spatial.h2gis132/org.gvsig.h2spatial.h2gis132.provider/src/test/java/org/gvsig/fmap/dal/store/h2/operations/usecases/TestArena2GroupByForeignValue.java
1
package org.gvsig.fmap.dal.store.h2.operations.usecases;
2

  
3
import java.util.List;
4
import junit.framework.TestCase;
5
import org.gvsig.expressionevaluator.ExpressionUtils;
6
import org.gvsig.fmap.dal.DataTypes;
7
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
8
import org.gvsig.fmap.dal.feature.EditableFeatureType;
9
import org.gvsig.fmap.dal.feature.FeatureQuery;
10
import org.gvsig.fmap.dal.feature.FeatureStore;
11
import org.gvsig.fmap.dal.feature.FeatureType;
12
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
13
import org.gvsig.fmap.dal.store.h2.TestUtils;
14
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
15
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
16
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
17
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
18
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
19
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
20
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
21
import org.slf4j.Logger;
22
import org.slf4j.LoggerFactory;
23

  
24
@SuppressWarnings("UseSpecificCatch")
25
public class TestArena2GroupByForeignValue extends TestCase {
26

  
27
  private static final Logger LOGGER = LoggerFactory.getLogger(TestArena2GroupByForeignValue.class);
28

  
29
  public TestArena2GroupByForeignValue(String testName) {
30
    super(testName);
31
  }
32

  
33
  @Override
34
  protected void setUp() throws Exception {
35
    super.setUp();
36
    new DefaultLibrariesInitializer().fullInitialize();
37
  }
38

  
39
  @Override
40
  protected void tearDown() throws Exception {
41
    super.tearDown();
42
  }
43
  
44
  protected List<String> getExpectedSQLs(String name) throws Exception {
45
	  return TestUtils.getSQLs(name);
46
  }
47

  
48
    public void testGroupByForeignValue() throws Exception {
49
        try {
50
            JDBCHelper helper = TestUtils.createJDBCHelper();
51
            JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
52
            OperationsFactory operations = helper.getOperations();
53

  
54
            List<String> expectedSQLs = getExpectedSQLs("usecases/arena2/testGroupByForeignValue.sql");
55

  
56
            FeatureStore arena2_conductores = TestUtils.openStoreTest("usecases/arena2/ARENA2_CONDUCTORES.csv");
57
            FeatureStore arena2_accidentes = TestUtils.openStoreTest("usecases/arena2/ARENA2_ACCIDENTES.csv");
58
            FeatureStore arena2_vehiculos = TestUtils.openStoreTest("usecases/arena2/ARENA2_VEHICULOS.csv");
59

  
60
            TableReference table = operations.createTableReference(
61
                    "dbtest",
62
                    "public", //sqlbuilder.default_schema(),
63
                    "ARENA2_CONDUCTORES",
64
                    null
65
            );
66
            FeatureType featureType = arena2_conductores.getDefaultFeatureType();
67
            EditableFeatureType eFeatureType = featureType.getEditable();
68
            FeatureQuery query = arena2_conductores.createFeatureQuery();
69
			query.setFilter("( ( ( (FOREING_VALUE('ID_ACCIDENTE.TITULARIDAD_VIA') = 2) )) AND \n" +
70
"( (( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 5) ) OR ( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 6) ) OR ( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 7) )))) AND \n" +
71
"( (( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') >= DATE '2019-01-01') ) AND ( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') <= DATE '2019-12-31') )))");
72
            addExtraColumn(eFeatureType, query, "ano", DataTypes.INTEGER, "EXTRACT(YEAR FROM FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE'))");
73
            addExtraColumn(eFeatureType, query, "provincia", DataTypes.STRING, "FOREING_VALUE('ID_ACCIDENTE.COD_PROVINCIA')");
74
            addExtraColumn(eFeatureType, query, "lesividad", DataTypes.STRING, "CASE\n" +
75
"WHEN ASISTENCIA_SANITARIA=1 THEN 'Muerto'\n" +
76
"WHEN ASISTENCIA_SANITARIA=2 THEN 'Grave'\n" +
77
"WHEN ASISTENCIA_SANITARIA=3 or ASISTENCIA_SANITARIA=4 or ASISTENCIA_SANITARIA=5 or ASISTENCIA_SANITARIA=6 or ASISTENCIA_SANITARIA=7 THEN 'Leve'\n" +
78
"WHEN ASISTENCIA_SANITARIA=8 THEN 'Ileso'\n" +
79
"ELSE 'Se Desconoce'\n" +
80
"END CASE");
81
            addExtraColumn(eFeatureType, query, "Acc", DataTypes.INTEGER, "1");
82

  
83
            query.getGroupByColumns().add("ano");
84
            query.getGroupByColumns().add("provincia");
85
            query.getGroupByColumns().add("lesividad");
86
            query.getAggregateFunctions().put("Acc", "SUM");
87
			query.getOrder().add("provincia");
88
			CountOperation count = operations.createCount(eFeatureType, table, null, query);
89
			String sqlcount = count.getSQL();
90
			System.out.println("###### SQL:" + sqlcount);
91
			System.out.println("###### EXP:" + expectedSQLs.get(1));
92
            assertEquals("Count SQL", expectedSQLs.get(1), sqlcount);
93
			
94
            ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
95
                    table,
96
                    null,
97
                    null,
98
                    query,
99
                    eFeatureType,
100
                    eFeatureType,
101
                    0,
102
                    0,
103
                    0
104
            );
105
            String sql = resultSetForSetProvider.getSQL();
106
            System.out.println("###### SQL:" + sql);
107
            System.out.println("###### EXP:" + expectedSQLs.get(0));
108

  
109
            assertEquals("Select SQL", expectedSQLs.get(0), sql);
110
        } catch (Throwable th) {
111
			th.printStackTrace();
112
            throw th;
113
        }
114
    }
115

  
116
	private void addExtraColumn(EditableFeatureType eFeatureType, FeatureQuery query, String name, int type, String exp) {
117
		EditableFeatureAttributeDescriptor extraColumn = query.getExtraColumn().add(name, type);
118
		extraColumn.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression(exp)));
119
	}
120

  
121
}
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.h2spatial/org.gvsig.h2spatial.h2gis132/org.gvsig.h2spatial.h2gis132.provider/src/test/java/org/gvsig/fmap/dal/store/h2/operations/usecases/arena2/TestArena2GroupByForeignValue.java
1
package org.gvsig.fmap.dal.store.h2.operations.usecases.arena2;
2

  
3
import java.util.List;
4
import junit.framework.TestCase;
5
import org.gvsig.expressionevaluator.ExpressionUtils;
6
import org.gvsig.fmap.dal.DataTypes;
7
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
8
import org.gvsig.fmap.dal.feature.EditableFeatureType;
9
import org.gvsig.fmap.dal.feature.FeatureQuery;
10
import org.gvsig.fmap.dal.feature.FeatureStore;
11
import org.gvsig.fmap.dal.feature.FeatureType;
12
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
13
import org.gvsig.fmap.dal.store.h2.TestUtils;
14
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
15
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
16
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
17
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
18
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
19
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
20
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
21
import org.slf4j.Logger;
22
import org.slf4j.LoggerFactory;
23

  
24
@SuppressWarnings("UseSpecificCatch")
25
public class TestArena2GroupByForeignValue extends TestCase {
26

  
27
  private static final Logger LOGGER = LoggerFactory.getLogger(TestArena2GroupByForeignValue.class);
28

  
29
  public TestArena2GroupByForeignValue(String testName) {
30
    super(testName);
31
  }
32

  
33
  @Override
34
  protected void setUp() throws Exception {
35
    super.setUp();
36
    new DefaultLibrariesInitializer().fullInitialize();
37
  }
38

  
39
  @Override
40
  protected void tearDown() throws Exception {
41
    super.tearDown();
42
  }
43
  
44
  protected List<String> getExpectedSQLs(String name) throws Exception {
45
	  return TestUtils.getSQLs(name);
46
  }
47

  
48
    public void testGroupByForeignValue() throws Exception {
49
        try {
50
            JDBCHelper helper = TestUtils.createJDBCHelper();
51
            JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
52
            OperationsFactory operations = helper.getOperations();
53

  
54
            List<String> expectedSQLs = getExpectedSQLs("usecases/arena2/testGroupByForeignValue.sql");
55

  
56
            FeatureStore arena2_conductores = TestUtils.openStoreTest("usecases/arena2/ARENA2_CONDUCTORES.csv");
57
            FeatureStore arena2_accidentes = TestUtils.openStoreTest("usecases/arena2/ARENA2_ACCIDENTES.csv");
58
            FeatureStore arena2_vehiculos = TestUtils.openStoreTest("usecases/arena2/ARENA2_VEHICULOS.csv");
59

  
60
            TableReference table = operations.createTableReference(
61
                    "dbtest",
62
                    "public", //sqlbuilder.default_schema(),
63
                    "ARENA2_CONDUCTORES",
64
                    null
65
            );
66
            FeatureType featureType = arena2_conductores.getDefaultFeatureType();
67
            EditableFeatureType eFeatureType = featureType.getEditable();
68
            FeatureQuery query = arena2_conductores.createFeatureQuery();
69
			query.setFilter("( ( ( (FOREING_VALUE('ID_ACCIDENTE.TITULARIDAD_VIA') = 2) )) AND \n" +
70
"( (( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 5) ) OR ( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 6) ) OR ( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 7) )))) AND \n" +
71
"( (( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') >= DATE '2019-01-01') ) AND ( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') <= DATE '2019-12-31') )))");
72
            addExtraColumn(eFeatureType, query, "ano", DataTypes.INTEGER, "EXTRACT(YEAR FROM FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE'))");
73
            addExtraColumn(eFeatureType, query, "provincia", DataTypes.STRING, "FOREING_VALUE('ID_ACCIDENTE.COD_PROVINCIA')");
74
            addExtraColumn(eFeatureType, query, "lesividad", DataTypes.STRING, "CASE\n" +
75
"WHEN ASISTENCIA_SANITARIA=1 THEN 'Muerto'\n" +
76
"WHEN ASISTENCIA_SANITARIA=2 THEN 'Grave'\n" +
77
"WHEN ASISTENCIA_SANITARIA=3 or ASISTENCIA_SANITARIA=4 or ASISTENCIA_SANITARIA=5 or ASISTENCIA_SANITARIA=6 or ASISTENCIA_SANITARIA=7 THEN 'Leve'\n" +
78
"WHEN ASISTENCIA_SANITARIA=8 THEN 'Ileso'\n" +
79
"ELSE 'Se Desconoce'\n" +
80
"END CASE");
81
            addExtraColumn(eFeatureType, query, "Acc", DataTypes.INTEGER, "1");
82

  
83
            query.getGroupByColumns().add("ano");
84
            query.getGroupByColumns().add("provincia");
85
            query.getGroupByColumns().add("lesividad");
86
            query.getAggregateFunctions().put("Acc", "SUM");
87
			query.getOrder().add("provincia");
88
			CountOperation count = operations.createCount(eFeatureType, table, null, query);
89
			String sqlcount = count.getSQL();
90
			System.out.println("###### SQL:" + sqlcount);
91
			System.out.println("###### EXP:" + expectedSQLs.get(1));
92
            assertEquals("Count SQL", expectedSQLs.get(1), sqlcount);
93
			
94
            ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
95
                    table,
96
                    null,
97
                    null,
98
                    query,
99
                    eFeatureType,
100
                    eFeatureType,
101
                    0,
102
                    0,
103
                    0
104
            );
105
            String sql = resultSetForSetProvider.getSQL();
106
            System.out.println("###### SQL:" + sql);
107
            System.out.println("###### EXP:" + expectedSQLs.get(0));
108

  
109
            assertEquals("Select SQL", expectedSQLs.get(0), sql);
110
        } catch (Throwable th) {
111
			th.printStackTrace();
112
            throw th;
113
        }
114
    }
115

  
116
	private void addExtraColumn(EditableFeatureType eFeatureType, FeatureQuery query, String name, int type, String exp) {
117
		EditableFeatureAttributeDescriptor extraColumn = query.getExtraColumn().add(name, type);
118
		extraColumn.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression(exp)));
119
	}
120

  
121
}
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.h2spatial/org.gvsig.h2spatial.h2gis132/org.gvsig.h2spatial.h2gis132.provider/src/test/java/org/gvsig/fmap/dal/store/h2/operations/usecases/arena2/TestMultipleExpansionOfCalculatedField.java
1
package org.gvsig.fmap.dal.store.h2.operations.usecases.arena2;
2

  
3
import java.util.List;
4
import junit.framework.TestCase;
5
import org.gvsig.expressionevaluator.ExpressionUtils;
6
import org.gvsig.fmap.dal.DataTypes;
7
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
8
import org.gvsig.fmap.dal.feature.EditableFeatureType;
9
import org.gvsig.fmap.dal.feature.FeatureQuery;
10
import org.gvsig.fmap.dal.feature.FeatureStore;
11
import org.gvsig.fmap.dal.feature.FeatureType;
12
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
13
import org.gvsig.fmap.dal.store.h2.TestUtils;
14
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
15
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
16
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
17
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
18
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
19
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
20
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
21
import org.slf4j.Logger;
22
import org.slf4j.LoggerFactory;
23

  
24
@SuppressWarnings("UseSpecificCatch")
25
public class TestMultipleExpansionOfCalculatedField extends TestCase {
26

  
27
    private static final Logger LOGGER = LoggerFactory.getLogger(TestMultipleExpansionOfCalculatedField.class);
28

  
29
    public TestMultipleExpansionOfCalculatedField(String testName) {
30
        super(testName);
31
    }
32

  
33
    @Override
34
    protected void setUp() throws Exception {
35
        super.setUp();
36
        new DefaultLibrariesInitializer().fullInitialize();
37
    }
38

  
39
    @Override
40
    protected void tearDown() throws Exception {
41
        super.tearDown();
42
    }
43

  
44
    protected List<String> getExpectedSQLs(String name) throws Exception {
45
        return TestUtils.getSQLs(name);
46
    }
47

  
48
    public void testMultipleExpansionOfCalculatedField() throws Exception {
49
        try {
50
            JDBCHelper helper = TestUtils.createJDBCHelper();
51
            JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
52
            OperationsFactory operations = helper.getOperations();
53

  
54
            List<String> expectedSQLs = getExpectedSQLs("usecases/arena2/testMultipleExpansionOfCalculatedField.sql");
55

  
56
            FeatureStore arena2_conductores = TestUtils.openStoreTest("usecases/arena2/ARENA2_CONDUCTORES.csv");
57
            FeatureStore arena2_accidentes = TestUtils.openStoreTest("usecases/arena2/ARENA2_ACCIDENTES.csv");
58
            FeatureStore arena2_vehiculos = TestUtils.openStoreTest("usecases/arena2/ARENA2_VEHICULOS.csv");
59

  
60
            TableReference table = operations.createTableReference(
61
                    "dbtest",
62
                    "public", //sqlbuilder.default_schema(),
63
                    "ARENA2_CONDUCTORES",
64
                    null
65
            );
66
            FeatureType featureType = arena2_conductores.getDefaultFeatureType();
67
            EditableFeatureType eFeatureType = featureType.getEditable();
68
            FeatureQuery query = arena2_conductores.createFeatureQuery();
69
            addExtraColumn(eFeatureType, query, "AccKm0", DataTypes.DOUBLE, "FOREING_VALUE('ID_ACCIDENTE.KM')");
70
            addExtraColumn(eFeatureType, query, "AccKm1", DataTypes.DOUBLE, "AccKm0 * 100");
71
            addExtraColumn(eFeatureType, query, "AccKm2", DataTypes.DOUBLE, "AccKm0 * 222");
72
            
73
            CountOperation count = operations.createCount(eFeatureType, table, null, query);
74
            String sqlcount = count.getSQL();
75
            System.out.println("###### SQL:" + sqlcount);
76
            System.out.println("###### EXP:" + expectedSQLs.get(1));
77
            assertEquals("Count SQL", expectedSQLs.get(1), sqlcount);
78

  
79
            ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
80
                    table,
81
                    null,
82
                    null,
83
                    query,
84
                    eFeatureType,
85
                    eFeatureType,
86
                    15,
87
                    0,
88
                    0
89
            );
90
            String sql = resultSetForSetProvider.getSQL();
91
            System.out.println("###### SQL:" + sql);
92
            System.out.println("###### EXP:" + expectedSQLs.get(0));
93

  
94
            assertEquals("Select SQL", expectedSQLs.get(0), sql);
95
            
96
            
97
        } catch (Throwable th) {
98
            th.printStackTrace();
99
            throw th;
100
        }
101
    }
102
    
103
    private void addExtraColumn(EditableFeatureType eFeatureType, FeatureQuery query, String name, int type, String exp) {
104
        EditableFeatureAttributeDescriptor extraColumn = query.getExtraColumn().add(name, type);
105
        extraColumn.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression(exp)));
106
    }
107

  
108
}
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.h2spatial/org.gvsig.h2spatial.h2gis132/org.gvsig.h2spatial.h2gis132.provider/src/test/java/org/gvsig/fmap/dal/store/h2/operations/usecases/arena2/TestArena2OrderByExtraValue.java
1
package org.gvsig.fmap.dal.store.h2.operations.usecases.arena2;
2

  
3
import java.util.List;
4
import junit.framework.TestCase;
5
import org.gvsig.expressionevaluator.ExpressionUtils;
6
import org.gvsig.fmap.dal.DataTypes;
7
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
8
import org.gvsig.fmap.dal.feature.EditableFeatureType;
9
import org.gvsig.fmap.dal.feature.FeatureQuery;
10
import org.gvsig.fmap.dal.feature.FeatureStore;
11
import org.gvsig.fmap.dal.feature.FeatureType;
12
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
13
import org.gvsig.fmap.dal.store.h2.TestUtils;
14
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
15
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
16
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
17
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
18
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.CountOperation;
19
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.ResultSetForSetProviderOperation;
20
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
21
import org.slf4j.Logger;
22
import org.slf4j.LoggerFactory;
23

  
24
@SuppressWarnings("UseSpecificCatch")
25
public class TestArena2OrderByExtraValue extends TestCase {
26

  
27
    private static final Logger LOGGER = LoggerFactory.getLogger(TestArena2OrderByExtraValue.class);
28

  
29
    public TestArena2OrderByExtraValue(String testName) {
30
        super(testName);
31
    }
32

  
33
    @Override
34
    protected void setUp() throws Exception {
35
        super.setUp();
36
        new DefaultLibrariesInitializer().fullInitialize();
37
    }
38

  
39
    @Override
40
    protected void tearDown() throws Exception {
41
        super.tearDown();
42
    }
43

  
44
    protected List<String> getExpectedSQLs(String name) throws Exception {
45
        return TestUtils.getSQLs(name);
46
    }
47

  
48
    public void testOrderByExtraValue() throws Exception {
49
        try {
50
            JDBCHelper helper = TestUtils.createJDBCHelper();
51
            JDBCSQLBuilderBase sqlbuilder = helper.createSQLBuilder();
52
            OperationsFactory operations = helper.getOperations();
53

  
54
            List<String> expectedSQLs = getExpectedSQLs("usecases/arena2/testOrderByExtraValue.sql");
55

  
56
            FeatureStore arena2_conductores = TestUtils.openStoreTest("usecases/arena2/ARENA2_CONDUCTORES.csv");
57
            FeatureStore arena2_accidentes = TestUtils.openStoreTest("usecases/arena2/ARENA2_ACCIDENTES.csv");
58
            FeatureStore arena2_vehiculos = TestUtils.openStoreTest("usecases/arena2/ARENA2_VEHICULOS.csv");
59

  
60
            TableReference table = operations.createTableReference(
61
                    "dbtest",
62
                    "public", //sqlbuilder.default_schema(),
63
                    "ARENA2_CONDUCTORES",
64
                    null
65
            );
66
            FeatureType featureType = arena2_conductores.getDefaultFeatureType();
67
            EditableFeatureType eFeatureType = featureType.getEditable();
68
            FeatureQuery query = arena2_conductores.createFeatureQuery();
69
            query.setFilter("( ( ( (FOREING_VALUE('ID_ACCIDENTE.TITULARIDAD_VIA') = 2) )) AND \n" +
70
"( (( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 5) ) OR ( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 6) ) OR ( (FOREING_VALUE('LID_VEHICULO.TIPO_VEHICULO') = 7) )))) AND \n" +
71
"( (( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') >= DATE '2019-01-01') ) AND ( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') <= DATE '2019-12-31') )))");
72
            addExtraColumn(eFeatureType, query, "ano", DataTypes.INTEGER, "EXTRACT(YEAR FROM FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE'))");
73
            addExtraColumn(eFeatureType, query, "provincia", DataTypes.STRING, "FOREING_VALUE('ID_ACCIDENTE.COD_PROVINCIA')");
74
            addExtraColumn(eFeatureType, query, "lesividad", DataTypes.STRING, "CASE\n"
75
                    + "WHEN ASISTENCIA_SANITARIA=1 THEN 'Muerto'\n"
76
                    + "WHEN ASISTENCIA_SANITARIA=2 THEN 'Grave'\n"
77
                    + "WHEN ASISTENCIA_SANITARIA=3 or ASISTENCIA_SANITARIA=4 or ASISTENCIA_SANITARIA=5 or ASISTENCIA_SANITARIA=6 or ASISTENCIA_SANITARIA=7 THEN 'Leve'\n"
78
                    + "WHEN ASISTENCIA_SANITARIA=8 THEN 'Ileso'\n"
79
                    + "ELSE 'Se Desconoce'\n"
80
                    + "END CASE");
81
            addExtraColumn(eFeatureType, query, "Acc", DataTypes.INTEGER, "1");
82

  
83
            query.getGroupByColumns().add("ano");
84
            query.getGroupByColumns().add("provincia");
85
            query.getGroupByColumns().add("lesividad");
86
            query.getAggregateFunctions().put("Acc", "SUM");
87
            query.getOrder().add("ano");
88
            query.getOrder().add("provincia");
89
            query.getOrder().add("lesividad");
90
            
91
            
92
            CountOperation count = operations.createCount(eFeatureType, table, null, query);
93
            String sqlcount = count.getSQL();
94
            System.out.println("###### SQL:" + sqlcount);
95
            System.out.println("###### EXP:" + expectedSQLs.get(1));
96
            assertEquals("Count SQL", expectedSQLs.get(1), sqlcount);
97

  
98
            ResultSetForSetProviderOperation resultSetForSetProvider = operations.createResultSetForSetProvider(
99
                    table,
100
                    null,
101
                    null,
102
                    query,
103
                    eFeatureType,
104
                    eFeatureType,
105
                    15,
106
                    0,
107
                    0
108
            );
109
            String sql = resultSetForSetProvider.getSQL();
110
            System.out.println("###### SQL:" + sql);
111
            System.out.println("###### EXP:" + expectedSQLs.get(0));
112

  
113
            assertEquals("Select SQL", expectedSQLs.get(0), sql);
114
            
115
            
116
        } catch (Throwable th) {
117
            th.printStackTrace();
118
            throw th;
119
        }
120
    }
121
    
122
    private void addExtraColumn(EditableFeatureType eFeatureType, FeatureQuery query, String name, int type, String exp) {
123
        EditableFeatureAttributeDescriptor extraColumn = query.getExtraColumn().add(name, type);
124
        extraColumn.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression(exp)));
125
    }
126

  
127
}

Also available in: Unified diff