Revision 918

View differences:

tags/org.gvsig.postgresql-2.0.181/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>org.apache.commons:commons-dbcp2</include>
39
		<include>org.apache.commons:commons-pool2</include>
40
      </includes>
41
    </dependencySet>
42
    
43
  </dependencySets>
44

  
45
</assembly>
46

  
47

  
48

  
49

  
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/src/main/resources-plugin/i18n/text.properties
1
_PostgreSQL_loading_parameters=Par\u00e1metros de carga de PostgreSQL
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
1
_PostgreSQL_loading_parameters=PostgreSQL loading parameters
tags/org.gvsig.postgresql-2.0.181/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>
tags/org.gvsig.postgresql-2.0.181/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.181</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>org.apache.commons</groupId>
41
      <artifactId>commons-dbcp2</artifactId>
42
      <scope>runtime</scope>
43
    </dependency>    
44
    <dependency>
45
      <groupId>org.apache.commons</groupId>
46
      <artifactId>commons-pool2</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.181/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/buildNumber.properties
1
#Tue Nov 16 19:59:31 CET 2021
2
buildNumber=2238
0 3

  
tags/org.gvsig.postgresql-2.0.181/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.181</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.181/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.181</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.342</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.181</connection>
20
      <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-postgresql/tags/org.gvsig.postgresql-2.0.181</developerConnection>
21
      <url>https://devel.gvsig.org/redmine/projects/gvsig-postgresql/repository/show/tags/org.gvsig.postgresql-2.0.181</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.181</version>
63
          </dependency>
64
          <dependency>
65
            <groupId>org.gvsig</groupId>
66
            <artifactId>org.gvsig.postgresql.app.mainplugin</artifactId>
67
            <version>2.0.181</version>
68
          </dependency>
69
        <dependency>
70
            <groupId>org.postgresql</groupId>
71
            <artifactId>postgresql</artifactId>
72
            <version>42.2.6</version>
73
        </dependency>
74
        <dependency>
75
          <groupId>org.apache.commons</groupId>
76
          <artifactId>commons-dbcp2</artifactId>
77
          <version>2.7.0</version>
78
        </dependency>   
79
        <dependency>
80
            <groupId>org.apache.commons</groupId>
81
            <artifactId>commons-pool2</artifactId>
82
            <version>2.7.0</version>
83
        </dependency>
84
      </dependencies>
85
  </dependencyManagement>
86
 
87
  <modules>
88
    <module>org.gvsig.postgresql.app</module>
89
    <module>org.gvsig.postgresql.provider</module>
90
  </modules>
91

  
92
</project>
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/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.provider</artifactId>
7
  <packaging>jar</packaging>
8
  <name>${project.artifactId}</name>
9
  <description>DAL provider for PostgeSQL files</description>
10
  <parent>
11
    <groupId>org.gvsig</groupId>
12
    <artifactId>org.gvsig.postgresql</artifactId>
13
    <version>2.0.181</version>
14
  </parent>
15
  <dependencies>
16
    <dependency>
17
      <groupId>com.googlecode.log4jdbc</groupId>
18
      <artifactId>log4jdbc</artifactId>
19
      <scope>compile</scope>
20
    </dependency>
21
    <dependency>
22
      <groupId>org.gvsig</groupId>
23
      <artifactId>org.gvsig.tools.lib</artifactId>
24
      <scope>compile</scope>
25
    </dependency>
26
    <dependency>
27
      <groupId>org.gvsig</groupId>
28
      <artifactId>org.gvsig.projection.api</artifactId>
29
      <scope>compile</scope>
30
    </dependency>
31
    <dependency>
32
      <groupId>org.gvsig</groupId>
33
      <artifactId>org.gvsig.fmap.dal.api</artifactId>
34
      <scope>compile</scope>
35
    </dependency>
36
    
37
    <dependency>
38
      <groupId>org.gvsig</groupId>
39
      <artifactId>org.gvsig.fmap.dal.db.jdbc</artifactId>
40
      <scope>compile</scope>
41
    </dependency>
42

  
43
    <dependency>
44
      <groupId>org.gvsig</groupId>
45
      <artifactId>org.gvsig.fmap.dal.db.lib</artifactId>
46
      <scope>compile</scope>
47
    </dependency>
48
    
49
    <dependency>
50
      <groupId>org.gvsig</groupId>
51
      <artifactId>org.gvsig.fmap.dal.spi</artifactId>
52
      <scope>compile</scope>
53
    </dependency>
54
    <dependency>
55
      <groupId>org.gvsig</groupId>
56
      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
57
      <scope>compile</scope>
58
    </dependency>
59
    <dependency>
60
      <groupId>org.gvsig</groupId>
61
      <artifactId>org.gvsig.fmap.geometry.api</artifactId>
62
      <scope>compile</scope>
63
    </dependency>
64
    <!--
65
    <dependency>
66
        <groupId>org.gvsig</groupId>
67
        <artifactId>org.gvsig.fmap.geometry.operation</artifactId>
68
        <scope>compile</scope>
69
    </dependency>
70
    -->
71
    <dependency>
72
      <groupId>org.gvsig</groupId>
73
      <artifactId>org.gvsig.timesupport.lib.api</artifactId>
74
      <scope>compile</scope>
75
    </dependency>  
76
    <dependency>
77
      <groupId>org.gvsig</groupId>
78
      <artifactId>org.gvsig.utils</artifactId>
79
      <scope>compile</scope>
80
    </dependency>
81
    <dependency>
82
      <groupId>org.postgresql</groupId>
83
      <artifactId>postgresql</artifactId>
84
      <scope>compile</scope>
85
    </dependency>
86
    <dependency>
87
        <groupId>org.apache.commons</groupId>
88
        <artifactId>commons-dbcp2</artifactId>
89
    </dependency>
90
    <dependency>
91
        <groupId>org.apache.commons</groupId>
92
        <artifactId>commons-pool2</artifactId>
93
    </dependency>
94
    <dependency>
95
      <groupId>commons-collections</groupId>
96
      <artifactId>commons-collections</artifactId>
97
      <scope>compile</scope>
98
    </dependency>
99

  
100

  
101
    <!-- TESTS -->
102
    <dependency>
103
      <groupId>org.gvsig</groupId>
104
      <artifactId>org.gvsig.tools.lib</artifactId>
105
      <type>test-jar</type>
106
      <scope>test</scope>
107
    </dependency>
108
    <dependency>
109
      <groupId>org.gvsig</groupId>
110
      <artifactId>org.gvsig.compat.se</artifactId>
111
      <scope>test</scope>
112
    </dependency>
113
    <dependency>
114
      <groupId>org.gvsig</groupId>
115
      <artifactId>org.gvsig.fmap.dal.impl</artifactId>
116
      <scope>test</scope>
117
    </dependency>
118
    <dependency>
119
      <groupId>org.gvsig</groupId>
120
      <artifactId>org.gvsig.fmap.dal.file.csv</artifactId>
121
      <scope>test</scope>
122
    </dependency>
123
    <dependency>
124
      <groupId>org.gvsig</groupId>
125
      <artifactId>org.gvsig.tools.util.impl</artifactId>
126
      <scope>test</scope>
127
    </dependency>
128
    <dependency>
129
      <groupId>org.gvsig</groupId>
130
      <artifactId>org.gvsig.tools.swing.impl</artifactId>
131
      <scope>test</scope>
132
    </dependency>
133
    <dependency>
134
      <groupId>org.gvsig</groupId>
135
      <artifactId>${org.gvsig.fmap.geometry.impl}</artifactId>
136
      <scope>test</scope>
137
    </dependency>    
138
    <dependency>
139
      <groupId>org.gvsig</groupId>
140
      <artifactId>org.gvsig.expressionevaluator.geometry.lib.impl</artifactId>
141
      <scope>test</scope>
142
    </dependency>    
143
    <dependency>
144
      <groupId>org.gvsig</groupId>
145
      <artifactId>${org.gvsig.proj.lib.impl}</artifactId>
146
      <scope>test</scope>
147
    </dependency>
148
    <dependency>
149
      <groupId>org.gvsig</groupId>
150
      <artifactId>org.gvsig.projection.cresques.impl</artifactId>
151
      <scope>test</scope>
152
    </dependency>
153
    <dependency>
154
      <groupId>org.gvsig</groupId>
155
      <artifactId>org.gvsig.timesupport.lib.impl</artifactId>
156
      <scope>test</scope>
157
    </dependency>
158
    <dependency>
159
      <groupId>org.gvsig</groupId>
160
      <artifactId>org.gvsig.metadata.lib.basic.impl</artifactId>
161
      <scope>test</scope>
162
    </dependency>      
163
    
164
    
165
    <dependency>
166
      <artifactId>junit</artifactId>
167
      <groupId>junit</groupId>
168
      <scope>test</scope>
169
    </dependency>
170
  </dependencies>
171

  
172
  <build>
173
    <plugins>
174

  
175
      <!-- Skip test execution ? -->
176
      <plugin>
177
        <groupId>org.apache.maven.plugins</groupId>
178
        <artifactId>maven-surefire-plugin</artifactId>
179
        <configuration>
180
          <skipTests>false</skipTests>
181
        </configuration>
182
      </plugin>
183
        
184
      <!-- Skip test compilation ? -->
185
      <plugin>
186
        <groupId>org.apache.maven.plugins</groupId>
187
        <artifactId>maven-compiler-plugin</artifactId>
188
        <executions>
189
          <execution>
190
            <id>default-testCompile</id>
191
            <phase>process-test-sources</phase>
192
            <goals>
193
              <goal>testCompile</goal>
194
            </goals>
195
            <configuration>
196
              <skip>false</skip>
197
            </configuration>
198
          </execution>
199
        </executions>
200
      </plugin>
201

  
202
      <!-- Ignore test execution failure ? -->
203
      <plugin>
204
        <groupId>org.apache.maven.plugins</groupId>
205
        <artifactId>maven-surefire-plugin</artifactId>
206
        <configuration>
207
          <testFailureIgnore>true</testFailureIgnore>
208
        </configuration>
209
      </plugin>
210

  
211
    </plugins>
212
  </build>
213

  
214
</project>
tags/org.gvsig.postgresql-2.0.181/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
@SuppressWarnings("UseSpecificCatch")
39
public class PostgreSQLBuilder extends JDBCSQLBuilderBase {
40

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  
327
            } else if ( this.has_limit()) {
328
                builder.append(" LIMIT ");
329
                builder.append(this.limit);
330

  
331
            } else if ( this.has_offset() ) {
332
                builder.append(" LIMIT ALL OFFSET ");
333
                builder.append(this.offset);    
334
            }
335
            return builder.toString();
336

  
337
        }
338
    }
339

  
340
    @Override
341
    protected Formatter formatter() {
342
        if( this.formatter==null ) {
343
            this.formatter = new PostgreSQLFormatter(this);
344
        }
345
        return this.formatter;
346
    }
347

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

  
358
    @Override
359
    protected CreateIndexBuilder createCreateIndexBuilder() {
360
        return new PostgreSQLCreateIndexBuilder();
361
    }
362

  
363
    @Override
364
    protected SelectBuilder createSelectBuilder() {
365
        return new PostgreSQLSelectBuilderBase();
366
    }
367

  
368
    @Override
369
    protected UpdateTableStatisticsBuilder createUpdateTableStatisticsBuilder() {
370
        return new PostgreSQLUpdateTableStatisticsBuilderBase();
371
    }       
372
   
373
}
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/ILike.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
7
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_ILIKE;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.fmap.dal.SQLBuilder;
11

  
12
/**
13
 *
14
 * @author jjdelcerro
15
 */
16
class ILike implements Formatter<Value> {
17

  
18
    private final Formatter<Value> formatter;
19
    private final SQLBuilder builder;
20
    
21
    public ILike(SQLBuilder builder, Formatter<Value> formatter) {
22
        this.builder = builder;
23
        this.formatter = formatter;
24
    }
25
    
26
    @Override
27
    public boolean canApply(Value value) {
28
        if (value instanceof Function) {
29
            return StringUtils.equalsIgnoreCase(OPERATOR_ILIKE, ((Function) value).name());
30
        }
31
        return false;
32
    }
33

  
34
    @Override
35
    public String format(Value function) {
36
        List<Value> parameters = ((Function) function).parameters();
37
        String p1 = parameters.get(0).toString(formatter);
38
        String p2 = parameters.get(1).toString(formatter);
39
        String r = MessageFormat.format("({0}) ~~* ({1})", p1, p2);
40
        return r;
41
    }
42
    
43
}
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/Decode.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import java.util.List;
4
import java.util.Objects;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_DECODE;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
10
import org.gvsig.expressionevaluator.Formatter;
11
import org.gvsig.fmap.dal.SQLBuilder;
12

  
13
/**
14
 *
15
 * @author jjdelcerro
16
 */
17
public class Decode implements Formatter<Value> {
18
    
19
    private final SQLBuilder sqlbuilder;
20
    private final Formatter<Value> formatter;
21
    
22
    public Decode(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
23
        this.sqlbuilder = sqlbuilder;
24
        this.formatter = formatter;
25
    }
26
    
27
    @Override
28
    public boolean canApply(ExpressionBuilder.Value value) {
29
        if (value instanceof ExpressionBuilder.Function) {
30
            if( StringUtils.equalsIgnoreCase(FUNCTION_DECODE, ((Function) value).name()) ) {
31
                List<Value> parameters = ((Function) value).parameters();
32
                if( parameters.size()==2) {
33
                    Value p1 = parameters.get(0);
34
                    Value p2 = parameters.get(1);
35
                    if( p1 instanceof ExpressionBuilder.Constant && 
36
                        p2 instanceof ExpressionBuilder.Constant &&
37
                        ((ExpressionBuilder.Constant)p1).value() instanceof String &&
38
                        ((ExpressionBuilder.Constant)p2).value() instanceof String 
39
                        ) {
40
                        String p2value = ((ExpressionBuilder.Constant)p2).value().toString();
41
                        if( StringUtils.equalsIgnoreCase(p2value, "hex") ) {
42
                            return true;
43
                        }
44
                    }
45
                    
46
                }
47
            }
48
        }
49
        return false;
50
    }
51

  
52
    @Override
53
    public String format(Value function) {
54
        ExpressionBuilder builder = this.sqlbuilder.expression();
55
        List<Value> parameters = ((Function) function).parameters();
56
        Value p1 = parameters.get(0);
57
        String p1value = Objects.toString(((ExpressionBuilder.Constant)p1).value(), "");
58
        String r = builder.string("\\x"+p1value)+"::bytea";
59
        return r;
60
    }
61
    
62
}
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/ST_ExtentAggregate.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import static org.gvsig.expressionevaluator.GeometryExpressionBuilder.FUNCTION_ST_EXTENTAGGREGATE;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
10
import org.gvsig.expressionevaluator.Formatter;
11
import org.gvsig.fmap.dal.SQLBuilder;
12

  
13
/**
14
 *
15
 * @author jjdelcerro
16
 */
17
public class ST_ExtentAggregate implements Formatter<Value> {
18
    
19
    private final SQLBuilder sqlbuilder;
20
    private final Formatter<Value> formatter;
21
    
22
    public ST_ExtentAggregate(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
23
        this.sqlbuilder = sqlbuilder;
24
        this.formatter = formatter;
25
    }
26
    @Override
27
    public boolean canApply(ExpressionBuilder.Value value) {
28
        if (value instanceof ExpressionBuilder.Function) {
29
            return StringUtils.equalsIgnoreCase(FUNCTION_ST_EXTENTAGGREGATE, ((Function) value).name());
30
        }
31
        return false;
32
    }
33

  
34
    @Override
35
    public String format(Value function) {
36
        List<Value> parameters = ((Function) function).parameters();
37
        String p1 = parameters.get(0).toString(formatter);
38
        String r = MessageFormat.format("ST_Extent({0})", p1);
39
        return r;
40
    }
41
    
42
}
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/ST_GeomFromWKB.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
11
import org.gvsig.fmap.dal.SQLBuilder;
12
import org.gvsig.fmap.dal.feature.FeatureType;
13
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
public class ST_GeomFromWKB implements Formatter<Value> {
20
    
21
    private final SQLBuilder sqlbuilder;
22
    private final Formatter<Value> formatter;
23
    
24
    public ST_GeomFromWKB(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
25
        this.sqlbuilder = sqlbuilder;
26
        this.formatter = formatter;
27
    }
28
    @Override
29
    public boolean canApply(ExpressionBuilder.Value value) {
30
        if (value instanceof ExpressionBuilder.Function) {
31
            return StringUtils.equalsIgnoreCase(GeometryExpressionBuilder.FUNCTION_ST_GEOMFROMWKB, ((Function) value).name());
32
        }
33
        return false;
34
    }
35

  
36
    @Override
37
    public String format(Value function) {
38
        String r;
39
        String wkb;
40
        String srid;
41
        List<Value> parameters = ((Function) function).parameters();
42
        switch(parameters.size()) {
43
            case 1:
44
                wkb = parameters.get(0).toString(formatter);
45
                r = MessageFormat.format("ST_GeomFromWKB({0})", wkb);
46
                break;
47
            case 2:
48
                wkb = parameters.get(0).toString(formatter);
49
                srid = parameters.get(1).toString(formatter);
50
                if( StringUtils.equals("0", srid) ) {
51
                    r = MessageFormat.format("ST_GeomFromWKB({0})", wkb);
52
                } else {
53
                    FeatureType ftype = (FeatureType) function.getProperty(PROP_FEATURE_TYPE);
54
                    if( ftype == null || ftype.getDefaultSRS()!=null ) {
55
                        r = MessageFormat.format("ST_GeomFromWKB({0},{1})", wkb, srid);
56
                    } else {
57
                        r = MessageFormat.format("ST_GeomFromWKB({0})", wkb);
58
                    }
59
                }
60
                break;
61
            default:
62
                throw new IllegalArgumentException("Wrong number of arguments ("+parameters.size()+") in function ST_GeomFromWKB; requiered 1 or 2 arguments.");
63
        }
64
        return r;
65
    }
66
    
67
}
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/IsNull.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.Code.Constant;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_IS;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
10
import org.gvsig.expressionevaluator.Formatter;
11
import org.gvsig.fmap.dal.SQLBuilder;
12

  
13
/**
14
 *
15
 * @author jjdelcerro
16
 */
17
class IsNull implements Formatter<Value> {
18

  
19
    private final Formatter<Value> formatter;
20
    private final SQLBuilder builder;
21
    
22
    public IsNull(SQLBuilder builder, Formatter<Value> formatter) {
23
        this.builder = builder;
24
        this.formatter = formatter;
25
    }
26
    
27
    @Override
28
    public boolean canApply(Value value) {
29
        if (value instanceof Function) {
30
            if( StringUtils.equalsIgnoreCase(OPERATOR_IS, ((Function) value).name()) ) {
31
                List<Value> parameters = ((Function) value).parameters();
32
                Value p2 = parameters.get(1);
33
                if( p2 instanceof Constant && ((Constant)p2).value()==null ) {
34
                    return true;
35
                }
36
            }
37
        }
38
        return false;
39
    }
40

  
41
    @Override
42
    public String format(Value function) {
43
        List<Value> parameters = ((Function) function).parameters();
44
        String p1 = parameters.get(0).toString(formatter);
45
        String r = MessageFormat.format("( ({0}) ISNULL )", p1);
46
        return r;
47
    }
48
    
49
}
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/ST_GeomFromText.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
9
import org.gvsig.expressionevaluator.Formatter;
10
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
11
import org.gvsig.fmap.dal.SQLBuilder;
12
import org.gvsig.fmap.dal.feature.FeatureType;
13
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_FEATURE_TYPE;
14

  
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
public class ST_GeomFromText implements Formatter<Value> {
20
    
21
    private final SQLBuilder sqlbuilder;
22
    private final Formatter<Value> formatter;
23
    
24
    public ST_GeomFromText(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
25
        this.sqlbuilder = sqlbuilder;
26
        this.formatter = formatter;
27
    }
28
    @Override
29
    public boolean canApply(ExpressionBuilder.Value value) {
30
        if (value instanceof ExpressionBuilder.Function) {
31
            return StringUtils.equalsIgnoreCase(GeometryExpressionBuilder.FUNCTION_ST_GEOMFROMTEXT, ((Function) value).name());
32
        }
33
        return false;
34
    }
35

  
36
    @Override
37
    public String format(Value function) {
38
        String r;
39
        String wkt;
40
        String srid;
41
        List<Value> parameters = ((Function) function).parameters();
42
        switch(parameters.size()) {
43
            case 1:
44
                wkt = parameters.get(0).toString(formatter);
45
                r = MessageFormat.format("ST_GeomFromText({0})", wkt);
46
                break;
47
            case 2:
48
                wkt = parameters.get(0).toString(formatter);
49
                srid = parameters.get(1).toString(formatter);
50
                if( StringUtils.equals("0", srid) ) {
51
                    r = MessageFormat.format("ST_GeomFromText({0})", wkt);
52
                } else {
53
                    FeatureType ftype = (FeatureType) function.getProperty(PROP_FEATURE_TYPE);
54
                    if( ftype == null || ftype.getDefaultSRS()!=null ) {
55
                        r = MessageFormat.format("ST_GeomFromText({0},{1})", wkt, srid);
56
                    } else {
57
                        r = MessageFormat.format("ST_GeomFromText({0})", wkt);
58
                    }
59
                }
60
                break;
61
            default:
62
                throw new IllegalArgumentException("Wrong number of arguments ("+parameters.size()+") in function ST_GeomFromText; requiered 1 or 2 arguments.");
63
        }
64
        return r;
65
    }
66
    
67
}
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/IsNotNull.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.Code.Constant;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
8
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_IS;
9
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_NOT;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
11
import org.gvsig.expressionevaluator.Formatter;
12
import org.gvsig.fmap.dal.SQLBuilder;
13

  
14
/**
15
 *
16
 * @author jjdelcerro
17
 */
18
class IsNotNull implements Formatter<Value> {
19

  
20
    private final Formatter<Value> formatter;
21
    private final SQLBuilder builder;
22
    
23
    public IsNotNull(SQLBuilder builder, Formatter<Value> formatter) {
24
        this.builder = builder;
25
        this.formatter = formatter;
26
    }
27
    
28
    @Override
29
    public boolean canApply(Value value_not) {
30
        if (value_not instanceof Function) {
31
            // NOT( IS( p1, NULL) )
32
            if( StringUtils.equalsIgnoreCase(OPERATOR_NOT, ((Function) value_not).name()) ) {
33
                List<Value> parameters = ((Function) value_not).parameters();
34
                Value value_is = parameters.get(0);
35
                if( value_is instanceof Function && StringUtils.equalsIgnoreCase(OPERATOR_IS, ((Function)value_is).name()) ) {
36
                    List<Value> parameters_is = ((Function) value_is).parameters();
37
                    Value is_p2 = parameters_is.get(1);
38
                    if( is_p2 instanceof Constant && ((Constant)is_p2).value()==null ) {
39
                        return true;
40
                    }
41
                }
42
            }
43
        }
44
        return false;
45
    }
46

  
47
    @Override
48
    public String format(Value value_not) {
49
        // NOT( IS( p1, NULL) )
50

  
51
        List<Value> parameters = ((Function) value_not).parameters();
52
        Value value_is = parameters.get(0);
53
        List<Value> parameters_is = ((Function)value_is).parameters();
54
        Value is_p1 = parameters_is.get(0);
55
        String r = MessageFormat.format(
56
                "( ({0}) IS NOT NULL )", 
57
                is_p1.toString(formatter)
58
        );
59
        return r;
60
    }
61
    
62
}
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/PostgreSQLFormatter.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import org.gvsig.expressionevaluator.ExpressionBuilder;
4
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
5
import org.gvsig.expressionevaluator.Formatter;
6
import org.gvsig.fmap.dal.DALLocator;
7
import org.gvsig.fmap.dal.SQLBuilder;
8
import org.gvsig.fmap.dal.store.jdbc2.spi.expressionbuilder.formatters.Exists;
9

  
10
/**
11
 *
12
 * @author jjdelcerro
13
 */
14
public class PostgreSQLFormatter implements Formatter<Value> {
15

  
16
    private final SQLBuilder builder;
17
    private final Formatter<ExpressionBuilder.Value>[] formatters;
18

  
19
    @SuppressWarnings("LeakingThisInConstructor")
20
    public PostgreSQLFormatter(SQLBuilder builder) {
21

  
22
        this.builder = builder;
23
        this.formatters = new Formatter[]{
24
            new Decode(this.builder, this),
25
            new Constant(this.builder, this),
26
            new ILike(this.builder, this),
27
            new IfNull(this.builder, this),
28
            new IsNull(this.builder, this),
29
            new IsNotNull(this.builder, this),
30
            new ST_ExtentAggregate(this.builder, this),
31
            new ST_GeomFromWKB(this.builder, this),
32
            new ST_GeomFromText(this.builder, this),
33
            new Getattr(this.builder, this),
34
//            new Iff(this),
35
            new Exists(this),
36
            DALLocator.getDataManager().createDALExpressionBuilder().formatter(this),
37
        };
38
    }
39

  
40
    @Override
41
    public boolean canApply(Value value) {
42
        for (Formatter<Value> formatter : formatters) {
43
            if (formatter.canApply(value)) {
44
                return true;
45
            }
46
        }
47
        return false;
48
    }
49

  
50
    @Override
51
    public String format(Value value) {
52
        for (Formatter<Value> formatter : formatters) {
53
            if (formatter.canApply(value)) {
54
                return formatter.format(value);
55
            }
56
        }
57
        return value.toString(this);
58
    }
59
    
60
}
tags/org.gvsig.postgresql-2.0.181/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.expressionevaluator.GeometryExpressionBuilder;
8
import org.gvsig.fmap.dal.SQLBuilder;
9
import org.gvsig.fmap.geom.Geometry;
10
import org.gvsig.fmap.geom.GeometryUtils;
11

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

  
22
    private final SQLBuilder sqlbuilder;
23
    private final Formatter<Value> formatter;
24
    
25
    public Constant(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
26
        this.sqlbuilder = sqlbuilder;
27
        this.formatter = formatter;
28
    }
29
    
30
    @Override
31
    public boolean canApply(ExpressionBuilder.Value value) {
32
        if (value instanceof ExpressionBuilder.Constant) {
33
            Object x = ((ExpressionBuilder.Constant)value).value();
34
            if( x instanceof byte[] ) {
35
                return true;
36
            }
37
            if( x instanceof Geometry ) {
38
                return true;
39
            }
40
        }
41
        return false;
42
    }
43

  
44
    @Override
45
    public String format(Value constant) {
46
        Object x = ((ExpressionBuilder.Constant)constant).value();
47
        GeometryExpressionBuilder builder = this.sqlbuilder.expression();
48
        if( x instanceof byte[] ) {
49
            return builder.string("\\x"+builder.bytearray_hex((byte[]) x))+"::bytea";
50
        }
51
        if( x instanceof Geometry ) {
52
            Geometry geometry = (Geometry) x;
53
            switch (builder.geometry_support_type()) {
54
                case EWKB:
55
                    return MessageFormat.format(
56
                            FORMAT_ST_GEOMFROMEWKB,
57
                            builder.string("\\x"+builder.bytearray_hex(GeometryUtils.toEWKB(geometry)))+"::bytea",
58
                            String.valueOf(builder.srs_id(geometry.getProjection()))
59
                    );
60
                case WKB:
61
                    return MessageFormat.format(
62
                            FORMAT_ST_GEOMFROMWKB,
63
                            builder.string("\\x"+builder.bytearray_hex(GeometryUtils.toWKB(geometry)))+"::bytea",
64
                            String.valueOf(builder.srs_id(geometry.getProjection()))
65
                    );
66
                case WKT:
67
                default:
68
                    return MessageFormat.format(
69
                            FORMAT_ST_GEOMFROMTEXT,
70
                            builder.string(GeometryUtils.toWKT(geometry)),
71
                            String.valueOf(builder.srs_id(geometry.getProjection()))
72
                    );
73
            }
74
            
75
        }
76
        return null;
77
    }
78
    
79
}
tags/org.gvsig.postgresql-2.0.181/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/expressionbuilderformatter/IfNull.java
1
package org.gvsig.postgresql.dal.expressionbuilderformatter;
2

  
3
import java.text.MessageFormat;
4
import java.util.List;
5
import org.apache.commons.lang3.StringUtils;
6
import org.gvsig.expressionevaluator.ExpressionBuilder;
7
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_IFNULL;
8
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
10
import org.gvsig.expressionevaluator.Formatter;
11
import org.gvsig.fmap.dal.SQLBuilder;
12

  
13
/**
14
 *
15
 * @author jjdelcerro
16
 */
17
class IfNull implements Formatter<Value> {
18

  
19
    private final Formatter<Value> formatter;
20
    private final SQLBuilder builder;
21
    
22
    public IfNull(SQLBuilder builder, Formatter<Value> formatter) {
23
        this.builder = builder;
24
        this.formatter = formatter;
25
    }
26
    
27
    @Override
28
    public boolean canApply(Value value) {
29
        if (value instanceof Function) {
30
            if (value instanceof ExpressionBuilder.Function) {
31
                return StringUtils.equalsIgnoreCase(FUNCTION_IFNULL, ((Function) value).name());
32
            }
33
        }
34
        return false;
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff