Revision 532

View differences:

tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.postgresql.app.mainplugin</artifactId>
7
  <packaging>jar</packaging>
8
  <name>${project.artifactId}</name>
9
  <description>PostgreSQL file format support</description>
10

  
11
  <parent>
12
      <groupId>org.gvsig</groupId>
13
      <artifactId>org.gvsig.postgresql.app</artifactId>
14
      <version>2.0.107</version>
15
  </parent>
16

  
17
  <dependencies>
18
    <dependency>
19
        <groupId>org.gvsig</groupId>
20
        <artifactId>org.gvsig.tools.lib</artifactId>
21
        <scope>compile</scope>
22
    </dependency>
23
    <dependency>
24
        <groupId>org.gvsig</groupId>
25
        <artifactId>org.gvsig.andami</artifactId>
26
        <scope>compile</scope>
27
    </dependency>
28
    <dependency>
29
        <groupId>org.gvsig</groupId>
30
        <artifactId>org.gvsig.postgresql.provider</artifactId>
31
        <scope>compile</scope>
32
    </dependency>
33
    
34
    <dependency>
35
      <groupId>org.postgresql</groupId>
36
      <artifactId>postgresql</artifactId>
37
      <scope>runtime</scope>
38
    </dependency>
39
    <dependency>
40
      <groupId>commons-dbcp</groupId>
41
      <artifactId>commons-dbcp</artifactId>
42
      <scope>runtime</scope>
43
    </dependency>
44
    <dependency>
45
      <groupId>commons-pool</groupId>
46
      <artifactId>commons-pool</artifactId>
47
      <scope>runtime</scope>
48
    </dependency>
49
    
50
  </dependencies>
51
  
52
    <properties>
53
        <!-- Package info property values -->
54
        <!-- Default values in org.gvsig.desktop -->
55
        <gvsig.package.info.name>Formats: PostgreSQL support</gvsig.package.info.name>
56
        <gvsig.package.info.state>testing</gvsig.package.info.state>
57
        <gvsig.package.info.official>true</gvsig.package.info.official>
58
        <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.0.1</gvsig.package.info.dependencies>
59
        <gvsig.package.info.categories>Formats,Vector,Database</gvsig.package.info.categories>
60
        <gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/gvsig-postgresql/pool/</gvsig.package.info.poolURL>
61
    </properties>
62
  
63

  
64
</project>
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/buildNumber.properties
1
#Sat Oct 05 18:32:28 CEST 2019
2
buildNumber=2164
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
1
<assembly>
2
  <id>gvsig-plugin-package</id>
3
  <formats>
4
    <format>zip</format>
5
  </formats>
6
  <baseDirectory>${project.artifactId}</baseDirectory>
7
  <includeBaseDirectory>true</includeBaseDirectory>
8
  <files>
9
    <file>
10
      <source>target/${project.artifactId}-${project.version}.jar</source>
11
      <outputDirectory>lib</outputDirectory>
12
    </file>
13
    <file>
14
      <source>target/package.info</source>
15
    </file>
16
    <file>
17
      <source>src/main/resources-plugin/config.xml</source>
18
    </file>
19
  </files>
20

  
21
  <dependencySets>
22
  
23
    <dependencySet>
24
      <useProjectArtifact>false</useProjectArtifact>
25
      <useTransitiveDependencies>false</useTransitiveDependencies>
26
      <outputDirectory>lib</outputDirectory>
27
      <includes>
28
        <include>org.gvsig:org.gvsig.postgresql.provider</include>
29
      </includes>
30
    </dependencySet>
31
    
32
    <dependencySet>
33
      <useProjectArtifact>false</useProjectArtifact>
34
      <useTransitiveDependencies>false</useTransitiveDependencies>
35
      <outputDirectory>lib</outputDirectory>
36
      <includes>
37
		<include>org.postgresql:postgresql</include>
38
		<include>commons-dbcp:commons-dbcp</include>
39
		<include>commons-pool:commons-pool</include>
40
      </includes>
41
    </dependencySet>
42
    
43
  </dependencySets>
44

  
45
</assembly>
46

  
47

  
48

  
49

  
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/src/main/resources-plugin/config.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<plugin-config>
3
  <libraries library-dir="lib/"/>
4
  <depends plugin-name="org.gvsig.app.mainplugin"/>
5
  <resourceBundle name="text"/>
6
  <extensions>
7
     <extension class-name="org.gvsig.andami.LibraryExtension" active="false"/>
8
  </extensions>    
9
</plugin-config>
0 10

  
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.app/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.postgresql.app</artifactId>
7
  <packaging>pom</packaging>
8
  <name>${project.artifactId}</name>
9
  <parent>
10
      <groupId>org.gvsig</groupId>
11
      <artifactId>org.gvsig.postgresql</artifactId>
12
      <version>2.0.107</version>
13
  </parent>
14

  
15
  <modules>
16
    <module>org.gvsig.postgresql.app.mainplugin</module>
17
    <!--
18
    <module>org.gvsig.postgresql.app.export</module>
19
    -->
20
  </modules>
21

  
22
</project>
tags/org.gvsig.postgresql-2.0.107/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.postgresql</artifactId>
7
  <version>2.0.107</version>
8
  <packaging>pom</packaging>
9
  <name>${project.artifactId}</name>
10
  <description>PostgreSQL support fort DAL and gvSIG</description>
11
  <parent>
12
      <groupId>org.gvsig</groupId>
13
      <artifactId>org.gvsig.desktop</artifactId>
14
      <version>2.0.247</version>
15
  </parent>
16

  
17
  <url>https://devel.gvsig.org/redmine/projects/gvsig-postgresql</url>
18
  <scm>
19
      <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-postgresql/tags/org.gvsig.postgresql-2.0.107</connection>
20
      <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-postgresql/tags/org.gvsig.postgresql-2.0.107</developerConnection>
21
      <url>https://devel.gvsig.org/redmine/projects/gvsig-postgresql/repository/show/tags/org.gvsig.postgresql-2.0.107</url>
22
  </scm>
23

  
24
    <repositories>
25
        <repository>
26
            <id>gvsig-public-http-repository</id>
27
            <name>gvSIG maven public HTTP repository</name>
28
            <url>http://devel.gvsig.org/m2repo/j2se</url>
29
            <releases>
30
                <enabled>true</enabled>
31
                <updatePolicy>daily</updatePolicy>
32
                <checksumPolicy>warn</checksumPolicy>
33
            </releases>
34
            <snapshots>
35
                <enabled>true</enabled>
36
                <updatePolicy>daily</updatePolicy>
37
                <checksumPolicy>warn</checksumPolicy>
38
            </snapshots>
39
        </repository>
40
    </repositories>
41
  
42
  
43
	<build>
44
		<plugins>
45
			<plugin>
46
				<groupId>org.apache.maven.plugins</groupId>
47
				<artifactId>maven-release-plugin</artifactId>
48
				<configuration>
49
					<tagBase>https://devel.gvsig.org/svn/gvsig-postgresql/tags/</tagBase>
50
					<goals>deploy</goals>
51
				</configuration>
52
			</plugin>
53
		</plugins>
54
	</build>
55

  
56

  
57
  <dependencyManagement>
58
      <dependencies>
59
          <dependency>
60
            <groupId>org.gvsig</groupId>
61
            <artifactId>org.gvsig.postgresql.provider</artifactId>
62
            <version>2.0.107</version>
63
          </dependency>
64
          <dependency>
65
            <groupId>org.gvsig</groupId>
66
            <artifactId>org.gvsig.postgresql.app.mainplugin</artifactId>
67
            <version>2.0.107</version>
68
          </dependency>
69
        <dependency>
70
            <groupId>org.postgresql</groupId>
71
            <artifactId>postgresql</artifactId>
72
            <version>42.2.6</version>
73
        </dependency>
74
      </dependencies>
75
  </dependencyManagement>
76
 
77
  <modules>
78
    <module>org.gvsig.postgresql.app</module>
79
    <module>org.gvsig.postgresql.provider</module>
80
  </modules>
81

  
82
</project>
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.provider/src/test/java/org/gvsig/postgresql/dal/PostgreSQLBuilderTest.java
1
package org.gvsig.postgresql.dal;
2

  
3
import junit.framework.TestCase;
4
import org.apache.commons.lang3.ArrayUtils;
5
import org.apache.commons.lang3.StringUtils;
6
import org.cresques.cts.IProjection;
7
import org.gvsig.expressionevaluator.ExpressionBuilder;
8
import org.gvsig.fmap.crs.CRSFactory;
9
import org.gvsig.fmap.dal.SQLBuilder;
10
import org.gvsig.fmap.dal.SQLBuilder.Privilege;
11
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
12
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
13
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_TABLE;
14
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.OperationsFactoryBase;
15
import org.gvsig.fmap.geom.DataTypes;
16
import org.gvsig.fmap.geom.Geometry;
17
import org.gvsig.fmap.geom.GeometryLocator;
18
import org.gvsig.fmap.geom.GeometryManager;
19
import org.gvsig.fmap.geom.primitive.Polygon;
20
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
21

  
22
public class PostgreSQLBuilderTest extends TestCase {
23
    
24
    public PostgreSQLBuilderTest(String testName) {
25
        super(testName);
26
    }
27

  
28
    @Override
29
    protected void setUp() throws Exception {
30
        super.setUp();
31
        new DefaultLibrariesInitializer().fullInitialize();
32
    }
33

  
34
    @Override
35
    protected void tearDown() throws Exception {
36
        super.tearDown();
37
    }
38

  
39
    private SQLBuilder createSQLBuilder() {
40
        return new PostgreSQLBuilder(new PostgreSQLHelper(null));
41
    }
42
    
43
    public void testCalulateEnvelopeOfColumn() throws Exception {
44
        
45
        TableReference table = new OperationsFactoryBase.DefaultTableReference("master","dbo","test1", null);
46
        String columnName = "the_geom";
47
        
48
        SQLBuilder sqlbuilder = createSQLBuilder();
49
        ExpressionBuilder expbuilder = sqlbuilder.expression();
50
        
51
        sqlbuilder.select().column().value(
52
            expbuilder.as_geometry(
53
                expbuilder.ST_ExtentAggregate(
54
                        expbuilder.column(columnName)
55
                )
56
            )
57
        );
58
        //sqlbuilder.select().group_by(expbuilder.column(columnName));
59
        sqlbuilder.select().from().table()
60
                .database(table.getDatabase())
61
                .schema(table.getSchema())
62
                .name(table.getTable());
63
        sqlbuilder.select().from().subquery(table.getSubquery());
64

  
65
        sqlbuilder.select().where().and(        
66
            expbuilder.not_is_null(expbuilder.column(columnName))
67
        );
68
        
69
        System.out.println("# Test:: testCalulateEnvelopeOfColumn");
70
        System.out.println("# SQL:: " + sqlbuilder.toString());
71
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
72
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
73
        assertEquals(
74
                "SELECT ST_AsBinary(ST_Extent(\"the_geom\")) FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"the_geom\") IS NOT NULL )",
75
                sqlbuilder.toString()
76
        );
77
        assertEquals(
78
                "[the_geom]",
79
                ArrayUtils.toString(sqlbuilder.variables_names())
80
        );
81
        assertEquals(
82
                "[]",
83
                ArrayUtils.toString(sqlbuilder.parameters_names())
84
        );
85
    }
86
 
87
    public void testCalulateEnvelope() throws Exception {
88
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
89
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
90
        
91
        Polygon limit = geometryManager.createPolygon(Geometry.SUBTYPES.GEOM2D);
92
        limit.addVertex(0, 0);
93
        limit.addVertex(0, 100);
94
        limit.addVertex(100, 100);
95
        limit.addVertex(100, 0);
96
        limit.addVertex(0, 0);
97
        
98
        SQLBuilder sqlbuilder = createSQLBuilder();
99
        ExpressionBuilder expbuilder = sqlbuilder.expression();
100
        
101
        sqlbuilder.select().column().value(
102
            expbuilder.as_geometry(
103
              expbuilder.ST_ExtentAggregate(
104
                expbuilder.column("the_geom")
105
              )
106
            )
107
        ).as("envelope");
108
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
109
        sqlbuilder.select().where().set(
110
            expbuilder.ST_Intersects(
111
                expbuilder.ST_Envelope(
112
                    expbuilder.column("the_geom")
113
                ),
114
                expbuilder.geometry(limit, proj)
115
            )
116
        );
117
        sqlbuilder.select().where().and(
118
                expbuilder.custom("x = 27")
119
        );
120
        
121
        System.out.println("# Test:: testCalulateEnvelope");
122
        System.out.println("# SQL:: " + sqlbuilder.toString());
123
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
124
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
125
        assertEquals(
126
                "SELECT ST_AsBinary(ST_Extent(\"the_geom\")) AS \"envelope\" FROM \"master\".\"dbo\".\"test1\" WHERE (ST_Intersects((ST_Envelope(\"the_geom\")), (ST_GeomFromWKB(('\\x000000000300000001000000050000000000000000000000000000000000000000000000004059000000000000405900000000000040590000000000004059000000000000000000000000000000000000000000000000000000000000'::bytea), (4326)))) AND x = 27)",
127
                sqlbuilder.toString()
128
        );
129
        assertEquals(
130
                "[the_geom]",
131
                ArrayUtils.toString(sqlbuilder.variables_names())
132
        );
133
        assertEquals(
134
                "[]",
135
                ArrayUtils.toString(sqlbuilder.parameters_names())
136
        );
137
    }
138

  
139
    public void testCount() throws Exception {
140
        SQLBuilder sqlbuilder = createSQLBuilder();
141
        ExpressionBuilder expbuilder = sqlbuilder.expression();
142
        
143
        sqlbuilder.select().column().value(sqlbuilder.count().all());
144
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
145
        sqlbuilder.select().from().subquery(null);
146
        sqlbuilder.select().where().set( expbuilder.custom("pp = 200"));
147

  
148
        System.out.println("# Test:: testCount");
149
        System.out.println("# SQL:: " + sqlbuilder.toString());
150
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
151
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
152

  
153
        //# Test:: testCount
154
        //# SQL:: SELECT COUNT(*) FROM "test1" WHERE pp = 200
155
        //# Variables:: []
156
        //# Parametros:: []
157

  
158
        assertEquals(
159
                "SELECT COUNT(*) FROM \"master\".\"dbo\".\"test1\" WHERE pp = 200",
160
                sqlbuilder.toString()
161
        );
162
        assertEquals(
163
                "[]",
164
                ArrayUtils.toString(sqlbuilder.variables_names())
165
        );
166
        assertEquals(
167
                "[]",
168
                ArrayUtils.toString(sqlbuilder.parameters_names())
169
        );
170
    }
171
    
172
    public void testCreateTable() throws Exception {
173
        SQLBuilder sqlbuilder = createSQLBuilder();
174
        ExpressionBuilder expbuilder = sqlbuilder.expression();
175

  
176
        sqlbuilder.create_table().table().database("master").schema("dbo").name("test1");
177
        sqlbuilder.create_table().add_column(
178
                "name",
179
                DataTypes.STRING,
180
                45,
181
                0,
182
                false,
183
                false,
184
                true,
185
                false,
186
                null
187
        );
188
        sqlbuilder.create_table().add_column(
189
                "id",
190
                DataTypes.INT,
191
                0,
192
                0,
193
                true,
194
                false,
195
                false,
196
                true,
197
                0
198
        );
199
        sqlbuilder.create_table().add_column(
200
                "geom",
201
                DataTypes.GEOMETRY,
202
                0,
203
                0,
204
                false,
205
                false,
206
                true,
207
                false,
208
                null
209
        );
210

  
211
        
212
        // CREATE TABLE "test1" ("name" VARCHAR(45) DEFAULT NULL, "id" INTEGER PRIMARY KEY AUTO_INCREMENT DEFAULT '0' NOT NULL, "geom" GEOMETRY ); ALTER TABLE "test1" ADD CONSTRAINT IF NOT EXISTS "constraint_test1_geom_dim" CHECK ST_CoordDim("geom") = 2
213
        System.out.println("# Test:: testCreateTable");
214
        System.out.println("# SQL:: " + sqlbuilder.toString());
215
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
216
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
217
        assertEquals(
218
                "CREATE TABLE \"master\".\"dbo\".\"test1\" (\"name\" VARCHAR(45) DEFAULT NULL NULL, \"id\"  SERIAL PRIMARY KEY ); SELECT AddGeometryColumn('dbo' , 'test1' , 'geom', null , 'GEOMETRY' , 2, TRUE)",
219
                sqlbuilder.toString()
220
        );
221
        assertEquals(
222
                "[]",
223
                ArrayUtils.toString(sqlbuilder.variables_names())
224
        );
225
        assertEquals(
226
                "[]",
227
                ArrayUtils.toString(sqlbuilder.parameters_names())
228
        );
229
    }
230

  
231
    public void testDropTable() throws Exception {
232
        SQLBuilder sqlbuilder = createSQLBuilder();
233
        ExpressionBuilder expbuilder = sqlbuilder.expression();
234
        
235
        sqlbuilder.drop_table().table().database("master").schema("dbo").name("test1");
236

  
237
        // DROP TABLE "test1"
238
        
239
        System.out.println("# Test:: testDropTable");
240
        System.out.println("# SQL:: " + sqlbuilder.toString());
241
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
242
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
243
        assertEquals(
244
                "DROP TABLE \"master\".\"dbo\".\"test1\"",
245
                sqlbuilder.toString()
246
        );
247
        assertEquals(
248
                "[]",
249
                ArrayUtils.toString(sqlbuilder.variables_names())
250
        );
251
        assertEquals(
252
                "[]",
253
                ArrayUtils.toString(sqlbuilder.parameters_names())
254
        );
255
    }
256
    
257
    public void testFetchFeatureProviderByReference() throws Exception {
258
        SQLBuilder sqlbuilder = new SQLBuilderBase();
259
        ExpressionBuilder expbuilder = sqlbuilder.expression();
260
        
261
        String value = "yoyo";
262
        sqlbuilder.select().column().name("name");
263
        sqlbuilder.select().column().name("id");
264
        sqlbuilder.select().column().name("geom").as_geometry();
265
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
266
        sqlbuilder.select().where().set(
267
            expbuilder.eq(
268
                expbuilder.column("name"),
269
                expbuilder.parameter(value).as_constant()
270
            )
271
        );
272
        sqlbuilder.select().limit(1);
273

  
274
        // SELECT "name", "id", ST_AsBinary("geom") FROM "master"."dbo"."test1" WHERE ( ("name") = (?) ) LIMIT 1
275

  
276
        System.out.println("# Test:: testFetchFeatureProviderByReference");
277
        System.out.println("# SQL:: " + sqlbuilder.toString());
278
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
279
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
280
        assertEquals(
281
                "SELECT \"name\", \"id\", ST_AsBinary(\"geom\") FROM \"master\".\"dbo\".\"test1\" WHERE ( (\"name\") = (?) ) LIMIT 1",
282
                sqlbuilder.toString()
283
        );
284
        assertEquals(
285
                "[geom, id, name]",
286
                ArrayUtils.toString(sqlbuilder.variables_names())
287
        );
288
        assertEquals(
289
                "['yoyo']",
290
                ArrayUtils.toString(sqlbuilder.parameters_names())
291
        );
292
    }
293
    
294
    public void testFetchFeatureType() throws Exception {
295
        SQLBuilder sqlbuilder = createSQLBuilder();
296
        ExpressionBuilder expbuilder = sqlbuilder.expression();
297

  
298
        sqlbuilder.select().column().all();
299
        sqlbuilder.select().from().table().database("master").schema("dbo").name("test1");
300
        sqlbuilder.select().limit(1);
301

  
302
        System.out.println("# Test:: testFetchFeatureType");
303
        System.out.println("# SQL:: " + sqlbuilder.toString());
304
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
305
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
306
        
307
        //# Test:: testFetchFeatureType
308
        //# SQL:: SELECT * FROM "test1" LIMIT 1
309
        //# Variables:: []
310
        //# Parametros:: []        
311
        
312
        assertEquals(
313
                "SELECT * FROM \"master\".\"dbo\".\"test1\" LIMIT 1",
314
                sqlbuilder.toString()
315
        );
316
        assertEquals(
317
                "[]",
318
                ArrayUtils.toString(sqlbuilder.variables_names())
319
        );
320
        assertEquals(
321
                "[]",
322
                ArrayUtils.toString(sqlbuilder.parameters_names())
323
        );
324
    }
325
        
326
    public void testPerformDeletes() throws Exception {
327
        SQLBuilder sqlbuilder = createSQLBuilder();
328
        ExpressionBuilder expbuilder = sqlbuilder.expression();
329

  
330
        sqlbuilder.delete().table().database("master").schema("dbo").name("test1");
331
        sqlbuilder.delete().where().and(
332
            expbuilder.eq( 
333
                expbuilder.column("id1"),
334
                expbuilder.parameter("id1").as_variable()
335
            )
336
        );
337
        sqlbuilder.delete().where().and(
338
            expbuilder.eq( 
339
                expbuilder.column("id2"),
340
                expbuilder.parameter("id2").as_variable()
341
            )
342
        );
343

  
344
        // DELETE FROM "test1" WHERE ( ("id1") = (?) ) AND ( ("id2") = (?) )
345

  
346
        System.out.println("# Test:: testPerformDeletes");
347
        System.out.println("# SQL:: " + sqlbuilder.toString());
348
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
349
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
350
        assertEquals(
351
                "DELETE FROM \"master\".\"dbo\".\"test1\" WHERE (( (\"id1\") = (?) ) AND ( (\"id2\") = (?) ))",
352
                sqlbuilder.toString()
353
        );
354
        assertEquals(
355
                "[id1, id2]",
356
                ArrayUtils.toString(sqlbuilder.variables_names())
357
        );
358
        assertEquals(
359
                "[\"id1\", \"id2\"]",
360
                ArrayUtils.toString(sqlbuilder.parameters_names())
361
        );
362
    }
363

  
364
    public void testPerformInserts1() throws Exception {
365
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
366

  
367
        SQLBuilder sqlbuilder = createSQLBuilder();
368
        ExpressionBuilder expbuilder = sqlbuilder.expression();
369

  
370
        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
371
        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
372
        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
373
        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_geometry_variable().srs(proj));
374
        
375
        System.out.println("# Test:: testPerformInserts1");
376
        System.out.println("# SQL:: " + sqlbuilder.toString());
377
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
378
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
379
        assertEquals(
380
                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromWKB((?), (4326)) )",
381
                sqlbuilder.toString()
382
        );
383
        assertEquals(
384
                "[geom, id, name]",
385
                ArrayUtils.toString(sqlbuilder.variables_names())
386
        );
387
        assertEquals(
388
                "[\"id\", \"name\", \"geom\"]",
389
                ArrayUtils.toString(sqlbuilder.parameters_names())
390
        );
391
    }
392

  
393
    public void testPerformInserts2() throws Exception {
394
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
395

  
396
        SQLBuilder sqlbuilder = createSQLBuilder();
397
        ExpressionBuilder expbuilder = sqlbuilder.expression();
398

  
399
        sqlbuilder.insert().table().database("master").schema("dbo").name("test1");
400
        sqlbuilder.insert().column().name("id").with_value(expbuilder.parameter("id"));
401
        sqlbuilder.insert().column().name("name").with_value(expbuilder.parameter("name"));
402
        sqlbuilder.insert().column().name("geom").with_value(expbuilder.parameter("geom").as_geometry_variable().srs(proj));
403
        
404
        System.out.println("# Test:: testPerformInserts2");
405
        System.out.println("# SQL:: " + sqlbuilder.toString());
406
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
407
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
408
        assertEquals(
409
                "INSERT INTO \"master\".\"dbo\".\"test1\" ( \"id\", \"name\", \"geom\" ) VALUES ( ?, ?, ST_GeomFromWKB((?), (4326)) )",
410
                sqlbuilder.toString()
411
        );
412
        assertEquals(
413
                "[geom, id, name]",
414
                ArrayUtils.toString(sqlbuilder.variables_names())
415
        );
416
        assertEquals(
417
                "[\"id\", \"name\", \"geom\"]",
418
                ArrayUtils.toString(sqlbuilder.parameters_names())
419
        );
420
    }
421

  
422
    public void testPerformUpdates1() throws Exception {
423
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
424

  
425
        SQLBuilder sqlbuilder = createSQLBuilder();
426
        ExpressionBuilder expbuilder = sqlbuilder.expression();
427

  
428
        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
429
        sqlbuilder.update().where().and(
430
            expbuilder.eq(
431
                expbuilder.column("id"), 
432
                expbuilder.parameter("id").as_variable()
433
            )
434
        );
435
        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
436
        sqlbuilder.update().column().name("geom").with_value(
437
                expbuilder.parameter("geom").as_geometry_variable().srs(proj) 
438
        );
439

  
440
        System.out.println("# Test:: testPerformUpdates");
441
        System.out.println("# SQL:: " + sqlbuilder.toString());
442
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
443
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
444
        assertEquals(
445
                "UPDATE \"master\".\"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromWKB((?), (4326)) WHERE ( (\"id\") = (?) )",
446
                sqlbuilder.toString()
447
        );
448
        assertEquals(
449
                "[geom, id, name]",
450
                ArrayUtils.toString(sqlbuilder.variables_names())
451
        );
452
        assertEquals(
453
                "[\"name\", \"geom\", \"id\"]",
454
                ArrayUtils.toString(sqlbuilder.parameters_names())
455
        );
456
    }
457

  
458
    public void testPerformUpdates2() throws Exception {
459
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
460

  
461
        SQLBuilder sqlbuilder = createSQLBuilder();
462
        ExpressionBuilder expbuilder = sqlbuilder.expression();
463

  
464
        sqlbuilder.update().table().database("master").schema("dbo").name("test1");
465
        sqlbuilder.update().where().and(
466
            expbuilder.eq(
467
                expbuilder.column("id"), 
468
                expbuilder.parameter("id").as_variable()
469
            )
470
        );
471
        sqlbuilder.update().column().name("name").with_value(expbuilder.parameter("name"));
472
        sqlbuilder.update().column().name("geom").with_value(
473
                expbuilder.parameter("geom").as_geometry_variable()
474
                        .srs(expbuilder.parameter().value(proj)) 
475
        );
476

  
477
        System.out.println("# Test:: testPerformUpdates");
478
        System.out.println("# SQL:: " + sqlbuilder.toString());
479
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
480
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
481
        assertEquals(
482
                "UPDATE \"master\".\"dbo\".\"test1\" SET \"name\" = ?, \"geom\" = ST_GeomFromWKB((?), (?)) WHERE ( (\"id\") = (?) )",
483
                sqlbuilder.toString()
484
        );
485
        assertEquals(
486
                "[geom, id, name]",
487
                ArrayUtils.toString(sqlbuilder.variables_names())
488
        );
489
        assertEquals(
490
                "[\"name\", \"geom\", 4326, \"id\"]",
491
                ArrayUtils.toString(sqlbuilder.parameters_names())
492
        );
493
    }
494

  
495
    public void testGrant1() throws Exception {
496

  
497
        SQLBuilder sqlbuilder = createSQLBuilder();
498
        ExpressionBuilder expbuilder = sqlbuilder.expression();
499

  
500
        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
501
        sqlbuilder.grant().role("prueba").select().insert().update();
502
        sqlbuilder.grant().role("gis").all();
503
                
504
        
505
        System.out.println("# Test:: testGrant1");
506
        System.out.println("# SQL:: " + sqlbuilder.toString());
507
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
508
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
509
        assertEquals(
510
                "",
511
                sqlbuilder.toString()
512
        );
513
        assertEquals(
514
                "[]",
515
                ArrayUtils.toString(sqlbuilder.variables_names())
516
        );
517
        assertEquals(
518
                "[]",
519
                ArrayUtils.toString(sqlbuilder.parameters_names())
520
        );
521
    }
522

  
523
    public void testGrant2() throws Exception {
524

  
525
        SQLBuilder sqlbuilder = new SQLBuilderBase();
526
        ExpressionBuilder expbuilder = sqlbuilder.expression();
527

  
528
        sqlbuilder.grant().table().database("master").schema("dbo").name("test1");
529
        sqlbuilder.grant().role("prueba").privilege(Privilege.SELECT)
530
                .privilege(Privilege.INSERT)
531
                .privilege(Privilege.UPDATE);
532
        sqlbuilder.grant().role("gis").privilege(Privilege.ALL);
533
                
534
        
535
        System.out.println("# Test:: testGrant2");
536
        System.out.println("# SQL:: " + sqlbuilder.toString());
537
        System.out.println("# Variables:: " + ArrayUtils.toString(sqlbuilder.variables_names()));
538
        System.out.println("# Parametros:: " + ArrayUtils.toString(sqlbuilder.parameters_names()));
539
        assertEquals(
540
                "",
541
                sqlbuilder.toString()
542
        );
543
        assertEquals(
544
                "[]",
545
                ArrayUtils.toString(sqlbuilder.variables_names())
546
        );
547
        assertEquals(
548
                "[]",
549
                ArrayUtils.toString(sqlbuilder.parameters_names())
550
        );
551
    }
552

  
553

  
554
}
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLStoreParameters.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
* MA  02110-1301, USA.
20
*
21
 */
22
package org.gvsig.postgresql.dal;
23

  
24
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
25
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
26

  
27
public class PostgreSQLStoreParameters extends JDBCStoreParameters implements PostgreSQLConnectionParameters {
28

  
29
    private final PostgreSQLConnectionParametersHelper helper;
30
    
31
    public PostgreSQLStoreParameters() {
32
        super(
33
                PostgreSQLLibrary.NAME + "StoreParameters",
34
                PostgreSQLLibrary.NAME
35
        );
36
        this.helper = new PostgreSQLConnectionParametersHelper(this);
37
    }
38

  
39
    @Override
40
    public String getUrl() {
41
        return this.helper.getUrl();
42
    }
43
    
44
    @Override
45
    public void validate() throws ValidateDataParametersException {
46
        this.helper.validate();
47
        super.validate();
48
    }
49

  
50
    @Override
51
    public boolean getUseSSL() {
52
        return this.helper.getUseSSL();
53
    }
54

  
55
    @Override
56
    public int getMaxIdle() {
57
        return this.helper.getMaxIdle();
58
    }
59

  
60
    public void setUseSSL(boolean v) {
61
        this.helper.setUseSSL(v);
62
    }
63

  
64

  
65
}
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLConnectionParameters.java
1

  
2
package org.gvsig.postgresql.dal;
3

  
4
import org.gvsig.fmap.dal.resource.db.DBParameters;
5
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
6

  
7
public interface PostgreSQLConnectionParameters extends JDBCConnectionParameters, DBParameters {
8
	public static final String USESSL_PARAMTER_NAME = "UseSSL";
9
	public static final String MAXIDLE_PARAMTER_NAME = "maxIdle";
10

  
11
	public boolean getUseSSL();   
12
    
13
    public int getMaxIdle();
14
}
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLConnectionParametersHelper.java
1

  
2
package org.gvsig.postgresql.dal;
3

  
4
import org.apache.commons.lang3.StringUtils;
5
import org.gvsig.fmap.dal.DataParameters;
6
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
7
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
8

  
9

  
10
public class PostgreSQLConnectionParametersHelper {
11

  
12
    private final JDBCConnectionParameters parameters;
13
    
14
    public PostgreSQLConnectionParametersHelper(JDBCConnectionParameters parameters) {
15
        this.parameters = parameters;
16
    }
17

  
18
    public String getUrl() {
19
        String url = (String) this.getDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME);
20
        if( StringUtils.isEmpty(url) ) {
21
            url = PostgreSQLHelper.getConnectionURL((PostgreSQLConnectionParameters) this.parameters);
22
            this.setDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME,url);
23
        }
24
        return url;
25
    }
26
    
27
    public void validate() throws ValidateDataParametersException {
28
        if (this.getDynValue(JDBCConnectionParameters.JDBC_DRIVER_CLASS_PARAMTER_NAME) == null) {
29
            this.setDynValue(
30
                JDBCConnectionParameters.JDBC_DRIVER_CLASS_PARAMTER_NAME,
31
                PostgreSQLHelper.POSTGRESQL_JDBC_DRIVER
32
            );
33
        }
34
        if( this.getDynValue(JDBCConnectionParameters.PORT_PARAMTER_NAME)==null ) {
35
            this.setDynValue(JDBCConnectionParameters.PORT_PARAMTER_NAME, 5432);
36
        }
37
		if ( StringUtils.isEmpty((CharSequence) this.getDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME))) {
38
            String url = PostgreSQLHelper.getConnectionURL(
39
                parameters.getHost(),
40
                parameters.getPort(),
41
                parameters.getDBName()
42
            );
43
            this.setDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME, url);
44
		}
45
    }
46

  
47
    private Object getDynValue(String name) {
48
        return ((DataParameters)this.parameters).getDynValue(name);
49
    }
50
    
51
    private void setDynValue(String name, Object value) {
52
        ((DataParameters)this.parameters).setDynValue(name,value);
53
    }
54
    
55
    public int getMaxIdle() {
56
        return (int) this.getDynValue(PostgreSQLConnectionParameters.MAXIDLE_PARAMTER_NAME);
57
    }
58

  
59
    public boolean getUseSSL() {
60
        return (boolean) this.getDynValue(PostgreSQLConnectionParameters.USESSL_PARAMTER_NAME);
61
    }
62

  
63
    public void setUseSSL(boolean v) {
64
        this.setDynValue(PostgreSQLConnectionParameters.USESSL_PARAMTER_NAME, v);
65
    }
66
    
67
}
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLLibrary.java
1

  
2
package org.gvsig.postgresql.dal;
3

  
4
import org.gvsig.fmap.dal.DALLibrary;
5
import org.gvsig.fmap.dal.DALLocator;
6
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
7
import org.gvsig.fmap.dal.store.db.DBHelper;
8
import org.gvsig.fmap.dal.store.jdbc2.JDBCLibrary;
9
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase;
10
import org.gvsig.metadata.exceptions.MetadataException;
11
import org.gvsig.tools.library.AbstractLibrary;
12
import org.gvsig.tools.library.LibraryException;
13

  
14

  
15
public class PostgreSQLLibrary extends AbstractLibrary {
16

  
17
    public static final String NAME = "PostgreSQL";
18

  
19
    @Override
20
    public void doRegistration() {
21
        registerAsServiceOf(DALLibrary.class);
22
        require(JDBCLibrary.class);
23
    }
24

  
25
    @Override
26
    protected void doInitialize() throws LibraryException {
27
    }
28

  
29
    @Override
30
    protected void doPostInitialize() throws LibraryException {
31
        LibraryException ex = null;
32

  
33
        DataManagerProviderServices dataman = 
34
                (DataManagerProviderServices) DALLocator.getDataManager();
35

  
36
        try {
37
            Class.forName(PostgreSQLHelper.POSTGRESQL_JDBC_DRIVER);
38
        } catch(Throwable th) {
39
            PostgreSQLHelper.logger.warn("Can't load PostgreSQL JDBC Driver.",th);
40
        }
41
        
42
        DBHelper.registerParametersDefinition(
43
                NAME + "StoreParameters",
44
                PostgreSQLStoreParameters.class,
45
                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
46
        );
47
        DBHelper.registerParametersDefinition(
48
                NAME + "NewStoreParameters",
49
                PostgreSQLNewStoreParameters.class,
50
                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
51
        );
52
        DBHelper.registerParametersDefinition(
53
                NAME + "ServerExplorerParameters",
54
                PostgreSQLServerExplorerParameters.class,
55
                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
56
        );
57
//        DBHelper.registerParametersDefinition(
58
//                NAME + "ResourceParameters",
59
//                PostgreSQLResourceParameters.class,
60
//                dataman.getResourceAsStream(this, NAME + "Parameters.xml")
61
//        );
62
        try {
63
            DBHelper.registerMetadataDefinition(
64
                NAME,
65
                JDBCStoreProviderBase.class,
66
                dataman.getResourceAsStream(this, NAME + "Metadata.xml")
67
            );
68
        } catch (MetadataException e) {
69
            ex = new LibraryException(this.getClass(), e);
70
        }
71

  
72
//        ResourceManagerProviderServices resman = (ResourceManagerProviderServices) DALLocator
73
//                .getResourceManager();
74
//
75
//        if (!resman.getResourceProviders().contains(NAME)) {
76
//            resman.register(NAME,
77
//                "Resource for " + NAME,
78
//                PostgreSQLResource.class,
79
//                PostgreSQLResourceParameters.class
80
//            );
81
//        }
82

  
83
        if (!dataman.getStoreProviderRegister().exits(NAME)) {
84
            dataman.registerStoreProviderFactory(new PostgreSQLStoreProviderFactory());
85
        }
86

  
87
        if (!dataman.getServerExplorerRegister().exits(NAME)) {
88
            dataman.registerServerExplorerFactory(new PostgreSQLServerExplorerFactory());
89
        }
90

  
91
        // Por compatibilidad con gvSIG 2.3 registramos otra vez la factoria con
92
        // el nombre que tenia antes.
93
        if (!dataman.getServerExplorerRegister().exits("PostgreSQLExplorer")) {
94
            dataman.registerServerExplorerFactory(new PostgreSQLServerExplorerFactory("PostgreSQLExplorer"));
95
        }
96
        
97
        if (ex != null) {
98
            throw ex;
99
        }
100
    }
101

  
102
}
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLBuilder.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24

  
25
package org.gvsig.postgresql.dal;
26

  
27
import java.sql.Connection;
28
import java.sql.DatabaseMetaData;
29
import java.text.MessageFormat;
30
import java.util.ArrayList;
31
import java.util.List;
32
import org.apache.commons.lang3.StringUtils;
33
import org.gvsig.expressionevaluator.Formatter;
34
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
35
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
36
import org.gvsig.postgresql.dal.expressionbuilderformatter.PostgreSQLFormatter;
37

  
38
public class PostgreSQLBuilder extends JDBCSQLBuilderBase {
39

  
40
    protected Formatter formatter = null;
41
    
42
    public static class Version {
43

  
44
        private final int major;
45
        private final int minor;
46
        
47
        public Version(int major, int minor) {
48
            this.major = major;
49
            this.minor = minor;
50
        }
51

  
52
        public int getMajor() {
53
            return major;
54
        }
55

  
56
        public int getMinor() {
57
            return minor;
58
        }
59
        
60
    }
61
    private Version databaseVersion = null;
62
    
63
    public Version getDatabaseVersion() {
64
        if( databaseVersion == null ) {
65
            Connection conn = null;
66
            try {
67
                conn = this.getHelper().getConnection();
68
                DatabaseMetaData metadata = conn.getMetaData();
69
                databaseVersion = new Version(
70
                    metadata.getDatabaseMajorVersion(),
71
                    metadata.getDatabaseMinorVersion()
72
                );
73
            } catch (Exception ex) {
74
                databaseVersion = new Version(0,0);
75
            } finally {
76
                this.getHelper().closeConnectionQuietly(conn);
77
            }
78
        }
79
        return databaseVersion;
80
    }
81
    
82
    public PostgreSQLBuilder(JDBCHelper helper) {
83
        super(helper);
84
        this.defaultSchema = "public";
85
        this.supportSchemas = true;
86
        this.allowAutomaticValues = true;
87
        this.geometrySupportType = this.helper.getGeometrySupportType();
88
        this.hasSpatialFunctions = this.helper.hasSpatialFunctions();
89

  
90
        this.STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_schema_table = null;
91
        this.STMT_DELETE_GEOMETRY_COLUMN_FROM_TABLE_table = null;
92

  
93
        this.STMT_UPDATE_TABLE_STATISTICS_table = "ANALYZE {0}";
94

  
95
//        config.set(SQLConfig.ST_GeomFromEWKB, "ST_GeomFromEWKB({0}, {1})");
96
//        config.set(SQLConfig.ST_AsEWKB, "ST_AsEWKB(({0}))");        
97
//        config.set(SQLConfig.ST_ExtentAggregate, "ST_Extent({0})");        
98
//        config.set(SQLConfig.ST_UnionAggregate, "ST_Union({0})");
99
        
100
//        config.set(SQLConfig.isNull, "( ({0}) ISNULL )");
101
//        config.set(SQLConfig.notIsNull, "( ({0}) NOT NULL )");
102

  
103
    }
104
    
105
    public class PostgreSQLUpdateTableStatisticsBuilderBase extends UpdateTableStatisticsBuilderBase {
106
        @Override
107
        public List<String> toStrings() {
108
            List<String> sqls = new ArrayList<>();
109
            
110
            if( !StringUtils.isBlank(STMT_UPDATE_TABLE_STATISTICS_table) ) {
111
                // In postGIS, UpdateLayerStatistics function, don't allow to 
112
                // use the database name in the table name.
113
                String name = as_identifier(this.table.getName());
114
                if( table.has_schema()) {
115
                    name = as_identifier(this.table.getSchema()) + "." + name;
116
                }
117
                String sql = MessageFormat.format(
118
                        STMT_UPDATE_TABLE_STATISTICS_table,
119
                        name
120
                    );
121
                if( !StringUtils.isEmpty(sql) ) {
122
                    sqls.add(sql);
123
                }
124
            }
125
            return sqls;
126
        }        
127
    }
128
    protected class PostgreSQLCreateIndexBuilder extends CreateIndexBuilderBase {
129

  
130
        @Override
131
        public List<String> toStrings(Formatter formatter) {
132
            StringBuilder builder = new StringBuilder();
133
            builder.append("CREATE ");
134
//            if( this.isUnique ) {
135
//                builder.append("UNIQUE ");
136
//            }
137
            builder.append("INDEX ");
138
            if( this.ifNotExist ) {
139
                Version version = getDatabaseVersion();
140
                if( version.getMajor()>=9 && version.getMinor()>=5 ) {
141
                    builder.append("IF NOT EXISTS ");
142
                }
143
            }
144
            builder.append(as_identifier(this.indexName));
145
            builder.append(" ON ");
146
            builder.append(this.table.toString(formatter));
147
            if( this.isSpatial ) {
148
                builder.append(" USING GIST ");
149
            }
150
            builder.append(" ( ");
151
            boolean is_first_column = true;
152
            for( String column : this.columns) {
153
                if( is_first_column ) {
154
                    is_first_column = false;
155
                } else {
156
                    builder.append(", ");
157
                }
158
                builder.append(as_identifier(column));
159
            }
160
            builder.append(" )");
161
            
162
            List<String> sqls = new ArrayList<>();
163
            sqls.add(builder.toString());
164
            return sqls;
165
        }
166
        
167
    }
168
    
169
    protected class PostgreSQLCreateTableBuilder extends CreateTableBuilderBase {
170

  
171
        @Override
172
       public List<String> toStrings(Formatter formatter) {
173
           // 
174
           // https://www.postgresql.org/docs/9.1/static/sql-createtable.html
175
           //
176
            List<String> sqls = new ArrayList<>();
177
            StringBuilder builder = new StringBuilder();
178

  
179
            builder.append("CREATE TABLE ");
180
            builder.append(this.table.toString(formatter));
181
            builder.append(" (");
182
            boolean first = true;
183
            for (ColumnDescriptor column : columns) {
184
                if( column.isGeometry() ) {
185
                    continue;
186
                }
187
                if (first) {
188
                    first = false;
189
                } else {
190
                    builder.append(", ");
191
                }
192
                builder.append(as_identifier(column.getName()));
193
                builder.append(" ");
194
                if( column.isAutomatic() ) {
195
                    builder.append(" SERIAL");
196
                } else {
197
                    builder.append(sqltype(
198
                            column.getType(), 
199
                            column.getPrecision(), 
200
                            column.getSize(),
201
                            column.getGeometryType(),
202
                            column.getGeometrySubtype()
203
                    ));
204
                    if (column.getDefaultValue() == null) {
205
                        if (column.allowNulls()) {
206
                            builder.append(" DEFAULT NULL");
207
                        }
208
                    } else {
209
                        builder.append(" DEFAULT '");
210
                        builder.append(column.getDefaultValue().toString());
211
                        builder.append("'");
212
                    }
213
                    if (column.allowNulls()) {
214
                        builder.append(" NULL");
215
                    } else {
216
                        builder.append(" NOT NULL");
217
                    }
218
                }
219
                if (column.isPrimaryKey()) {
220
                    builder.append(" PRIMARY KEY");
221
                }
222
            }
223
            builder.append(" )");
224
            sqls.add(builder.toString());
225

  
226
            String AddGeometryColumn = "SELECT AddGeometryColumn({0} , {1} , {2}, {3,number,#######} , {4} , {5}, {6})";
227
            for (ColumnDescriptor column : columns) {
228
                if( column.isGeometry() ) {
229
                    String sql = MessageFormat.format(
230
                        AddGeometryColumn,
231
                        as_string(this.table.has_schema()?this.table.getSchema():"public"),
232
                        as_string(this.table.getName()),
233
                        as_string(column.getName()),
234
                        column.getGeometrySRSId(),
235
                        as_string(sqlgeometrytype(column.getGeometryType(), column.getGeometrySubtype())),
236
                        as_string(sqlgeometrydimension(column.getGeometryType(), column.getGeometrySubtype())),
237
                        as_string(column.allowNulls())
238
                    );
239
                    sqls.add(sql);
240
                }
241
            }
242
            return sqls;
243
        }
244
    }
245

  
246
    public class PostgreSQLSelectBuilderBase extends SelectBuilderBase {
247
        
248
        @Override
249
        protected boolean isValid(StringBuilder message) {
250
            if( message == null ) {
251
                message = new StringBuilder();
252
            }
253
            if( this.has_offset() && !this.has_order_by() ) {
254
                // Algunos gestores de BBDD requieren que se especifique un
255
                // orden para poder usar OFFSET. Como eso parece buena idea para
256
                // asegurar que siempre tengamos los mismo resultados, lo exijimos
257
                // siempre.
258
                message.append("Can't use OFFSET without an ORDER BY.");
259
                return false;
260
            }
261
            return true;
262
        }        
263
        
264
        @Override
265
        public String toString(Formatter formatter) {
266
            //
267
            // https://www.postgresql.org/docs/9.1/static/sql-select.html
268
            //
269
            StringBuilder builder = new StringBuilder();
270
            if( !isValid(builder) ) {
271
                throw new IllegalStateException(builder.toString());
272
            }
273
            builder.append("SELECT ");
274
            if( this.distinct ) {
275
                builder.append("DISTINCT ");
276
            }
277
            boolean first = true;
278
            for (SelectColumnBuilder column : columns) {
279
                if (first) {
280
                    first = false;
281
                } else {
282
                    builder.append(", ");
283
                }
284
                builder.append(column.toString(formatter));
285
            }
286

  
287
            if ( this.has_from() ) {
288
                builder.append(" FROM ");
289
                builder.append(this.from.toString(formatter));
290
            }
291
            if( this.has_group_by() ) {
292
                builder.append(" GROUP BY ");
293
                builder.append(this.groupColumn.get(0).name());
294
                for (int i = 1; i < groupColumn.size(); i++) {
295
                    builder.append(", ");
296
                    builder.append(this.groupColumn.get(i).name());
297
                }
298
            }            
299
            if ( this.has_where() ) {
300
                builder.append(" WHERE ");
301
                builder.append(this.where.toString(formatter));
302
            }
303
            
304
            if( this.has_order_by() ) {
305
                builder.append(" ORDER BY ");
306
                first = true;
307
                for (OrderByBuilder item : this.order_by) {
308
                    if (first) {
309
                        first = false;
310
                    } else {
311
                        builder.append(", ");
312
                    }
313
                    builder.append(item.toString(formatter));
314
                }   
315
            }
316
            
317
            if ( this.has_limit() && this.has_offset() ) {
318
                builder.append(" OFFSET ");
319
                builder.append(this.offset);
320
                builder.append(" FETCH NEXT ");
321
                builder.append(this.limit);
322
                builder.append(" ROWS ONLY");
323

  
324
            } else if ( this.has_limit()) {
325
                builder.append(" LIMIT ");
326
                builder.append(this.limit);
327

  
328
            } else if ( this.has_offset() ) {
329
                builder.append(" LIMIT ALL OFFSET ");
330
                builder.append(this.offset);    
331
            }
332
            return builder.toString();
333

  
334
        }
335
    }
336

  
337
    @Override
338
    protected Formatter formatter() {
339
        if( this.formatter==null ) {
340
            this.formatter = new PostgreSQLFormatter(this);
341
        }
342
        return this.formatter;
343
    }
344

  
345
    @Override
346
    public PostgreSQLHelper getHelper() {
347
        return (PostgreSQLHelper) helper;
348
    }
349
    
350
    @Override
351
    protected CreateTableBuilder createCreateTableBuilder() {
352
        return new PostgreSQLCreateTableBuilder();
353
    }
354

  
355
    @Override
356
    protected CreateIndexBuilder createCreateIndexBuilder() {
357
        return new PostgreSQLCreateIndexBuilder();
358
    }
359

  
360
    @Override
361
    protected SelectBuilder createSelectBuilder() {
362
        return new PostgreSQLSelectBuilderBase();
363
    }
364

  
365
    @Override
366
    protected UpdateTableStatisticsBuilder createUpdateTableStatisticsBuilder() {
367
        return new PostgreSQLUpdateTableStatisticsBuilderBase();
368
    }       
369
   
370
}
tags/org.gvsig.postgresql-2.0.107/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/Constant.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import org.gvsig.expressionevaluator.ExpressionBuilder;
5
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
6
import org.gvsig.expressionevaluator.Formatter;
7
import org.gvsig.fmap.dal.SQLBuilder;
8
import org.gvsig.fmap.geom.Geometry;
9
import org.gvsig.fmap.geom.GeometryUtils;
10

  
11
/**
12
 *
13
 * @author jjdelcerro
14
 */
15
public class Constant implements Formatter<Value> {
16
    
17
    private static final String FORMAT_ST_GEOMFROMWKB = "ST_GeomFromWKB(({0}), ({1}))";
18
    private static final String FORMAT_ST_GEOMFROMEWKB = "ST_GeomFromEWKB(({0}), ({1}))";
19
    private static final String FORMAT_ST_GEOMFROMTEXT = "ST_GeomFromText(({0}), ({1}))";
20

  
21
    private final SQLBuilder sqlbuilder;
22
    private final Formatter<Value> formatter;
23
    
24
    public Constant(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
25
        this.sqlbuilder = sqlbuilder;
26
        this.formatter = formatter;
27
    }
28
    
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff